annotate js/ext/bridal.js @ 0:633c9cb05555

Origination.
author Atul Varma <varmaa@toolness.com>
date Sun, 07 Jun 2009 19:29:10 -0700
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
1 // Copyright (C) 2008 Google Inc.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
2 //
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
3 // Licensed under the Apache License, Version 2.0 (the "License");
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
4 // you may not use this file except in compliance with the License.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
5 // You may obtain a copy of the License at
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
6 //
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
7 // http://www.apache.org/licenses/LICENSE-2.0
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
8 //
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
9 // Unless required by applicable law or agreed to in writing, software
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
10 // distributed under the License is distributed on an "AS IS" BASIS,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
12 // See the License for the specific language governing permissions and
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
13 // limitations under the License.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
14
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
15 /**
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
16 * @fileoverview
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
17 * A set of utility functions that implement browser feature testing to unify
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
18 * certain DOM behaviors, and a set of recommendations about when to use these
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
19 * functions as opposed to the native DOM functions.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
20 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
21 * @author ihab.awad@gmail.com
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
22 * @author jasvir@gmail.com
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
23 * @provides bridal
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
24 * @requires ___, cajita, document, html, html4, navigator
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
25 */
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
26
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
27 var bridal = (function() {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
28
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
29 ////////////////////////////////////////////////////////////////////////////
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
30 // Private section
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
31 ////////////////////////////////////////////////////////////////////////////
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
32
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
33 var isOpera = navigator.userAgent.indexOf('Opera') === 0;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
34 var isIE = !isOpera && navigator.userAgent.indexOf('MSIE') !== -1;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
35 var isWebkit = !isOpera && navigator.userAgent.indexOf('WebKit') !== -1;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
36
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
37 var features = {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
38 attachEvent: !!(document.createElement('div').attachEvent),
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
39 setAttributeExtraParam: isIE,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
40 /**
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
41 * Does the extended form of extendedCreateElement work?
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
42 * From http://msdn.microsoft.com/en-us/library/ms536389.aspx :<blockquote>
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
43 * You can also specify all the attributes inside the createElement
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
44 * method by using an HTML string for the method argument.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
45 * The following example demonstrates how to dynamically create two
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
46 * radio buttons utilizing this technique.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
47 * <pre>
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
48 * ...
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
49 * var newRadioButton = document.createElement(
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
50 * "&lt;INPUT TYPE='RADIO' NAME='RADIOTEST' VALUE='First Choice'>")
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
51 * </pre>
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
52 * </blockquote>
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
53 */
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
54 extendedCreateElement: (
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
55 function () {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
56 try {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
57 var inp = document.createElement('<input name="x" type="radio">');
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
58 return inp.name === 'x' && inp.type === 'radio';
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
59 } catch (ex) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
60 return false;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
61 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
62 })()
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
63 };
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
64
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
65 var CUSTOM_EVENT_TYPE_SUFFIX = '_custom___';
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
66 function tameEventType(type, opt_isCustom) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
67 type = String(type);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
68 if (endsWith__.test(type)) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
69 throw new Error('Invalid event type ' + type);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
70 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
71 if (opt_isCustom
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
72 || html4.atype.SCRIPT !== html4.ATTRIBS['*:on' + type]) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
73 type = type + CUSTOM_EVENT_TYPE_SUFFIX;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
74 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
75 return type;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
76 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
77
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
78 function eventHandlerTypeFilter(handler, tameType) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
79 // This does not need to check that handler is callable by untrusted code
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
80 // since the handler will invoke plugin_dispatchEvent which will do that
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
81 // check on the untrusted function reference.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
82 return function (event) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
83 if (tameType === event.eventType___) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
84 return handler.call(this, event);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
85 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
86 };
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
87 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
88
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
89 var endsWith__ = /__$/;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
90 function constructClone(node, deep) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
91 var clone;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
92 if (node.nodeType === 1) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
93 // From http://blog.pengoworks.com/index.cfm/2007/7/16/IE6--IE7-quirks-with-cloneNode-and-form-elements
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
94 // It turns out IE 6/7 doesn't properly clone some form elements
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
95 // when you use the cloneNode(true) and the form element is a
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
96 // checkbox, radio or select element.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
97 // JQuery provides a clone method which attempts to fix this and an issue
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
98 // with event listeners. According to the source code for JQuery's clone
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
99 // method ( http://docs.jquery.com/Manipulation/clone#true ):
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
100 // IE copies events bound via attachEvent when
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
101 // using cloneNode. Calling detachEvent on the
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
102 // clone will also remove the events from the orignal
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
103 // We do not need to deal with XHTML DOMs and so can skip the clean step
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
104 // that jQuery does.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
105 var tagDesc = node.tagName;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
106 // Copying form state is not strictly mentioned in DOM2's spec of
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
107 // cloneNode, but all implementations do it. The value copying
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
108 // can be interpreted as fixing implementations' failure to have
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
109 // the value attribute "reflect" the input's value as determined by the
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
110 // value property.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
111 switch (node.tagName) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
112 case 'INPUT':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
113 tagDesc = '<input name="' + html.escapeAttrib(node.name)
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
114 + '" type="' + html.escapeAttrib(node.type)
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
115 + '" value="' + html.escapeAttrib(node.defaultValue) + '"'
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
116 + (node.defaultChecked ? ' checked="checked">' : '>');
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
117 break;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
118 case 'OPTION':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
119 tagDesc = '<option '
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
120 + (node.defaultSelected ? ' selected="selected">' : '>');
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
121 break;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
122 case 'TEXTAREA':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
123 tagDesc = '<textarea value="'
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
124 + html.escapeAttrib(node.defaultValue) + '">';
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
125 break;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
126 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
127
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
128 clone = document.createElement(tagDesc);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
129
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
130 var attrs = node.attributes;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
131 for (var i = 0, attr; (attr = attrs[i]); ++i) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
132 if (attr.specified && !endsWith__.test(attr.name)) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
133 clone.setAttribute(attr.nodeName, attr.nodeValue);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
134 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
135 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
136 } else {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
137 clone = node.cloneNode(false);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
138 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
139 if (deep) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
140 // TODO(mikesamuel): should we whitelist nodes here, to e.g. prevent
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
141 // untrusted code from reloading an already loaded script by cloning
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
142 // a script node that somehow exists in a tree accessible to it?
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
143 for (var child = node.firstChild; child; child = child.nextSibling) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
144 var cloneChild = constructClone(child, deep);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
145 clone.appendChild(cloneChild);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
146 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
147 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
148 return clone;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
149 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
150
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
151 function fixupClone(node, clone) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
152 for (var child = node.firstChild, cloneChild = clone.firstChild; cloneChild;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
153 child = child.nextSibling, cloneChild = cloneChild.nextSibling) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
154 fixupClone(child, cloneChild);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
155 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
156 if (node.nodeType === 1) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
157 switch (node.tagName) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
158 case 'INPUT':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
159 clone.value = node.value;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
160 clone.checked = node.checked;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
161 break;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
162 case 'OPTION':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
163 clone.selected = node.selected;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
164 clone.value = node.value;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
165 break;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
166 case 'TEXTAREA':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
167 clone.value = node.value;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
168 break;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
169 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
170 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
171
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
172 // Do not copy listeners since DOM2 specifies that only attributes and
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
173 // children are copied, and that children should only be copied if the
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
174 // deep flag is set.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
175 // The children are handled in constructClone.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
176 var originalAttribs = node.attributes___;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
177 if (originalAttribs) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
178 var attribs = {};
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
179 clone.attributes___ = attribs;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
180 cajita.forOwnKeys(originalAttribs, ___.func(function (k, v) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
181 switch (typeof v) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
182 case 'string': case 'number': case 'boolean':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
183 attribs[k] = v;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
184 break;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
185 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
186 }));
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
187 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
188 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
189
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
190 ////////////////////////////////////////////////////////////////////////////
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
191 // Public section
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
192 ////////////////////////////////////////////////////////////////////////////
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
193
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
194 function untameEventType(type) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
195 var suffix = CUSTOM_EVENT_TYPE_SUFFIX;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
196 var tlen = type.length, slen = suffix.length;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
197 var end = tlen - slen;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
198 if (end >= 0 && suffix === type.substring(end)) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
199 type = type.substring(0, end);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
200 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
201 return type;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
202 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
203
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
204 function initEvent(event, type, bubbles, cancelable) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
205 type = tameEventType(type, true);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
206 bubbles = Boolean(bubbles);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
207 cancelable = Boolean(cancelable);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
208
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
209 if (event.initEvent) { // Non-IE
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
210 event.initEvent(type, bubbles, cancelable);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
211 } else if (bubbles && cancelable) { // IE
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
212 event.eventType___ = type;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
213 } else {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
214 // TODO(mikesamuel): can bubbling and cancelable on events be simulated
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
215 // via http://msdn.microsoft.com/en-us/library/ms533545(VS.85).aspx
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
216 throw new Error(
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
217 'Browser does not support non-bubbling/uncanceleable events');
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
218 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
219 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
220
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
221 function dispatchEvent(element, event) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
222 // TODO(mikesamuel): when we change event dispatching to happen
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
223 // asynchronously, we should exempt custom events since those
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
224 // need to return a useful value, and there may be code bracketing
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
225 // them which could observe asynchronous dispatch.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
226
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
227 // "The return value of dispatchEvent indicates whether any of
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
228 // the listeners which handled the event called
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
229 // preventDefault. If preventDefault was called the value is
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
230 // false, else the value is true."
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
231 if (element.dispatchEvent) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
232 return Boolean(element.dispatchEvent(event));
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
233 } else {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
234 // Only dispatches custom events as when tameEventType(t) !== t.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
235 element.fireEvent('ondataavailable', event);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
236 return Boolean(event.returnValue);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
237 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
238 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
239
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
240 /**
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
241 * Add an event listener function to an element.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
242 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
243 * <p>Replaces
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
244 * W3C <code>Element::addEventListener</code> and
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
245 * IE <code>Element::attachEvent</code>.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
246 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
247 * @param {HTMLElement} element a native DOM element.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
248 * @param {string} type a string identifying the event type.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
249 * @param {boolean Element::function (event)} handler an event handler.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
250 * @param {boolean} useCapture whether the user wishes to initiate capture.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
251 * @return {boolean Element::function (event)} the handler added. May be
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
252 * a wrapper around the input.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
253 */
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
254 function addEventListener(element, type, handler, useCapture) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
255 type = String(type);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
256 var tameType = tameEventType(type);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
257 if (features.attachEvent) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
258 // TODO(ihab.awad): How do we emulate 'useCapture' here?
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
259 if (type !== tameType) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
260 var wrapper = eventHandlerTypeFilter(handler, tameType);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
261 element.attachEvent('ondataavailable', wrapper);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
262 return wrapper;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
263 } else {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
264 element.attachEvent('on' + type, handler);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
265 return handler;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
266 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
267 } else {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
268 // FF2 fails if useCapture not passed or is not a boolean.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
269 element.addEventListener(tameType, handler, useCapture);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
270 return handler;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
271 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
272 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
273
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
274 /**
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
275 * Remove an event listener function from an element.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
276 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
277 * <p>Replaces
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
278 * W3C <code>Element::removeEventListener</code> and
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
279 * IE <code>Element::detachEvent</code>.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
280 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
281 * @param element a native DOM element.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
282 * @param type a string identifying the event type.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
283 * @param handler a function acting as an event handler.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
284 * @param useCapture whether the user wishes to initiate capture.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
285 */
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
286 function removeEventListener(element, type, handler, useCapture) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
287 type = String(type);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
288 var tameType = tameEventType(type);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
289 if (features.attachEvent) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
290 // TODO(ihab.awad): How do we emulate 'useCapture' here?
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
291 if (tameType !== type) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
292 element.detachEvent('ondataavailable', handler);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
293 } else {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
294 element.detachEvent('on' + type, handler);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
295 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
296 } else {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
297 element.removeEventListener(tameType, handler, useCapture);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
298 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
299 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
300
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
301 /**
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
302 * Clones a node per {@code Node.clone()}.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
303 * <p>
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
304 * Returns a duplicate of this node, i.e., serves as a generic copy
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
305 * constructor for nodes. The duplicate node has no parent;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
306 * (parentNode is null.).
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
307 * <p>
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
308 * Cloning an Element copies all attributes and their values,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
309 * including those generated by the XML processor to represent
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
310 * defaulted attributes, but this method does not copy any text it
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
311 * contains unless it is a deep clone, since the text is contained
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
312 * in a child Text node. Cloning an Attribute directly, as opposed
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
313 * to be cloned as part of an Element cloning operation, returns a
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
314 * specified attribute (specified is true). Cloning any other type
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
315 * of node simply returns a copy of this node.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
316 * <p>
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
317 * Note that cloning an immutable subtree results in a mutable copy,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
318 * but the children of an EntityReference clone are readonly. In
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
319 * addition, clones of unspecified Attr nodes are specified. And,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
320 * cloning Document, DocumentType, Entity, and Notation nodes is
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
321 * implementation dependent.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
322 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
323 * @param {boolean} deep If true, recursively clone the subtree
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
324 * under the specified node; if false, clone only the node itself
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
325 * (and its attributes, if it is an Element).
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
326 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
327 * @return {Node} The duplicate node.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
328 */
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
329 function cloneNode(node, deep) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
330 var clone;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
331 if (!document.all) { // Not IE 6 or IE 7
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
332 clone = node.cloneNode(deep);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
333 } else {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
334 clone = constructClone(node, deep);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
335 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
336 fixupClone(node, clone);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
337 return clone;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
338 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
339
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
340 /**
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
341 * Create a <code>style</code> element for a document containing some
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
342 * specified CSS text. Does not add the element to the document: the client
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
343 * may do this separately if desired.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
344 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
345 * <p>Replaces directly creating the <code>style</code> element and
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
346 * populating its contents.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
347 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
348 * @param document a DOM document.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
349 * @param cssText a string containing a well-formed stylesheet production.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
350 * @return a <code>style</code> element for the specified document.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
351 */
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
352 function createStylesheet(document, cssText) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
353 // Courtesy Stoyan Stefanov who documents the derivation of this at
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
354 // http://www.phpied.com/dynamic-script-and-style-elements-in-ie/ and
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
355 // http://yuiblog.com/blog/2007/06/07/style/
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
356 var styleSheet = document.createElement('style');
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
357 styleSheet.setAttribute('type', 'text/css');
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
358 if (styleSheet.styleSheet) { // IE
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
359 styleSheet.styleSheet.cssText = cssText;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
360 } else { // the world
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
361 styleSheet.appendChild(document.createTextNode(cssText));
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
362 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
363 return styleSheet;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
364 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
365
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
366 /**
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
367 * Set an attribute on a DOM node.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
368 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
369 * <p>Replaces DOM <code>Node::setAttribute</code>.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
370 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
371 * @param {HTMLElement} element a DOM element.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
372 * @param {string} name the name of an attribute.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
373 * @param {string} value the value of an attribute.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
374 */
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
375 function setAttribute(element, name, value) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
376 switch (name) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
377 case 'style':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
378 if ((typeof element.style.cssText) === 'string') {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
379 // Setting the 'style' attribute does not work for IE, but
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
380 // setting cssText works on IE 6, Firefox, and IE 7.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
381 element.style.cssText = value;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
382 return value;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
383 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
384 break;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
385 case 'class':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
386 element.className = value;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
387 return value;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
388 case 'for':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
389 element.htmlFor = value;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
390 return value;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
391 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
392 if (features.setAttributeExtraParam) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
393 element.setAttribute(name, value, 0);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
394 } else {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
395 element.setAttribute(name, value);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
396 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
397 return value;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
398 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
399
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
400 /**
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
401 * See <a href="http://www.w3.org/TR/cssom-view/#the-getclientrects"
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
402 * >ElementView.getBoundingClientRect()</a>.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
403 * @return {Object} duck types as a TextRectangle with numeric fields
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
404 * {@code left}, {@code right}, {@code top}, and {@code bottom}.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
405 */
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
406 function getBoundingClientRect(el) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
407 var doc = el.ownerDocument;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
408 // Use the native method if present.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
409 if (el.getBoundingClientRect) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
410 var cRect = el.getBoundingClientRect();
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
411 if (isIE) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
412 // IE has an unnecessary border, which can be mucked with by styles, so
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
413 // the amount of border is not predictable.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
414 // Depending on whether the document is in quirks or standards mode,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
415 // the border will be present on either the HTML or BODY elements.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
416 var fixupLeft = doc.documentElement.clientLeft + doc.body.clientLeft;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
417 cRect.left -= fixupLeft;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
418 cRect.right -= fixupLeft;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
419 var fixupTop = doc.documentElement.clientTop + doc.body.clientTop;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
420 cRect.top -= fixupTop;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
421 cRect.bottom -= fixupTop;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
422 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
423 return ({
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
424 top: +cRect.top,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
425 left: +cRect.left,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
426 right: +cRect.right,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
427 bottom: +cRect.bottom
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
428 });
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
429 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
430
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
431 // Otherwise, try using the deprecated gecko method, or emulate it in
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
432 // horribly inefficient ways.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
433
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
434 // http://code.google.com/p/doctype/wiki/ArticleClientViewportElement
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
435 var viewport = (isIE && doc.compatMode === 'CSS1Compat')
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
436 ? doc.body : doc.documentElement;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
437
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
438 // Figure out the position relative to the viewport.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
439 // From http://code.google.com/p/doctype/wiki/ArticlePageOffset
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
440 var pageX = 0, pageY = 0;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
441 if (el === viewport) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
442 // The viewport is the origin.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
443 } else if (doc.getBoxObjectFor) { // Handles Firefox < 3
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
444 var elBoxObject = doc.getBoxObjectFor(el);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
445 var viewPortBoxObject = doc.getBoxObjectFor(viewport);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
446 pageX = elBoxObject.screenX - viewPortBoxObject.screenX;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
447 pageY = elBoxObject.screenY - viewPortBoxObject.screenY;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
448 } else {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
449 // Walk the offsetParent chain adding up offsets.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
450 for (var op = el; (op && op !== el); op = op.offsetParent) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
451 pageX += op.offsetLeft;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
452 pageY += op.offsetTop;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
453 if (op !== el) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
454 pageX += op.clientLeft || 0;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
455 pageY += op.clientTop || 0;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
456 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
457 if (isWebkit) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
458 // On webkit the offsets for position:fixed elements are off by the
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
459 // scroll offset.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
460 var opPosition = doc.defaultView.getComputedStyle(op, 'position');
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
461 if (opPosition === 'fixed') {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
462 pageX += doc.body.scrollLeft;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
463 pageY += doc.body.scrollTop;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
464 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
465 break;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
466 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
467 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
468
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
469 // Opera & (safari absolute) incorrectly account for body offsetTop
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
470 if ((isWebkit
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
471 && doc.defaultView.getComputedStyle(el, 'position') === 'absolute')
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
472 || isOpera) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
473 pageY -= doc.body.offsetTop;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
474 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
475
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
476 // Accumulate the scroll positions for everything but the body element
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
477 for (var op = el; (op = op.offsetParent) && op !== doc.body;) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
478 pageX -= op.scrollLeft;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
479 // see https://bugs.opera.com/show_bug.cgi?id=249965
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
480 if (!isOpera || op.tagName !== 'TR') {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
481 pageY -= op.scrollTop;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
482 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
483 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
484 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
485
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
486 // Figure out the viewport container so we can subtract the window's
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
487 // scroll offsets.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
488 var scrollEl = !isWebkit && doc.compatMode === 'CSS1Compat'
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
489 ? doc.documentElement
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
490 : doc.body;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
491
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
492 var left = pageX - scrollEl.scrollLeft, top = pageY - scrollEl.scrollTop;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
493 return ({
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
494 top: top,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
495 left: left,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
496 right: left + el.clientWidth,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
497 bottom: top + el.clientHeight
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
498 });
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
499 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
500
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
501 /**
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
502 * Returns the value of the named attribute on element.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
503 *
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
504 * @param {HTMLElement} element a DOM element.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
505 * @param {string} name the name of an attribute.
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
506 */
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
507 function getAttribute(element, name) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
508 switch (name) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
509 case 'style':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
510 if ((typeof element.style.cssText) === 'string') {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
511 return element.style.cssText;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
512 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
513 break;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
514 case 'class':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
515 return element.className;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
516 case 'for':
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
517 return element.htmlFor;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
518 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
519 return element.getAttribute(name);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
520 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
521
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
522 function getAttributeNode(element, name) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
523 return element.getAttributeNode(name);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
524 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
525
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
526 function hasAttribute(element, name) {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
527 if (element.hasAttribute) { // Non IE
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
528 return element.hasAttribute(name);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
529 } else {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
530 var attr = getAttributeNode(element, name);
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
531 return attr !== null && attr.specified;
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
532 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
533 }
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
534
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
535 return {
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
536 addEventListener: addEventListener,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
537 removeEventListener: removeEventListener,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
538 initEvent: initEvent,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
539 dispatchEvent: dispatchEvent,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
540 cloneNode: cloneNode,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
541 createStylesheet: createStylesheet,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
542 setAttribute: setAttribute,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
543 getAttribute: getAttribute,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
544 getAttributeNode: getAttributeNode,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
545 hasAttribute: hasAttribute,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
546 getBoundingClientRect: getBoundingClientRect,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
547 untameEventType: untameEventType,
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
548 extendedCreateElementFeature: features.extendedCreateElement
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
549 };
633c9cb05555 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
550 })();