mdbe 0.1.0

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 (688) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +53 -0
  4. data/app.rb +182 -0
  5. data/bin/mdbe +5 -0
  6. data/config.ru +2 -0
  7. data/environment.rb +8 -0
  8. data/lib/mdbe.rb +39 -0
  9. data/lib/mdbe/action_controller_debug_patch.rb +12 -0
  10. data/lib/mdbe/code_evaluation.rb +46 -0
  11. data/lib/mdbe/database_views.rb +24 -0
  12. data/lib/mdbe/database_views/abstract_dictionary.rb +69 -0
  13. data/lib/mdbe/database_views/abstract_exception.rb +25 -0
  14. data/lib/mdbe/database_views/array.rb +28 -0
  15. data/lib/mdbe/database_views/boolean.rb +12 -0
  16. data/lib/mdbe/database_views/class.rb +46 -0
  17. data/lib/mdbe/database_views/exception.rb +3 -0
  18. data/lib/mdbe/database_views/execblock.rb +5 -0
  19. data/lib/mdbe/database_views/fixnum.rb +5 -0
  20. data/lib/mdbe/database_views/float.rb +5 -0
  21. data/lib/mdbe/database_views/globals.rb +2 -0
  22. data/lib/mdbe/database_views/gsnmethod.rb +29 -0
  23. data/lib/mdbe/database_views/hash.rb +5 -0
  24. data/lib/mdbe/database_views/maglev_record.rb +42 -0
  25. data/lib/mdbe/database_views/module.rb +103 -0
  26. data/lib/mdbe/database_views/nilclass.rb +5 -0
  27. data/lib/mdbe/database_views/object.rb +80 -0
  28. data/lib/mdbe/database_views/proc.rb +3 -0
  29. data/lib/mdbe/database_views/repository.rb +3 -0
  30. data/lib/mdbe/database_views/ruby_workspace.rb +5 -0
  31. data/lib/mdbe/database_views/smalltalk_classes.rb +34 -0
  32. data/lib/mdbe/database_views/smalltalk_classes.st +60 -0
  33. data/lib/mdbe/database_views/string.rb +31 -0
  34. data/lib/mdbe/database_views/symbol.rb +32 -0
  35. data/lib/mdbe/database_views/system.rb +61 -0
  36. data/lib/mdbe/database_views/thread.rb +101 -0
  37. data/lib/mdbe/debug_server.rb +22 -0
  38. data/lib/mdbe/halt.rb +42 -0
  39. data/lib/mdbe/ruby_workspace.rb +29 -0
  40. data/lib/mdbe/version.rb +3 -0
  41. data/lib/tasks/maglev-database-explorer_tasks.rake +4 -0
  42. data/public/LICENSE +35 -0
  43. data/public/amber/CHANGELOG +65 -0
  44. data/public/amber/LICENSE +22 -0
  45. data/public/amber/Makefile +53 -0
  46. data/public/amber/README.md +30 -0
  47. data/public/amber/bin/amber +3 -0
  48. data/public/amber/bin/amberc +352 -0
  49. data/public/amber/bin/nodecompile.js +33 -0
  50. data/public/amber/bin/server +3 -0
  51. data/public/amber/bin/server.bat +3 -0
  52. data/public/amber/css/amber-normalize.css +468 -0
  53. data/public/amber/css/amber-normalize.less +501 -0
  54. data/public/amber/css/amber.css +539 -0
  55. data/public/amber/css/documentation.css +84 -0
  56. data/public/amber/css/profstef.css +75 -0
  57. data/public/amber/css/style.css +313 -0
  58. data/public/amber/documentation.html +37 -0
  59. data/public/amber/examples/Makefile +23 -0
  60. data/public/amber/examples/README +4 -0
  61. data/public/amber/examples/android/helloamber/AndroidManifest.xml +19 -0
  62. data/public/amber/examples/android/helloamber/HelloAmber.st +13 -0
  63. data/public/amber/examples/android/helloamber/Makefile +56 -0
  64. data/public/amber/examples/android/helloamber/README.md +80 -0
  65. data/public/amber/examples/android/helloamber/ant.properties +17 -0
  66. data/public/amber/examples/android/helloamber/assets/index.html +15 -0
  67. data/public/amber/examples/android/helloamber/assets/jquery-1.7.2.min.js +4 -0
  68. data/public/amber/examples/android/helloamber/build.xml +83 -0
  69. data/public/amber/examples/android/helloamber/local.properties +10 -0
  70. data/public/amber/examples/android/helloamber/proguard-project.txt +20 -0
  71. data/public/amber/examples/android/helloamber/project.properties +14 -0
  72. data/public/amber/examples/android/helloamber/res/layout/main.xml +6 -0
  73. data/public/amber/examples/android/helloamber/res/values/strings.xml +4 -0
  74. data/public/amber/examples/android/helloamber/src/org/amberlang/android/helloamber/HelloAmber.java +59 -0
  75. data/public/amber/examples/myproject/index.html +16 -0
  76. data/public/amber/examples/nodejs/README +9 -0
  77. data/public/amber/examples/nodejs/benchfib/Benchfib.st +124 -0
  78. data/public/amber/examples/nodejs/benchfib/Makefile +8 -0
  79. data/public/amber/examples/nodejs/benchfib/benchfib +1 -0
  80. data/public/amber/examples/nodejs/hello/Hello.st +9 -0
  81. data/public/amber/examples/nodejs/hello/Makefile +8 -0
  82. data/public/amber/examples/nodejs/hello/README +13 -0
  83. data/public/amber/examples/nodejs/hello/hello +1 -0
  84. data/public/amber/examples/nodejs/meta/Makefile +8 -0
  85. data/public/amber/examples/nodejs/meta/MyScript.st +27 -0
  86. data/public/amber/examples/nodejs/meta/meta +1 -0
  87. data/public/amber/examples/nodejs/pystone/Makefile +8 -0
  88. data/public/amber/examples/nodejs/pystone/Pystone.st +306 -0
  89. data/public/amber/examples/nodejs/pystone/pystone +1 -0
  90. data/public/amber/examples/nodejs/trivialserver/Makefile +8 -0
  91. data/public/amber/examples/nodejs/trivialserver/TrivialServer.st +51 -0
  92. data/public/amber/examples/nodejs/trivialserver/trivial +1 -0
  93. data/public/amber/examples/presentation/esug2011/images/asterix.png +0 -0
  94. data/public/amber/examples/presentation/esug2011/images/background_box.png +0 -0
  95. data/public/amber/examples/presentation/esug2011/images/background_header.png +0 -0
  96. data/public/amber/examples/presentation/esug2011/images/balloon.jpg +0 -0
  97. data/public/amber/examples/presentation/esug2011/images/balloon_header.png +0 -0
  98. data/public/amber/examples/presentation/esug2011/images/devices.jpg +0 -0
  99. data/public/amber/examples/presentation/esug2011/images/enyo.png +0 -0
  100. data/public/amber/examples/presentation/esug2011/images/ide_star_wars.png +0 -0
  101. data/public/amber/examples/presentation/esug2011/images/nodejs.png +0 -0
  102. data/public/amber/examples/presentation/esug2011/images/terminal.png +0 -0
  103. data/public/amber/examples/presentation/esug2011/images/webos.png +0 -0
  104. data/public/amber/examples/presentation/fosdem2012/images/amber.png +0 -0
  105. data/public/amber/examples/presentation/fosdem2012/images/ambrhino.jpg +0 -0
  106. data/public/amber/examples/presentation/fosdem2012/images/nodejs.png +0 -0
  107. data/public/amber/examples/presentation/fosdem2012/images/pharo.png +0 -0
  108. data/public/amber/examples/presentation/fosdem2012/images/php.gif +0 -0
  109. data/public/amber/examples/presentation/fosdem2012/images/rails.png +0 -0
  110. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/arrow-next.png +0 -0
  111. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/arrow-prev.png +0 -0
  112. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/closedhand.cur +0 -0
  113. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/openhand.cur +0 -0
  114. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/shadow-top-back.png +0 -0
  115. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/shadow-top-forward.png +0 -0
  116. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/shadow.png +0 -0
  117. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.booklet.1.2.0.css +100 -0
  118. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.booklet.1.2.0.js +1232 -0
  119. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.booklet.1.2.0.min.js +13 -0
  120. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.easing.1.3.js +38 -0
  121. data/public/amber/examples/presentation/index.html +17 -0
  122. data/public/amber/examples/presentation/js/Presentation.deploy.js +1922 -0
  123. data/public/amber/examples/presentation/js/Presentation.js +2712 -0
  124. data/public/amber/examples/presentation/st/Presentation.st +1996 -0
  125. data/public/amber/examples/trysmalltalk/index.html +18 -0
  126. data/public/amber/examples/trysmalltalk/js/TrySmalltalk.deploy.js +837 -0
  127. data/public/amber/examples/trysmalltalk/js/TrySmalltalk.js +1206 -0
  128. data/public/amber/examples/trysmalltalk/st/TrySmalltalk.st +964 -0
  129. data/public/amber/examples/twitterwall/css/twitterwall.css +19 -0
  130. data/public/amber/examples/twitterwall/index.html +35 -0
  131. data/public/amber/examples/twitterwall/js/TwitterWall.deploy.js +116 -0
  132. data/public/amber/examples/twitterwall/js/TwitterWall.js +146 -0
  133. data/public/amber/examples/twitterwall/st/TwitterWall.st +91 -0
  134. data/public/amber/examples/webos/README +11 -0
  135. data/public/amber/examples/webos/eris/DuckQwaq.wav +0 -0
  136. data/public/amber/examples/webos/eris/EnyoAmber.st +36 -0
  137. data/public/amber/examples/webos/eris/Eris.css +0 -0
  138. data/public/amber/examples/webos/eris/Eris.st +86 -0
  139. data/public/amber/examples/webos/eris/Makefile +37 -0
  140. data/public/amber/examples/webos/eris/README +3 -0
  141. data/public/amber/examples/webos/eris/appinfo.json +10 -0
  142. data/public/amber/examples/webos/eris/index.html +12 -0
  143. data/public/amber/examples/webos/helloamber/EnyoAmber.st +36 -0
  144. data/public/amber/examples/webos/helloamber/HelloAmber.st +86 -0
  145. data/public/amber/examples/webos/helloamber/Makefile +38 -0
  146. data/public/amber/examples/webos/helloamber/README +5 -0
  147. data/public/amber/examples/webos/helloamber/appinfo.json +10 -0
  148. data/public/amber/examples/webos/helloamber/index.html +12 -0
  149. data/public/amber/favicon.ico +0 -0
  150. data/public/amber/images/amber.png +0 -0
  151. data/public/amber/images/amber.svg +706 -0
  152. data/public/amber/images/amber_small.png +0 -0
  153. data/public/amber/images/off.amber.png +0 -0
  154. data/public/amber/images/off.png +0 -0
  155. data/public/amber/images/offHover.amber.png +0 -0
  156. data/public/amber/images/offHover.png +0 -0
  157. data/public/amber/images/presentation.png +0 -0
  158. data/public/amber/images/profstef.png +0 -0
  159. data/public/amber/images/sprite.amber.png +0 -0
  160. data/public/amber/images/sprite.png +0 -0
  161. data/public/amber/images/tinylogo.amber.png +0 -0
  162. data/public/amber/images/tinylogo.png +0 -0
  163. data/public/amber/images/twitterwall.png +0 -0
  164. data/public/amber/index.html +55 -0
  165. data/public/amber/js/Additional-Examples.deploy.js +15 -0
  166. data/public/amber/js/Additional-Examples.js +21 -0
  167. data/public/amber/js/Benchfib.deploy.js +132 -0
  168. data/public/amber/js/Benchfib.js +167 -0
  169. data/public/amber/js/Canvas.deploy.js +2446 -0
  170. data/public/amber/js/Canvas.js +3547 -0
  171. data/public/amber/js/Compiler-Tests.deploy.js +97 -0
  172. data/public/amber/js/Compiler-Tests.js +137 -0
  173. data/public/amber/js/Compiler.deploy.js +1877 -0
  174. data/public/amber/js/Compiler.js +2622 -0
  175. data/public/amber/js/Documentation.deploy.js +961 -0
  176. data/public/amber/js/Documentation.js +1376 -0
  177. data/public/amber/js/Examples.deploy.js +53 -0
  178. data/public/amber/js/Examples.js +73 -0
  179. data/public/amber/js/IDE.deploy.js +3557 -0
  180. data/public/amber/js/IDE.js +5002 -0
  181. data/public/amber/js/Kernel-Announcements.deploy.js +107 -0
  182. data/public/amber/js/Kernel-Announcements.js +152 -0
  183. data/public/amber/js/Kernel-Classes.deploy.js +774 -0
  184. data/public/amber/js/Kernel-Classes.js +1095 -0
  185. data/public/amber/js/Kernel-Collections.deploy.js +3121 -0
  186. data/public/amber/js/Kernel-Collections.js +4427 -0
  187. data/public/amber/js/Kernel-Exceptions.deploy.js +244 -0
  188. data/public/amber/js/Kernel-Exceptions.js +349 -0
  189. data/public/amber/js/Kernel-Methods.deploy.js +573 -0
  190. data/public/amber/js/Kernel-Methods.js +807 -0
  191. data/public/amber/js/Kernel-Objects.deploy.js +2877 -0
  192. data/public/amber/js/Kernel-Objects.js +4107 -0
  193. data/public/amber/js/Kernel-Tests.deploy.js +1513 -0
  194. data/public/amber/js/Kernel-Tests.js +2053 -0
  195. data/public/amber/js/Kernel-Transcript.deploy.js +142 -0
  196. data/public/amber/js/Kernel-Transcript.js +202 -0
  197. data/public/amber/js/Maglev-Core.deploy.js +2996 -0
  198. data/public/amber/js/Maglev-Core.js +4246 -0
  199. data/public/amber/js/Maglev-Database-Explorer.deploy.js +4476 -0
  200. data/public/amber/js/Maglev-Database-Explorer.js +6232 -0
  201. data/public/amber/js/Maglev-Vendor.deploy.js +350 -0
  202. data/public/amber/js/Maglev-Vendor.js +465 -0
  203. data/public/amber/js/README.md +5 -0
  204. data/public/amber/js/SUnit.deploy.js +351 -0
  205. data/public/amber/js/SUnit.js +501 -0
  206. data/public/amber/js/amber.js +273 -0
  207. data/public/amber/js/boot.js +602 -0
  208. data/public/amber/js/compat.js +22 -0
  209. data/public/amber/js/init.js +9 -0
  210. data/public/amber/js/lib/CodeMirror/LICENSE +19 -0
  211. data/public/amber/js/lib/CodeMirror/active-line.js +39 -0
  212. data/public/amber/js/lib/CodeMirror/amber.css +21 -0
  213. data/public/amber/js/lib/CodeMirror/codemirror.css +67 -0
  214. data/public/amber/js/lib/CodeMirror/codemirror.js +2144 -0
  215. data/public/amber/js/lib/CodeMirror/smalltalk.js +134 -0
  216. data/public/amber/js/lib/jQuery/jquery-1.4.4.min.js +167 -0
  217. data/public/amber/js/lib/jQuery/jquery-1.6.4.min.js +4 -0
  218. data/public/amber/js/lib/jQuery/jquery-ui-1.8.16.custom.min.js +791 -0
  219. data/public/amber/js/lib/jQuery/jquery.textarea.js +267 -0
  220. data/public/amber/js/lib/peg-0.6.2.min.js +2 -0
  221. data/public/amber/js/lib/showdown.js +419 -0
  222. data/public/amber/js/parser.js +4222 -0
  223. data/public/amber/js/parser.pegjs +223 -0
  224. data/public/amber/learn.html +40 -0
  225. data/public/amber/repl/Makefile +8 -0
  226. data/public/amber/repl/REPL.js +124 -0
  227. data/public/amber/repl/REPL.st +56 -0
  228. data/public/amber/repl/amber.js +18085 -0
  229. data/public/amber/server/FileServer.st +576 -0
  230. data/public/amber/server/Makefile +8 -0
  231. data/public/amber/server/server.js +13049 -0
  232. data/public/amber/st/Benchfib.js +297 -0
  233. data/public/amber/st/Benchfib.st +124 -0
  234. data/public/amber/st/Canvas.st +968 -0
  235. data/public/amber/st/Compiler-Tests.st +471 -0
  236. data/public/amber/st/Compiler.st +1445 -0
  237. data/public/amber/st/Documentation.st +758 -0
  238. data/public/amber/st/Examples.js +100 -0
  239. data/public/amber/st/Examples.st +38 -0
  240. data/public/amber/st/IDE.st +2404 -0
  241. data/public/amber/st/Kernel-Announcements.st +61 -0
  242. data/public/amber/st/Kernel-Classes.st +462 -0
  243. data/public/amber/st/Kernel-Collections.st +1611 -0
  244. data/public/amber/st/Kernel-Exceptions.st +124 -0
  245. data/public/amber/st/Kernel-Methods.st +291 -0
  246. data/public/amber/st/Kernel-Objects.st +1587 -0
  247. data/public/amber/st/Kernel-Tests.st +953 -0
  248. data/public/amber/st/Kernel-Transcript.st +70 -0
  249. data/public/amber/st/Maglev-Core.st +1694 -0
  250. data/public/amber/st/Maglev-Database-Explorer.st +3148 -0
  251. data/public/amber/st/Maglev-Vendor.st +151 -0
  252. data/public/amber/st/Makefile +104 -0
  253. data/public/amber/st/README.md +4 -0
  254. data/public/amber/st/SUnit.st +172 -0
  255. data/public/css/bootstrap-combined.no-icons.min.css +731 -0
  256. data/public/css/bootstrap.css +6811 -0
  257. data/public/css/images/animated-overlay.gif +0 -0
  258. data/public/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  259. data/public/css/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  260. data/public/css/images/ui-bg_flat_10_000000_40x100.png +0 -0
  261. data/public/css/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  262. data/public/css/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  263. data/public/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  264. data/public/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  265. data/public/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  266. data/public/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  267. data/public/css/images/ui-icons_222222_256x240.png +0 -0
  268. data/public/css/images/ui-icons_228ef1_256x240.png +0 -0
  269. data/public/css/images/ui-icons_ef8c08_256x240.png +0 -0
  270. data/public/css/images/ui-icons_ffd27a_256x240.png +0 -0
  271. data/public/css/images/ui-icons_ffffff_256x240.png +0 -0
  272. data/public/css/jquery-ui.min.css +5 -0
  273. data/public/css/smalltalk_code.css +42 -0
  274. data/public/css/style.css +210 -0
  275. data/public/images/bg_tile.png +0 -0
  276. data/public/images/maglev-logo.gif +0 -0
  277. data/public/images/mchammer.gif +0 -0
  278. data/public/images/rails_tiny.png +0 -0
  279. data/public/images/ruby.png +0 -0
  280. data/public/images/ruby_smalltalk_bridge.png +0 -0
  281. data/public/images/smalltalk.png +0 -0
  282. data/public/img/glyphicons-halflings.png +0 -0
  283. data/public/index.html +118 -0
  284. data/public/libs/bootstrap.min.js +7 -0
  285. data/public/libs/codemirror/CONTRIBUTING.md +72 -0
  286. data/public/libs/codemirror/LICENSE +23 -0
  287. data/public/libs/codemirror/README.md +11 -0
  288. data/public/libs/codemirror/addon/dialog/dialog.css +32 -0
  289. data/public/libs/codemirror/addon/dialog/dialog.js +80 -0
  290. data/public/libs/codemirror/addon/display/placeholder.js +54 -0
  291. data/public/libs/codemirror/addon/edit/closebrackets.js +54 -0
  292. data/public/libs/codemirror/addon/edit/closetag.js +86 -0
  293. data/public/libs/codemirror/addon/edit/continuecomment.js +44 -0
  294. data/public/libs/codemirror/addon/edit/continuelist.js +25 -0
  295. data/public/libs/codemirror/addon/edit/matchbrackets.js +82 -0
  296. data/public/libs/codemirror/addon/fold/brace-fold.js +31 -0
  297. data/public/libs/codemirror/addon/fold/foldcode.js +32 -0
  298. data/public/libs/codemirror/addon/fold/indent-fold.js +11 -0
  299. data/public/libs/codemirror/addon/fold/xml-fold.js +64 -0
  300. data/public/libs/codemirror/addon/hint/html-hint.js +582 -0
  301. data/public/libs/codemirror/addon/hint/javascript-hint.js +142 -0
  302. data/public/libs/codemirror/addon/hint/pig-hint.js +117 -0
  303. data/public/libs/codemirror/addon/hint/python-hint.js +93 -0
  304. data/public/libs/codemirror/addon/hint/show-hint.css +38 -0
  305. data/public/libs/codemirror/addon/hint/show-hint.js +180 -0
  306. data/public/libs/codemirror/addon/hint/xml-hint.js +118 -0
  307. data/public/libs/codemirror/addon/lint/javascript-lint.js +127 -0
  308. data/public/libs/codemirror/addon/lint/json-lint.js +14 -0
  309. data/public/libs/codemirror/addon/lint/lint.css +96 -0
  310. data/public/libs/codemirror/addon/lint/lint.js +197 -0
  311. data/public/libs/codemirror/addon/mode/loadmode.js +51 -0
  312. data/public/libs/codemirror/addon/mode/multiplex.js +95 -0
  313. data/public/libs/codemirror/addon/mode/overlay.js +59 -0
  314. data/public/libs/codemirror/addon/runmode/colorize.js +29 -0
  315. data/public/libs/codemirror/addon/runmode/runmode-standalone.js +130 -0
  316. data/public/libs/codemirror/addon/runmode/runmode.js +52 -0
  317. data/public/libs/codemirror/addon/runmode/runmode.node.js +89 -0
  318. data/public/libs/codemirror/addon/search/match-highlighter.js +60 -0
  319. data/public/libs/codemirror/addon/search/search.js +131 -0
  320. data/public/libs/codemirror/addon/search/searchcursor.js +133 -0
  321. data/public/libs/codemirror/addon/selection/active-line.js +39 -0
  322. data/public/libs/codemirror/addon/selection/mark-selection.js +34 -0
  323. data/public/libs/codemirror/bin/compress +91 -0
  324. data/public/libs/codemirror/bin/lint +11 -0
  325. data/public/libs/codemirror/demo/activeline.html +70 -0
  326. data/public/libs/codemirror/demo/bidi.html +61 -0
  327. data/public/libs/codemirror/demo/btree.html +87 -0
  328. data/public/libs/codemirror/demo/buffers.html +98 -0
  329. data/public/libs/codemirror/demo/changemode.html +50 -0
  330. data/public/libs/codemirror/demo/closebrackets.html +63 -0
  331. data/public/libs/codemirror/demo/closetag.html +37 -0
  332. data/public/libs/codemirror/demo/complete.html +70 -0
  333. data/public/libs/codemirror/demo/emacs.html +60 -0
  334. data/public/libs/codemirror/demo/folding.html +69 -0
  335. data/public/libs/codemirror/demo/fullscreen.html +147 -0
  336. data/public/libs/codemirror/demo/html5complete.html +92 -0
  337. data/public/libs/codemirror/demo/indentwrap.html +49 -0
  338. data/public/libs/codemirror/demo/lint.html +90 -0
  339. data/public/libs/codemirror/demo/loadmode.html +40 -0
  340. data/public/libs/codemirror/demo/marker.html +59 -0
  341. data/public/libs/codemirror/demo/markselection.html +36 -0
  342. data/public/libs/codemirror/demo/matchhighlighter.html +38 -0
  343. data/public/libs/codemirror/demo/multiplex.html +60 -0
  344. data/public/libs/codemirror/demo/mustache.html +59 -0
  345. data/public/libs/codemirror/demo/placeholder.html +36 -0
  346. data/public/libs/codemirror/demo/preview.html +76 -0
  347. data/public/libs/codemirror/demo/resize.html +49 -0
  348. data/public/libs/codemirror/demo/runmode.html +50 -0
  349. data/public/libs/codemirror/demo/search.html +85 -0
  350. data/public/libs/codemirror/demo/spanaffectswrapping_shim.html +73 -0
  351. data/public/libs/codemirror/demo/theme.html +89 -0
  352. data/public/libs/codemirror/demo/variableheight.html +52 -0
  353. data/public/libs/codemirror/demo/vim.html +65 -0
  354. data/public/libs/codemirror/demo/visibletabs.html +53 -0
  355. data/public/libs/codemirror/demo/widget.html +74 -0
  356. data/public/libs/codemirror/demo/xmlcomplete.html +81 -0
  357. data/public/libs/codemirror/index.html +487 -0
  358. data/public/libs/codemirror/keymap/emacs.js +30 -0
  359. data/public/libs/codemirror/keymap/vim.js +3044 -0
  360. data/public/libs/codemirror/lib/codemirror.css +253 -0
  361. data/public/libs/codemirror/lib/codemirror.js +5585 -0
  362. data/public/libs/codemirror/mode/apl/apl.js +160 -0
  363. data/public/libs/codemirror/mode/apl/index.html +61 -0
  364. data/public/libs/codemirror/mode/asterisk/asterisk.js +183 -0
  365. data/public/libs/codemirror/mode/asterisk/index.html +142 -0
  366. data/public/libs/codemirror/mode/clike/clike.js +302 -0
  367. data/public/libs/codemirror/mode/clike/index.html +103 -0
  368. data/public/libs/codemirror/mode/clike/scala.html +767 -0
  369. data/public/libs/codemirror/mode/clojure/clojure.js +222 -0
  370. data/public/libs/codemirror/mode/clojure/index.html +76 -0
  371. data/public/libs/codemirror/mode/coffeescript/LICENSE +22 -0
  372. data/public/libs/codemirror/mode/coffeescript/coffeescript.js +346 -0
  373. data/public/libs/codemirror/mode/coffeescript/index.html +728 -0
  374. data/public/libs/codemirror/mode/commonlisp/commonlisp.js +101 -0
  375. data/public/libs/codemirror/mode/commonlisp/index.html +165 -0
  376. data/public/libs/codemirror/mode/css/css.js +567 -0
  377. data/public/libs/codemirror/mode/css/index.html +58 -0
  378. data/public/libs/codemirror/mode/css/scss.html +145 -0
  379. data/public/libs/codemirror/mode/css/scss_test.js +80 -0
  380. data/public/libs/codemirror/mode/css/test.js +113 -0
  381. data/public/libs/codemirror/mode/d/d.js +205 -0
  382. data/public/libs/codemirror/mode/d/index.html +262 -0
  383. data/public/libs/codemirror/mode/diff/diff.js +32 -0
  384. data/public/libs/codemirror/mode/diff/index.html +105 -0
  385. data/public/libs/codemirror/mode/ecl/ecl.js +192 -0
  386. data/public/libs/codemirror/mode/ecl/index.html +39 -0
  387. data/public/libs/codemirror/mode/erlang/erlang.js +463 -0
  388. data/public/libs/codemirror/mode/erlang/index.html +64 -0
  389. data/public/libs/codemirror/mode/gas/gas.js +326 -0
  390. data/public/libs/codemirror/mode/gas/index.html +57 -0
  391. data/public/libs/codemirror/mode/gfm/gfm.js +96 -0
  392. data/public/libs/codemirror/mode/gfm/index.html +74 -0
  393. data/public/libs/codemirror/mode/gfm/test.js +112 -0
  394. data/public/libs/codemirror/mode/go/go.js +165 -0
  395. data/public/libs/codemirror/mode/go/index.html +74 -0
  396. data/public/libs/codemirror/mode/groovy/groovy.js +210 -0
  397. data/public/libs/codemirror/mode/groovy/index.html +73 -0
  398. data/public/libs/codemirror/mode/haskell/haskell.js +242 -0
  399. data/public/libs/codemirror/mode/haskell/index.html +62 -0
  400. data/public/libs/codemirror/mode/haxe/haxe.js +429 -0
  401. data/public/libs/codemirror/mode/haxe/index.html +90 -0
  402. data/public/libs/codemirror/mode/htmlembedded/htmlembedded.js +73 -0
  403. data/public/libs/codemirror/mode/htmlembedded/index.html +49 -0
  404. data/public/libs/codemirror/mode/htmlmixed/htmlmixed.js +104 -0
  405. data/public/libs/codemirror/mode/htmlmixed/index.html +73 -0
  406. data/public/libs/codemirror/mode/http/http.js +98 -0
  407. data/public/libs/codemirror/mode/http/index.html +32 -0
  408. data/public/libs/codemirror/mode/javascript/index.html +92 -0
  409. data/public/libs/codemirror/mode/javascript/javascript.js +467 -0
  410. data/public/libs/codemirror/mode/javascript/typescript.html +48 -0
  411. data/public/libs/codemirror/mode/jinja2/index.html +38 -0
  412. data/public/libs/codemirror/mode/jinja2/jinja2.js +42 -0
  413. data/public/libs/codemirror/mode/less/index.html +741 -0
  414. data/public/libs/codemirror/mode/less/less.js +266 -0
  415. data/public/libs/codemirror/mode/livescript/LICENSE +23 -0
  416. data/public/libs/codemirror/mode/livescript/index.html +446 -0
  417. data/public/libs/codemirror/mode/livescript/livescript.js +267 -0
  418. data/public/libs/codemirror/mode/livescript/livescript.ls +266 -0
  419. data/public/libs/codemirror/mode/lua/index.html +74 -0
  420. data/public/libs/codemirror/mode/lua/lua.js +140 -0
  421. data/public/libs/codemirror/mode/markdown/index.html +344 -0
  422. data/public/libs/codemirror/mode/markdown/markdown.js +526 -0
  423. data/public/libs/codemirror/mode/markdown/test.js +636 -0
  424. data/public/libs/codemirror/mode/meta.js +75 -0
  425. data/public/libs/codemirror/mode/mirc/index.html +149 -0
  426. data/public/libs/codemirror/mode/mirc/mirc.js +177 -0
  427. data/public/libs/codemirror/mode/ntriples/index.html +33 -0
  428. data/public/libs/codemirror/mode/ntriples/ntriples.js +170 -0
  429. data/public/libs/codemirror/mode/ocaml/index.html +131 -0
  430. data/public/libs/codemirror/mode/ocaml/ocaml.js +113 -0
  431. data/public/libs/codemirror/mode/pascal/LICENSE +7 -0
  432. data/public/libs/codemirror/mode/pascal/index.html +48 -0
  433. data/public/libs/codemirror/mode/pascal/pascal.js +94 -0
  434. data/public/libs/codemirror/mode/perl/LICENSE +19 -0
  435. data/public/libs/codemirror/mode/perl/index.html +62 -0
  436. data/public/libs/codemirror/mode/perl/perl.js +816 -0
  437. data/public/libs/codemirror/mode/php/index.html +51 -0
  438. data/public/libs/codemirror/mode/php/php.js +129 -0
  439. data/public/libs/codemirror/mode/pig/index.html +42 -0
  440. data/public/libs/codemirror/mode/pig/pig.js +171 -0
  441. data/public/libs/codemirror/mode/properties/index.html +41 -0
  442. data/public/libs/codemirror/mode/properties/properties.js +63 -0
  443. data/public/libs/codemirror/mode/python/LICENSE.txt +21 -0
  444. data/public/libs/codemirror/mode/python/index.html +135 -0
  445. data/public/libs/codemirror/mode/python/python.js +340 -0
  446. data/public/libs/codemirror/mode/q/index.html +131 -0
  447. data/public/libs/codemirror/mode/q/q.js +124 -0
  448. data/public/libs/codemirror/mode/r/LICENSE +24 -0
  449. data/public/libs/codemirror/mode/r/index.html +74 -0
  450. data/public/libs/codemirror/mode/r/r.js +141 -0
  451. data/public/libs/codemirror/mode/rpm/changes/changes.js +19 -0
  452. data/public/libs/codemirror/mode/rpm/changes/index.html +53 -0
  453. data/public/libs/codemirror/mode/rpm/spec/index.html +99 -0
  454. data/public/libs/codemirror/mode/rpm/spec/spec.css +5 -0
  455. data/public/libs/codemirror/mode/rpm/spec/spec.js +66 -0
  456. data/public/libs/codemirror/mode/rst/LICENSE.txt +21 -0
  457. data/public/libs/codemirror/mode/rst/index.html +524 -0
  458. data/public/libs/codemirror/mode/rst/rst.js +550 -0
  459. data/public/libs/codemirror/mode/ruby/LICENSE +24 -0
  460. data/public/libs/codemirror/mode/ruby/index.html +173 -0
  461. data/public/libs/codemirror/mode/ruby/ruby.js +197 -0
  462. data/public/libs/codemirror/mode/rust/index.html +48 -0
  463. data/public/libs/codemirror/mode/rust/rust.js +432 -0
  464. data/public/libs/codemirror/mode/sass/index.html +54 -0
  465. data/public/libs/codemirror/mode/sass/sass.js +349 -0
  466. data/public/libs/codemirror/mode/scheme/index.html +65 -0
  467. data/public/libs/codemirror/mode/scheme/scheme.js +230 -0
  468. data/public/libs/codemirror/mode/shell/index.html +51 -0
  469. data/public/libs/codemirror/mode/shell/shell.js +118 -0
  470. data/public/libs/codemirror/mode/sieve/LICENSE +19 -0
  471. data/public/libs/codemirror/mode/sieve/index.html +81 -0
  472. data/public/libs/codemirror/mode/sieve/sieve.js +183 -0
  473. data/public/libs/codemirror/mode/smalltalk/index.html +57 -0
  474. data/public/libs/codemirror/mode/smalltalk/smalltalk.js +141 -0
  475. data/public/libs/codemirror/mode/smarty/index.html +83 -0
  476. data/public/libs/codemirror/mode/smarty/smarty.js +148 -0
  477. data/public/libs/codemirror/mode/sparql/index.html +42 -0
  478. data/public/libs/codemirror/mode/sparql/sparql.js +143 -0
  479. data/public/libs/codemirror/mode/sql/index.html +68 -0
  480. data/public/libs/codemirror/mode/sql/sql.js +268 -0
  481. data/public/libs/codemirror/mode/stex/index.html +98 -0
  482. data/public/libs/codemirror/mode/stex/stex.js +246 -0
  483. data/public/libs/codemirror/mode/stex/test.js +117 -0
  484. data/public/libs/codemirror/mode/tcl/index.html +129 -0
  485. data/public/libs/codemirror/mode/tcl/tcl.js +131 -0
  486. data/public/libs/codemirror/mode/tiddlywiki/index.html +142 -0
  487. data/public/libs/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
  488. data/public/libs/codemirror/mode/tiddlywiki/tiddlywiki.js +353 -0
  489. data/public/libs/codemirror/mode/tiki/index.html +81 -0
  490. data/public/libs/codemirror/mode/tiki/tiki.css +26 -0
  491. data/public/libs/codemirror/mode/tiki/tiki.js +308 -0
  492. data/public/libs/codemirror/mode/turtle/index.html +39 -0
  493. data/public/libs/codemirror/mode/turtle/turtle.js +145 -0
  494. data/public/libs/codemirror/mode/vb/LICENSE.txt +21 -0
  495. data/public/libs/codemirror/mode/vb/index.html +88 -0
  496. data/public/libs/codemirror/mode/vb/vb.js +259 -0
  497. data/public/libs/codemirror/mode/vbscript/index.html +42 -0
  498. data/public/libs/codemirror/mode/vbscript/vbscript.js +26 -0
  499. data/public/libs/codemirror/mode/velocity/index.html +103 -0
  500. data/public/libs/codemirror/mode/velocity/velocity.js +144 -0
  501. data/public/libs/codemirror/mode/verilog/index.html +121 -0
  502. data/public/libs/codemirror/mode/verilog/verilog.js +182 -0
  503. data/public/libs/codemirror/mode/xml/index.html +45 -0
  504. data/public/libs/codemirror/mode/xml/xml.js +328 -0
  505. data/public/libs/codemirror/mode/xquery/LICENSE +20 -0
  506. data/public/libs/codemirror/mode/xquery/index.html +221 -0
  507. data/public/libs/codemirror/mode/xquery/test.js +64 -0
  508. data/public/libs/codemirror/mode/xquery/xquery.js +450 -0
  509. data/public/libs/codemirror/mode/yaml/index.html +68 -0
  510. data/public/libs/codemirror/mode/yaml/yaml.js +95 -0
  511. data/public/libs/codemirror/mode/z80/index.html +39 -0
  512. data/public/libs/codemirror/mode/z80/z80.js +85 -0
  513. data/public/libs/codemirror/package.json +21 -0
  514. data/public/libs/codemirror/test/doc_test.js +329 -0
  515. data/public/libs/codemirror/test/driver.js +138 -0
  516. data/public/libs/codemirror/test/index.html +182 -0
  517. data/public/libs/codemirror/test/lint/acorn.js +1593 -0
  518. data/public/libs/codemirror/test/lint/lint.js +112 -0
  519. data/public/libs/codemirror/test/lint/parse-js.js +1372 -0
  520. data/public/libs/codemirror/test/lint/walk.js +216 -0
  521. data/public/libs/codemirror/test/mode_test.css +10 -0
  522. data/public/libs/codemirror/test/mode_test.js +192 -0
  523. data/public/libs/codemirror/test/phantom_driver.js +31 -0
  524. data/public/libs/codemirror/test/run.js +33 -0
  525. data/public/libs/codemirror/test/test.js +1400 -0
  526. data/public/libs/codemirror/test/vim_test.js +1688 -0
  527. data/public/libs/codemirror/theme/ambiance-mobile.css +5 -0
  528. data/public/libs/codemirror/theme/ambiance.css +75 -0
  529. data/public/libs/codemirror/theme/blackboard.css +25 -0
  530. data/public/libs/codemirror/theme/cobalt.css +18 -0
  531. data/public/libs/codemirror/theme/eclipse.css +25 -0
  532. data/public/libs/codemirror/theme/elegant.css +10 -0
  533. data/public/libs/codemirror/theme/erlang-dark.css +21 -0
  534. data/public/libs/codemirror/theme/lesser-dark.css +44 -0
  535. data/public/libs/codemirror/theme/midnight.css +52 -0
  536. data/public/libs/codemirror/theme/monokai.css +28 -0
  537. data/public/libs/codemirror/theme/neat.css +9 -0
  538. data/public/libs/codemirror/theme/night.css +21 -0
  539. data/public/libs/codemirror/theme/rubyblue.css +21 -0
  540. data/public/libs/codemirror/theme/solarized.css +207 -0
  541. data/public/libs/codemirror/theme/twilight.css +26 -0
  542. data/public/libs/codemirror/theme/vibrant-ink.css +27 -0
  543. data/public/libs/codemirror/theme/xq-dark.css +46 -0
  544. data/public/libs/codemirror/theme/xq-light.css +43 -0
  545. data/public/libs/font-awesome/css/font-awesome-ie7.css +983 -0
  546. data/public/libs/font-awesome/css/font-awesome-ie7.min.css +24 -0
  547. data/public/libs/font-awesome/css/font-awesome.css +1268 -0
  548. data/public/libs/font-awesome/css/font-awesome.min.css +24 -0
  549. data/public/libs/font-awesome/font/FontAwesome.otf +0 -0
  550. data/public/libs/font-awesome/font/fontawesome-webfont.eot +0 -0
  551. data/public/libs/font-awesome/font/fontawesome-webfont.svg +339 -0
  552. data/public/libs/font-awesome/font/fontawesome-webfont.ttf +0 -0
  553. data/public/libs/font-awesome/font/fontawesome-webfont.woff +0 -0
  554. data/public/libs/font-awesome/less/bootstrap.less +78 -0
  555. data/public/libs/font-awesome/less/core.less +132 -0
  556. data/public/libs/font-awesome/less/extras.less +79 -0
  557. data/public/libs/font-awesome/less/font-awesome-ie7.less +413 -0
  558. data/public/libs/font-awesome/less/font-awesome.less +32 -0
  559. data/public/libs/font-awesome/less/icons.less +330 -0
  560. data/public/libs/font-awesome/less/mixins.less +34 -0
  561. data/public/libs/font-awesome/less/path.less +15 -0
  562. data/public/libs/font-awesome/less/variables.less +9 -0
  563. data/public/libs/jquery-1.10.0.min.js +6 -0
  564. data/public/libs/jquery-ui.min.js +12 -0
  565. data/public/libs/jquery.jsPlumb-1.4.0-all.js +9571 -0
  566. data/public/libs/jquery.livequery.js +226 -0
  567. data/public/libs/jsPlumbInitializer.js +72 -0
  568. data/public/libs/jstree/README.txt +10 -0
  569. data/public/libs/jstree/_demo/_dump.sql +20 -0
  570. data/public/libs/jstree/_demo/_inc/__mysql_errors.log +0 -0
  571. data/public/libs/jstree/_demo/_inc/class._database.php +146 -0
  572. data/public/libs/jstree/_demo/_inc/class._database_i.php +152 -0
  573. data/public/libs/jstree/_demo/_inc/class.tree.php +602 -0
  574. data/public/libs/jstree/_demo/_install.txt +6 -0
  575. data/public/libs/jstree/_demo/config.php +14 -0
  576. data/public/libs/jstree/_demo/file.png +0 -0
  577. data/public/libs/jstree/_demo/folder.png +0 -0
  578. data/public/libs/jstree/_demo/index.html +461 -0
  579. data/public/libs/jstree/_demo/root.png +0 -0
  580. data/public/libs/jstree/_demo/server.php +69 -0
  581. data/public/libs/jstree/_docs/!style.css +48 -0
  582. data/public/libs/jstree/_docs/_drive.png +0 -0
  583. data/public/libs/jstree/_docs/_html_data.html +2 -0
  584. data/public/libs/jstree/_docs/_json_data.json +4 -0
  585. data/public/libs/jstree/_docs/_search_data.json +6 -0
  586. data/public/libs/jstree/_docs/_search_result.json +1 -0
  587. data/public/libs/jstree/_docs/_xml_flat.xml +12 -0
  588. data/public/libs/jstree/_docs/_xml_nest.xml +18 -0
  589. data/public/libs/jstree/_docs/checkbox.html +171 -0
  590. data/public/libs/jstree/_docs/contextmenu.html +121 -0
  591. data/public/libs/jstree/_docs/cookies.html +97 -0
  592. data/public/libs/jstree/_docs/core.html +689 -0
  593. data/public/libs/jstree/_docs/crrm.html +316 -0
  594. data/public/libs/jstree/_docs/dnd.html +199 -0
  595. data/public/libs/jstree/_docs/hotkeys.html +82 -0
  596. data/public/libs/jstree/_docs/html_data.html +175 -0
  597. data/public/libs/jstree/_docs/index.html +86 -0
  598. data/public/libs/jstree/_docs/json_data.html +249 -0
  599. data/public/libs/jstree/_docs/languages.html +152 -0
  600. data/public/libs/jstree/_docs/logo.png +0 -0
  601. data/public/libs/jstree/_docs/search.html +153 -0
  602. data/public/libs/jstree/_docs/sort.html +85 -0
  603. data/public/libs/jstree/_docs/syntax/!script.js +2232 -0
  604. data/public/libs/jstree/_docs/syntax/!style.css +511 -0
  605. data/public/libs/jstree/_docs/syntax/clipboard.swf +0 -0
  606. data/public/libs/jstree/_docs/syntax/help.png +0 -0
  607. data/public/libs/jstree/_docs/syntax/magnifier.png +0 -0
  608. data/public/libs/jstree/_docs/syntax/page_white_code.png +0 -0
  609. data/public/libs/jstree/_docs/syntax/page_white_copy.png +0 -0
  610. data/public/libs/jstree/_docs/syntax/printer.png +0 -0
  611. data/public/libs/jstree/_docs/syntax/wrapping.png +0 -0
  612. data/public/libs/jstree/_docs/themeroller.html +107 -0
  613. data/public/libs/jstree/_docs/themes.html +127 -0
  614. data/public/libs/jstree/_docs/types.html +178 -0
  615. data/public/libs/jstree/_docs/ui.html +197 -0
  616. data/public/libs/jstree/_docs/unique.html +85 -0
  617. data/public/libs/jstree/_docs/xml_data.html +218 -0
  618. data/public/libs/jstree/_lib/jquery.cookie.js +96 -0
  619. data/public/libs/jstree/_lib/jquery.hotkeys.js +99 -0
  620. data/public/libs/jstree/_lib/jquery.js +5 -0
  621. data/public/libs/jstree/jquery.jstree.js +4564 -0
  622. data/public/libs/jstree/themes/apple/bg.jpg +0 -0
  623. data/public/libs/jstree/themes/apple/d.png +0 -0
  624. data/public/libs/jstree/themes/apple/dot_for_ie.gif +0 -0
  625. data/public/libs/jstree/themes/apple/style.css +61 -0
  626. data/public/libs/jstree/themes/apple/throbber.gif +0 -0
  627. data/public/libs/jstree/themes/classic/d.gif +0 -0
  628. data/public/libs/jstree/themes/classic/d.png +0 -0
  629. data/public/libs/jstree/themes/classic/dot_for_ie.gif +0 -0
  630. data/public/libs/jstree/themes/classic/style.css +77 -0
  631. data/public/libs/jstree/themes/classic/throbber.gif +0 -0
  632. data/public/libs/jstree/themes/default-rtl/d.gif +0 -0
  633. data/public/libs/jstree/themes/default-rtl/d.png +0 -0
  634. data/public/libs/jstree/themes/default-rtl/dots.gif +0 -0
  635. data/public/libs/jstree/themes/default-rtl/style.css +84 -0
  636. data/public/libs/jstree/themes/default-rtl/throbber.gif +0 -0
  637. data/public/libs/jstree/themes/default/d.gif +0 -0
  638. data/public/libs/jstree/themes/default/d.png +0 -0
  639. data/public/libs/jstree/themes/default/style.css +74 -0
  640. data/public/libs/jstree/themes/default/throbber.gif +0 -0
  641. data/public/themes/geo-bootstrap/README.md +25 -0
  642. data/public/themes/geo-bootstrap/img/flames.gif +0 -0
  643. data/public/themes/geo-bootstrap/img/glyphicons-halflings-white.png +0 -0
  644. data/public/themes/geo-bootstrap/img/glyphicons-halflings.png +0 -0
  645. data/public/themes/geo-bootstrap/img/microfab.gif +0 -0
  646. data/public/themes/geo-bootstrap/img/progress.gif +0 -0
  647. data/public/themes/geo-bootstrap/img/rainbow.gif +0 -0
  648. data/public/themes/geo-bootstrap/img/stars.gif +0 -0
  649. data/public/themes/geo-bootstrap/img/test/7upspot.gif +0 -0
  650. data/public/themes/geo-bootstrap/img/test/americanflag.gif +0 -0
  651. data/public/themes/geo-bootstrap/img/test/community.gif +0 -0
  652. data/public/themes/geo-bootstrap/img/test/computer-01.gif +0 -0
  653. data/public/themes/geo-bootstrap/img/test/computer.gif +0 -0
  654. data/public/themes/geo-bootstrap/img/test/construction.gif +0 -0
  655. data/public/themes/geo-bootstrap/img/test/counter.gif +0 -0
  656. data/public/themes/geo-bootstrap/img/test/counter2.gif +0 -0
  657. data/public/themes/geo-bootstrap/img/test/divider.gif +0 -0
  658. data/public/themes/geo-bootstrap/img/test/divider1.gif +0 -0
  659. data/public/themes/geo-bootstrap/img/test/divider2.gif +0 -0
  660. data/public/themes/geo-bootstrap/img/test/divider3.gif +0 -0
  661. data/public/themes/geo-bootstrap/img/test/divider4.gif +0 -0
  662. data/public/themes/geo-bootstrap/img/test/drudgesiren.gif +0 -0
  663. data/public/themes/geo-bootstrap/img/test/emailme.gif +0 -0
  664. data/public/themes/geo-bootstrap/img/test/funky.gif +0 -0
  665. data/public/themes/geo-bootstrap/img/test/geocities.jpg +0 -0
  666. data/public/themes/geo-bootstrap/img/test/hacker.gif +0 -0
  667. data/public/themes/geo-bootstrap/img/test/heart.gif +0 -0
  668. data/public/themes/geo-bootstrap/img/test/hot.gif +0 -0
  669. data/public/themes/geo-bootstrap/img/test/ie_logo.gif +0 -0
  670. data/public/themes/geo-bootstrap/img/test/mailkitten.gif +0 -0
  671. data/public/themes/geo-bootstrap/img/test/mchammer.gif +0 -0
  672. data/public/themes/geo-bootstrap/img/test/new.gif +0 -0
  673. data/public/themes/geo-bootstrap/img/test/new2.gif +0 -0
  674. data/public/themes/geo-bootstrap/img/test/noframes.gif +0 -0
  675. data/public/themes/geo-bootstrap/img/test/notepad.gif +0 -0
  676. data/public/themes/geo-bootstrap/img/test/ns_logo.gif +0 -0
  677. data/public/themes/geo-bootstrap/img/test/sign-in.gif +0 -0
  678. data/public/themes/geo-bootstrap/img/test/spinningearth.gif +0 -0
  679. data/public/themes/geo-bootstrap/img/test/underconstruction.gif +0 -0
  680. data/public/themes/geo-bootstrap/img/test/wabwalk.gif +0 -0
  681. data/public/themes/geo-bootstrap/img/test/webtrips.gif +0 -0
  682. data/public/themes/geo-bootstrap/img/test/yahooweek.gif +0 -0
  683. data/public/themes/geo-bootstrap/package.json +21 -0
  684. data/public/themes/geo-bootstrap/swatch/bootstrap-responsive.css +1109 -0
  685. data/public/themes/geo-bootstrap/swatch/bootstrap-responsive.min.css +9 -0
  686. data/public/themes/geo-bootstrap/swatch/bootstrap.css +6462 -0
  687. data/public/themes/geo-bootstrap/swatch/bootstrap.min.css +9 -0
  688. metadata +791 -0
