initial move from proposal to spec, pulled out as much spec-irrelevant content as I noticed on first pass, initiated directory structure.
authorJames Craig <jcraig@apple.com>
Wed, 19 Sep 2012 00:09:34 -0700
changeset 0 c6c8037bc37c
child 1 41718c6a9c33
initial move from proposal to spec, pulled out as much spec-irrelevant content as I noticed on first pass, initiated directory structure.
src/csi/screen.css
src/events.html
src/ssi/ack.html
src/ssi/terms.html
src/user_context.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/csi/screen.css	Wed Sep 19 00:09:34 2012 -0700
@@ -0,0 +1,160 @@
+
+h4 {
+	font-weight:normal;
+}
+h5 {
+	margin-bottom:0.1em;
+	font-weight:normal;
+	font-style:normal;
+}
+dd{
+	margin-left: 0;
+}
+.section dd {
+	margin-left: 2em;
+	margin-bottom:1em;
+}
+
+.rfc2119 {
+	text-transform: lowercase;
+	font-variant: small-caps;
+	font-style: normal;
+}
+
+body {
+	line-height: 1.4;
+}
+.idl { 
+	margin: 1em 0 0;
+	padding: 0.3em;
+	border: solid 1px #999;
+	color: #000; 
+	background-color: #eee;
+}
+
+.section {
+	margin: 20px 0 40px;
+	padding: 10px 0 0;
+	border: solid 1px #999;
+	border-width: 1px 0 0 0;
+}
+.section .section {
+	border-width: 0;
+	padding: 0;
+	margin-bottom:20px;
+}
+
+.note {
+	margin: 1em 0 0;
+	padding: 1.2em 1.5em;
+	border: solid 1px #585;
+	color: #555;
+	position:relative;
+}
+.note:before{
+	content:attr(title);
+	position:absolute;
+	top:0;
+	right:0;
+	font-size:11px;
+	padding:0.2em 0.5em;
+	margin:0;
+	border:solid 1px #585;
+	border-width: 0 0 1px 1px;
+}
+
+.ednote {
+	color:#c00 !important;
+	font-style:italic;
+	position:relative;
+}
+div.ednote, p.ednote{
+	padding-right:150px;
+}
+div.ednote:before, p.ednote:before{
+	content: 'Editorial note';
+	position:absolute;
+	top:0;
+	right:0;
+	font-size:11px;
+	padding:0.2em 0.5em;
+	margin:0;
+	border:solid 1px #c00;
+}
+
+.todo, .todo:before {
+	color:#c00 !important;
+	border-color:#c00 !important;
+}
+.todo:before{
+	content: 'To-do';
+	position:absolute;
+	top:0;
+	right:0;
+	font-size:11px;
+	padding:0.2em 0.5em;
+	margin:0;
+	border:solid 1px #c00;
+	border-width: 0 0 1px 1px;
+}
+
+.example {
+	margin: 1em 0 0;
+	padding: 0.7em 1em 0.7em;
+	border: solid 1px #999;
+	position:relative;
+}
+.example:before{
+	content:attr(title);
+	position:absolute;
+	top:0;
+	right:0;
+	font-size:11px;
+	padding:0.2em 0.5em;
+	margin:0;
+	border:solid 1px #999;
+	border-width: 0 0 1px 1px;
+}
+.example h4, .note h4{
+	margin:0.5em 0;
+}
+.example ol li, .note ol li{
+	margin:0 0 0.5em;
+}
+
+.deferred {
+	display:none;
+}
+
+html code, html pre, html kbd{ /* more specific selector than the default W3C style sheet */
+	/* Most browsers default 'monospace' to Courier, which has an ex-height of about 60% normal size. */
+	/* Monaco has a normal ex-height so font sizes appear more consistent with surrounding non-monospaced text. */
+	font-family: "Monaco", "Courier New", "Courier", monospace;
+	font-family: "Monaco", "Courier New", "Courier"; /* declare as separate rule to account for browser font-size inconsistencies, monospace fallback from previous rule should still work in the [almost non-existant] case that a user system does not have Courier */
+	font-size:0.9em;
+}
+html kbd {
+	text-transform: lowercase;
+	font-variant: small-caps;
+	font-style: bold;
+	font-size:1em; 
+}
+html pre { /* more specific selector than the default W3C style sheet */
+	font-size:0.75em; /* text in blocks code blocks looked too big now that font is back to normal size */
+	line-height:1.4; /* [sic] unitless multiplier, not EM size */
+}
+code .comment {
+	color:#585;
+}
+code sup {
+	font-size:0.73em;
+}
+
+.parameter-list dt {
+	font-weight: normal;
+}
+
+.placeholder {
+	color:#999;
+	font-style:italic;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/events.html	Wed Sep 19 00:09:34 2012 -0700
@@ -0,0 +1,349 @@
+<!DOCTYPE html>
+<html lang="en:us">
+	<head>
+		<meta http-equiv="Content-type" content="text/html; charset=utf-8">
+		<title>IndieUI 1.0: Events</title>
+		<link href="http://www.w3.org/StyleSheets/TR/W3C-ED" rel="stylesheet" type="text/css">
+		<link href="./csi/screen.css" rel="stylesheet" type="text/css">
+	</head>
+	<body>
+		<div class="head">
+			<a href="http://www.w3.org/"><img alt="W3C" height="48" src="http://www.w3.org/Icons/w3c_home" width="72"/></a>
+			<h1>Independent User Interface (IndieUI) 1.0: Events Module</h1>
+			<h2 class="maturity">Editor's Draft</h2>
+			<dl>
+				<dt>Editors</dt>
+				<dd>James Craig, Apple Inc.</dd>
+				<dd>Michael Cooper, W3C</dd>
+			</dl>
+			<p class="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> © 2012-<span id="copyright.year">…</span> <a href="http://www.w3.org/"><acronym title="World Wide Web Consortium">W3C</acronym></a><sup>®</sup> (<a href="http://www.csail.mit.edu/"><acronym title="Massachusetts Institute of Technology">MIT</acronym></a>, <a href="http://www.ercim.eu/"><acronym title="European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>, <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.</p>
+			<hr aria-label="Separator from Header"/>
+		</div>
+		
+		<!-- :::::::::::::::::::: INTRO :::::::::::::::::::: -->
+		<div class="section" id="intro">
+			<h2>Abstract</h2>
+			<p>This specification, in conjunction with the <a href="./user_context.html">User Context Module</a>, is intended address the problem of device-, <abbr title="operating system">OS</abbr>-, and localization-independent control of web content. </p>
+			
+			<p class="placeholder">placeholder for remaining intro</p>
+			
+		</div>
+		<!-- :::::::::::::::::::: END INTRO :::::::::::::::::::: -->
+		
+		<!-- :::::::::::::::::::: UI Request Event Interfaces :::::::::::::::::::: -->
+		<div class="section" id="RequestEvents">
+			<h2><abbr title="User Interface">UI</abbr> Change Request Events</h2>
+			<p>The core principle behind <abbr title="User Interface">UI</abbr> Change Request Events is that they operate on a completely backwards-compatible, opt-in basis. In other words, the web application author has to be aware of these events and register event listeners, or the user agent and assistive technology behave as they normally would.</p>
+			<p><strong>Change request events do not cause any direct manipulation or mutation of the DOM.</strong> Instead, the event object conveys the user's intent to the web application, and allows the web application to make the appropriate changes to the DOM, on behalf of the user agent or assistive technology. If a web application is authored to understand the change request event, it can cancel the event using <code>preventDefault()</code>, which informs the user agent or assistive technology that the event has been captured and understood. If a web application does not cancel any change request event, the user agent or assistive technology can then attempt fallback behavior or communicate to the user that the input has not been recognized.</p>
+			<p class="note" title="Informative">Note: The UIRequestEvent interface does not inherit from <a href="#AccessibilityEvent">AccessibilityEvent</a> (proposed in the following section), because we believe it will ultimately be useful outside the context of assistive technology. This may prove to be a lightweight, performant alternative to mutation events. For example, <code>DOMAttrChangeRequest</code> instead of <code>DOMAttrModified</code>.</p>
+			<p class="ednote">Event fires on document.activeElement (or AT equivalent) if applicable, or otherwise document.body.</p>
+			<p class="ednote">These events should be asynchronous, but when used in conjunction with keyboard events, should fire after keydown, but before both keyup and keypress.</p>
+
+			<!-- :::::::::::::::::::: UIRequestEvent :::::::::::::::::::: -->
+			<div class="section" id="UIRequestEvent">
+				<h3><strong>Interface <em>UIRequestEvent</em></strong></h3>
+
+				<div class="idl">
+					<pre><code>interface UIRequestEvent : UIEvent {
+  
+  <span class="comment">// UA or AT notifies web app of a change request</span>
+  const unsigned short    UNDO     =  1;
+  const unsigned short    REDO     =  2;
+  const unsigned short    DISMISS  =  3;
+  const unsigned short    DELETE   =  4;
+  <span class="comment">// expect more type constants will be added for other event types…</span>
+  <span class="comment">// ZOOM_IN / ZOOM_OUT ? perhaps that should just be slider widget, covered under ValueChangeRequest</span>
+  
+  readonly attribute unsigned short    eventType;
+  
+  void initUIRequestEvent(
+         in DOMString typeArg,
+         in boolean canBubbleArg,
+         in boolean cancelableArg,
+         in views::AbstractView viewArg,
+         in long detailArg,
+         in unsigned short eventTypeArg
+       );
+};</code></pre>
+				</div>
+				<h4>The different types of UIRequestEvents that can occur are:</h4>
+				<dl>
+					<dt><code class="event">UndoRequest</code></dt>
+					<dd>
+						<p>Initiated when the user agent or assistive technology sends an 'undo' request to the web application.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: Yes</li>
+							<li>Context Info: <code>eventType</code></li>
+						</ul>
+					</dd>
+					<dt><code class="event">RedoRequest</code></dt>
+					<dd>
+						<p>Initiated when the user agent or assistive technology sends a 'redo' request to the web application.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: Yes</li>
+							<li>Context Info: <code>eventType</code></li>
+						</ul>
+					</dd>
+					<dt><code class="event">DismissRequest</code></dt>
+					<dd>
+						<p>Initiated when the user agent or assistive technology sends a 'dismiss' request to the web application.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: Yes</li>
+							<li>Context Info: <code>eventType</code></li>
+						</ul>
+					</dd>
+					<dt><code class="event">DeleteRequest</code></dt>
+					<dd>
+						<p>Initiated when the user agent or assistive technology sends a 'delete' request to the web application.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: Yes</li>
+							<li>Context Info: <code>eventType</code></li>
+						</ul>
+					</dd>
+				</dl> 
+				<div class="example" title="Informative">
+					<h4>Examples</h4>
+					<ol>
+						<li>Users, wanting to 'undo' a discrete action in a web application, can indicate their intent a number of ways, including pressing <kbd>Control+Z</kbd> on Windows or Linux, <kbd>Command+Z</kbd> on Mac OS X, and even by shaking some accelerometer- or gyroscope-enabled mobile devices. User agents understanding this intent should initiate an <code>UndoRequest</code> event. Web authors who have registered for this event should process the event to determine whether to cancel the event. If the 'undo' action is understood in the context of the web application, web authors should undo the user's change, and cancel the event using the event object's <code>preventDefault()</code> method.</li>
+						<li>Users, wanting to 'escape from' or 'dismiss' a web application state (for example, closing a modal dialog), can indicate their intent a number of ways, including pressing <kbd>Escape</kbd> on most keyboard-controlled operating systems, or by using a two-finger <a href="http://www.apple.com/voiceover/info/guide/_1133.html">scrub gesture</a> in VoiceOver on iOS or Mac OS X. User agents understanding this intent should initiate an <code>DismissRequest</code> event. Web authors who have registered for this event should process the event to determine whether to cancel the event. If the 'dismiss' action is understood in the context of the web application, web authors should perform the appropriate action (such as closing the dialog), and cancel the event using the event object's <code>preventDefault()</code> method.</li>
+					</ul>
+				</div>
+				<div class="todo note">
+					<h4>To-do: Explanation needed about event order precedence.</h4>
+					<p>An area where this is notably lacking is in regards to the precedence of event order in mainstream user agents, especially in regards to continuous input events. For example, user interactions with starting and ending events (touchstart/touchend, shakestart/shakeend, etc.) should probably take precendence over UIRequestEvents in mainstream user agents. UIRequestEvents are only intended to be used in mainstream user agents where appropriate, but the definition of "where appropriate" is not something we would attempt to define at the time of this proposal. Instead, we offer the previous examples for the sake of discussion.</p>
+					<ol>
+						<li>Note that the 'shake' interaction mentioned in the first example could be sent to the web app as a shakestart event which, if not captured, could then be sent as an UndoRequest. If the the web app does not capture either event, the shake interaction would be ignored by the web application.</li>
+						<li>Also note that the 'scrub gesture' interaction mentioned in the second example is specific to assistive technology (VoiceOver on iOS, which intercepts all touch events), so it's appropriate for the UIRequestEvent to take precedence, and never send a touchstart event.</li>
+					</ol>
+				</div>
+			</div>
+			<!-- :::::::::::::::::::: END UIRequestEvent :::::::::::::::::::: -->
+
+			<!-- :::::::::::::::::::: UIScrollRequestEvent :::::::::::::::::::: -->
+			<div class="section" id="UIScrollRequestEvent">
+				<h3><strong>Interface <em>UIScrollRequestEvent</em></strong></h3>
+				<div class="idl">
+					<pre><code>interface UIScrollRequestEvent : UIRequestEvent {
+  
+  <span class="comment">// for custom scroll views or widgets (e.g. carousels, lists, grids)</span>
+  const unsigned short    LEFT          =  1;
+  const unsigned short    UP            =  2;
+  const unsigned short    RIGHT         =  3;
+  const unsigned short    DOWN          =  4;
+  const unsigned short    LEFT_LIMIT    =  5;
+  const unsigned short    TOP_LIMIT     =  6;
+  const unsigned short    RIGHT_LIMIT   =  7;
+  const unsigned short    BOTTOM_LIMIT  =  8;
+  
+  readonly attribute unsigned short   scrollType;
+  
+  void initUIScrollRequestEvent(
+         in DOMString typeArg,
+         in boolean canBubbleArg,
+         in boolean cancelableArg,
+         in views::AbstractView viewArg,
+         in long detailArg,
+         in unsigned short eventTypeArg
+         in unsigned short scrollTypeArg
+       );
+};</code></pre>
+				</div>
+				<h4>The single type of UIScrollRequestEvent that can occur is:</h4>
+				<dl>
+					<dt><code class="event">ScrollRequest</code></dt>
+					<dd>
+						<p>Initiated when the user agent or assistive technology sends a scroll request to the web application. Scroll events need only be used on custom scroll views (lists and grids showing data subsets, carousels, etc.), as user agents and assistive technologies already manage scrolling of native scroll views.</p>
+						<p class="note" title="Informative">Note: The scroll type constants are more or less equivalent to expected behavior for <kbd>PageUp</kbd>/<kbd>PageDown</kbd> and <kbd>Home</kbd>/<kbd>End</kbd> keys on native scroll views, but also allow horizontal scrolling.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: Yes</li>
+							<li>Context Info: <code>scrollType</code></li>
+						</ul>
+					</dd>
+				</dl>
+			</div>
+			<!-- :::::::::::::::::::: END UIScrollRequestEvent :::::::::::::::::::: -->
+
+			<!-- :::::::::::::::::::: UIValueChangeRequestEvent :::::::::::::::::::: -->
+			<div class="section" id="UIValueChangeRequestEvent">
+				<h3><strong>Interface <em>UIValueChangeRequestEvent</em></strong></h3>
+				<div class="idl">
+					<pre><code>interface UIValueChangeRequestEvent : UIRequestEvent {
+  
+  <span class="comment">// value changes (e.g. ranges)</span>
+  const unsigned short    INCREMENT        =  1;
+  const unsigned short    INCREMENT_SMALL  =  2;
+  const unsigned short    INCREMENT_LARGE  =  3;
+  const unsigned short    INCREMENT_MAX    =  4;
+  const unsigned short    DECREMENT        =  5;
+  const unsigned short    DECREMENT_SMALL  =  6;
+  const unsigned short    DECREMENT_LARGE  =  7;
+  const unsigned short    DECREMENT_MIN    =  8;
+  
+  readonly attribute unsigned short   changeType;
+  
+  void initUIValueChangeRequestEvent(
+         in DOMString typeArg,
+         in boolean canBubbleArg,
+         in boolean cancelableArg,
+         in views::AbstractView viewArg,
+         in long detailArg,
+         in unsigned short eventTypeArg,
+         in unsigned short changeTypeArg
+       );
+};</code></pre>
+				</div>
+				<h4>The single type of UIValueChangeRequestEvent that can occur is:</h4>
+				<dl>
+					<dt><code class="event">ValueChangeRequest</code class="event"></dt>
+					<dd>
+						<p>Initiated when the user agent or assistive technology sends a value change request to the web application.</p>
+						<p>Web authors <strong class="rfc2119">should</strong> code applications to accept all values of the <code>changeType</code> argument. For example, if there is no special behavior for <code>INCREMENT_SMALL</code> or <code>INCREMENT_LARGE</code>, web applications would behave as if they had received a basic <code>INCREMENT</code> change type.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: Yes</li>
+							<li>Context Info: <code>eventType</code></li>
+						</ul>
+					</dd>
+					
+					<div class="example" title="Informative">
+						<h4>Example</h4>
+						<p>Users, wanting to change the value of a custom range widget (slider, media progressbar, etc.) in a web application, can indicate their intent a number of ways, including pressing various keys (<kbd>Up</kbd>, <kbd>Down</kbd>, <kbd>Left</kbd>, <kbd>Right</kbd>, <kbd>PageUp</kbd>, <kbd>PageDown</kbd>, <kbd>Home</kbd>, <kbd>End</kbd>) on most keyboard-controlled interfaces, and through gestures on many touch-enabled interfaces. User agents understanding this intent should initiate a <code>ValueChangeRequest</code> event. Web authors who have registered for this event, should process the event to determine whether to cancel the event. If the value change action is understood in the context of the web application, web authors should change the value of the associated widget by an amount determined via the <code>changeType</code> argument, and cancel the event using the event object's <code>preventDefault()</code> method. If the event is not cancelled by the web author, user agents may pass the literal interaction event to the web application; in this case, in the form of a keypress or touch event.</p>
+					</div>
+					
+				</dl>
+			</div>
+			<!-- :::::::::::::::::::: END UIValueChangeRequestEvent :::::::::::::::::::: -->
+
+			<!-- :::::::::::::::::::: DOMAttributeChangeRequestEvent :::::::::::::::::::: -->
+			<div class="section" id="DOMAttributeChangeRequestEvent">
+				<h3><strong>Interface <em>DOMAttributeChangeRequestEvent</em></strong></h3>
+				<div class="idl">
+					<pre><code>interface DOMAttributeChangeRequestEvent : UIRequestEvent {
+  
+  readonly attribute DOMString    attrName;
+  readonly attribute DOMString    newValue;
+  
+  void initDOMAttributeChangeRequestEvent(
+         in DOMString typeArg,
+         in boolean canBubbleArg,
+         in boolean cancelableArg,
+         in views::AbstractView viewArg,
+         in long detailArg,
+         in unsigned short eventTypeArg,
+         in DOMString attrNameArg,
+         in DOMString newValueArg
+       );
+};</code></pre>
+				</div>
+				<h4>The single type of DOMAttributeChangeRequestEvent that can occur is:</h4>
+				<dl>
+					<dt><code class="event">DOMAttrChangeRequest</code></dt>
+					<dd>
+						<p>Initiated when the user agent or assistive technology sends an attribute change request to the web application. In order for web applications to understand the intent of change request events from the user agent or assistive technology, these change requests should be limited to attributes for which a change in value indicates a discrete, defined action for known types of widgets and UI elements.</p>
+						<p class="note" title="Informative">Note: Currently, this limitation indicates that <code>DOMAttrChangeRequest</code> only applies to WAI-ARIA widgets, but it has the potential to be used with future iterations of HTML5 or <abbr title="Scalable Vector Graphics">SVG</abbr>.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: Yes</li>
+							<li>Context Info: <code>attrName</code>, <code>newValue</code></li>
+						</ul>
+					</dd>
+				</dl>
+				<div class="example" title="Informative">
+					<h4>Examples</h4>
+					<ol>
+						<li>If a user wanted to expand or collapse the current node of an ARIA tree, the assistive technology would initiate a <code>DOMAttrChangeRequest</code> event on the tree item element, with the <code>attrName</code> equal to <code>aria-expanded</code>, and the <code>newValue</code> equal to <code>true</code> or <code>false</code>.</li>
+						<li>If a user wanted to sort an ARIA grid on a particular column, the assistive technology would initiate a <code>DOMAttrChangeRequest</code> event on the column header element, with the <code>attrName</code> equal to <code>aria-sort</code>, and the <code>newValue</code> equal to <code>ascending</code> or <code>descending</code>.</li>
+					</ol>
+				</div>
+			</div>
+			<!-- :::::::::::::::::::: END DOMAttributeChangeRequestEvent :::::::::::::::::::: -->
+
+		</div>
+		<!-- :::::::::::::::::::: END UI Request Event Interfaces :::::::::::::::::::: -->
+
+		<!-- :::::::::::::::::::: Accessibility Event Interfaces :::::::::::::::::::: -->
+		<div class="section" id="AXevents">
+			<h2>Accessibility Events</h2>
+			<p>The following events are only initiated by assistive technologies, as opposed to mainstream user agents.</p>
+			
+			<!-- :::::::::::::::::::: AccessibilityEvent :::::::::::::::::::: -->
+			<div class="section" id="AccessibilityEvent">
+				<h3><strong>Interface <em>AccessibilityEvent</em></strong></h3>
+				<div class="idl">
+					<pre><code>interface AccessibilityEvent : UIEvent {
+  void initAccessibilityEvent(
+         in DOMString typeArg,
+         in boolean canBubbleArg,
+         in boolean cancelableArg,
+         in views::AbstractView viewArg,
+         in long detailArg
+       );
+};</code></pre>
+				</div>
+				<h4>The different types of AccessibilityEvents that can occur are:</h4>
+				<dl>
+					<dt><code class="event">AXFocus</code> <em class="ednote">(Editorial Note: possibly renamed <code class="event">AXFocusIn</code>)</em></dt>
+					<dd>
+						<p>Initiated when the assistive technology cursor moves to a particular DOM node.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: No</li>
+							<li>Context Info: None</li>
+						</ul>
+					</dd>
+					<dt><code class="event">AXBlur</code> <em class="ednote">(Editorial Note: possibly renamed <code class="event">AXFocusOut</code>)</em></dt>
+					<dd>
+						<p>Initiated when the assistive technology cursor leaves a particular DOM node.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: No</li>
+							<li>Context Info: None</li>
+						</ul>
+					</dd>
+					<dt class="deferred" title="Deferred"><code class="event">AXDragSelect</code></dt>
+					<dd class="deferred" title="Deferred">
+						<p>Initiated by the assistive technology in order to inform the web application than a draggable element (e.g. an element with an explicit <code>aria-grabbed</code> value) should be marked for dragging.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: Yes</li>
+							<li>Context Info: None</li>
+						</ul>
+					</dd>
+					<dt class="deferred" title="Deferred"><code class="event">AXDragCancel</code></dt>
+					<dd class="deferred" title="Deferred">
+						<p class="ednote">Editorial Note: This event may not be necessary; could use general DismissRequest instead.</p>
+						<p>Initiated by the assistive technology in order to inform the web application than the current drag operation should be cancelled.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: No <em class="ednote">… Editorial Note: Does this need to be cancelable?</em></li>
+							<li>Context Info: None</li>
+						</ul>
+					</dd>
+					<dt class="deferred" title="Deferred"><code class="event">AXDragDrop</code></dt>
+					<dd class="deferred" title="Deferred">
+						<p>Initiated by the assistive technology in order to inform the web application than a specific drop target (e.g. an element with an explicit <code>aria-dropeffect</code> value) should receive the drop event of the current drag operation.</p>
+						<ul>
+							<li>Bubbles: Yes</li>
+							<li>Cancelable: Yes</li>
+							<li>Context Info: None</li>
+						</ul>
+					</dd>
+				</dl>
+			</div>
+			<!-- :::::::::::::::::::: END AccessibilityEvent :::::::::::::::::::: -->
+			
+		</div>
+		<!-- :::::::::::::::::::: END Accessibility Event Interfaces :::::::::::::::::::: -->
+
+		<div class="placeholder">
+			<p>Placeholder for footer content (acknowledgements, terms, etc.)</p>
+		</div>
+
+		
+	</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ssi/ack.html	Wed Sep 19 00:09:34 2012 -0700
@@ -0,0 +1,6 @@
+<div class="section" id="acknowledgements">
+	<p>Placeholder for Acknowledgements.</p>
+	<!-- Add members of IndieUI group at time of publishing. -->
+	<!-- Add special thanks. -->
+	<!-- Add link to original proposal by James/Chris at http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0106/UserInterfaceIndependence.html -->
+</div>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ssi/terms.html	Wed Sep 19 00:09:34 2012 -0700
@@ -0,0 +1,3 @@
+<div class="section" id="terms">
+	<p>Placeholder for Glossary/Terms.</p>
+</div>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/user_context.html	Wed Sep 19 00:09:34 2012 -0700
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html lang="en:us">
+	<head>
+		<meta http-equiv="Content-type" content="text/html; charset=utf-8">
+		<title>IndieUI 1.0: User Context</title>
+		<link href="http://www.w3.org/StyleSheets/TR/W3C-ED" rel="stylesheet" type="text/css">
+		<link href="./csi/screen.css" rel="stylesheet" type="text/css">
+	</head>
+	<body>
+		<div class="head">
+			<a href="http://www.w3.org/"><img alt="W3C" height="48" src="http://www.w3.org/Icons/w3c_home" width="72"/></a>
+			<h1>Independent User Interface (IndieUI) 1.0: User Context Module</h1>
+			<h2 class="maturity">Editor's Draft</h2>
+			<dl>
+				<dt>Editors</dt>
+				<dd>James Craig, Apple Inc.</dd>
+				<dd>Michael Cooper, W3C</dd>
+			</dl>
+			<p class="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> © 2012-<span id="copyright.year">…</span> <a href="http://www.w3.org/"><acronym title="World Wide Web Consortium">W3C</acronym></a><sup>®</sup> (<a href="http://www.csail.mit.edu/"><acronym title="Massachusetts Institute of Technology">MIT</acronym></a>, <a href="http://www.ercim.eu/"><acronym title="European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>, <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.</p>
+			<hr aria-label="Separator from Header"/>
+		</div>
+		
+		
+		<!-- :::::::::::::::::::: INTRO :::::::::::::::::::: -->
+		<div class="section" id="intro">
+			<h2>Abstract</h2>
+			<p>This specification, in conjunction with the <a href="./Events.html">Events Module</a>, is intended address the problem of device-, <abbr title="operating system">OS</abbr>-, and localization-independent control of web content. </p>
+		</div>
+		<!-- :::::::::::::::::::: END INTRO :::::::::::::::::::: -->
+		
+
+		
+		<!-- :::::::::::::::::::: window.navigator.accessibility :::::::::::::::::::: -->
+		<div class="section" id="identification">
+			<h2>Assistive Technology Identification and Notification</h2>
+			<p>In certain cases, it is beneficial for web authors to be aware of the assistive technology in use. This section defines a collection of attributes that can be used to determine, from script, the kind of assistive technology in use, in order to be aware of considerations for a particular assistive technology, including the need to support the <a href="#RequestEvents">UI Change Request Events</a> or <a href="#AXevents">Accessibility Events</a> defined in previous sections. Web authors <strong class="rfc2119">should</strong> always limit client detection to detecting known versions. Web authors <strong class="rfc2119">should</strong> always assume future versions and unknown versions to be fully compliant.</p>
+			<p>The <code>accessibility</code> attribute of the Navigator interface <strong class="rfc2119">must</strong> return an instance of the Accessibility interface, which represents the identity and state of the assistive technology, and allows web pages to optionally notify assistive technology of certain interface events that cannot be indicated through declarative markup such as WAI-ARIA roles, states, and properties.</p>
+			<h3><strong>Interface <em>Accessibility</em></strong></h3>
+			<div class="idl">
+				<pre><code>interface Accessibility {
+  readonly attribute InterfaceObject accessibility; <em class="ednote">// Editorial Note: Is it necessary to define this attribute in the IDL?</em>
+  <span class="comment">// objects implementing the Accessibility interface also implement the ScreenReader and AccessibilityNotifications interfaces</span>
+};
+Accessibility implements AccessibilityNotifications;
+Accessibility implements ScreenReader;
+Accessibility implements Magnifier;
+Accessibility implements Speech;
+
+[Supplemental, NoInterfaceObject]
+interface AccessibilityNotifications {
+  void elementsChanged();
+  void screenChanged();
+};</code></pre>
+			</div>
+			<h4>Methods for <strong>Interface <em>Accessibility</em></strong></h4>
+			<div class="method-list">
+				<dl>
+					<dt><code>window.navigator.accessibility.elementsChanged()</code></dt>
+					<dd>Returns void. Allows the web author to send a supplemental notification to the screen reader that certain aspects of relevant DOM elements have changed, informing the assistive technology to update its cache of the accessibility tree. For example, web authors might call this method after an animation has completed, allowing a screen reader to update its cursor location, if the focused element was moved.</dd>
+					<dt><code>window.navigator.accessibility.screenChanged()</code></dt>
+					<dd>Returns void. Allows the web author to send an explicit notification to the assistive technology that all aspects of a web application view have changed, informing the assistive technology to update its cache of the accessibility tree. Web authors <strong class="rfc2119">should</strong> call this method when a majority of the web view changes without triggering a full page refresh in the browser.</dd>
+				</dl>
+			</div>
+			
+			<h3><strong>Interface <em>ScreenReader</em></strong></h3>
+			<p>The <code>screenreader</code> attribute of the Accessibility interface <strong class="rfc2119">must</strong> return an instance of the ScreenReader interface:</p>
+			<div class="idl">
+				<pre><code>interface ScreenReader {
+  readonly attribute InterfaceObject screenreader; <em class="ednote">// Editorial Note: Is it necessary to define this attribute in the IDL?</em>
+  <span class="comment">// objects implementing the ScreenReader interface also implement the interfaces given below</span>
+};
+ScreenReader implements ScreenReaderID;
+ScreenReader implements ScreenReaderStatus;
+
+[Supplemental, NoInterfaceObject]
+interface ScreenReaderID {
+  readonly attribute DOMString name;
+  readonly attribute DOMString version;
+};
+
+[Supplemental, NoInterfaceObject]
+interface ScreenReaderStatus {
+  readonly attribute boolean active;
+};</code></pre>
+			</div>
+			<h4>Properties for <strong>Interface <em>ScreenReader</em></strong></h4>
+			<div class="property-list">
+				<dl>
+					<dt><code>window.navigator.accessibility.screenreader.active</code></dt>
+					<dd>Returns a boolean indicating whether or not a screen reader is in use. The user agent <strong class="rfc2119">must</strong> return <code>true</code> if a screen reader is running, or <code>false</code> otherwise. User agents <strong class="rfc2119">may</strong> return <code>false</code> if the user has chosen to disallow sharing this information with the requesting domain.</dd>
+					<dt class="ednote">window.navigator.accessibility.screenreader.activeElement</dt>
+					<dd class="ednote">@@</dd>
+					<dt><code>window.navigator.accessibility.screenreader.name</code></dt>
+					<dd>Returns the application name of the screen reader in use. The user agent <strong class="rfc2119">must</strong> return either an empty string or a string representing the name of the screen reader in detail, e.g. "<code>Apple VoiceOver</code>". User agents <strong class="rfc2119">may</strong> return an empty string if the user has chosen to disallow sharing this information with the requesting domain.</dd>
+					<dt><code>window.navigator.accessibility.screenreader.version</code></dt>
+					<dd>Returns the application version of the screen reader in use. The user agent <strong class="rfc2119">must</strong> return either an empty string or a string representing the version of the screen reader in detail, e.g. "<code>4.0 (220.2)</code>". User agents <strong class="rfc2119">may</strong> return an empty string if the user has chosen to disallow sharing this information with the requesting domain.</dd>
+				</dl>
+			</div>
+			
+			<p class="note" title="Informative">Note: The authors recommend that user agents adopt a domain-level security policy for the ScreenReader interface that is similar to the security policy for location data or cookies. A user should be able to explicitly disallow sharing of this information altogether, or on a per-domain basis.</p>
+			
+			<h3><strong>Interface <em>Magnifier</em></strong></h3>
+			<p>The <code>magnifier</code> attribute of the Accessibility interface <strong class="rfc2119">must</strong> return an instance of the Magnifier interface:</p>
+			<div class="idl">
+				<pre><code>interface Magnifier {
+  readonly attribute InterfaceObject magnifier; <em class="ednote">// Editorial Note: Is it necessary to define this attribute in the IDL?</em>
+  <span class="comment">// objects implementing the Magnifier interface also implement the interfaces given below</span>
+};
+Magnifier implements MagnifierID;
+Magnifier implements MagnifierStatus;
+Magnifier implements MagnifierNotifications;
+
+[Supplemental, NoInterfaceObject]
+interface MagnifierID {
+  readonly attribute DOMString name;
+  readonly attribute DOMString version;
+};
+
+[Supplemental, NoInterfaceObject]
+interface MagnifierStatus {
+  readonly attribute boolean active;
+<!--  readonly attribute float   zoom;
+-->};
+
+[Supplemental, NoInterfaceObject]
+interface MagnifierNotifications {
+  <em class="ednote">// Editorial Note: I'm not partial to the method name focusPosition. Any other suggestions?</em>
+  void focusPosition(
+         in DOMElement element,
+         in optional array cursorRect,
+         in optional array selectionPolygon
+       );
+};</code></pre>
+			</div>
+			<h4>Properties for <strong>Interface <em>Magnifier</em></strong></h4>
+			<div class="property-list">
+				<dl>
+					<dt><code>window.navigator.accessibility.magnifier.active</code></dt>
+					<dd>Returns a boolean indicating whether or not a screen magnifier is in use. The user agent <strong class="rfc2119">must</strong> return <code>true</code> if a screen magnifier is enabled (even if the current zoom level is 1.0), or <code>false</code> if a magnifier is not enabled. User agents <strong class="rfc2119">may</strong> return <code>false</code> if the user has chosen to disallow sharing this information with the requesting domain.</dd>
+					<dt><code>window.navigator.accessibility.magnifier.name</code></dt>
+					<dd>Returns the application name of the screen magnifier in use. The user agent <strong class="rfc2119">must</strong> return either an empty string or a string representing the name of the screen magnifier in detail, e.g. "<code>Apple Universal Access Zoom</code>". User agents <strong class="rfc2119">may</strong> return an empty string if the user has chosen to disallow sharing this information with the requesting domain.</dd>
+					<dt><code>window.navigator.accessibility.magnifier.version</code></dt>
+					<dd>Returns the application version of the screen magnifier in use. The user agent <strong class="rfc2119">must</strong> return either an empty string or a string representing the version of the screen magnifier in detail, e.g. "<code>4.0 (220.2)</code>". User agents <strong class="rfc2119">may</strong> return an empty string if the user has chosen to disallow sharing this information with the requesting domain.</dd>
+					<!--
+					<dt><code>window.navigator.accessibility.magnifier.zoom</code></dt>
+					<dd>Returns a floating point number indicating the current magnification level of the screen magnifier. The user agent <strong class="rfc2119">must</strong> return <code>1.0</code> or the current magnification level. User agents <strong class="rfc2119">may</strong> return <code>1.0</code> if the user has chosen to disallow sharing this information with the requesting domain.</dd>
+					-->
+				</dl>
+			</div>
+			<h4>Methods for <strong>Interface <em>Magnifier</em></strong></h4>
+			<div class="method-list">
+				<dl>
+					<dt><code>window.navigator.accessibility.magnifier.focusPosition ( element, cursorRect, selectionPolygon )</code></dt>
+					<dd><p>Returns void. Allows the web author to send an explicit notification informing the screen magnifier to update its cache of the cursor location. Web authors <strong class="rfc2119">should</strong> call this method when updating the display or cursor position of custom views.</p>
+						<h5>Parameters for Magnifier.focusPosition</h5>
+						<div class="parameter-list">
+							<dl>
+								<dt>1. <code>DOMElement <strong>element</strong></code></dt>
+								<dd>Required reference to the element (e.g. <code>canvas</code>) that has focus.</dd>
+								<dt>2. <code>optional array <strong>cursorRect</strong></code></dt>
+								<dd>Optional array representing the rectangular cursor location relative to the <code>[0,0]</code> position of focused element. <code>[ x<sup>1</sup>, y<sup>1</sup>, x<sup>2</sup>, y<sup>2</sup> ]</code></dd>
+								<dt>3. <code>optional array <strong>selectionPolygon</strong></code></dt>
+								<dd>Optional array representing the selection polygon relative to the <code>[0,0]</code> position of focused element. <code>[ x<sup>1</sup>, y<sup>1</sup>, x<sup>2</sup>, y<sup>2</sup>, ... x<sup><i>n</i></sup>, y<sup><i>n</i></sup> ]</code></dd>
+							</dl>
+							<p class="ednote">Editorial Note: It may be better if the optional params are shape objects with a coords array and a type string like 'rect' or 'poly'. That would allow the author to decide if they wanted to provide the extra polygon coords, or just use a simple shape.</p>
+						</div>
+					</dd>
+					<p class="note">Note: The <code>focusPosition()</code> method would be necessary for screen magnifiers to work with canvas-based web apps like <a href="https://bespin.mozillalabs.com/">Bespin</a> or the <a href="http://280north.com/">280 North</a> projects. This method is not necessary for text views managed by the user agent, including <code>contentEditable</code> views.</p>
+				</dl>
+			</div>
+			
+			<h3><strong>Interface <em>Speech</em></strong></h3>
+			<p>The <code>speech</code> attribute of the Accessibility interface <strong class="rfc2119">must</strong> return an instance of the Speech interface:</p>
+			<div class="idl">
+				<pre><code>interface Speech {
+  <span class="comment">// TBD, placeholder for speech-controlled user agents or assistive technology</span>
+  <span class="comment">// may need speech.synthesis and speech.recognition; each could have name/version/engine, etc. </span>
+  <span class="comment">// potential method: speech.synthesis.speak() to trigger TTS from web app</span>
+  <span class="comment">// potential method: speech.recognition.updateDictionary() to capture correct pronunciation of uncommon or app-specific words</span>
+};</code></pre>
+			</div>
+		</div>
+		<!-- :::::::::::::::::::: END window.navigator.accessibility :::::::::::::::::::: -->
+		
+		<div class="placeholder">
+			<p>Placeholder for footer content (acknowledgements, terms, etc.)</p>
+		</div>
+		
+	</body>
+</html>