selenium-webdriver 0.0.24 → 0.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. data/{common/src/rb/CHANGES → CHANGES} +13 -0
  2. data/{common/src/rb/README → README} +1 -1
  3. data/{common/src/rb/lib → lib}/selenium-webdriver.rb +0 -0
  4. data/{common/src/rb/lib → lib}/selenium/webdriver.rb +2 -1
  5. data/{common/src/rb/lib → lib}/selenium/webdriver/bridge_helper.rb +0 -0
  6. data/{common/src/rb/lib → lib}/selenium/webdriver/child_process.rb +0 -0
  7. data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome.rb +0 -0
  8. data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome/bridge.rb +2 -2
  9. data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome/command_executor.rb +0 -0
  10. data/lib/selenium/webdriver/chrome/extension.zip +0 -0
  11. data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome/launcher.rb +26 -20
  12. data/{common/src/rb/lib → lib}/selenium/webdriver/core_ext/dir.rb +0 -0
  13. data/{common/src/rb/lib → lib}/selenium/webdriver/core_ext/string.rb +0 -0
  14. data/{common/src/rb/lib → lib}/selenium/webdriver/driver.rb +0 -0
  15. data/{common/src/rb/lib → lib}/selenium/webdriver/driver_extensions/takes_screenshot.rb +0 -0
  16. data/{common/src/rb/lib → lib}/selenium/webdriver/element.rb +0 -0
  17. data/{common/src/rb/lib → lib}/selenium/webdriver/error.rb +0 -0
  18. data/{common/src/rb/lib → lib}/selenium/webdriver/file_reaper.rb +2 -1
  19. data/{common/src/rb/lib → lib}/selenium/webdriver/find.rb +0 -0
  20. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox.rb +2 -1
  21. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/binary.rb +32 -6
  22. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/bridge.rb +0 -0
  23. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  24. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/launcher.rb +0 -0
  25. data/lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so +0 -0
  26. data/lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so +0 -0
  27. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/profile.rb +37 -72
  28. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/profiles_ini.rb +0 -0
  29. data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/util.rb +0 -0
  30. data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie.rb +2 -2
  31. data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie/bridge.rb +7 -2
  32. data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie/lib.rb +0 -0
  33. data/{jobbie/prebuilt/Win32/Release → lib/selenium/webdriver/ie/native/win32}/InternetExplorerDriver.dll +0 -0
  34. data/lib/selenium/webdriver/ie/native/x64/InternetExplorerDriver.dll +0 -0
  35. data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie/util.rb +0 -0
  36. data/{common/src/rb/lib → lib}/selenium/webdriver/keys.rb +0 -0
  37. data/{common/src/rb/lib → lib}/selenium/webdriver/navigation.rb +0 -0
  38. data/{common/src/rb/lib → lib}/selenium/webdriver/options.rb +0 -0
  39. data/{common/src/rb/lib → lib}/selenium/webdriver/platform.rb +5 -1
  40. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote.rb +0 -0
  41. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/bridge.rb +0 -0
  42. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/capabilities.rb +0 -0
  43. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/commands.rb +0 -0
  44. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/http/common.rb +0 -0
  45. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/http/curb.rb +0 -0
  46. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/http/default.rb +5 -1
  47. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/response.rb +0 -0
  48. data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/server_error.rb +0 -0
  49. data/{common/src/rb/lib → lib}/selenium/webdriver/target_locator.rb +0 -0
  50. data/{common/src/rb/lib → lib}/selenium/webdriver/timeouts.rb +0 -0
  51. data/lib/selenium/webdriver/zip_helper.rb +30 -0
  52. metadata +73 -214
  53. data/COPYING +0 -204
  54. data/chrome/prebuilt/Win32/Release/npchromedriver.dll +0 -0
  55. data/chrome/prebuilt/x64/Release/npchromedriver.dll +0 -0
  56. data/chrome/src/extension/background.html +0 -9
  57. data/chrome/src/extension/background.js +0 -1029
  58. data/chrome/src/extension/content_script.js +0 -1488
  59. data/chrome/src/extension/icons/busy.png +0 -0
  60. data/chrome/src/extension/icons/free.png +0 -0
  61. data/chrome/src/extension/manifest-nonwin.json +0 -19
  62. data/chrome/src/extension/manifest-win.json +0 -20
  63. data/chrome/src/extension/utils.js +0 -231
  64. data/common/src/js/abstractcommandprocessor.js +0 -132
  65. data/common/src/js/asserts.js +0 -296
  66. data/common/src/js/by.js +0 -149
  67. data/common/src/js/command.js +0 -380
  68. data/common/src/js/core/Blank.html +0 -7
  69. data/common/src/js/core/InjectedRemoteRunner.html +0 -8
  70. data/common/src/js/core/RemoteRunner.html +0 -101
  71. data/common/src/js/core/SeleniumLog.html +0 -109
  72. data/common/src/js/core/TestPrompt.html +0 -145
  73. data/common/src/js/core/TestRunner-splash.html +0 -55
  74. data/common/src/js/core/TestRunner.html +0 -165
  75. data/common/src/js/core/icons/all.png +0 -0
  76. data/common/src/js/core/icons/continue.png +0 -0
  77. data/common/src/js/core/icons/continue_disabled.png +0 -0
  78. data/common/src/js/core/icons/pause.png +0 -0
  79. data/common/src/js/core/icons/pause_disabled.png +0 -0
  80. data/common/src/js/core/icons/selected.png +0 -0
  81. data/common/src/js/core/icons/step.png +0 -0
  82. data/common/src/js/core/icons/step_disabled.png +0 -0
  83. data/common/src/js/core/lib/cssQuery/cssQuery-p.js +0 -6
  84. data/common/src/js/core/lib/cssQuery/src/cssQuery-level2.js +0 -142
  85. data/common/src/js/core/lib/cssQuery/src/cssQuery-level3.js +0 -150
  86. data/common/src/js/core/lib/cssQuery/src/cssQuery-standard.js +0 -53
  87. data/common/src/js/core/lib/cssQuery/src/cssQuery.js +0 -356
  88. data/common/src/js/core/lib/prototype.js +0 -2006
  89. data/common/src/js/core/lib/scriptaculous/builder.js +0 -101
  90. data/common/src/js/core/lib/scriptaculous/controls.js +0 -815
  91. data/common/src/js/core/lib/scriptaculous/dragdrop.js +0 -915
  92. data/common/src/js/core/lib/scriptaculous/effects.js +0 -958
  93. data/common/src/js/core/lib/scriptaculous/scriptaculous.js +0 -47
  94. data/common/src/js/core/lib/scriptaculous/slider.js +0 -283
  95. data/common/src/js/core/lib/scriptaculous/unittest.js +0 -383
  96. data/common/src/js/core/lib/snapsie.js +0 -91
  97. data/common/src/js/core/scripts/find_matching_child.js +0 -69
  98. data/common/src/js/core/scripts/htmlutils.js +0 -8716
  99. data/common/src/js/core/scripts/injection.html +0 -72
  100. data/common/src/js/core/scripts/selenium-api.js +0 -3291
  101. data/common/src/js/core/scripts/selenium-browserbot.js +0 -2457
  102. data/common/src/js/core/scripts/selenium-browserdetect.js +0 -153
  103. data/common/src/js/core/scripts/selenium-commandhandlers.js +0 -379
  104. data/common/src/js/core/scripts/selenium-executionloop.js +0 -175
  105. data/common/src/js/core/scripts/selenium-logging.js +0 -148
  106. data/common/src/js/core/scripts/selenium-remoterunner.js +0 -695
  107. data/common/src/js/core/scripts/selenium-testrunner.js +0 -1362
  108. data/common/src/js/core/scripts/selenium-version.js +0 -5
  109. data/common/src/js/core/scripts/ui-doc.html +0 -808
  110. data/common/src/js/core/scripts/ui-element.js +0 -1644
  111. data/common/src/js/core/scripts/ui-map-sample.js +0 -979
  112. data/common/src/js/core/scripts/user-extensions.js +0 -3
  113. data/common/src/js/core/scripts/user-extensions.js.sample +0 -75
  114. data/common/src/js/core/scripts/xmlextras.js +0 -153
  115. data/common/src/js/core/selenium-logo.png +0 -0
  116. data/common/src/js/core/selenium-test.css +0 -43
  117. data/common/src/js/core/selenium.css +0 -316
  118. data/common/src/js/core/xpath/dom.js +0 -566
  119. data/common/src/js/core/xpath/javascript-xpath-0.1.11.js +0 -2816
  120. data/common/src/js/core/xpath/util.js +0 -549
  121. data/common/src/js/core/xpath/xmltoken.js +0 -149
  122. data/common/src/js/core/xpath/xpath.js +0 -2481
  123. data/common/src/js/extension/README +0 -2
  124. data/common/src/js/extension/dommessenger.js +0 -152
  125. data/common/src/js/factory.js +0 -55
  126. data/common/src/js/future.js +0 -141
  127. data/common/src/js/jsunit.js +0 -40
  128. data/common/src/js/jsunit/app/css/jsUnitStyle.css +0 -50
  129. data/common/src/js/jsunit/app/css/readme +0 -10
  130. data/common/src/js/jsunit/app/emptyPage.html +0 -11
  131. data/common/src/js/jsunit/app/jsUnitCore.js +0 -534
  132. data/common/src/js/jsunit/app/jsUnitMockTimeout.js +0 -81
  133. data/common/src/js/jsunit/app/jsUnitTestManager.js +0 -705
  134. data/common/src/js/jsunit/app/jsUnitTestSuite.js +0 -44
  135. data/common/src/js/jsunit/app/jsUnitTracer.js +0 -102
  136. data/common/src/js/jsunit/app/jsUnitVersionCheck.js +0 -59
  137. data/common/src/js/jsunit/app/main-counts-errors.html +0 -12
  138. data/common/src/js/jsunit/app/main-counts-failures.html +0 -13
  139. data/common/src/js/jsunit/app/main-counts-runs.html +0 -13
  140. data/common/src/js/jsunit/app/main-counts.html +0 -21
  141. data/common/src/js/jsunit/app/main-data.html +0 -178
  142. data/common/src/js/jsunit/app/main-errors.html +0 -23
  143. data/common/src/js/jsunit/app/main-frame.html +0 -19
  144. data/common/src/js/jsunit/app/main-loader.html +0 -45
  145. data/common/src/js/jsunit/app/main-progress.html +0 -25
  146. data/common/src/js/jsunit/app/main-results.html +0 -67
  147. data/common/src/js/jsunit/app/main-status.html +0 -13
  148. data/common/src/js/jsunit/app/testContainer.html +0 -16
  149. data/common/src/js/jsunit/app/testContainerController.html +0 -77
  150. data/common/src/js/jsunit/app/xbDebug.js +0 -306
  151. data/common/src/js/jsunit/changelog.txt +0 -60
  152. data/common/src/js/jsunit/css/jsUnitStyle.css +0 -83
  153. data/common/src/js/jsunit/images/green.gif +0 -0
  154. data/common/src/js/jsunit/images/logo_jsunit.gif +0 -0
  155. data/common/src/js/jsunit/images/powerby-transparent.gif +0 -0
  156. data/common/src/js/jsunit/images/red.gif +0 -0
  157. data/common/src/js/jsunit/licenses/JDOM_license.txt +0 -56
  158. data/common/src/js/jsunit/licenses/Jetty_license.html +0 -213
  159. data/common/src/js/jsunit/licenses/MPL-1.1.txt +0 -470
  160. data/common/src/js/jsunit/licenses/gpl-2.txt +0 -340
  161. data/common/src/js/jsunit/licenses/index.html +0 -141
  162. data/common/src/js/jsunit/licenses/lgpl-2.1.txt +0 -504
  163. data/common/src/js/jsunit/licenses/mpl-tri-license-c.txt +0 -35
  164. data/common/src/js/jsunit/licenses/mpl-tri-license-html.txt +0 -35
  165. data/common/src/js/jsunit/readme.txt +0 -19
  166. data/common/src/js/jsunit/testRunner.html +0 -167
  167. data/common/src/js/jsunit/version.txt +0 -1
  168. data/common/src/js/key.js +0 -117
  169. data/common/src/js/localcommandprocessor.js +0 -171
  170. data/common/src/js/testcase.js +0 -219
  171. data/common/src/js/timing.js +0 -89
  172. data/common/src/js/webdriver.js +0 -860
  173. data/common/src/js/webelement.js +0 -483
  174. data/firefox/prebuilt/Win32/Release/webdriver-firefox.dll +0 -0
  175. data/firefox/prebuilt/amd64/libnoblur64.so +0 -0
  176. data/firefox/prebuilt/i386/libnoblur.so +0 -0
  177. data/firefox/prebuilt/linux/Release/libwebdriver-firefox.so +0 -0
  178. data/firefox/prebuilt/linux64/Release/libwebdriver-firefox.so +0 -0
  179. data/firefox/prebuilt/nsICommandProcessor.xpt +0 -0
  180. data/firefox/prebuilt/nsINativeEvents.xpt +0 -0
  181. data/firefox/prebuilt/nsIResponseHandler.xpt +0 -0
  182. data/firefox/src/extension/chrome.manifest +0 -3
  183. data/firefox/src/extension/components/badCertListener.js +0 -295
  184. data/firefox/src/extension/components/dispatcher.js +0 -495
  185. data/firefox/src/extension/components/driver-component.js +0 -130
  186. data/firefox/src/extension/components/errorcode.js +0 -70
  187. data/firefox/src/extension/components/firefoxDriver.js +0 -831
  188. data/firefox/src/extension/components/json2.js +0 -273
  189. data/firefox/src/extension/components/keytest.html +0 -554
  190. data/firefox/src/extension/components/nsCommandProcessor.js +0 -684
  191. data/firefox/src/extension/components/promptService.js +0 -208
  192. data/firefox/src/extension/components/request.js +0 -219
  193. data/firefox/src/extension/components/response.js +0 -276
  194. data/firefox/src/extension/components/screenshooter.js +0 -81
  195. data/firefox/src/extension/components/session.js +0 -314
  196. data/firefox/src/extension/components/sessionstore.js +0 -226
  197. data/firefox/src/extension/components/socketListener.js +0 -435
  198. data/firefox/src/extension/components/utils.js +0 -1335
  199. data/firefox/src/extension/components/webLoadingListener.js +0 -57
  200. data/firefox/src/extension/components/webdriverserver.js +0 -110
  201. data/firefox/src/extension/components/wrappedElement.js +0 -706
  202. data/firefox/src/extension/content/fxdriver.xul +0 -30
  203. data/firefox/src/extension/content/server.js +0 -95
  204. data/firefox/src/extension/idl/nsICommandProcessor.idl +0 -38
  205. data/firefox/src/extension/idl/nsIResponseHandler.idl +0 -34
  206. data/firefox/src/extension/install.rdf +0 -29
  207. data/jobbie/prebuilt/x64/Release/InternetExplorerDriver.dll +0 -0