@@ -0,0 +1,297 @@
1
+ define("amber_core/Benchfib", ["amber_vm/smalltalk", "amber_vm/nil", "amber_vm/_st", "amber_vm/globals", "amber_core/Kernel-Objects"], function(smalltalk,nil,_st, globals){
2
+ smalltalk.addPackage('Benchfib');
3
+ smalltalk.packages["Benchfib"].transport = {"type":"amd","amdNamespace":"amber_core"};
4
+
5
+ smalltalk.addClass('Benchfib', globals.Object, [], 'Benchfib');
6
+
7
+ smalltalk.addMethod(
8
+ smalltalk.method({
9
+ selector: "main",
10
+ protocol: 'not yet classified',
11
+ fn: function (){
12
+ var self=this;
13
+ var result;
14
+ return smalltalk.withContext(function($ctx1) {
15
+ result=(0)._tinyBenchmarks();
16
+ _st(console)._log_("0 tinyBenchmarks => ".__comma(result));
17
+ return self}, function($ctx1) {$ctx1.fill(self,"main",{result:result},globals.Benchfib.klass)})},
18
+ args: [],
19
+ source: "main\x0a\x0a\x09| result |\x0a\x09result := 0 tinyBenchmarks.\x0a\x09console log: '0 tinyBenchmarks => ' , result",
20
+ messageSends: ["tinyBenchmarks", "log:", ","],
21
+ referencedClasses: []
22
+ }),
23
+ globals.Benchfib.klass);
24
+
25
+ smalltalk.addMethod(
26
+ smalltalk.method({
27
+ selector: "benchFib",
28
+ protocol: '*Benchfib',
29
+ fn: function (){
30
+ var self=this;
31
+ return smalltalk.withContext(function($ctx1) {
32
+ var $2,$5,$4,$3,$1;
33
+ $2=self.__lt((2));
34
+ if(smalltalk.assert($2)){
35
+ $1=(1);
36
+ } else {
37
+ $5=self.__minus((1));
38
+ $ctx1.sendIdx["-"]=1;
39
+ $4=_st($5)._benchFib();
40
+ $ctx1.sendIdx["benchFib"]=1;
41
+ $3=_st($4).__plus(_st(self.__minus((2)))._benchFib());
42
+ $1=_st($3).__plus((1));
43
+ $ctx1.sendIdx["+"]=1;
44
+ };
45
+ return $1;
46
+ }, function($ctx1) {$ctx1.fill(self,"benchFib",{},globals.Number)})},
47
+ args: [],
48
+ source: "benchFib \x0a\x09\x22Handy send-heavy benchmark\x22\x0a\x09\x22(result // seconds to run) = approx calls per second\x22\x0a\x09\x22 | r t |\x0a\x09 t := Time millisecondsToRun: [r := 26 benchFib].\x0a\x09 (r * 1000) // t\x22\x0a\x09\x22138000 on a Mac 8100/100\x22\x0a\x09^ self < 2 \x0a\x09\x09ifTrue: [1] \x0a\x09\x09ifFalse: [(self-1) benchFib + (self-2) benchFib + 1]",
49
+ messageSends: ["ifTrue:ifFalse:", "<", "+", "benchFib", "-"],
50
+ referencedClasses: []
51
+ }),
52
+ globals.Number);
53
+
54
+ smalltalk.addMethod(
55
+ smalltalk.method({
56
+ selector: "benchmark",
57
+ protocol: '*Benchfib',
58
+ fn: function (){
59
+ var self=this;
60
+ var size,flags,prime,k,count;
61
+ function $Array(){return globals.Array||(typeof Array=="undefined"?nil:Array)}
62
+ return smalltalk.withContext(function($ctx1) {
63
+ var $1,$2;
64
+ size=(8190);
65
+ (1)._to_do_(self,(function(iter){
66
+ return smalltalk.withContext(function($ctx2) {
67
+ count=(0);
68
+ count;
69
+ flags=_st($Array())._new();
70
+ flags;
71
+ _st(size)._timesRepeat_((function(){
72
+ return smalltalk.withContext(function($ctx3) {
73
+ return _st(flags)._add_(true);
74
+ }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)})}));
75
+ return (1)._to_do_(size,(function(i){
76
+ return smalltalk.withContext(function($ctx3) {
77
+ $1=_st(flags)._at_(i);
78
+ if(smalltalk.assert($1)){
79
+ prime=_st(i).__plus((1));
80
+ $ctx3.sendIdx["+"]=1;
81
+ prime;
82
+ k=_st(i).__plus(prime);
83
+ $ctx3.sendIdx["+"]=2;
84
+ k;
85
+ _st((function(){
86
+ return smalltalk.withContext(function($ctx4) {
87
+ return _st(k).__lt_eq(size);
88
+ }, function($ctx4) {$ctx4.fillBlock({},$ctx3,5)})}))._whileTrue_((function(){
89
+ return smalltalk.withContext(function($ctx4) {
90
+ _st(flags)._at_put_(k,false);
91
+ k=_st(k).__plus(prime);
92
+ $ctx4.sendIdx["+"]=3;
93
+ return k;
94
+ }, function($ctx4) {$ctx4.fillBlock({},$ctx3,6)})}));
95
+ count=_st(count).__plus((1));
96
+ return count;
97
+ };
98
+ }, function($ctx3) {$ctx3.fillBlock({i:i},$ctx2,3)})}));
99
+ }, function($ctx2) {$ctx2.fillBlock({iter:iter},$ctx1,1)})}));
100
+ $ctx1.sendIdx["to:do:"]=1;
101
+ $2=count;
102
+ return $2;
103
+ }, function($ctx1) {$ctx1.fill(self,"benchmark",{size:size,flags:flags,prime:prime,k:k,count:count},globals.Number)})},
104
+ args: [],
105
+ source: "benchmark \x0a\x09\x22Handy bytecode-heavy benchmark\x22\x0a\x09\x22(500000 // time to run) = approx bytecodes per second\x22\x0a\x09\x225000000 // (Time millisecondsToRun: [10 benchmark]) * 1000\x22\x0a\x09\x223059000 on a Mac 8100/100\x22\x0a | size flags prime k count |\x0a size := 8190.\x0a 1 to: self do:\x0a [:iter |\x0a count := 0.\x0a flags := Array new.\x0a size timesRepeat: [ flags add: true].\x0a 1 to: size do:\x0a [:i | (flags at: i) ifTrue:\x0a [prime := i+1.\x0a k := i + prime.\x0a [k <= size] whileTrue:\x0a [flags at: k put: false.\x0a k := k + prime].\x0a count := count + 1]]].\x0a ^ count",
106
+ messageSends: ["to:do:", "new", "timesRepeat:", "add:", "ifTrue:", "at:", "+", "whileTrue:", "<=", "at:put:"],
107
+ referencedClasses: ["Array"]
108
+ }),
109
+ globals.Number);
110
+
111
+ smalltalk.addMethod(
112
+ smalltalk.method({
113
+ selector: "jsbenchFib",
114
+ protocol: '*Benchfib',
115
+ fn: function (){
116
+ var self=this;
117
+ return smalltalk.withContext(function($ctx1) {
118
+ if (this < 2) {
119
+ return 1;
120
+ } else {
121
+ return (this-1)._jsbenchFib() + (this-2)._jsbenchFib() + 1;};
122
+ return self}, function($ctx1) {$ctx1.fill(self,"jsbenchFib",{},globals.Number)})},
123
+ args: [],
124
+ source: "jsbenchFib\x0a \x0a\x09<if (this < 2) {\x0areturn 1;\x0a} else {\x0areturn (this-1)._jsbenchFib() + (this-2)._jsbenchFib() + 1;}>",
125
+ messageSends: [],
126
+ referencedClasses: []
127
+ }),
128
+ globals.Number);
129
+
130
+ smalltalk.addMethod(
131
+ smalltalk.method({
132
+ selector: "jsbenchmark",
133
+ protocol: '*Benchfib',
134
+ fn: function (){
135
+ var self=this;
136
+ return smalltalk.withContext(function($ctx1) {
137
+
138
+ var size = 8190;
139
+ var count;
140
+ for (var z=0;z<this;z++) {
141
+ count = 0;
142
+ var flags = new Array();
143
+ for (var p=0; p<size; p++) {
144
+ flags[p] = true;
145
+ }
146
+ for (var i=1;i<=size;i++) {
147
+ if (flags[i-1]) {
148
+ var prime = i+1;
149
+ var k = i + prime;
150
+ while (k <= size) {
151
+ flags[k-1] = false;
152
+ k = k + prime;
153
+ }
154
+ count = count + 1;
155
+ }
156
+ }
157
+ }
158
+ return count;
159
+ return self}, function($ctx1) {$ctx1.fill(self,"jsbenchmark",{},globals.Number)})},
160
+ args: [],
161
+ source: "jsbenchmark\x0a\x0a<\x0avar size = 8190;\x0avar count;\x0afor (var z=0;z<this;z++) {\x0a count = 0;\x0a var flags = new Array();\x0a for (var p=0; p<size; p++) {\x0a flags[p] = true;\x0a }\x0a for (var i=1;i<=size;i++) {\x0a if (flags[i-1]) {\x0a var prime = i+1;\x0a var k = i + prime;\x0a while (k <= size) {\x0a flags[k-1] = false;\x0a k = k + prime;\x0a }\x0a count = count + 1;\x0a }\x0a }\x0a}\x0areturn count>",
162
+ messageSends: [],
163
+ referencedClasses: []
164
+ }),
165
+ globals.Number);
166
+
167
+ smalltalk.addMethod(
168
+ smalltalk.method({
169
+ selector: "jstinyBenchmarks",
170
+ protocol: '*Benchfib',
171
+ fn: function (){
172
+ var self=this;
173
+ var t1,t2,r,n1,n2;
174
+ function $Date(){return globals.Date||(typeof Date=="undefined"?nil:Date)}
175
+ return smalltalk.withContext(function($ctx1) {
176
+ var $7,$6,$5,$4,$3,$2,$1;
177
+ n1=(1);
178
+ _st((function(){
179
+ return smalltalk.withContext(function($ctx2) {
180
+ t1=_st($Date())._millisecondsToRun_((function(){
181
+ return smalltalk.withContext(function($ctx3) {
182
+ return _st(n1)._jsbenchmark();
183
+ }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)})}));
184
+ $ctx2.sendIdx["millisecondsToRun:"]=1;
185
+ t1;
186
+ return _st(t1).__lt((1000));
187
+ $ctx2.sendIdx["<"]=1;
188
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}))._whileTrue_((function(){
189
+ return smalltalk.withContext(function($ctx2) {
190
+ n1=_st(n1).__star((2));
191
+ $ctx2.sendIdx["*"]=1;
192
+ return n1;
193
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)})}));
194
+ $ctx1.sendIdx["whileTrue:"]=1;
195
+ n2=(28);
196
+ _st((function(){
197
+ return smalltalk.withContext(function($ctx2) {
198
+ t2=_st($Date())._millisecondsToRun_((function(){
199
+ return smalltalk.withContext(function($ctx3) {
200
+ r=_st(n2)._jsbenchFib();
201
+ return r;
202
+ }, function($ctx3) {$ctx3.fillBlock({},$ctx2,5)})}));
203
+ t2;
204
+ return _st(t2).__lt((1000));
205
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)})}))._whileTrue_((function(){
206
+ return smalltalk.withContext(function($ctx2) {
207
+ n2=_st(n2).__plus((1));
208
+ return n2;
209
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)})}));
210
+ $7=_st(n1).__star((500000));
211
+ $ctx1.sendIdx["*"]=3;
212
+ $6=_st($7).__star((1000));
213
+ $ctx1.sendIdx["*"]=2;
214
+ $5=_st($6).__slash(t1);
215
+ $ctx1.sendIdx["/"]=1;
216
+ $4=_st($5)._printString();
217
+ $ctx1.sendIdx["printString"]=1;
218
+ $3=_st($4).__comma(" bytecodes/sec; ");
219
+ $2=_st($3).__comma(_st(_st(_st(r).__star((1000))).__slash(t2))._printString());
220
+ $ctx1.sendIdx[","]=2;
221
+ $1=_st($2).__comma(" sends/sec");
222
+ $ctx1.sendIdx[","]=1;
223
+ return $1;
224
+ }, function($ctx1) {$ctx1.fill(self,"jstinyBenchmarks",{t1:t1,t2:t2,r:r,n1:n1,n2:n2},globals.Number)})},
225
+ args: [],
226
+ source: "jstinyBenchmarks\x0a\x09\x220 jstinyBenchmarks\x22\x0a\x0a\x09| t1 t2 r n1 n2 |\x0a\x09n1 := 1.\x0a\x09[t1 := Date millisecondsToRun: [n1 jsbenchmark].\x0a\x09t1 < 1000] whileTrue:[n1 := n1 * 2]. \x22Note: #benchmark's runtime is about O(n)\x22\x0a\x0a\x09n2 := 28.\x0a\x09[t2 := Date millisecondsToRun: [r := n2 jsbenchFib].\x0a\x09t2 < 1000] whileTrue:[n2 := n2 + 1]. \x0a\x09\x22Note: #jsbenchFib's runtime is about O(k^n),\x0a\x09\x09where k is the golden number = (1 + 5 sqrt) / 2 = 1.618....\x22\x0a\x0a\x09^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',\x0a\x09 ((r * 1000) / t2) printString, ' sends/sec'",
227
+ messageSends: ["whileTrue:", "millisecondsToRun:", "jsbenchmark", "<", "*", "jsbenchFib", "+", ",", "printString", "/"],
228
+ referencedClasses: ["Date"]
229
+ }),
230
+ globals.Number);
231
+
232
+ smalltalk.addMethod(
233
+ smalltalk.method({
234
+ selector: "tinyBenchmarks",
235
+ protocol: '*Benchfib',
236
+ fn: function (){
237
+ var self=this;
238
+ var t1,t2,r,n1,n2;
239
+ function $Date(){return globals.Date||(typeof Date=="undefined"?nil:Date)}
240
+ return smalltalk.withContext(function($ctx1) {
241
+ var $7,$6,$5,$4,$3,$2,$1;
242
+ n1=(1);
243
+ _st((function(){
244
+ return smalltalk.withContext(function($ctx2) {
245
+ t1=_st($Date())._millisecondsToRun_((function(){
246
+ return smalltalk.withContext(function($ctx3) {
247
+ return _st(n1)._benchmark();
248
+ }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)})}));
249
+ $ctx2.sendIdx["millisecondsToRun:"]=1;
250
+ t1;
251
+ return _st(t1).__lt((1000));
252
+ $ctx2.sendIdx["<"]=1;
253
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}))._whileTrue_((function(){
254
+ return smalltalk.withContext(function($ctx2) {
255
+ n1=_st(n1).__star((2));
256
+ $ctx2.sendIdx["*"]=1;
257
+ return n1;
258
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)})}));
259
+ $ctx1.sendIdx["whileTrue:"]=1;
260
+ n2=(16);
261
+ _st((function(){
262
+ return smalltalk.withContext(function($ctx2) {
263
+ t2=_st($Date())._millisecondsToRun_((function(){
264
+ return smalltalk.withContext(function($ctx3) {
265
+ r=_st(n2)._benchFib();
266
+ return r;
267
+ }, function($ctx3) {$ctx3.fillBlock({},$ctx2,5)})}));
268
+ t2;
269
+ return _st(t2).__lt((1000));
270
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)})}))._whileTrue_((function(){
271
+ return smalltalk.withContext(function($ctx2) {
272
+ n2=_st(n2).__plus((1));
273
+ return n2;
274
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)})}));
275
+ $7=_st(n1).__star((500000));
276
+ $ctx1.sendIdx["*"]=3;
277
+ $6=_st($7).__star((1000));
278
+ $ctx1.sendIdx["*"]=2;
279
+ $5=_st($6).__slash(t1);
280
+ $ctx1.sendIdx["/"]=1;
281
+ $4=_st($5)._printString();
282
+ $ctx1.sendIdx["printString"]=1;
283
+ $3=_st($4).__comma(" bytecodes/sec; ");
284
+ $2=_st($3).__comma(_st(_st(_st(r).__star((1000))).__slash(t2))._printString());
285
+ $ctx1.sendIdx[","]=2;
286
+ $1=_st($2).__comma(" sends/sec");
287
+ $ctx1.sendIdx[","]=1;
288
+ return $1;
289
+ }, function($ctx1) {$ctx1.fill(self,"tinyBenchmarks",{t1:t1,t2:t2,r:r,n1:n1,n2:n2},globals.Number)})},
290
+ args: [],
291
+ source: "tinyBenchmarks \x0a\x09\x22Report the results of running the two tiny Squeak benchmarks.\x0a\x09ar 9/10/1999: Adjusted to run at least 1 sec to get more stable results\x22\x0a\x09\x220 tinyBenchmarks\x22\x0a\x09\x22On a 292 MHz G3 Mac: 22727272 bytecodes/sec; 984169 sends/sec\x22\x0a\x09\x22On a 400 MHz PII/Win98: 18028169 bytecodes/sec; 1081272 sends/sec\x22\x0a\x09| t1 t2 r n1 n2 |\x0a\x09n1 := 1.\x0a\x09[t1 := Date millisecondsToRun: [n1 benchmark].\x0a\x09t1 < 1000] whileTrue:[n1 := n1 * 2]. \x22Note: #benchmark's runtime is about O(n)\x22\x0a\x0a\x09n2 := 16.\x0a\x09[t2 := Date millisecondsToRun: [r := n2 benchFib].\x0a\x09t2 < 1000] whileTrue:[n2 := n2 + 1]. \x0a\x09\x22Note: #benchFib's runtime is about O(k^n),\x0a\x09\x09where k is the golden number = (1 + 5 sqrt) / 2 = 1.618....\x22\x0a\x0a\x09^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',\x0a\x09 ((r * 1000) / t2) printString, ' sends/sec'",
292
+ messageSends: ["whileTrue:", "millisecondsToRun:", "benchmark", "<", "*", "benchFib", "+", ",", "printString", "/"],
293
+ referencedClasses: ["Date"]
294
+ }),
295
+ globals.Number);
296
+
297
+ });
@@ -0,0 +1,124 @@
1
+ Smalltalk current createPackage: 'Benchfib' properties: #{}!
2
+ Object subclass: #Benchfib
3
+ instanceVariableNames: ''
4
+ package: 'Benchfib'!
5
+
6
+ !Benchfib class methodsFor: 'not yet classified'!
7
+
8
+ main
9
+
10
+ | result |
11
+ result := 0 tinyBenchmarks.
12
+ console log: '0 tinyBenchmarks => ' , result
13
+ ! !
14
+
15
+ !Number methodsFor: '*Benchfib'!
16
+
17
+ benchFib
18
+ "Handy send-heavy benchmark"
19
+ "(result // seconds to run) = approx calls per second"
20
+ " | r t |
21
+ t := Time millisecondsToRun: [r := 26 benchFib].
22
+ (r * 1000) // t"
23
+ "138000 on a Mac 8100/100"
24
+ ^ self < 2
25
+ ifTrue: [1]
26
+ ifFalse: [(self-1) benchFib + (self-2) benchFib + 1]
27
+ !
28
+
29
+ benchmark
30
+ "Handy bytecode-heavy benchmark"
31
+ "(500000 // time to run) = approx bytecodes per second"
32
+ "5000000 // (Time millisecondsToRun: [10 benchmark]) * 1000"
33
+ "3059000 on a Mac 8100/100"
34
+ | size flags prime k count |
35
+ size := 8190.
36
+ 1 to: self do:
37
+ [:iter |
38
+ count := 0.
39
+ flags := Array new.
40
+ size timesRepeat: [ flags add: true].
41
+ 1 to: size do:
42
+ [:i | (flags at: i) ifTrue:
43
+ [prime := i+1.
44
+ k := i + prime.
45
+ [k <= size] whileTrue:
46
+ [flags at: k put: false.
47
+ k := k + prime].
48
+ count := count + 1]]].
49
+ ^ count
50
+ !
51
+
52
+ jsbenchFib
53
+
54
+ <if (this < 2) {
55
+ return 1;
56
+ } else {
57
+ return (this-1)._jsbenchFib() + (this-2)._jsbenchFib() + 1;}>
58
+ !
59
+
60
+ jsbenchmark
61
+
62
+ <
63
+ var size = 8190;
64
+ var count;
65
+ for (var z=0;z<this;z++) {
66
+ count = 0;
67
+ var flags = new Array();
68
+ for (var p=0; p<size; p++) {
69
+ flags[p] = true;
70
+ }
71
+ for (var i=1;i<=size;i++) {
72
+ if (flags[i-1]) {
73
+ var prime = i+1;
74
+ var k = i + prime;
75
+ while (k <= size) {
76
+ flags[k-1] = false;
77
+ k = k + prime;
78
+ }
79
+ count = count + 1;
80
+ }
81
+ }
82
+ }
83
+ return count>
84
+ !
85
+
86
+ jstinyBenchmarks
87
+ "0 jstinyBenchmarks"
88
+
89
+ | t1 t2 r n1 n2 |
90
+ n1 := 1.
91
+ [t1 := Date millisecondsToRun: [n1 jsbenchmark].
92
+ t1 < 1000] whileTrue:[n1 := n1 * 2]. "Note: #benchmark's runtime is about O(n)"
93
+
94
+ n2 := 28.
95
+ [t2 := Date millisecondsToRun: [r := n2 jsbenchFib].
96
+ t2 < 1000] whileTrue:[n2 := n2 + 1].
97
+ "Note: #jsbenchFib's runtime is about O(k^n),
98
+ where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...."
99
+
100
+ ^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',
101
+ ((r * 1000) / t2) printString, ' sends/sec'
102
+ !
103
+
104
+ tinyBenchmarks
105
+ "Report the results of running the two tiny Squeak benchmarks.
106
+ ar 9/10/1999: Adjusted to run at least 1 sec to get more stable results"
107
+ "0 tinyBenchmarks"
108
+ "On a 292 MHz G3 Mac: 22727272 bytecodes/sec; 984169 sends/sec"
109
+ "On a 400 MHz PII/Win98: 18028169 bytecodes/sec; 1081272 sends/sec"
110
+ | t1 t2 r n1 n2 |
111
+ n1 := 1.
112
+ [t1 := Date millisecondsToRun: [n1 benchmark].
113
+ t1 < 1000] whileTrue:[n1 := n1 * 2]. "Note: #benchmark's runtime is about O(n)"
114
+
115
+ n2 := 16.
116
+ [t2 := Date millisecondsToRun: [r := n2 benchFib].
117
+ t2 < 1000] whileTrue:[n2 := n2 + 1].
118
+ "Note: #benchFib's runtime is about O(k^n),
119
+ where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...."
120
+
121
+ ^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',
122
+ ((r * 1000) / t2) printString, ' sends/sec'
123
+ ! !
124
+
@@ -0,0 +1,968 @@
1
+ Smalltalk current createPackage: 'Canvas' properties: #{}!
2
+ Object subclass: #HTMLCanvas
3
+ instanceVariableNames: 'root'
4
+ package: 'Canvas'!
5
+
6
+ !HTMLCanvas methodsFor: 'accessing'!
7
+
8
+ root
9
+ ^root
10
+ !
11
+
12
+ root: aTagBrush
13
+ root := aTagBrush
14
+ ! !
15
+
16
+ !HTMLCanvas methodsFor: 'adding'!
17
+
18
+ with: anObject
19
+ ^self root with: anObject
20
+ ! !
21
+
22
+ !HTMLCanvas methodsFor: 'initialization'!
23
+
24
+ initialize
25
+ super initialize.
26
+ root ifNil: [root := TagBrush fromString: 'div' canvas: self]
27
+ !
28
+
29
+ initializeFromJQuery: aJQuery
30
+ root := TagBrush fromJQuery: aJQuery canvas: self
31
+ ! !
32
+
33
+ !HTMLCanvas methodsFor: 'tags'!
34
+
35
+ a
36
+ ^self tag: 'a'
37
+ !
38
+
39
+ abbr
40
+ ^self tag: 'abbr'
41
+ !
42
+
43
+ address
44
+ ^self tag: 'address'
45
+ !
46
+
47
+ area
48
+ ^self tag: 'area'
49
+ !
50
+
51
+ article
52
+ ^self tag: 'article'
53
+ !
54
+
55
+ aside
56
+ ^self tag: 'aside'
57
+ !
58
+
59
+ audio
60
+ ^self tag: 'audio'
61
+ !
62
+
63
+ b
64
+ ^self tag: 'b'
65
+ !
66
+
67
+ base
68
+ ^self tag: 'base'
69
+ !
70
+
71
+ blockquote
72
+ ^self tag: 'blockquote'
73
+ !
74
+
75
+ body
76
+ ^self tag: 'body'
77
+ !
78
+
79
+ br
80
+ ^self tag: 'br'
81
+ !
82
+
83
+ button
84
+ ^self tag: 'button'
85
+ !
86
+
87
+ canvas
88
+ ^self tag: 'canvas'
89
+ !
90
+
91
+ caption
92
+ ^self tag: 'caption'
93
+ !
94
+
95
+ cite
96
+ ^self tag: 'cite'
97
+ !
98
+
99
+ code
100
+ ^self tag: 'code'
101
+ !
102
+
103
+ col
104
+ ^self tag: 'col'
105
+ !
106
+
107
+ colgroup
108
+ ^self tag: 'colgroup'
109
+ !
110
+
111
+ command
112
+ ^self tag: 'command'
113
+ !
114
+
115
+ datalist
116
+ ^self tag: 'datalist'
117
+ !
118
+
119
+ dd
120
+ ^self tag: 'dd'
121
+ !
122
+
123
+ del
124
+ ^self tag: 'del'
125
+ !
126
+
127
+ details
128
+ ^self tag: 'details'
129
+ !
130
+
131
+ div
132
+ ^self tag: 'div'
133
+ !
134
+
135
+ div: aBlock
136
+ ^self div with: aBlock
137
+ !
138
+
139
+ dl
140
+ ^self tag: 'dl'
141
+ !
142
+
143
+ dt
144
+ ^self tag: 'dt'
145
+ !
146
+
147
+ em
148
+ ^self tag: 'em'
149
+ !
150
+
151
+ embed
152
+ ^self tag: 'embed'
153
+ !
154
+
155
+ fieldset
156
+ ^self tag: 'fieldset'
157
+ !
158
+
159
+ figcaption
160
+ ^self tag: 'figcaption'
161
+ !
162
+
163
+ figure
164
+ ^self tag: 'figure'
165
+ !
166
+
167
+ footer
168
+ ^self tag: 'footer'
169
+ !
170
+
171
+ form
172
+ ^self tag: 'form'
173
+ !
174
+
175
+ h1
176
+ ^self tag: 'h1'
177
+ !
178
+
179
+ h1: anObject
180
+ ^self h1 with: anObject
181
+ !
182
+
183
+ h2
184
+ ^self tag: 'h2'
185
+ !
186
+
187
+ h2: anObject
188
+ ^ self h2 with: anObject
189
+ !
190
+
191
+ h3
192
+ ^self tag: 'h3'
193
+ !
194
+
195
+ h3: anObject
196
+ ^self h3 with: anObject
197
+ !
198
+
199
+ h4
200
+ ^self tag: 'h4'
201
+ !
202
+
203
+ h4: anObject
204
+ ^self h4 with: anObject
205
+ !
206
+
207
+ h5
208
+ ^self tag: 'h5'
209
+ !
210
+
211
+ h5: anObject
212
+ ^self h5 with: anObject
213
+ !
214
+
215
+ h6
216
+ ^self tag: 'h6'
217
+ !
218
+
219
+ h6: anObject
220
+ ^self h6 with: anObject
221
+ !
222
+
223
+ head
224
+ ^self tag: 'head'
225
+ !
226
+
227
+ header
228
+ ^self tag: 'header'
229
+ !
230
+
231
+ hgroup
232
+ ^self tag: 'hgroup'
233
+ !
234
+
235
+ hr
236
+ ^self tag: 'hr'
237
+ !
238
+
239
+ html
240
+ ^self tag: 'html'
241
+ !
242
+
243
+ iframe
244
+ ^self tag: 'iframe'
245
+ !
246
+
247
+ iframe: aString
248
+ ^self iframe src: aString
249
+ !
250
+
251
+ img
252
+ ^self tag: 'img'
253
+ !
254
+
255
+ img: aString
256
+ ^self img src: aString
257
+ !
258
+
259
+ input
260
+ ^self tag: 'input'
261
+ !
262
+
263
+ label
264
+ ^self tag: 'label'
265
+ !
266
+
267
+ legend
268
+ ^self tag: 'legend'
269
+ !
270
+
271
+ li
272
+ ^self tag: 'li'
273
+ !
274
+
275
+ li: anObject
276
+ ^self li with: anObject
277
+ !
278
+
279
+ link
280
+ ^self tag: 'link'
281
+ !
282
+
283
+ map
284
+ ^self tag: 'map'
285
+ !
286
+
287
+ mark
288
+ ^self tag: 'mark'
289
+ !
290
+
291
+ menu
292
+ ^self tag: 'menu'
293
+ !
294
+
295
+ meta
296
+ ^self tag: 'meta'
297
+ !
298
+
299
+ nav
300
+ ^self tag: 'nav'
301
+ !
302
+
303
+ newTag: aString
304
+ ^TagBrush fromString: aString canvas: self
305
+ !
306
+
307
+ noscript
308
+ ^self tag: 'noscript'
309
+ !
310
+
311
+ object
312
+ ^self tag: 'object'
313
+ !
314
+
315
+ ol
316
+ ^self tag: 'ol'
317
+ !
318
+
319
+ ol: anObject
320
+ ^self ol with: anObject
321
+ !
322
+
323
+ optgroup
324
+ ^self tag: 'optgroup'
325
+ !
326
+
327
+ option
328
+ ^self tag: 'option'
329
+ !
330
+
331
+ output
332
+ ^self tag: 'output'
333
+ !
334
+
335
+ p
336
+ ^self tag: 'p'
337
+ !
338
+
339
+ p: anObject
340
+ ^self p with: anObject
341
+ !
342
+
343
+ param
344
+ ^self tag: 'param'
345
+ !
346
+
347
+ pre
348
+ ^self tag: 'pre'
349
+ !
350
+
351
+ progress
352
+ ^self tag: 'progress'
353
+ !
354
+
355
+ script
356
+ ^self tag: 'script'
357
+ !
358
+
359
+ section
360
+ ^self tag: 'section'
361
+ !
362
+
363
+ select
364
+ ^self tag: 'select'
365
+ !
366
+
367
+ small
368
+ ^self tag: 'small'
369
+ !
370
+
371
+ source
372
+ ^self tag: 'source'
373
+ !
374
+
375
+ span
376
+ ^self tag: 'span'
377
+ !
378
+
379
+ span: anObject
380
+ ^self span with: anObject
381
+ !
382
+
383
+ strong
384
+ ^self tag: 'strong'
385
+ !
386
+
387
+ strong: anObject
388
+ ^self strong with: anObject
389
+ !
390
+
391
+ style
392
+ ^ root addBrush: (StyleTag canvas: self)
393
+ !
394
+
395
+ style: aString
396
+ ^ self style with: aString; yourself
397
+ !
398
+
399
+ sub
400
+ ^self tag: 'sub'
401
+ !
402
+
403
+ summary
404
+ ^self tag: 'summary'
405
+ !
406
+
407
+ sup
408
+ ^self tag: 'sup'
409
+ !
410
+
411
+ table
412
+ ^self tag: 'table'
413
+ !
414
+
415
+ tag: aString
416
+ ^root addBrush: (self newTag: aString)
417
+ !
418
+
419
+ tbody
420
+ ^self tag: 'tbody'
421
+ !
422
+
423
+ td
424
+ ^self tag: 'td'
425
+ !
426
+
427
+ text: aString
428
+ self with: aString.
429
+ !
430
+
431
+ textarea
432
+ ^self tag: 'textarea'
433
+ !
434
+
435
+ tfoot
436
+ ^self tag: 'tfoot'
437
+ !
438
+
439
+ th
440
+ ^self tag: 'th'
441
+ !
442
+
443
+ thead
444
+ ^self tag: 'thead'
445
+ !
446
+
447
+ time
448
+ ^self tag: 'time'
449
+ !
450
+
451
+ title
452
+ ^self tag: 'title'
453
+ !
454
+
455
+ tr
456
+ ^self tag: 'tr'
457
+ !
458
+
459
+ ul
460
+ ^self tag: 'ul'
461
+ !
462
+
463
+ ul: anObject
464
+ ^self ul with: anObject
465
+ !
466
+
467
+ video
468
+ ^self tag: 'video'
469
+ ! !
470
+
471
+ !HTMLCanvas class methodsFor: 'instance creation'!
472
+
473
+ browserVersion
474
+ ^(jQuery at: #browser) version
475
+ !
476
+
477
+ isMSIE
478
+ ^((jQuery at: #browser) at: #msie) notNil
479
+ !
480
+
481
+ isMozilla
482
+ ^((jQuery at: #browser) at: #mozilla) notNil
483
+ !
484
+
485
+ isOpera
486
+ ^((jQuery at: #browser) at: #opera) notNil
487
+ !
488
+
489
+ isWebkit
490
+ ^((jQuery at: #browser) at: #webkit) notNil
491
+ !
492
+
493
+ onJQuery: aJQuery
494
+ ^self basicNew
495
+ initializeFromJQuery: aJQuery;
496
+ initialize;
497
+ yourself
498
+ ! !
499
+
500
+ Object subclass: #TagBrush
501
+ instanceVariableNames: 'canvas element'
502
+ package: 'Canvas'!
503
+
504
+ !TagBrush methodsFor: 'accessing'!
505
+
506
+ element
507
+ ^element
508
+ ! !
509
+
510
+ !TagBrush methodsFor: 'adding'!
511
+
512
+ addBrush: aTagBrush
513
+ self appendChild: aTagBrush element.
514
+ ^aTagBrush
515
+ !
516
+
517
+ append: anObject
518
+ anObject appendToBrush: self
519
+ !
520
+
521
+ append: anObject as: aParameter
522
+ anObject appendToBrush: self as: aParameter
523
+ !
524
+
525
+ appendBlock: aBlock
526
+ | root |
527
+ root := canvas root.
528
+ canvas root: self.
529
+ aBlock value: canvas.
530
+ canvas root: root
531
+ !
532
+
533
+ appendChild: anElement
534
+ "In IE7 and IE8 appendChild fails on several node types. So we need to check"
535
+ <var element=self['@element'];
536
+ if (null == element.canHaveChildren || element.canHaveChildren) {
537
+ element.appendChild(anElement);
538
+ } else {
539
+ element.text = String(element.text) + anElement.innerHTML;
540
+ } >
541
+ !
542
+
543
+ appendString: aString
544
+ self appendChild: (self createTextNodeFor: aString)
545
+ !
546
+
547
+ appendToBrush: aTagBrush
548
+ aTagBrush addBrush: self
549
+ !
550
+
551
+ contents: anObject
552
+ self
553
+ empty;
554
+ append: anObject
555
+ !
556
+
557
+ empty
558
+ self asJQuery empty
559
+ !
560
+
561
+ with: anObject
562
+ self append: anObject
563
+ !
564
+
565
+ with: anObject as: aParameter
566
+ self append: anObject as: aParameter.
567
+ ! !
568
+
569
+ !TagBrush methodsFor: 'attributes'!
570
+
571
+ accesskey: aString
572
+ self at: 'accesskey' put: aString
573
+ !
574
+
575
+ action: aString
576
+ self at: 'action' put: aString
577
+ !
578
+
579
+ addClass: aString
580
+ self asJQuery addClass: aString.
581
+ !
582
+
583
+ align: aString
584
+ self at: 'align' put: aString
585
+ !
586
+
587
+ alt: aString
588
+ self at: 'alt' put: aString
589
+ !
590
+
591
+ at: aString put: aValue
592
+ <self['@element'].setAttribute(aString, aValue)>
593
+ !
594
+
595
+ class: aString
596
+ <self['@element'].className = aString>
597
+ !
598
+
599
+ cols: aString
600
+ self at: 'cols' put: aString
601
+ !
602
+
603
+ contenteditable: aString
604
+ self at: 'contenteditable' put: aString
605
+ !
606
+
607
+ contextmenu: aString
608
+ self at: 'contextmenu' put: aString
609
+ !
610
+
611
+ data: attribute
612
+ ^ self asJQuery data: attribute
613
+ !
614
+
615
+ data: attribute with: aString
616
+ self at: 'data-', attribute put: aString
617
+ !
618
+
619
+ draggable: aString
620
+ self at: 'draggable' put: aString
621
+ !
622
+
623
+ for: aString
624
+ self at: 'for' put: aString
625
+ !
626
+
627
+ frameborder: aString
628
+ self at: 'frameborder' put: aString
629
+ !
630
+
631
+ height
632
+ ^ self asJQuery height
633
+ !
634
+
635
+ height: aString
636
+ self at: 'height' put: aString
637
+ !
638
+
639
+ hidden
640
+ self at: 'hidden' put: 'hidden'
641
+ !
642
+
643
+ hide
644
+ self asJQuery hide.
645
+ !
646
+
647
+ href: aString
648
+ self at: 'href' put: aString
649
+ !
650
+
651
+ id: aString
652
+ self at: 'id' put: aString
653
+ !
654
+
655
+ left: aValue
656
+ self asJQuery css: 'left' a: aValue.
657
+ !
658
+
659
+ media: aString
660
+ self at: 'media' put: aString
661
+ !
662
+
663
+ method: aString
664
+ self at: 'method' put: aString
665
+ !
666
+
667
+ name: aString
668
+ self at: 'name' put: aString
669
+ !
670
+
671
+ placeholder: aString
672
+ self at: 'placeholder' put: aString
673
+ !
674
+
675
+ rel: aString
676
+ self at: 'rel' put: aString
677
+ !
678
+
679
+ removeAt: aString
680
+ <self['@element'].removeAttribute(aString)>
681
+ !
682
+
683
+ removeClass: aString
684
+ self asJQuery removeClass: aString.
685
+ !
686
+
687
+ rows: aString
688
+ self at: 'rows' put: aString
689
+ !
690
+
691
+ show
692
+ self asJQuery show.
693
+ !
694
+
695
+ size: anInteger
696
+ self at: 'size' put: anInteger asString
697
+ !
698
+
699
+ src: aString
700
+ self at: 'src' put: aString
701
+ !
702
+
703
+ style: aString
704
+ self at: 'style' put: aString
705
+ !
706
+
707
+ tabindex: aNumber
708
+ self at: 'tabindex' put: aNumber
709
+ !
710
+
711
+ target: aString
712
+ self at: 'target' put: aString
713
+ !
714
+
715
+ title: aString
716
+ self at: 'title' put: aString
717
+ !
718
+
719
+ top: aValue
720
+ self asJQuery css: 'top' a: aValue.
721
+ !
722
+
723
+ type: aString
724
+ self at: 'type' put: aString
725
+ !
726
+
727
+ valign: aString
728
+ self at: 'valign' put: aString
729
+ !
730
+
731
+ value: aString
732
+ self at: 'value' put: aString
733
+ !
734
+
735
+ width
736
+ ^ self asJQuery width
737
+ !
738
+
739
+ width: aString
740
+ self at: 'width' put: aString
741
+ ! !
742
+
743
+ !TagBrush methodsFor: 'converting'!
744
+
745
+ asJQuery
746
+ ^window jQuery: self element
747
+ ! !
748
+
749
+ !TagBrush methodsFor: 'events'!
750
+
751
+ onArrowKeyDown: aBlock
752
+ self onKeyDown: [:e| e preventDefault. e keyCode = 40 ifTrue: [aBlock value]].
753
+ !
754
+
755
+ onArrowKeyUp: aBlock
756
+ self onKeyDown: [:e| e preventDefault. e keyCode = 38 ifTrue:[aBlock value]].
757
+ !
758
+
759
+ onBlur: aBlock
760
+ self asJQuery bind: 'blur' do: aBlock
761
+ !
762
+
763
+ onChange: aBlock
764
+ self asJQuery bind: 'change' do: aBlock
765
+ !
766
+
767
+ onClick: aBlock
768
+ self asJQuery bind: 'click' do: aBlock
769
+ !
770
+
771
+ onDblClick: aBlock
772
+ self asJQuery bind: 'dblclick' do: aBlock
773
+ !
774
+
775
+ onFocus: aBlock
776
+ self asJQuery bind: 'focus' do: aBlock
777
+ !
778
+
779
+ onFocusIn: aBlock
780
+ self asJQuery bind: 'focusin' do: aBlock
781
+ !
782
+
783
+ onFocusOut: aBlock
784
+ self asJQuery bind: 'focusout' do: aBlock
785
+ !
786
+
787
+ onHover: aBlock
788
+ self asJQuery bind: 'hover' do: aBlock
789
+ !
790
+
791
+ onKeyDown: aBlock
792
+ self asJQuery bind: 'keydown' do: aBlock
793
+ !
794
+
795
+ onKeyPress: aBlock
796
+ self asJQuery bind: 'keypress' do: aBlock
797
+ !
798
+
799
+ onKeyUp: aBlock
800
+ self asJQuery bind: 'keyup' do: aBlock
801
+ !
802
+
803
+ onMouseDown: aBlock
804
+ self asJQuery bind: 'mousedown' do: aBlock
805
+ !
806
+
807
+ onMouseEnter: aBlock
808
+ self asJQuery bind: 'mouseenter' do: aBlock
809
+ !
810
+
811
+ onMouseLeave: aBlock
812
+ self asJQuery bind: 'mouseleave' do: aBlock
813
+ !
814
+
815
+ onMouseMove: aBlock
816
+ self asJQuery bind: 'mousemove' do: aBlock
817
+ !
818
+
819
+ onMouseOut: aBlock
820
+ self asJQuery bind: 'mouseout' do: aBlock
821
+ !
822
+
823
+ onMouseOver: aBlock
824
+ self asJQuery bind: 'mouseover' do: aBlock
825
+ !
826
+
827
+ onMouseUp: aBlock
828
+ self asJQuery bind: 'mouseup' do: aBlock
829
+ !
830
+
831
+ onSelect: aBlock
832
+ self asJQuery bind: 'select' do: aBlock
833
+ !
834
+
835
+ onSubmit: aBlock
836
+ self asJQuery bind: 'submit' do: aBlock
837
+ !
838
+
839
+ onUnload: aBlock
840
+ self asJQuery bind: 'unload' do: aBlock
841
+ ! !
842
+
843
+ !TagBrush methodsFor: 'initialization'!
844
+
845
+ initializeFromJQuery: aJQuery canvas: aCanvas
846
+ element := aJQuery get: 0.
847
+ canvas := aCanvas
848
+ !
849
+
850
+ initializeFromString: aString canvas: aCanvas
851
+ element := self createElementFor: aString.
852
+ canvas := aCanvas
853
+ ! !
854
+
855
+ !TagBrush methodsFor: 'private'!
856
+
857
+ createElementFor: aString
858
+ <return document.createElement(String(aString))>
859
+ !
860
+
861
+ createTextNodeFor: aString
862
+ <return document.createTextNode(String(aString))>
863
+ ! !
864
+
865
+ !TagBrush class methodsFor: 'instance creation'!
866
+
867
+ fromJQuery: aJQuery canvas: aCanvas
868
+ ^self new
869
+ initializeFromJQuery: aJQuery canvas: aCanvas;
870
+ yourself
871
+ !
872
+
873
+ fromString: aString canvas: aCanvas
874
+ ^self new
875
+ initializeFromString: aString canvas: aCanvas;
876
+ yourself
877
+ ! !
878
+
879
+ TagBrush subclass: #StyleTag
880
+ instanceVariableNames: 'canvas element'
881
+ package: 'Canvas'!
882
+ !StyleTag commentStamp!
883
+ I'm a <style> tag use to inline CSS or load a stylesheet.
884
+
885
+ For inlining handle IE compatibility problems.!
886
+
887
+ !StyleTag methodsFor: 'adding'!
888
+
889
+ with: aString
890
+ HTMLCanvas isMSIE
891
+ ifTrue: [self element styleSheet cssText: aString ]
892
+ ifFalse: [super with: aString ].
893
+ ! !
894
+
895
+ !StyleTag class methodsFor: 'instance creation'!
896
+
897
+ canvas: aCanvas
898
+ ^self new
899
+ initializeFromString: 'style' canvas: aCanvas;
900
+ yourself
901
+ ! !
902
+
903
+ Object subclass: #Widget
904
+ instanceVariableNames: ''
905
+ package: 'Canvas'!
906
+
907
+ !Widget methodsFor: 'adding'!
908
+
909
+ appendToBrush: aTagBrush
910
+ self appendToJQuery: aTagBrush asJQuery
911
+ !
912
+
913
+ appendToBrush: aTagBrush as: aParameter
914
+ self appendToJQuery: aTagBrush asJQuery as: aParameter
915
+ !
916
+
917
+ appendToJQuery: aJQuery
918
+ self renderOn: (HTMLCanvas onJQuery: aJQuery)
919
+ !
920
+
921
+ appendToJQuery: aJQuery as: aParameter
922
+ self renderOn: (HTMLCanvas onJQuery: aJQuery) as: aParameter
923
+ ! !
924
+
925
+ !Widget methodsFor: 'rendering'!
926
+
927
+ renderOn: html
928
+ self
929
+ !
930
+
931
+ renderOn: html as: aParameter
932
+ self renderOn: html
933
+ ! !
934
+
935
+ !Object methodsFor: '*Canvas'!
936
+
937
+ appendToBrush: aTagBrush
938
+ aTagBrush append: self asString
939
+ !
940
+
941
+ appendToJQuery: aJQuery
942
+ aJQuery append: self asString
943
+ ! !
944
+
945
+ !BlockClosure methodsFor: '*Canvas'!
946
+
947
+ appendToBrush: aTagBrush
948
+ aTagBrush appendBlock: self
949
+ !
950
+
951
+ appendToJQuery: aJQuery
952
+ self value: (HTMLCanvas onJQuery: aJQuery)
953
+ ! !
954
+
955
+ !String methodsFor: '*Canvas'!
956
+
957
+ appendToBrush: aTagBrush
958
+ aTagBrush appendString: self
959
+ !
960
+
961
+ appendToJQuery: aJQuery
962
+ aJQuery append: self
963
+ !
964
+
965
+ asJQuery
966
+ <return jQuery(String(self))>
967
+ ! !
968
+