envjs19 0.3.8.20101029121421

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 (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
data/README.rdoc ADDED
@@ -0,0 +1,65 @@
1
+ = THIS FORK OF ENV.JS IS MOTHBALLED
2
+
3
+ The Johnson fork of env.js is pretty much mothballed (which is already pretty much true of Johnson, given the rise of v8
4
+ and the difficulty moving Johnson to 1.9.*). The current best practices seem to be based on a headless webkit.
5
+
6
+ = env.js
7
+
8
+ * http://github.com/smparkes/env-js
9
+ * http://groups.google.com/group/envjs
10
+ * #envjs @ freenode
11
+
12
+ == Description
13
+
14
+ A browser environment for javascript interpreters.
15
+
16
+ This is a fork of the env.js project (http://github.com/thatcher/env-js/). See that link for env.js details.
17
+ This fork is based on the Johnson Ruby gem
18
+ (http://github.com/jbarnette/johnson).
19
+
20
+ == Installation
21
+
22
+ For now, you can install the envjs gem by installing Johnson:
23
+
24
+ gem install johnson --prerelease
25
+
26
+ and then installing the envjs gem with
27
+
28
+ gem install envjs
29
+
30
+ == Using envjs interactively
31
+
32
+ The envjs gem provides the envjsrb command, which functions as an extended version of the Johnson javascript shell. For example:
33
+
34
+ mbp:env-js smparkes$ envjsrb
35
+ js> this
36
+ => [object Window 0]
37
+ js> window.location
38
+ => about:blank
39
+ js> document.innerHTML
40
+ => "<html><head><title></title></head><body></body></html>"
41
+ js>
42
+
43
+ == Embedding envjs
44
+
45
+ It's also possible to embed the envjs interpreter similar to the way it's done in Johnson, e.g.,
46
+
47
+ require 'rubygems' # if necessary
48
+ require 'johnson/tracemonkey'
49
+ require 'envjs/runtime'
50
+
51
+ envjs = Johnson::Runtime.new
52
+ envjs.extend Envjs::Runtime
53
+ window = envjs.evaluate("window")
54
+ puts window.location.to_s # == "about:blank"
55
+ puts window.document.innerHTML # == "<html><head><title></title></head><body></body></html>"
56
+ envjs.wait
57
+
58
+ You need the Runtime#wait at the end to give env.js's event loop a chance to execute queued events and timers. You may need to do this at other times as well, depending on the asynchronous nature of your application.
59
+
60
+ == License
61
+
62
+ See
63
+ http://github.com/smparkes/env-js/blob/envjsrb/licenses/MIT-LICENSE.txt
64
+ and
65
+ http://github.com/smparkes/env-js/blob/envjsrb/licenses/GPL-LICENSE.txt.
data/Rakefile ADDED
@@ -0,0 +1,196 @@
1
+ require 'rubygems'
2
+
3
+ gem 'hoe', '>= 2.5'
4
+ require 'hoe'
5
+
6
+ Hoe.plugin :debugging, :doofus, :git, :gemspec
7
+ Hoe.plugins.delete :rubyforge
8
+
9
+ Hoe.spec "envjs" do
10
+
11
+ developer 'John Resig', 'jeresig@gmail.com'
12
+ developer 'Chris Thatcher', 'thatcher.christopher@gmail.com'
13
+ developer 'Steven Parkes', 'smparkes@smparkes.net'
14
+
15
+ self.readme_file = 'README.rdoc'
16
+ self.extra_rdoc_files = Dir['*.rdoc']
17
+ self.history_file = "CHANGELOG.rdoc"
18
+ self.readme_file = "README.rdoc"
19
+
20
+ self.extra_deps = [
21
+ ['johnson', '>= 2.0.0.pre3']
22
+ ]
23
+
24
+ end
25
+
26
+ # task :test => :check_dependencies
27
+
28
+ namespace :gemspec do
29
+ task :generate => "johnson:compile"
30
+ end
31
+
32
+ task :default => :test
33
+
34
+ namespace :rhino do
35
+ desc "run tests aginst rhino"
36
+ task :test do
37
+ classpath = [
38
+ File.join(".", "rhino", "ant.jar"),
39
+ File.join(".", "rhino", "ant-launcher.jar")
40
+ ].join(File::PATH_SEPARATOR)
41
+ exec "java -cp #{classpath} org.apache.tools.ant.Main -emacs all"
42
+ end
43
+ end
44
+
45
+ namespace :johnson do
46
+
47
+ desc "create a file that loads the individual source files"
48
+ task :load
49
+
50
+ desc "compile johnson files into a single js file"
51
+ task :compile do
52
+ require 'rexml/document'
53
+ include REXML
54
+ doc = Document.new( File.new( "build.xml" ) ).root
55
+ groups = {}
56
+ XPath.each( doc, "//concat" ) do |concat|
57
+ name = concat.attributes["destfile"]
58
+ files =
59
+ XPath.match( concat, "fileset/attribute::includes" ).
60
+ map { |a| a.value }
61
+ groups[name] = files
62
+ end
63
+
64
+ files = groups["${ENV_RHINO}"];
65
+ files.map! { |f| f == "env.js" ? groups["${ENV_DIST}"] : f }.flatten!
66
+ files.map! { |f| f.sub!( "rhino", "johnson" ); "src/" + f }
67
+
68
+ static = [
69
+ "src/platform/static/intro.js",
70
+ "src/base64.js",
71
+ "src/dom/nodelist.js",
72
+ "src/dom/namednodemap.js",
73
+ "src/dom/node.js",
74
+ "src/dom/namespace.js",
75
+ "src/dom/characterdata.js",
76
+ "src/dom/text.js",
77
+ "src/dom/cdatasection.js",
78
+ "src/dom/comment.js",
79
+ "src/dom/doctype.js",
80
+ "src/dom/attr.js",
81
+ "src/dom/element.js",
82
+ "src/dom/exception.js",
83
+ "src/dom/fragment.js",
84
+ "src/dom/instruction.js",
85
+ "src/dom/parser.js",
86
+ "src/dom/entities.js",
87
+ # "src/dom/implementation.js",
88
+ "src/dom/document.js",
89
+ "src/html/html.js",
90
+ "src/html/document.js",
91
+ "src/html/element.js",
92
+ "src/html/collection.js",
93
+ "src/html/input-elements.js",
94
+ "src/html/a.js",
95
+ "src/html/anchor.js",
96
+ "src/html/area.js",
97
+ "src/html/base.js",
98
+ "src/html/blockquote-q.js",
99
+ "src/html/body.js",
100
+ "src/html/button.js",
101
+ "src/html/col-colgroup.js",
102
+ "src/html/del-ins.js",
103
+ "src/html/div.js",
104
+ "src/html/legend.js",
105
+ "src/html/fieldset.js",
106
+ "src/html/form.js",
107
+ "src/html/frame.js",
108
+ "src/html/frameset.js",
109
+ "src/html/head.js",
110
+ "src/html/iframe.js",
111
+ "src/html/img.js",
112
+ "src/html/input.js",
113
+ "src/html/label.js",
114
+ "src/html/link.js",
115
+ "src/html/map.js",
116
+ "src/html/meta.js",
117
+ "src/html/object.js",
118
+ "src/html/optgroup.js",
119
+ "src/html/option.js",
120
+ "src/html/param.js",
121
+ "src/html/script.js",
122
+ "src/html/select.js",
123
+ "src/html/style.js",
124
+ "src/html/table.js",
125
+ "src/html/tbody-thead-tfoot.js",
126
+ "src/html/td-th.js",
127
+ "src/html/textarea.js",
128
+ "src/html/title.js",
129
+ "src/html/tr.js",
130
+ "src/svg/document.js",
131
+ "src/svg/element.js",
132
+ "src/svg/animatedstring.js",
133
+ "src/svg/stylable.js",
134
+ "src/svg/rect.js",
135
+ "src/svg/locatable.js",
136
+ "src/svg/transformable.js",
137
+ "src/svg/svgelement.js",
138
+ "src/svg/rectelement.js",
139
+ "src/parser/intro.js",
140
+ "src/parser/html5.pretty.js",
141
+ "src/parser/outro.js",
142
+ "src/xpath/xmltoken.js",
143
+ "src/xpath/expression.js",
144
+ "src/xpath/result.js",
145
+ "src/xpath/implementation.js",
146
+ "src/xpath/util.js",
147
+ "src/serializer/xml.js",
148
+ "src/event/event.js",
149
+ "src/event/mouseevent.js",
150
+ "src/event/uievent.js",
151
+ "src/css/properties.js",
152
+ "src/css/rule.js",
153
+ "src/css/stylesheet.js",
154
+ "src/html/cookie.js",
155
+ "src/platform/static/outro.js"
156
+ ]
157
+ _static = [
158
+ "src/platform/static/intro.js",
159
+ "src/dom/node.js",
160
+ "src/platform/static/outro.js"
161
+ ]
162
+
163
+ files.reject! { |f| static.include? f }
164
+
165
+ # puts files.join(" ")
166
+
167
+ system "rm -f lib/envjs/env.js"
168
+ system "cat #{files.join(' ')} > lib/envjs/env.js"
169
+ system "chmod 444 lib/envjs/env.js"
170
+
171
+ system "rm -f lib/envjs/static.js.tmp"
172
+ system "cat /dev/null > lib/envjs/static.js.tmp"
173
+ static.each do |f|
174
+ system "cat #{f} >> lib/envjs/static.js.tmp; echo >> lib/envjs/static.js.tmp"
175
+ end
176
+ system "chmod 444 lib/envjs/static.js.tmp"
177
+ system "mv -f lib/envjs/static.js.tmp lib/envjs/static.js"
178
+
179
+ end
180
+
181
+ desc "run tests against johnson"
182
+ task :test => :compile do
183
+ ruby "-Ilib bin/envjsrb test/primary-tests.js"
184
+ ruby "-Ilib bin/envjsrb test/prototype-test.js"
185
+ ruby "-Ilib bin/envjsrb test/call-load-test.js"
186
+ end
187
+
188
+ end
189
+
190
+ desc "run tests on all platforms"
191
+ # task :test => "rhino:test"
192
+ task :test => "johnson:test"
193
+
194
+ # Local Variables:
195
+ # mode:ruby
196
+ # End:
data/Wakefile ADDED
@@ -0,0 +1,11 @@
1
+ # -*- mode: ruby -*-
2
+
3
+ ignore "src/parser/html5*"
4
+
5
+ # jslintrb "src/**/*"
6
+
7
+ watch %r{(^src/.*)\.js$} do
8
+ cmd = "rake johnson:compile"
9
+ puts cmd
10
+ system cmd
11
+ end
data/bin/envjsrb ADDED
@@ -0,0 +1,257 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'pathname'
5
+
6
+ require 'envjs/options'
7
+
8
+ require 'johnson/tracemonkey'
9
+ require 'johnson/cli'
10
+ require 'envjs/runtime'
11
+
12
+ RUNTIME = js = Johnson::Runtime.new
13
+ RUNTIME.extend Envjs::Runtime
14
+
15
+ # RUNTIME.load Envjs::ENVJS
16
+
17
+ EXIT_VERBS = [nil] + %w(exit quit)
18
+
19
+ prepped = false
20
+ ruby_readline = []
21
+ js_readline = []
22
+ local_binding = binding
23
+ mode = nil
24
+
25
+ (class<<self; self; end).send :define_method, :prep do
26
+
27
+ return if prepped
28
+ prepped = true
29
+
30
+ require "readline"
31
+ require "johnson/cli"
32
+
33
+ RUNTIME.evaluate(Johnson::CLI::JS)
34
+
35
+ def copy_history
36
+ new_history = []
37
+ until Readline::HISTORY.empty?
38
+ new_history.push(Readline::HISTORY.pop)
39
+ end
40
+ new_history
41
+ end
42
+
43
+ def paste_history(old_history)
44
+ until old_history.empty?
45
+ Readline::HISTORY << old_history.pop
46
+ end
47
+ end
48
+
49
+ def handle_exit(input)
50
+ return EXIT_VERBS.include?(input)
51
+ end
52
+
53
+ def rescued(&block)
54
+ yield
55
+ rescue Exception => e
56
+ exit if SystemExit === e
57
+
58
+ puts e.message
59
+ puts e.backtrace.reject { |l| l =~ /bin\/johnson/ }
60
+ end
61
+
62
+ def eval_in_js(expression,stream)
63
+ rescued do
64
+ v = RUNTIME.evaluate(expression, "(console)")
65
+ stream.result { "=> " + v.inspect }
66
+ end
67
+ end
68
+
69
+ def eval_in_ruby(expression, bind_to, stream)
70
+ rescued do
71
+ v = eval(expression, bind_to)
72
+ stream.result { "=> " + v.inspect }
73
+ end
74
+ end
75
+
76
+ (class<<self; self; end).send :define_method, :do_loop do |stream|
77
+ # def foo
78
+
79
+ catch "Breakout" do
80
+ loop do
81
+ mode = :js
82
+ input = stream.next("js> ")
83
+ input and input.chomp!
84
+ begin stream.exit(input); throw "Breakout" end if handle_exit(input)
85
+
86
+ if input =~ /^rb\s+(.+)$/
87
+ eval_in_ruby($1, local_binding, stream)
88
+ next
89
+ end
90
+
91
+ if input == "rb"
92
+ js_readline = copy_history
93
+ paste_history(ruby_readline)
94
+
95
+ loop do
96
+ mode = :rb
97
+ # input = Readline.readline("rb> ", true)
98
+ input = stream.next("rb> ")
99
+ begin stream.exit(input); throw "Breakout" end if handle_exit(input)
100
+
101
+ break if input == "js"
102
+
103
+ if input =~ /^js\s+(.+)$/
104
+ eval_in_js($1)
105
+ next
106
+ end
107
+
108
+ eval_in_ruby(input, local_binding, stream)
109
+ end
110
+
111
+ ruby_readline = copy_history
112
+ paste_history(js_readline)
113
+ next
114
+ end
115
+
116
+ eval_in_js(input, stream)
117
+ end
118
+ end
119
+ end
120
+ end
121
+
122
+ if ARGV.length > 0
123
+
124
+ begin
125
+ about_blank = true
126
+ ARGV.each do |file|
127
+
128
+ uri = URI.parse file
129
+
130
+ if uri.scheme == nil
131
+ uri.scheme = "file"
132
+ begin
133
+ uri.path = Pathname.new(uri.path).realpath.to_s
134
+ rescue Errno::ENOENT; end
135
+ uri = URI.parse uri.to_s
136
+ end
137
+
138
+ uri_s = uri.to_s.sub %r(^file:/([^/])), 'file:///\1'
139
+
140
+ if uri.scheme == "about" and uri.opaque == "blank"
141
+ # $stderr.puts "wait before set about"
142
+ RUNTIME.wait
143
+ RUNTIME.evaluate("window.location = 'about:blank'", "(comand line)", 1)
144
+ about_blank = true
145
+ elsif uri.path =~ /\.x?html?$/ || uri.scheme =~ %r(^https?)
146
+ # $stderr.puts "wait before set real" if RUNTIME.evaluate("window.location.href") != "about:blank"
147
+ RUNTIME.wait if RUNTIME.evaluate("window.location.href") != "about:blank"
148
+ # RUNTIME.evaluate("window.location = 'file://#{Pathname.new(file).realpath}'", file, 1)
149
+ RUNTIME.evaluate("window.location = '#{uri_s}'", file, 1)
150
+ about_blank = false
151
+ else
152
+ RUNTIME.top_level_load uri_s
153
+ RUNTIME.load uri_s
154
+ RUNTIME.top_level_load nil
155
+ end
156
+ end
157
+ rescue Johnson::Error => je
158
+ if je.message.match /<SystemExit: exit>/
159
+ exit
160
+ end
161
+ raise je
162
+ end
163
+
164
+ RUNTIME.wait
165
+
166
+ if !$wake_info.empty?
167
+ puts "<wake><![CDATA["
168
+ puts $wake_info.join("\n")
169
+ puts "]]></wake>"
170
+ $stdout.flush
171
+ end
172
+
173
+
174
+ else
175
+
176
+ prep
177
+
178
+ if !(files = Dir[".envjsrbrc",File.join(ENV["HOME"],".envjsrbrc")]).empty?
179
+ file = Class.new do
180
+ def initialize f
181
+ @file = open f
182
+ end
183
+ def next prompt
184
+ @file.gets
185
+ end
186
+ def result &block
187
+ end
188
+ def exit v; end
189
+ end.new files[0]
190
+
191
+ do_loop file
192
+ end
193
+
194
+ options = Johnson::CLI::Options.parse!(ARGV)
195
+
196
+ options.load_paths.each { |d| $LOAD_PATH << d }
197
+ options.paths_to_require.each { |p| RUNTIME.evaluate("Johnson.require('#{p}')") }
198
+ options.files_to_preload.each { |f| RUNTIME.load(f) }
199
+
200
+ unless options.expressions.empty?
201
+ options.expressions.each { |e| RUNTIME.evaluate(e, '-e') }
202
+ exit if options.files_to_evaluate.empty?
203
+ end
204
+
205
+ unless options.files_to_evaluate.empty?
206
+ RUNTIME[:arguments] = options.arguments
207
+
208
+ options.files_to_evaluate.each do |file|
209
+ RUNTIME.load(file)
210
+ end
211
+
212
+ exit
213
+ end
214
+
215
+ reader = Class.new do
216
+ def next prompt
217
+ Readline.readline(prompt, true)
218
+ end
219
+ def result
220
+ puts yield
221
+ end
222
+ def exit v; puts if v.nil?; end
223
+ end.new
224
+
225
+ begin
226
+ open(File.join(ENV["HOME"],".envjsrb.js")) do |f|
227
+ js_readline = f.read.split("\n")
228
+ end
229
+ rescue; end
230
+
231
+ begin
232
+ open(File.join(ENV["HOME"],".envjsrb.ruby")) do |f|
233
+ ruby_readline = f.read.split("\n")
234
+ end
235
+ rescue; end
236
+
237
+ case mode
238
+ when :js; paste_history js_readline
239
+ when :rb; paste_history ruby_readline
240
+ end
241
+
242
+ do_loop reader
243
+
244
+ case mode
245
+ when :js; js_readline = copy_history
246
+ when :rb; ruby_readline = copy_history
247
+ end
248
+
249
+ open(File.join(ENV["HOME"],".envjsrb.js"),"w") do |f|
250
+ f.write js_readline[0..100].join("\n")+"\n"
251
+ end
252
+
253
+ open(File.join(ENV["HOME"],".envjsrb.ruby"),"w") do |f|
254
+ f.write ruby_readline[0..100].join("\n")+"\n"
255
+ end
256
+
257
+ end