envjs19 0.3.8.20101029121421

Sign up to get free protection for your applications and to get access to all the features.
Files changed (279) hide show
  1. data/.jslintrbrc +30 -0
  2. data/.project +17 -0
  3. data/CHANGELOG.rdoc +57 -0
  4. data/DTD/xhtml-lat1.ent +196 -0
  5. data/DTD/xhtml-special.ent +80 -0
  6. data/DTD/xhtml-symbol.ent +237 -0
  7. data/DTD/xhtml.soc +14 -0
  8. data/DTD/xhtml1-frameset.dtd +1235 -0
  9. data/DTD/xhtml1-strict.dtd +978 -0
  10. data/DTD/xhtml1-transitional.dtd +1201 -0
  11. data/DTD/xhtml1.dcl +192 -0
  12. data/Makefile +7 -0
  13. data/Manifest.txt +280 -0
  14. data/README.rdoc +65 -0
  15. data/Rakefile +196 -0
  16. data/Wakefile +11 -0
  17. data/bin/envjsrb +257 -0
  18. data/build.properties +9 -0
  19. data/build.xml +247 -0
  20. data/gm/jquery.js +6002 -0
  21. data/gm/mainx.js +2648 -0
  22. data/gm/sensx.js +135 -0
  23. data/gm/t.js +6 -0
  24. data/gm/x.html +76 -0
  25. data/htmlparser/BrowserTreeBuilder.java +456 -0
  26. data/htmlparser/README +34 -0
  27. data/htmlparser/build.sh +38 -0
  28. data/jsl/jsl +0 -0
  29. data/jsl/jsl.default.conf +129 -0
  30. data/jsl/jsl.exe +0 -0
  31. data/lib/envjs.rb +35 -0
  32. data/lib/envjs/event_loop.js +206 -0
  33. data/lib/envjs/net.rb +3 -0
  34. data/lib/envjs/net/cgi.rb +94 -0
  35. data/lib/envjs/net/file.rb +69 -0
  36. data/lib/envjs/options.rb +11 -0
  37. data/lib/envjs/runtime.rb +346 -0
  38. data/lib/envjs/tempfile.rb +24 -0
  39. data/licenses/GPL-LICENSE.txt +278 -0
  40. data/licenses/MIT-LICENSE.txt +20 -0
  41. data/src/base64.js +80 -0
  42. data/src/build.js +6 -0
  43. data/src/cruft/bad.html +24 -0
  44. data/src/cruft/dom.js +606 -0
  45. data/src/cruft/element.js +297 -0
  46. data/src/cruft/good.html +30 -0
  47. data/src/cruft/good.js +32 -0
  48. data/src/cruft/internal.js +81 -0
  49. data/src/cruft/parser.js +458 -0
  50. data/src/css/properties.js +293 -0
  51. data/src/css/rule.js +22 -0
  52. data/src/css/sizzle.js +717 -0
  53. data/src/css/stylesheet.js +52 -0
  54. data/src/dom/attr.js +55 -0
  55. data/src/dom/cdatasection.js +31 -0
  56. data/src/dom/characterdata.js +119 -0
  57. data/src/dom/comment.js +30 -0
  58. data/src/dom/doctype.js +9 -0
  59. data/src/dom/document.js +1023 -0
  60. data/src/dom/dom.js +134 -0
  61. data/src/dom/element.js +217 -0
  62. data/src/dom/entities.js +273 -0
  63. data/src/dom/exception.js +28 -0
  64. data/src/dom/fragment.js +37 -0
  65. data/src/dom/implementation.js +140 -0
  66. data/src/dom/instruction.js +51 -0
  67. data/src/dom/namednodemap.js +374 -0
  68. data/src/dom/namespace.js +50 -0
  69. data/src/dom/node.js +618 -0
  70. data/src/dom/nodelist.js +195 -0
  71. data/src/dom/parser.js +1207 -0
  72. data/src/dom/text.js +73 -0
  73. data/src/event/event.js +47 -0
  74. data/src/event/mouseevent.js +4 -0
  75. data/src/event/uievent.js +8 -0
  76. data/src/html/a.js +110 -0
  77. data/src/html/anchor.js +80 -0
  78. data/src/html/area.js +57 -0
  79. data/src/html/base.js +26 -0
  80. data/src/html/blockquote-q.js +19 -0
  81. data/src/html/body.js +19 -0
  82. data/src/html/button.js +21 -0
  83. data/src/html/canvas.js +14 -0
  84. data/src/html/col-colgroup.js +49 -0
  85. data/src/html/collection.js +72 -0
  86. data/src/html/cookie.js +153 -0
  87. data/src/html/del-ins.js +25 -0
  88. data/src/html/div.js +28 -0
  89. data/src/html/document.js +364 -0
  90. data/src/html/element.js +382 -0
  91. data/src/html/fieldset.js +19 -0
  92. data/src/html/form.js +484 -0
  93. data/src/html/frame.js +89 -0
  94. data/src/html/frameset.js +25 -0
  95. data/src/html/head.js +44 -0
  96. data/src/html/html.js +0 -0
  97. data/src/html/htmlparser.js +340 -0
  98. data/src/html/iframe.js +26 -0
  99. data/src/html/image.js +0 -0
  100. data/src/html/img.js +62 -0
  101. data/src/html/input-elements.js +307 -0
  102. data/src/html/input.js +65 -0
  103. data/src/html/label.js +26 -0
  104. data/src/html/legend.js +19 -0
  105. data/src/html/link.js +82 -0
  106. data/src/html/map.js +22 -0
  107. data/src/html/meta.js +37 -0
  108. data/src/html/object.js +89 -0
  109. data/src/html/optgroup.js +25 -0
  110. data/src/html/option.js +103 -0
  111. data/src/html/param.js +38 -0
  112. data/src/html/script.js +122 -0
  113. data/src/html/select.js +132 -0
  114. data/src/html/style.js +31 -0
  115. data/src/html/table.js +199 -0
  116. data/src/html/tbody-thead-tfoot.js +92 -0
  117. data/src/html/td-th.js +18 -0
  118. data/src/html/textarea.js +31 -0
  119. data/src/html/title.js +20 -0
  120. data/src/html/tr.js +114 -0
  121. data/src/intro.js +141 -0
  122. data/src/outro.js +70 -0
  123. data/src/parser/html5.detailed.js +10762 -0
  124. data/src/parser/html5.min.js +503 -0
  125. data/src/parser/html5.pretty.js +10815 -0
  126. data/src/parser/intro.js +42 -0
  127. data/src/parser/outro.js +9 -0
  128. data/src/platform/core.js +323 -0
  129. data/src/platform/johnson.js +484 -0
  130. data/src/platform/rhino.js +327 -0
  131. data/src/platform/static/intro.js +41 -0
  132. data/src/platform/static/outro.js +30 -0
  133. data/src/profile/aop.js +238 -0
  134. data/src/profile/profile.js +402 -0
  135. data/src/serializer/xml.js +21 -0
  136. data/src/svg/animatedstring.js +25 -0
  137. data/src/svg/document.js +25 -0
  138. data/src/svg/element.js +22 -0
  139. data/src/svg/locatable.js +17 -0
  140. data/src/svg/rect.js +18 -0
  141. data/src/svg/rectelement.js +24 -0
  142. data/src/svg/stylable.js +49 -0
  143. data/src/svg/svgelement.js +22 -0
  144. data/src/svg/transformable.js +15 -0
  145. data/src/window/css.js +15 -0
  146. data/src/window/dialog.js +16 -0
  147. data/src/window/document.js +28 -0
  148. data/src/window/event.js +265 -0
  149. data/src/window/history.js +62 -0
  150. data/src/window/location.js +156 -0
  151. data/src/window/navigator.js +48 -0
  152. data/src/window/screen.js +53 -0
  153. data/src/window/timer.js +21 -0
  154. data/src/window/window.js +284 -0
  155. data/src/window/xhr.js +135 -0
  156. data/src/xpath/expression.js +49 -0
  157. data/src/xpath/implementation.js +2505 -0
  158. data/src/xpath/result.js +67 -0
  159. data/src/xpath/util.js +551 -0
  160. data/src/xpath/xmltoken.js +149 -0
  161. data/src/xslt/COPYING +34 -0
  162. data/src/xslt/ajaxslt-0.8.1/AUTHORS +1 -0
  163. data/src/xslt/ajaxslt-0.8.1/ChangeLog +136 -0
  164. data/src/xslt/ajaxslt-0.8.1/Makefile +49 -0
  165. data/src/xslt/ajaxslt-0.8.1/README +102 -0
  166. data/src/xslt/ajaxslt-0.8.1/TODO +15 -0
  167. data/src/xslt/ajaxslt-0.8.1/dom.js +566 -0
  168. data/src/xslt/ajaxslt-0.8.1/dom_unittest.html +24 -0
  169. data/src/xslt/ajaxslt-0.8.1/dom_unittest.js +131 -0
  170. data/src/xslt/ajaxslt-0.8.1/simplelog.js +79 -0
  171. data/src/xslt/ajaxslt-0.8.1/test/xpath.html +18 -0
  172. data/src/xslt/ajaxslt-0.8.1/test/xpath_script.js +45 -0
  173. data/src/xslt/ajaxslt-0.8.1/test/xslt.html +58 -0
  174. data/src/xslt/ajaxslt-0.8.1/test/xslt_script.js +33 -0
  175. data/src/xslt/ajaxslt-0.8.1/unittestsuite.html +26 -0
  176. data/src/xslt/ajaxslt-0.8.1/xmltoken.js +149 -0
  177. data/src/xslt/ajaxslt-0.8.1/xmltoken_unittest.html +18 -0
  178. data/src/xslt/ajaxslt-0.8.1/xmltoken_unittest.js +811 -0
  179. data/src/xslt/ajaxslt-0.8.1/xpath_unittest.html +39 -0
  180. data/src/xslt/ajaxslt-0.8.1/xpath_unittest.js +557 -0
  181. data/src/xslt/ajaxslt-0.8.1/xpathdebug.js +234 -0
  182. data/src/xslt/ajaxslt-0.8.1/xslt_unittest.html +138 -0
  183. data/src/xslt/ajaxslt-0.8.1/xslt_unittest.js +68 -0
  184. data/src/xslt/implementation.js +625 -0
  185. data/src/xslt/processor.js +37 -0
  186. data/src/xslt/util.js +449 -0
  187. data/test/base64.js +80 -0
  188. data/test/call-load-test.js +15 -0
  189. data/test/data.js +45 -0
  190. data/test/debug.js +53 -0
  191. data/test/firebug/errorIcon.png +0 -0
  192. data/test/firebug/firebug.css +209 -0
  193. data/test/firebug/firebug.html +23 -0
  194. data/test/firebug/firebug.js +672 -0
  195. data/test/firebug/firebugx.js +10 -0
  196. data/test/firebug/infoIcon.png +0 -0
  197. data/test/firebug/warningIcon.png +0 -0
  198. data/test/fixtures/html/events.html +171 -0
  199. data/test/fixtures/html/iframe1.html +46 -0
  200. data/test/fixtures/html/iframe1a.html +46 -0
  201. data/test/fixtures/html/iframe2.html +45 -0
  202. data/test/fixtures/html/iframe3.html +28 -0
  203. data/test/fixtures/html/iframeN.html +57 -0
  204. data/test/fixtures/html/malformed.html +181 -0
  205. data/test/fixtures/html/scope.html +81 -0
  206. data/test/fixtures/html/trivial.html +19 -0
  207. data/test/fixtures/html/with_js.html +26 -0
  208. data/test/fixtures/images/icon-blue.png +0 -0
  209. data/test/fixtures/js/external_script.js +1 -0
  210. data/test/fixtures/js/script.js +1 -0
  211. data/test/fixtures/js/script_error.js +2 -0
  212. data/test/foo.html +8 -0
  213. data/test/foo.js +40 -0
  214. data/test/html/events.html +171 -0
  215. data/test/html/iframe1.html +46 -0
  216. data/test/html/iframe1a.html +46 -0
  217. data/test/html/iframe2.html +45 -0
  218. data/test/html/iframe3.html +30 -0
  219. data/test/html/iframeN.html +57 -0
  220. data/test/html/malformed.html +181 -0
  221. data/test/html/scope.html +87 -0
  222. data/test/html/script.js +1 -0
  223. data/test/html/trivial.html +19 -0
  224. data/test/html/with_js.html +26 -0
  225. data/test/index.html +328 -0
  226. data/test/java-prototype.js +9 -0
  227. data/test/jquery.js +6002 -0
  228. data/test/primary-tests.js +26 -0
  229. data/test/prototype-test.js +13 -0
  230. data/test/qunit.js +61 -0
  231. data/test/qunit/qunit/qunit.css +17 -0
  232. data/test/qunit/qunit/qunit.js +997 -0
  233. data/test/scope.html +19 -0
  234. data/test/scope.rb +24 -0
  235. data/test/smp/dmathieu/index.html +8 -0
  236. data/test/specs/dist/env.spec.js +1534 -0
  237. data/test/specs/envjs.spec.css +46 -0
  238. data/test/specs/parser/html.js +31 -0
  239. data/test/specs/parser/spec.html +40 -0
  240. data/test/specs/parser/xml.js +31 -0
  241. data/test/specs/qunit.bdd.js +210 -0
  242. data/test/specs/qunit.css +17 -0
  243. data/test/specs/qunit.js +997 -0
  244. data/test/specs/template/spec-0.js +31 -0
  245. data/test/specs/template/spec-1.js +31 -0
  246. data/test/specs/template/spec.html +40 -0
  247. data/test/specs/window/css.js +23 -0
  248. data/test/specs/window/dialog.js +25 -0
  249. data/test/specs/window/document.js +23 -0
  250. data/test/specs/window/event.js +25 -0
  251. data/test/specs/window/history.js +34 -0
  252. data/test/specs/window/location.js +34 -0
  253. data/test/specs/window/navigator.js +71 -0
  254. data/test/specs/window/screen.js +42 -0
  255. data/test/specs/window/spec.html +48 -0
  256. data/test/specs/window/timer.js +26 -0
  257. data/test/specs/window/window.js +53 -0
  258. data/test/specs/xhr/spec.html +47 -0
  259. data/test/specs/xhr/xhr.js +31 -0
  260. data/test/test.js +10 -0
  261. data/test/unit/dom.js +44 -0
  262. data/test/unit/elementmembers.js +92 -0
  263. data/test/unit/events.js +195 -0
  264. data/test/unit/fixtures/external_script.js +1 -0
  265. data/test/unit/form.js +40 -0
  266. data/test/unit/iframe.js +234 -0
  267. data/test/unit/insertion.js +23 -0
  268. data/test/unit/multi-window.js +212 -0
  269. data/test/unit/nu.validator.js +34 -0
  270. data/test/unit/onload.js +90 -0
  271. data/test/unit/parser.js +122 -0
  272. data/test/unit/prototypecompat.js +22 -0
  273. data/test/unit/proxy.js +6 -0
  274. data/test/unit/scope.js +209 -0
  275. data/test/unit/timer.js +115 -0
  276. data/test/unit/window.js +57 -0
  277. data/test/x.js +1 -0
  278. data/test/y.js +1 -0
  279. metadata +367 -0