@@ -1,566 +0,0 @@
1
- // Copyright 2005 Google Inc.
2
- // All Rights Reserved
3
- //
4
- // Author: Steffen Meschkat <mesch@google.com>
5
- //
6
- // An XML parse and a minimal DOM implementation that just supportes
7
- // the subset of the W3C DOM that is used in the XSLT implementation.
8
-
9
- // NOTE: The split() method in IE omits empty result strings. This is
10
- // utterly annoying. So we don't use it here.
11
-
12
- // Resolve entities in XML text fragments. According to the DOM
13
- // specification, the DOM is supposed to resolve entity references at
14
- // the API level. I.e. no entity references are passed through the
15
- // API. See "Entities and the DOM core", p.12, DOM 2 Core
16
- // Spec. However, different browsers actually pass very different
17
- // values at the API. See <http://mesch.nyc/test-xml-quote>.
18
- function xmlResolveEntities(s) {
19
-
20
- var parts = stringSplit(s, '&');
21
-
22
- var ret = parts[0];
23
- for (var i = 1; i < parts.length; ++i) {
24
- var rp = parts[i].indexOf(';');
25
- if (rp == -1) {
26
- // no entity reference: just a & but no ;
27
- ret += parts[i];
28
- continue;
29
- }
30
-
31
- var entityName = parts[i].substring(0, rp);
32
- var remainderText = parts[i].substring(rp + 1);
33
-
34
- var ch;
35
- switch (entityName) {
36
- case 'lt':
37
- ch = '<';
38
- break;
39
- case 'gt':
40
- ch = '>';
41
- break;
42
- case 'amp':
43
- ch = '&';
44
- break;
45
- case 'quot':
46
- ch = '"';
47
- break;
48
- case 'apos':
49
- ch = '\'';
50
- break;
51
- case 'nbsp':
52
- ch = String.fromCharCode(160);
53
- break;
54
- default:
55
- // Cool trick: let the DOM do the entity decoding. We assign
56
- // the entity text through non-W3C DOM properties and read it
57
- // through the W3C DOM. W3C DOM access is specified to resolve
58
- // entities.
59
- var span = domCreateElement(window.document, 'span');
60
- span.innerHTML = '&' + entityName + '; ';
61
- ch = span.childNodes[0].nodeValue.charAt(0);
62
- }
63
- ret += ch + remainderText;
64
- }
65
-
66
- return ret;
67
- }
68
-
69
- var XML10_TAGNAME_REGEXP = new RegExp('^(' + XML10_NAME + ')');
70
- var XML10_ATTRIBUTE_REGEXP = new RegExp(XML10_ATTRIBUTE, 'g');
71
-
72
- var XML11_TAGNAME_REGEXP = new RegExp('^(' + XML11_NAME + ')');
73
- var XML11_ATTRIBUTE_REGEXP = new RegExp(XML11_ATTRIBUTE, 'g');
74
-
75
- // Parses the given XML string with our custom, JavaScript XML parser. Written
76
- // by Steffen Meschkat (mesch@google.com).
77
- function xmlParse(xml) {
78
- var regex_empty = /\/$/;
79
-
80
- var regex_tagname;
81
- var regex_attribute;
82
- if (xml.match(/^<\?xml/)) {
83
- // When an XML document begins with an XML declaration
84
- // VersionInfo must appear.
85
- if (xml.search(new RegExp(XML10_VERSION_INFO)) == 5) {
86
- regex_tagname = XML10_TAGNAME_REGEXP;
87
- regex_attribute = XML10_ATTRIBUTE_REGEXP;
88
- } else if (xml.search(new RegExp(XML11_VERSION_INFO)) == 5) {
89
- regex_tagname = XML11_TAGNAME_REGEXP;
90
- regex_attribute = XML11_ATTRIBUTE_REGEXP;
91
- } else {
92
- // VersionInfo is missing, or unknown version number.
93
- // TODO : Fallback to XML 1.0 or XML 1.1, or just return null?
94
- alert('VersionInfo is missing, or unknown version number.');
95
- }
96
- } else {
97
- // When an XML declaration is missing it's an XML 1.0 document.
98
- regex_tagname = XML10_TAGNAME_REGEXP;
99
- regex_attribute = XML10_ATTRIBUTE_REGEXP;
100
- }
101
-
102
- var xmldoc = new XDocument();
103
- var root = xmldoc;
104
-
105
- // For the record: in Safari, we would create native DOM nodes, but
106
- // in Opera that is not possible, because the DOM only allows HTML
107
- // element nodes to be created, so we have to do our own DOM nodes.
108
-
109
- // xmldoc = document.implementation.createDocument('','',null);
110
- // root = xmldoc; // .createDocumentFragment();
111
- // NOTE(mesch): using the DocumentFragment instead of the Document
112
- // crashes my Safari 1.2.4 (v125.12).
113
- var stack = [];
114
-
115
- var parent = root;
116
- stack.push(parent);
117
-
118
- // The token that delimits a section that contains markup as
119
- // content: CDATA or comments.
120
- var slurp = '';
121
-
122
- var x = stringSplit(xml, '<');
123
- for (var i = 1; i < x.length; ++i) {
124
- var xx = stringSplit(x[i], '>');
125
- var tag = xx[0];
126
- var text = xmlResolveEntities(xx[1] || '');
127
-
128
- if (slurp) {
129
- // In a "slurp" section (CDATA or comment): only check for the
130
- // end of the section, otherwise append the whole text.
131
- var end = x[i].indexOf(slurp);
132
- if (end != -1) {
133
- var data = x[i].substring(0, end);
134
- parent.nodeValue += '<' + data;
135
- stack.pop();
136
- parent = stack[stack.length-1];
137
- text = x[i].substring(end + slurp.length);
138
- slurp = '';
139
- } else {
140
- parent.nodeValue += '<' + x[i];
141
- text = null;
142
- }
143
-
144
- } else if (tag.indexOf('![CDATA[') == 0) {
145
- var start = '![CDATA['.length;
146
- var end = x[i].indexOf(']]>');
147
- if (end != -1) {
148
- var data = x[i].substring(start, end);
149
- var node = domCreateCDATASection(xmldoc, data);
150
- domAppendChild(parent, node);
151
- } else {
152
- var data = x[i].substring(start);
153
- text = null;
154
- var node = domCreateCDATASection(xmldoc, data);
155
- domAppendChild(parent, node);
156
- parent = node;
157
- stack.push(node);
158
- slurp = ']]>';
159
- }
160
-
161
- } else if (tag.indexOf('!--') == 0) {
162
- var start = '!--'.length;
163
- var end = x[i].indexOf('-->');
164
- if (end != -1) {
165
- var data = x[i].substring(start, end);
166
- var node = domCreateComment(xmldoc, data);
167
- domAppendChild(parent, node);
168
- } else {
169
- var data = x[i].substring(start);
170
- text = null;
171
- var node = domCreateComment(xmldoc, data);
172
- domAppendChild(parent, node);
173
- parent = node;
174
- stack.push(node);
175
- slurp = '-->';
176
- }
177
-
178
- } else if (tag.charAt(0) == '/') {
179
- stack.pop();
180
- parent = stack[stack.length-1];
181
-
182
- } else if (tag.charAt(0) == '?') {
183
- // Ignore XML declaration and processing instructions
184
- } else if (tag.charAt(0) == '!') {
185
- // Ignore notation and comments
186
- } else {
187
- var empty = tag.match(regex_empty);
188
- var tagname = regex_tagname.exec(tag)[1];
189
- var node = domCreateElement(xmldoc, tagname);
190
-
191
- var att;
192
- while (att = regex_attribute.exec(tag)) {
193
- var val = xmlResolveEntities(att[5] || att[7] || '');
194
- domSetAttribute(node, att[1], val);
195
- }
196
-
197
- domAppendChild(parent, node);
198
- if (!empty) {
199
- parent = node;
200
- stack.push(node);
201
- }
202
- }
203
-
204
- if (text && parent != root) {
205
- domAppendChild(parent, domCreateTextNode(xmldoc, text));
206
- }
207
- }
208
-
209
- return root;
210
- }
211
-
212
- // Based on <http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/
213
- // core.html#ID-1950641247>
214
- var DOM_ELEMENT_NODE = 1;
215
- var DOM_ATTRIBUTE_NODE = 2;
216
- var DOM_TEXT_NODE = 3;
217
- var DOM_CDATA_SECTION_NODE = 4;
218
- var DOM_ENTITY_REFERENCE_NODE = 5;
219
- var DOM_ENTITY_NODE = 6;
220
- var DOM_PROCESSING_INSTRUCTION_NODE = 7;
221
- var DOM_COMMENT_NODE = 8;
222
- var DOM_DOCUMENT_NODE = 9;
223
- var DOM_DOCUMENT_TYPE_NODE = 10;
224
- var DOM_DOCUMENT_FRAGMENT_NODE = 11;
225
- var DOM_NOTATION_NODE = 12;
226
-
227
- // Traverses the element nodes in the DOM section underneath the given
228
- // node and invokes the given callbacks as methods on every element
229
- // node encountered. Function opt_pre is invoked before a node's
230
- // children are traversed; opt_post is invoked after they are
231
- // traversed. Traversal will not be continued if a callback function
232
- // returns boolean false. NOTE(mesch): copied from
233
- // <//google3/maps/webmaps/javascript/dom.js>.
234
- function domTraverseElements(node, opt_pre, opt_post) {
235
- var ret;
236
- if (opt_pre) {
237
- ret = opt_pre.call(null, node);
238
- if (typeof ret == 'boolean' && !ret) {
239
- return false;
240
- }
241
- }
242
-
243
- for (var c = node.firstChild; c; c = c.nextSibling) {
244
- if (c.nodeType == DOM_ELEMENT_NODE) {
245
- ret = arguments.callee.call(this, c, opt_pre, opt_post);
246
- if (typeof ret == 'boolean' && !ret) {
247
- return false;
248
- }
249
- }
250
- }
251
-
252
- if (opt_post) {
253
- ret = opt_post.call(null, node);
254
- if (typeof ret == 'boolean' && !ret) {
255
- return false;
256
- }
257
- }
258
- }
259
-
260
- // Our W3C DOM Node implementation. Note we call it XNode because we
261
- // can't define the identifier Node. We do this mostly for Opera,
262
- // where we can't reuse the HTML DOM for parsing our own XML, and for
263
- // Safari, where it is too expensive to have the template processor
264
- // operate on native DOM nodes.
265
- function XNode(type, name, opt_value, opt_owner) {
266
- this.attributes = [];
267
- this.childNodes = [];
268
-
269
- XNode.init.call(this, type, name, opt_value, opt_owner);
270
- }
271
-
272
- // Don't call as method, use apply() or call().
273
- XNode.init = function(type, name, value, owner) {
274
- this.nodeType = type - 0;
275
- this.nodeName = '' + name;
276
- this.nodeValue = '' + value;
277
- this.ownerDocument = owner;
278
-
279
- this.firstChild = null;
280
- this.lastChild = null;
281
- this.nextSibling = null;
282
- this.previousSibling = null;
283
- this.parentNode = null;
284
- }
285
-
286
- XNode.unused_ = [];
287
-
288
- XNode.recycle = function(node) {
289
- if (!node) {
290
- return;
291
- }
292
-
293
- if (node.constructor == XDocument) {
294
- XNode.recycle(node.documentElement);
295
- return;
296
- }
297
-
298
- if (node.constructor != this) {
299
- return;
300
- }
301
-
302
- XNode.unused_.push(node);
303
- for (var a = 0; a < node.attributes.length; ++a) {
304
- XNode.recycle(node.attributes[a]);
305
- }
306
- for (var c = 0; c < node.childNodes.length; ++c) {
307
- XNode.recycle(node.childNodes[c]);
308
- }
309
- node.attributes.length = 0;
310
- node.childNodes.length = 0;
311
- XNode.init.call(node, 0, '', '', null);
312
- }
313
-
314
- XNode.create = function(type, name, value, owner) {
315
- if (XNode.unused_.length > 0) {
316
- var node = XNode.unused_.pop();
317
- XNode.init.call(node, type, name, value, owner);
318
- return node;
319
- } else {
320
- return new XNode(type, name, value, owner);
321
- }
322
- }
323
-
324
- XNode.prototype.appendChild = function(node) {
325
- // firstChild
326
- if (this.childNodes.length == 0) {
327
- this.firstChild = node;
328
- }
329
-
330
- // previousSibling
331
- node.previousSibling = this.lastChild;
332
-
333
- // nextSibling
334
- node.nextSibling = null;
335
- if (this.lastChild) {
336
- this.lastChild.nextSibling = node;
337
- }
338
-
339
- // parentNode
340
- node.parentNode = this;
341
-
342
- // lastChild
343
- this.lastChild = node;
344
-
345
- // childNodes
346
- this.childNodes.push(node);
347
- }
348
-
349
-
350
- XNode.prototype.replaceChild = function(newNode, oldNode) {
351
- if (oldNode == newNode) {
352
- return;
353
- }
354
-
355
- for (var i = 0; i < this.childNodes.length; ++i) {
356
- if (this.childNodes[i] == oldNode) {
357
- this.childNodes[i] = newNode;
358
-
359
- var p = oldNode.parentNode;
360
- oldNode.parentNode = null;
361
- newNode.parentNode = p;
362
-
363
- p = oldNode.previousSibling;
364
- oldNode.previousSibling = null;
365
- newNode.previousSibling = p;
366
- if (newNode.previousSibling) {
367
- newNode.previousSibling.nextSibling = newNode;
368
- }
369
-
370
- p = oldNode.nextSibling;
371
- oldNode.nextSibling = null;
372
- newNode.nextSibling = p;
373
- if (newNode.nextSibling) {
374
- newNode.nextSibling.previousSibling = newNode;
375
- }
376
-
377
- if (this.firstChild == oldNode) {
378
- this.firstChild = newNode;
379
- }
380
-
381
- if (this.lastChild == oldNode) {
382
- this.lastChild = newNode;
383
- }
384
-
385
- break;
386
- }
387
- }
388
- }
389
-
390
-
391
- XNode.prototype.insertBefore = function(newNode, oldNode) {
392
- if (oldNode == newNode) {
393
- return;
394
- }
395
-
396
- if (oldNode.parentNode != this) {
397
- return;
398
- }
399
-
400
- if (newNode.parentNode) {
401
- newNode.parentNode.removeChild(newNode);
402
- }
403
-
404
- var newChildren = [];
405
- for (var i = 0; i < this.childNodes.length; ++i) {
406
- var c = this.childNodes[i];
407
- if (c == oldNode) {
408
- newChildren.push(newNode);
409
-
410
- newNode.parentNode = this;
411
-
412
- newNode.previousSibling = oldNode.previousSibling;
413
- oldNode.previousSibling = newNode;
414
- if (newNode.previousSibling) {
415
- newNode.previousSibling.nextSibling = newNode;
416
- }
417
-
418
- newNode.nextSibling = oldNode;
419
-
420
- if (this.firstChild == oldNode) {
421
- this.firstChild = newNode;
422
- }
423
- }
424
- newChildren.push(c);
425
- }
426
- this.childNodes = newChildren;
427
- }
428
-
429
-
430
- XNode.prototype.removeChild = function(node) {
431
- var newChildren = [];
432
- for (var i = 0; i < this.childNodes.length; ++i) {
433
- var c = this.childNodes[i];
434
- if (c != node) {
435
- newChildren.push(c);
436
- } else {
437
- if (c.previousSibling) {
438
- c.previousSibling.nextSibling = c.nextSibling;
439
- }
440
- if (c.nextSibling) {
441
- c.nextSibling.previousSibling = c.previousSibling;
442
- }
443
- if (this.firstChild == c) {
444
- this.firstChild = c.nextSibling;
445
- }
446
- if (this.lastChild == c) {
447
- this.lastChild = c.previousSibling;
448
- }
449
- }
450
- }
451
- this.childNodes = newChildren;
452
- }
453
-
454
-
455
- XNode.prototype.hasAttributes = function() {
456
- return this.attributes.length > 0;
457
- }
458
-
459
-
460
- XNode.prototype.setAttribute = function(name, value) {
461
- for (var i = 0; i < this.attributes.length; ++i) {
462
- if (this.attributes[i].nodeName == name) {
463
- this.attributes[i].nodeValue = '' + value;
464
- return;
465
- }
466
- }
467
- this.attributes.push(XNode.create(DOM_ATTRIBUTE_NODE, name, value, this));
468
- }
469
-
470
-
471
- XNode.prototype.getAttribute = function(name) {
472
- for (var i = 0; i < this.attributes.length; ++i) {
473
- if (this.attributes[i].nodeName == name) {
474
- return this.attributes[i].nodeValue;
475
- }
476
- }
477
- return null;
478
- }
479
-
480
-
481
- XNode.prototype.removeAttribute = function(name) {
482
- var a = [];
483
- for (var i = 0; i < this.attributes.length; ++i) {
484
- if (this.attributes[i].nodeName != name) {
485
- a.push(this.attributes[i]);
486
- }
487
- }
488
- this.attributes = a;
489
- }
490
-
491
-
492
- XNode.prototype.getElementsByTagName = function(name) {
493
- var ret = [];
494
- var self = this;
495
- if ("*" == name) {
496
- domTraverseElements(this, function(node) {
497
- if (self == node) return;
498
- ret.push(node);
499
- }, null);
500
- } else {
501
- domTraverseElements(this, function(node) {
502
- if (self == node) return;
503
- if (node.nodeName == name) {
504
- ret.push(node);
505
- }
506
- }, null);
507
- }
508
- return ret;
509
- }
510
-
511
-
512
- XNode.prototype.getElementById = function(id) {
513
- var ret = null;
514
- domTraverseElements(this, function(node) {
515
- if (node.getAttribute('id') == id) {
516
- ret = node;
517
- return false;
518
- }
519
- }, null);
520
- return ret;
521
- }
522
-
523
-
524
- function XDocument() {
525
- // NOTE(mesch): Acocording to the DOM Spec, ownerDocument of a
526
- // document node is null.
527
- XNode.call(this, DOM_DOCUMENT_NODE, '#document', null, null);
528
- this.documentElement = null;
529
- }
530
-
531
- XDocument.prototype = new XNode(DOM_DOCUMENT_NODE, '#document');
532
-
533
- XDocument.prototype.clear = function() {
534
- XNode.recycle(this.documentElement);
535
- this.documentElement = null;
536
- }
537
-
538
- XDocument.prototype.appendChild = function(node) {
539
- XNode.prototype.appendChild.call(this, node);
540
- this.documentElement = this.childNodes[0];
541
- }
542
-
543
- XDocument.prototype.createElement = function(name) {
544
- return XNode.create(DOM_ELEMENT_NODE, name, null, this);
545
- }
546
-
547
- XDocument.prototype.createDocumentFragment = function() {
548
- return XNode.create(DOM_DOCUMENT_FRAGMENT_NODE, '#document-fragment',
549
- null, this);
550
- }
551
-
552
- XDocument.prototype.createTextNode = function(value) {
553
- return XNode.create(DOM_TEXT_NODE, '#text', value, this);
554
- }
555
-
556
- XDocument.prototype.createAttribute = function(name) {
557
- return XNode.create(DOM_ATTRIBUTE_NODE, name, null, this);
558
- }
559
-
560
- XDocument.prototype.createComment = function(data) {
561
- return XNode.create(DOM_COMMENT_NODE, '#comment', data, this);
562
- }
563
-
564
- XDocument.prototype.createCDATASection = function(data) {
565
- return XNode.create(DOM_CDATA_SECTION_NODE, '#cdata-section', data, this);
566
- }