--- /dev/null
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package html
+
+// attrType[n] describes the value of the given attribute.
+// If an attribute affects (or can mask) the encoding or interpretation of
+// other content, or affects the contents, idempotency, or credentials of a
+// network message, then the value in this map is contentTypeUnsafe.
+// This map is derived from HTML5, specifically
+// http://www.w3.org/TR/html5/Overview.html#attributes-1 and
+// http://www.w3.org/TR/html5/Overview.html#event-handlers-on-elements-document-objects-and-window-objects
+// as well as "%URI"-typed attributes from
+// http://www.w3.org/TR/html4/index/attributes.html
+var attrType = map[string]contentType{
+ "accept": contentTypePlain,
+ "accept-charset": contentTypeUnsafe,
+ "action": contentTypeURL,
+ "alt": contentTypePlain,
+ "archive": contentTypeURL,
+ "async": contentTypeUnsafe,
+ "autocomplete": contentTypePlain,
+ "autofocus": contentTypePlain,
+ "autoplay": contentTypePlain,
+ "background": contentTypeURL,
+ "border": contentTypePlain,
+ "checked": contentTypePlain,
+ "cite": contentTypeURL,
+ "challenge": contentTypeUnsafe,
+ "charset": contentTypeUnsafe,
+ "class": contentTypePlain,
+ "classid": contentTypeURL,
+ "codebase": contentTypeURL,
+ "cols": contentTypePlain,
+ "colspan": contentTypePlain,
+ "content": contentTypeUnsafe,
+ "contenteditable": contentTypePlain,
+ "contextmenu": contentTypePlain,
+ "controls": contentTypePlain,
+ "coords": contentTypePlain,
+ "crossorigin": contentTypeUnsafe,
+ "data": contentTypeURL,
+ "datetime": contentTypePlain,
+ "default": contentTypePlain,
+ "defer": contentTypeUnsafe,
+ "dir": contentTypePlain,
+ "dirname": contentTypePlain,
+ "disabled": contentTypePlain,
+ "draggable": contentTypePlain,
+ "dropzone": contentTypePlain,
+ "enctype": contentTypeUnsafe,
+ "for": contentTypePlain,
+ "form": contentTypeUnsafe,
+ "formaction": contentTypeURL,
+ "formenctype": contentTypeUnsafe,
+ "formmethod": contentTypeUnsafe,
+ "formnovalidate": contentTypeUnsafe,
+ "formtarget": contentTypePlain,
+ "headers": contentTypePlain,
+ "height": contentTypePlain,
+ "hidden": contentTypePlain,
+ "high": contentTypePlain,
+ "href": contentTypeURL,
+ "hreflang": contentTypePlain,
+ "http-equiv": contentTypeUnsafe,
+ "icon": contentTypeURL,
+ "id": contentTypePlain,
+ "ismap": contentTypePlain,
+ "keytype": contentTypeUnsafe,
+ "kind": contentTypePlain,
+ "label": contentTypePlain,
+ "lang": contentTypePlain,
+ "language": contentTypeUnsafe,
+ "list": contentTypePlain,
+ "longdesc": contentTypeURL,
+ "loop": contentTypePlain,
+ "low": contentTypePlain,
+ "manifest": contentTypeURL,
+ "max": contentTypePlain,
+ "maxlength": contentTypePlain,
+ "media": contentTypePlain,
+ "mediagroup": contentTypePlain,
+ "method": contentTypeUnsafe,
+ "min": contentTypePlain,
+ "multiple": contentTypePlain,
+ "name": contentTypePlain,
+ "novalidate": contentTypeUnsafe,
+ "onabort": contentTypeJS,
+ "onblur": contentTypeJS,
+ "oncanplay": contentTypeJS,
+ "oncanplaythrough": contentTypeJS,
+ "onchange": contentTypeJS,
+ "onclick": contentTypeJS,
+ "oncontextmenu": contentTypeJS,
+ "oncuechange": contentTypeJS,
+ "ondblclick": contentTypeJS,
+ "ondrag": contentTypeJS,
+ "ondragend": contentTypeJS,
+ "ondragenter": contentTypeJS,
+ "ondragleave": contentTypeJS,
+ "ondragover": contentTypeJS,
+ "ondragstart": contentTypeJS,
+ "ondrop": contentTypeJS,
+ "ondurationchange": contentTypeJS,
+ "onemptied": contentTypeJS,
+ "onended": contentTypeJS,
+ "onerror": contentTypeJS,
+ "onfocus": contentTypeJS,
+ "oninput": contentTypeJS,
+ "oninvalid": contentTypeJS,
+ "onkeydown": contentTypeJS,
+ "onkeypress": contentTypeJS,
+ "onkeyup": contentTypeJS,
+ "onload": contentTypeJS,
+ "onloadeddata": contentTypeJS,
+ "onloadedmetadata": contentTypeJS,
+ "onloadstart": contentTypeJS,
+ "onmousedown": contentTypeJS,
+ "onmousemove": contentTypeJS,
+ "onmouseout": contentTypeJS,
+ "onmouseover": contentTypeJS,
+ "onmouseup": contentTypeJS,
+ "onmousewheel": contentTypeJS,
+ "onpause": contentTypeJS,
+ "onplay": contentTypeJS,
+ "onplaying": contentTypeJS,
+ "onprogress": contentTypeJS,
+ "onratechange": contentTypeJS,
+ "onreadystatechange": contentTypeJS,
+ "onreset": contentTypeJS,
+ "onscroll": contentTypeJS,
+ "onseeked": contentTypeJS,
+ "onseeking": contentTypeJS,
+ "onselect": contentTypeJS,
+ "onshow": contentTypeJS,
+ "onstalled": contentTypeJS,
+ "onsubmit": contentTypeJS,
+ "onsuspend": contentTypeJS,
+ "ontimeupdate": contentTypeJS,
+ "onvolumechange": contentTypeJS,
+ "onwaiting": contentTypeJS,
+ "open": contentTypePlain,
+ "optimum": contentTypePlain,
+ "pattern": contentTypeUnsafe,
+ "placeholder": contentTypePlain,
+ "poster": contentTypeURL,
+ "profile": contentTypeURL,
+ "preload": contentTypePlain,
+ "pubdate": contentTypePlain,
+ "radiogroup": contentTypePlain,
+ "readonly": contentTypePlain,
+ "rel": contentTypeUnsafe,
+ "required": contentTypePlain,
+ "reversed": contentTypePlain,
+ "rows": contentTypePlain,
+ "rowspan": contentTypePlain,
+ "sandbox": contentTypeUnsafe,
+ "spellcheck": contentTypePlain,
+ "scope": contentTypePlain,
+ "scoped": contentTypePlain,
+ "seamless": contentTypePlain,
+ "selected": contentTypePlain,
+ "shape": contentTypePlain,
+ "size": contentTypePlain,
+ "sizes": contentTypePlain,
+ "span": contentTypePlain,
+ "src": contentTypeURL,
+ "srcdoc": contentTypeHTML,
+ "srclang": contentTypePlain,
+ "start": contentTypePlain,
+ "step": contentTypePlain,
+ "style": contentTypeCSS,
+ "tabindex": contentTypePlain,
+ "target": contentTypePlain,
+ "title": contentTypePlain,
+ "type": contentTypeUnsafe,
+ "usemap": contentTypeURL,
+ "value": contentTypeUnsafe,
+ "width": contentTypePlain,
+ "wrap": contentTypePlain,
+
+ // TODO: data-* attrs? Recognize data-foo-url and similar.
+}