@@ -0,0 +1,25 @@
1
+ $debug("Defining SVGDocument");
2
+ /*
3
+ * SVGDocument - DOM Level 2
4
+ */
5
+ /**
6
+ * @class SVGDocument - The Document interface represents the entire SVG or XML document.
7
+ * Conceptually, it is the root of the document tree, and provides the primary access to the document's data.
8
+ *
9
+ * @extends DOMDocument
10
+ */
11
+ var SVGDocument = function() {
12
+ throw new Error("SVGDocument() not implemented");
13
+ };
14
+ SVGDocument.prototype = new DOMDocument();
15
+ __extend__(SVGDocument.prototype, {
16
+ createElement: function(tagName){
17
+ $debug("SVGDocument.createElement( "+tagName+" )");
18
+ var node;
19
+ if(tagName === "rect") {node = new SVGRectElement(this);}
20
+ else {node = new SVGSVGElement(this);}
21
+ node.tagName = tagName;
22
+ return node;
23
+ }});
24
+
25
+ // $w.SVGDocument = SVGDocument;
@@ -0,0 +1,22 @@
1
+ $debug("Defining SVGElement");
2
+ /*
3
+ * SVGElement - DOM Level 2
4
+ */
5
+ var SVGElement = function(ownerDocument,name) {
6
+ DOMElement.apply(this,arguments);
7
+ };
8
+
9
+ SVGElement.prototype = new DOMElement();
10
+ __extend__(SVGElement.prototype, {
11
+ toString : function(){
12
+ return "SVGElement #"+this._id + " "+ this.tagName + (this.id?" => "+this.id:'');
13
+ }
14
+ });
15
+
16
+ // $w.SVGElement = SVGElement;
17
+
18
+ // Local Variables:
19
+ // espresso-indent-level:4
20
+ // c-basic-offset:4
21
+ // tab-width:4
22
+ // End:
@@ -0,0 +1,17 @@
1
+ $debug("Defining SVGLocatable");
2
+ var SVGLocatable = function() {
3
+ };
4
+ SVGLocatable.prototype = {};
5
+ __extend__(SVGLocatable.prototype, {
6
+ getBBox: function() {
7
+ return new SVGRect(0,0,1,1);
8
+ }
9
+ });
10
+
11
+ // $w.SVGLocatable = SVGLocatable;
12
+
13
+ // Local Variables:
14
+ // espresso-indent-level:4
15
+ // c-basic-offset:4
16
+ // tab-width:4
17
+ // End:
data/src/svg/rect.js ADDED
@@ -0,0 +1,18 @@
1
+ $debug("Defining SVGRect");
2
+ var SVGRect = function(x,y,width,height) {
3
+ this.x = x;
4
+ this.y = y;
5
+ this.width = width;
6
+ this.height = height;
7
+ };
8
+ SVGRect.prototype = {};
9
+ __extend__(SVGRect.prototype, {
10
+ });
11
+
12
+ // $w.SVGRect = SVGRect;
13
+
14
+ // Local Variables:
15
+ // espresso-indent-level:4
16
+ // c-basic-offset:4
17
+ // tab-width:4
18
+ // End:
@@ -0,0 +1,24 @@
1
+ $debug("Defining SVGRectElement");
2
+ /*
3
+ * SVGRectElement - DOM Level 2
4
+ */
5
+ var SVGRectElement = function(ownerDocument) {
6
+ SVGElement.apply(this,arguments);
7
+ SVGStylable.apply(this,arguments);
8
+ SVGTransformable.apply(this,arguments);
9
+ };
10
+
11
+ SVGRectElement.prototype = new SVGElement;
12
+ __extend__(SVGRectElement.prototype, SVGStylable.prototype );
13
+ __extend__(SVGRectElement.prototype, SVGTransformable.prototype );
14
+ __extend__(SVGRectElement.prototype, {
15
+ });
16
+ SVGRectElement.prototype.constructor = SVGRectElement;
17
+
18
+ // $w.SVGRectElement = SVGRectElement;
19
+
20
+ // Local Variables:
21
+ // espresso-indent-level:4
22
+ // c-basic-offset:4
23
+ // tab-width:4
24
+ // End:
@@ -0,0 +1,49 @@
1
+ $debug("Defining SVGStylable");
2
+ /*
3
+ * SVGStylable - DOM Level 2
4
+ */
5
+ var SVGStylable = function(ownerDocument,name) {
6
+ var self = this;
7
+ (this.__className__ = new SVGAnimatedString).__callback__ = function(v) {
8
+ SVGElement.prototype.setAttribute.call(self,"class",v);
9
+ };
10
+ };
11
+
12
+ SVGStylable.prototype = {};
13
+ __extend__(SVGStylable.prototype, {
14
+ setAttribute: function(k,v) {
15
+ if(k === "class") {
16
+ this.__className__.__baseVal__ = v;
17
+ }
18
+ SVGElement.prototype.setAttribute.apply(this,arguments);
19
+ },
20
+ removeAttribute: function(k) {
21
+ if(k === "class") {
22
+ this.__className__.baseVal = "";
23
+ }
24
+ SVGElement.prototype.removeAttribute.apply(this,arguments);
25
+ },
26
+ setAttributeNS: function(ns,k,v) {
27
+ if(k === "class") {
28
+ this.__className__.__baseVal__ = v;
29
+ }
30
+ SVGElement.prototype.setAttributeNS.apply(this,arguments);
31
+ },
32
+ removeAttributeNS: function(ns,k) {
33
+ if(k === "class") {
34
+ this.__className__.baseVal = "";
35
+ }
36
+ SVGElement.prototype.removeAttributeNS.apply(this,arguments);
37
+ },
38
+ get className() {
39
+ return this.__className__;
40
+ }
41
+ });
42
+
43
+ // $w.SVGStylable = SVGStylable;
44
+
45
+ // Local Variables:
46
+ // espresso-indent-level:4
47
+ // c-basic-offset:4
48
+ // tab-width:4
49
+ // End:
@@ -0,0 +1,22 @@
1
+ $debug("Defining SVGSVGElement");
2
+ /*
3
+ * SVGSVGElement - DOM Level 2
4
+ */
5
+ var SVGSVGElement = function(ownerDocument) {
6
+ SVGElement.apply(this,arguments);
7
+ SVGStylable.apply(this,arguments);
8
+ };
9
+
10
+ SVGSVGElement.prototype = new SVGElement;
11
+ __extend__(SVGSVGElement.prototype, SVGStylable.prototype );
12
+ __extend__(SVGSVGElement.prototype, {
13
+ });
14
+ SVGSVGElement.prototype.constructor = SVGSVGElement;
15
+
16
+ // $w.SVGSVGElement = SVGSVGElement;
17
+
18
+ // Local Variables:
19
+ // espresso-indent-level:4
20
+ // c-basic-offset:4
21
+ // tab-width:4
22
+ // End:
@@ -0,0 +1,15 @@
1
+ $debug("Defining SVGTransformable");
2
+ var SVGTransformable = function() {
3
+ SVGLocatable.apply(this,arguments);
4
+ };
5
+ SVGTransformable.prototype = new SVGLocatable;
6
+ __extend__(SVGLocatable.prototype, {
7
+ });
8
+
9
+ // $w.SVGTransformable = SVGTransformable;
10
+
11
+ // Local Variables:
12
+ // espresso-indent-level:4
13
+ // c-basic-offset:4
14
+ // tab-width:4
15
+ // End:
data/src/window/css.js ADDED
@@ -0,0 +1,15 @@
1
+ /*
2
+ * css.js
3
+ */
4
+ $debug("Initializing Window CSS");
5
+ // returns a CSS2Properties object that represents the style
6
+ // attributes and values used to render the specified element in this
7
+ // window. Any length values are always expressed in pixel, or
8
+ // absolute values.
9
+
10
+ $w.getComputedStyle = function(elt, pseudo_elt){
11
+ //TODO
12
+ //this is a naive implementation
13
+ $debug("Getting computed style");
14
+ return elt?elt.style:new CSS2Properties({cssText:""});
15
+ };
@@ -0,0 +1,16 @@
1
+ /*
2
+ * dialog.js
3
+ */
4
+ $debug("Initializing Window Dialogs.");
5
+ $w.alert = function(message){
6
+ $env.warn(message);
7
+ };
8
+
9
+ $w.confirm = function(question){
10
+ //FIX (?)
11
+ return true;
12
+ };
13
+
14
+ $w.prompt = function(message, defaultMsg){
15
+ //TODO
16
+ };
@@ -0,0 +1,28 @@
1
+ /*
2
+ * document.js
3
+ *
4
+ * DOM Level 2 /DOM level 3 (partial)
5
+ *
6
+ * This file adds the document object to the window and allows you
7
+ * you to set the window.document using an html string or dom object.
8
+ *
9
+ */
10
+
11
+ $debug("Initializing document.implementation");
12
+ var $implementation = new DOMImplementation();
13
+ // $implementation.namespaceAware = false;
14
+ $implementation.errorChecking = false;
15
+
16
+ // read only reference to the Document object
17
+ var $document;
18
+ { // a temporary scope, nothing more
19
+ var referrer = "";
20
+ try {
21
+ referrer = $openingWindow.location.href;
22
+ } catch (e){ /* or not */ }
23
+ $document = new HTMLDocument($implementation, $w, referrer);
24
+ }
25
+
26
+ $w.__defineGetter__("document", function(){
27
+ return $document;
28
+ });
@@ -0,0 +1,265 @@
1
+ /*
2
+ * event.js
3
+ */
4
+ // Window Events
5
+ //$debug("Initializing Window Event.");
6
+ var $events = [{}],
7
+ $onerror,
8
+ $onload,
9
+ $onunload;
10
+
11
+ function __addEventListener__(target, type, fn){
12
+
13
+ //$debug("adding event listener \n\t" + type +" \n\tfor "+target+" with callback \n\t"+fn);
14
+ if ( !target.uuid ) {
15
+ target.uuid = $events.length;
16
+ $events[target.uuid] = {};
17
+ }
18
+ if ( !$events[target.uuid][type] ){
19
+ $events[target.uuid][type] = [];
20
+ }
21
+ if ( $events[target.uuid][type].indexOf( fn ) < 0 ){
22
+ $events[target.uuid][type].push( fn );
23
+ }
24
+ };
25
+
26
+
27
+ $w.addEventListener = function(type, fn){
28
+ __addEventListener__(this, type, fn);
29
+ };
30
+
31
+
32
+ function __removeEventListener__(target, type, fn){
33
+ if ( !target.uuid ) {
34
+ target.uuid = $events.length;
35
+ $events[target.uuid] = {};
36
+ }
37
+ if (!$events[target.uiid]) {
38
+ return;
39
+ }
40
+ if ( !$events[target.uuid][type] ){
41
+ $events[target.uuid][type] = [];
42
+ }
43
+ $events[target.uuid][type] =
44
+ $events[target.uuid][type].filter(function(f){
45
+ return f != fn;
46
+ });
47
+ };
48
+
49
+ $w.removeEventListener = function(type, fn){
50
+ __removeEventListener__(this, type, fn)
51
+ };
52
+
53
+ function __dispatchEvent__(target, event, bubbles){
54
+ try{
55
+ $debug("dispatching event " + event.type);
56
+
57
+ //the window scope defines the $event object, for IE(^^^) compatibility;
58
+ $event = event;
59
+
60
+ if (bubbles == undefined || bubbles == null)
61
+ bubbles = true;
62
+
63
+ if (!event.target) {
64
+ //$debug("no event target : "+event.target);
65
+ event.target = target;
66
+ }
67
+ //$debug("event target: " + event.target);
68
+ var handled = false;
69
+ if ( event.type && (target.nodeType ||
70
+ target.window === window || // compares outer objects under TM (inner == outer, but !== (currently)
71
+ target === window ||
72
+ target.__proto__ === window ||
73
+ target.$thisWindowsProxyObject === window)) {
74
+ //$debug("nodeType: " + target.nodeType);
75
+ if ( target.uuid && $events[target.uuid][event.type] ) {
76
+ var _this = target;
77
+ $debug('calling event handlers '+$events[target.uuid][event.type].length);
78
+ $events[target.uuid][event.type].forEach(function(fn){
79
+ $debug('calling event handler '+fn+' on target '+_this);
80
+ handled = (fn(event) == false) || handled;
81
+ });
82
+ }
83
+
84
+ if (target["on" + event.type]) {
85
+ $debug('calling event handler on'+event.type+' on target '+target);
86
+ handled = (target["on" + event.type](event) == false) || handled;
87
+ }
88
+
89
+ // SMP FIX: cancel/stop prop
90
+ if (!handled && event.$preventDefault) {
91
+ handled = true;
92
+ }
93
+
94
+ // print(event.type,target,handled);
95
+
96
+ if (!handled && event.type == "click" && target instanceof HTMLAnchorElement && target.href ) {
97
+ // window.location = target.href;
98
+
99
+ var url = target.href;
100
+
101
+ var skip = false;
102
+
103
+ if (url[0] === "#") {
104
+ window.location.hash = url;
105
+ // print("return anchor only: "+window.location);
106
+ skip = true;
107
+ }
108
+
109
+ if (!skip) {
110
+ var now = window.location.href.replace(/^file:\/\//,"").replace(/#.*/,"");
111
+ var to = $master.first_script_window && $master.first_script_window.location.href;
112
+ // var to = $env.location(url,window.location.href != "about:blank" ? window.location.href: undefined);
113
+ // I'm not sure why this code is here ... looking at the FSW
114
+ // print("nu",now,url,to);
115
+ to = to || $env.location(url,window.location.href);
116
+ // print("nu",now,url,to);
117
+ if (to && to.indexOf(now)===0 && to[now.length]==="#") {
118
+ skip = true;
119
+ }
120
+ }
121
+ if (!skip) {
122
+ if (url && url.indexOf(now)===0 && url[now.length]==="#") {
123
+ // print("return diff anchor only");
124
+ skip = true;
125
+ }
126
+ }
127
+ if (!skip) {
128
+ // print($location, window.location.href === $location, $location.indexOf("#")>0);
129
+ if (url === window.location.href && $location.indexOf("#")>0) {
130
+ // print('returning same with anchor');
131
+ skip = true;
132
+ }
133
+ }
134
+
135
+ if (!skip){
136
+ $env.reload(window, target.href, {referer: window.location.href});
137
+ }
138
+ }
139
+
140
+ if (!handled && event.type == "click" &&
141
+ target.form &&
142
+ ( target instanceof HTMLInputElement || target instanceof HTMLTypeValueInputs ) &&
143
+ ( ( target.tagName === "INPUT" &&
144
+ (target.type === "submit" ||
145
+ target.type === "image" ) ) ||
146
+ ( target.tagName === "BUTTON" &&
147
+ ( !target.type ||
148
+ target.type === "submit" ) ) ) ) {
149
+ target.form.clk = target;
150
+ try{
151
+ target.form.submit();
152
+ // __submit__(target.form);
153
+ }catch(e){
154
+ print("oopse",e);
155
+ print(e.stack);
156
+ e.backtrace && print(e.backtrace().join("\n"));
157
+ throw e;
158
+ };
159
+ delete target.form.clk;
160
+ }
161
+
162
+ // print(event.type,target.type,target.constructor+"");
163
+ // print("A",handled,event.type,target,target.type);
164
+ if (!handled && event.type == "click" && target instanceof HTMLInputElement && ( target.type == "checkbox" || target.type == "radio" ) ) {
165
+ target.checked = target.checked ? "" : "checked";
166
+ }
167
+
168
+ if (!handled && (event.type == "submit") && target instanceof HTMLFormElement) {
169
+ $env.unload($w);
170
+ var proxy = $w.window;
171
+ var data;
172
+ var boundary;
173
+ if (target.enctype === "multipart/form-data") {
174
+ boundary = (new Date).getTime();
175
+ }
176
+ data = $master["static"].__formSerialize__(target,undefined,boundary);
177
+ var options = {method: target.method || "get", referer: this.location.href};
178
+ if (options.method.toLowerCase() === "post" || options.method.toLowerCase() === "put") {
179
+ options.data = data;
180
+ var undef;
181
+ data = undef;
182
+ }
183
+ if (boundary) {
184
+ options["Content-Type"] = "multipart/form-data; boundary="+boundary;
185
+ } else {
186
+ options["Content-Type"] = 'application/x-www-form-urlencoded';
187
+ }
188
+ var action = target.action || window.location.href;
189
+ if (data) {
190
+ if (action.indexOf("?") < 0) {
191
+ action = action + "?";
192
+ }
193
+ if (action[action.length-1] != "?") {
194
+ action = action + "&";
195
+ }
196
+ var params = unescape(data).split("&");
197
+ var new_params = [];
198
+ for(var pi=0; pi < params.length; pi++) {
199
+ var pair = params[pi].split("=");
200
+ new_params.push(escape(pair[0])+"="+escape(pair[1]));
201
+ }
202
+ action = action + new_params.join("&");
203
+ }
204
+ $env.reload(proxy, action, options );
205
+ }
206
+
207
+ }else{
208
+ //$debug("non target: " + event.target + " \n this->"+target);
209
+ }
210
+ if (!handled && bubbles && target.parentNode){
211
+ //$debug('bubbling to parentNode '+target.parentNode);
212
+ __dispatchEvent__(target.parentNode, event, bubbles);
213
+ }
214
+ }catch(e){
215
+ $warn("Exception while dispatching events: "+e);
216
+ // print("oops e",e.stack);
217
+ // print("oops e",e.backtrace && e.backtrace().join("\n"));
218
+ // try { throw new Error("here"); } catch(x) { print("oops e",x.stack); }
219
+ throw e;
220
+ }
221
+ };
222
+
223
+ $env.__removeEventListener__ = __removeEventListener__;
224
+ $env.__addEventListener__ = __addEventListener__;
225
+ $env.__dispatchEvent__ = __dispatchEvent__;
226
+
227
+ $w.dispatchEvent = function(event, bubbles){
228
+ __dispatchEvent__(this, event, bubbles);
229
+ };
230
+
231
+ $w.__defineGetter__('onerror', function(){
232
+ return $onerror;
233
+ });
234
+
235
+ $w.__defineSetter__('onerror', function(fn){
236
+ return $onerror = fn;
237
+ });
238
+
239
+ /*$w.__defineGetter__('onload', function(){
240
+ return function(){
241
+ //var event = document.createEvent();
242
+ //event.initEvent("load");
243
+ //$w.dispatchEvent(event);
244
+ };
245
+ });
246
+
247
+ $w.__defineSetter__('onload', function(fn){
248
+ //$w.addEventListener('load', fn);
249
+ });
250
+
251
+ $w.__defineGetter__('onunload', function(){
252
+ return function(){
253
+ //$w.dispatchEvent('unload');
254
+ };
255
+ });
256
+
257
+ $w.__defineSetter__('onunload', function(fn){
258
+ //$w.addEventListener('unload', fn);
259
+ });*/
260
+
261
+ // Local Variables:
262
+ // espresso-indent-level:4
263
+ // c-basic-offset:4
264
+ // tab-width:4
265
+ // End: