atome 0.5.4.1.7 → 0.5.5.6.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (358) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -1
  3. data/Gemfile +3 -1
  4. data/README.md +70 -1
  5. data/Rakefile +246 -75
  6. data/app_builder_helpers/Rakefile +276 -288
  7. data/documentation/basic.md +242 -0
  8. data/documentation/deep learning/architecture.txt +3763 -0
  9. data/documentation/deep learning/atome.png +0 -0
  10. data/documentation/deep learning/basic_infos.txt +227 -0
  11. data/documentation/deep learning/example_of_users_code.rb +1810 -0
  12. data/documentation/deep learning/misc.txt +24 -0
  13. data/documentation/deep learning/ruby_js_example.rb +272 -0
  14. data/documentation/deep learning/wasm_script_help.text +14 -0
  15. data/documentation/framework/enhance_atome.md +1 -1
  16. data/documentation/tutorials/tutorials.md +7 -0
  17. data/exe/atome +308 -208
  18. data/lib/atome/atome.rb +52 -156
  19. data/lib/atome/extensions/atome.rb +129 -47
  20. data/lib/atome/extensions/mathematics.rb +20 -0
  21. data/lib/atome/extensions/ping.rb +2 -3
  22. data/lib/atome/genesis/generators/atome.rb +57 -30
  23. data/lib/atome/genesis/generators/communication.rb +9 -0
  24. data/lib/atome/genesis/generators/effect.rb +0 -1
  25. data/lib/atome/genesis/generators/event.rb +279 -43
  26. data/lib/atome/genesis/generators/geometry.rb +1 -10
  27. data/lib/atome/genesis/generators/hierarchy.rb +103 -0
  28. data/lib/atome/genesis/generators/identity.rb +45 -84
  29. data/lib/atome/genesis/generators/material.rb +31 -34
  30. data/lib/atome/genesis/generators/property.rb +31 -0
  31. data/lib/atome/genesis/generators/security.rb +31 -0
  32. data/lib/atome/genesis/generators/spatial.rb +3 -5
  33. data/lib/atome/genesis/generators/time.rb +0 -1
  34. data/lib/atome/genesis/generators/utility.rb +181 -66
  35. data/lib/atome/genesis/genesis.rb +152 -55
  36. data/lib/atome/genesis/sparkle.rb +59 -75
  37. data/lib/atome/helpers/color_helper/color/rgb/colors.rb +1 -1
  38. data/lib/atome/helpers/color_helper/color/rgb.rb +1 -1
  39. data/lib/atome/helpers/color_helper/color.rb +226 -7
  40. data/lib/atome/helpers/essentials.rb +22 -26
  41. data/lib/atome/helpers/security.rb +71 -0
  42. data/lib/atome/helpers/utilities.rb +191 -178
  43. data/lib/atome/kernel/black_matter.rb +22 -0
  44. data/lib/atome/kernel/universe.rb +123 -24
  45. data/lib/atome/presets/atome.rb +39 -35
  46. data/lib/atome/version.rb +3 -2
  47. data/lib/atome.rb +12 -12
  48. data/lib/atome_relative.rb +36 -0
  49. data/lib/{atome/renderers → platform_specific}/opal/atome_opal_extensions.rb +4 -1
  50. data/lib/{atome/renderers → platform_specific}/opal/extensions/color.rb +12 -5
  51. data/lib/{atome/renderers → platform_specific}/opal/extensions/geolocation.rb +1 -0
  52. data/lib/platform_specific/opal/extensions/js.rb +21 -0
  53. data/lib/platform_specific/opal/extensions/object.rb +6 -0
  54. data/lib/platform_specific/opal/extensions/ping.rb +31 -0
  55. data/lib/{atome/renderers → platform_specific}/opal/extensions/sha.rb +4 -2
  56. data/lib/platform_specific/wasm/atome_wasm_extensions.rb +11 -0
  57. data/lib/renderers/headless/headless.rb +18 -0
  58. data/lib/renderers/headless/index.rb +6 -0
  59. data/lib/renderers/headless/index_relative.rb +6 -0
  60. data/lib/renderers/headless/utility.rb +6 -0
  61. data/{vendor/assets/src/medias/rubies/examples/top.rb → lib/renderers/html/atome.rb} +0 -1
  62. data/lib/renderers/html/atome_html.rb +22 -0
  63. data/lib/renderers/html/effect.rb +26 -0
  64. data/lib/renderers/html/event.rb +43 -0
  65. data/lib/renderers/html/geometry.rb +31 -0
  66. data/lib/renderers/html/hierarchy.rb +233 -0
  67. data/lib/renderers/html/html.rb +1112 -0
  68. data/lib/renderers/html/identity.rb +84 -0
  69. data/lib/renderers/html/index.rb +19 -0
  70. data/lib/renderers/html/index_relative.rb +20 -0
  71. data/lib/renderers/html/material.rb +53 -0
  72. data/lib/renderers/html/property.rb +24 -0
  73. data/lib/renderers/html/spatial.rb +46 -0
  74. data/lib/renderers/html/time.rb +1 -0
  75. data/lib/renderers/html/utility.rb +38 -0
  76. data/lib/renderers/renderer.rb +16 -0
  77. data/lib/renderers/server/index.rb +4 -0
  78. data/lib/renderers/server/index_relative.rb +4 -0
  79. data/lib/renderers/server/utility.rb +4 -0
  80. data/sig/atome.rbs +6 -0
  81. data/sig/object.rbs +4 -0
  82. data/sig/universe.rbs +3 -0
  83. data/vendor/assets/Rakefile +3 -3
  84. data/vendor/assets/application/examples/a_concat.rb +16 -0
  85. data/vendor/assets/application/examples/affect.rb +8 -0
  86. data/vendor/assets/application/examples/animation.rb +96 -0
  87. data/vendor/assets/application/examples/apply.rb +8 -0
  88. data/vendor/assets/application/examples/atome.rb +5 -0
  89. data/vendor/assets/application/examples/attach.rb +34 -0
  90. data/vendor/assets/application/examples/attached.rb +38 -0
  91. data/vendor/assets/application/examples/basic_understanding.rb +52 -0
  92. data/vendor/assets/application/examples/browse.rb +17 -0
  93. data/vendor/assets/application/examples/callback.rb +20 -0
  94. data/vendor/assets/application/examples/category.rb +12 -0
  95. data/vendor/assets/application/examples/clear.rb +96 -0
  96. data/vendor/assets/application/examples/clones.rb +177 -0
  97. data/vendor/assets/application/examples/code.rb +13 -0
  98. data/vendor/assets/application/examples/color.rb +54 -0
  99. data/vendor/assets/application/examples/convert.rb +163 -0
  100. data/vendor/assets/application/examples/copy.rb +25 -0
  101. data/vendor/assets/application/examples/copybck.rb +68 -0
  102. data/vendor/assets/application/examples/debug.rb +78 -0
  103. data/vendor/assets/application/examples/delete.rb +93 -0
  104. data/vendor/assets/application/examples/display.rb +279 -0
  105. data/vendor/assets/application/examples/display_bck.rb +164 -0
  106. data/vendor/assets/application/examples/drag.rb +45 -0
  107. data/vendor/assets/application/examples/drop.rb +35 -0
  108. data/vendor/assets/application/examples/duplicate.rb +64 -0
  109. data/vendor/assets/application/examples/edit.rb +21 -0
  110. data/vendor/assets/application/examples/encode.rb +6 -0
  111. data/vendor/assets/application/examples/file.rb +50 -0
  112. data/vendor/assets/application/examples/find.rb +157 -0
  113. data/vendor/assets/application/examples/generator_and_build.rb +15 -0
  114. data/vendor/assets/application/examples/getter.rb +16 -0
  115. data/vendor/assets/application/examples/grab.rb +14 -0
  116. data/vendor/assets/application/examples/gradient.rb +35 -0
  117. data/vendor/assets/application/examples/group.rb +44 -0
  118. data/vendor/assets/application/examples/hierarchy.rb +21 -0
  119. data/vendor/assets/application/examples/history.rb +31 -0
  120. data/vendor/assets/application/examples/hypertext.rb +113 -0
  121. data/vendor/assets/application/examples/image.rb +5 -0
  122. data/vendor/assets/application/examples/keyboard.rb +59 -0
  123. data/vendor/assets/application/examples/layout.rb +227 -0
  124. data/vendor/assets/application/examples/login.rb +10 -0
  125. data/vendor/assets/application/examples/markup.rb +4 -0
  126. data/vendor/assets/application/examples/match.rb +115 -0
  127. data/vendor/assets/application/examples/messaging.rb +16 -0
  128. data/vendor/assets/application/examples/monitor.rb +14 -0
  129. data/vendor/assets/application/examples/on_resize.rb +7 -0
  130. data/vendor/assets/{src/medias/rubies/examples/get_renderer_list.rb → application/examples/online.rb} +1 -1
  131. data/vendor/assets/application/examples/over.rb +29 -0
  132. data/vendor/assets/application/examples/paint.rb +23 -0
  133. data/vendor/assets/application/examples/particles.rb +4 -0
  134. data/vendor/assets/application/examples/percent_to_px.rb +4 -0
  135. data/vendor/assets/application/examples/play.rb +50 -0
  136. data/vendor/assets/application/examples/presets.rb +33 -0
  137. data/vendor/assets/application/examples/random.rb +42 -0
  138. data/vendor/assets/application/examples/raw_html.rb +48 -0
  139. data/vendor/assets/application/examples/read.rb +11 -0
  140. data/vendor/assets/application/examples/refresh.rb +62 -0
  141. data/vendor/assets/application/examples/remove.rb +47 -0
  142. data/vendor/assets/application/examples/repeat.rb +26 -0
  143. data/vendor/assets/application/examples/resize.rb +17 -0
  144. data/vendor/assets/application/examples/scroll.rb +11 -0
  145. data/vendor/assets/application/examples/security.rb +76 -0
  146. data/vendor/assets/application/examples/selected.rb +30 -0
  147. data/vendor/assets/application/examples/shadow.rb +46 -0
  148. data/vendor/assets/application/examples/shapes.rb +6 -0
  149. data/vendor/assets/{src/medias/rubies → application}/examples/smooth.rb +5 -1
  150. data/vendor/assets/application/examples/style.rb +4 -0
  151. data/vendor/assets/application/examples/sync.rb +39 -0
  152. data/vendor/assets/application/examples/tagged.rb +24 -0
  153. data/vendor/assets/application/examples/terminal.rb +4 -0
  154. data/vendor/assets/application/examples/text.rb +5 -0
  155. data/vendor/assets/application/examples/touch.rb +38 -0
  156. data/vendor/assets/application/examples/type_mutation.rb +18 -0
  157. data/vendor/assets/application/examples/universe.rb +8 -0
  158. data/vendor/assets/application/examples/vector.rb +24 -0
  159. data/vendor/assets/application/examples/video.rb +14 -0
  160. data/vendor/assets/application/examples/wait.rb +6 -0
  161. data/vendor/assets/application/examples/www.rb +10 -0
  162. data/vendor/assets/application/index.rb +1 -1
  163. data/vendor/assets/application/test.rb +29 -0
  164. data/vendor/assets/application/works/photos.rb +672 -0
  165. data/vendor/assets/application/works/photos2.rb +218 -0
  166. data/vendor/assets/application/works/photos3.rb +343 -0
  167. data/vendor/assets/application/works/photos4.rb +34 -0
  168. data/vendor/assets/application/works/photos6.rb +6 -0
  169. data/vendor/assets/application/works/trigga.rb +0 -0
  170. data/vendor/assets/application/works/vie.rb +74 -0
  171. data/vendor/assets/server/atome_server.rb +37 -41
  172. data/vendor/assets/server/atome_server_wasm.rb +112 -0
  173. data/vendor/assets/server/capture.rb +10 -0
  174. data/vendor/assets/server/config.ru +5 -4
  175. data/vendor/assets/src/css/style.css +29 -4
  176. data/vendor/assets/src/index.html +31 -38
  177. data/vendor/assets/src/index_opal.html +42 -0
  178. data/vendor/assets/src/index_server.html +43 -0
  179. data/vendor/assets/src/index_server_wasm.html +46 -0
  180. data/vendor/assets/src/js/atome/atome.js +170 -150
  181. data/vendor/assets/src/js/atome/atome_helpers/add_font.js +46 -0
  182. data/vendor/assets/src/js/atome/atome_helpers/atome_drag.js +3 -1
  183. data/vendor/assets/src/js/atome/atome_helpers/atome_events.js +12 -7
  184. data/vendor/assets/src/js/atome/atome_helpers/communication.js +126 -0
  185. data/vendor/assets/src/js/atome/atome_helpers/{atome_file.js → file.js} +1 -1
  186. data/vendor/assets/src/js/atome/specific/opal.js +3 -0
  187. data/vendor/assets/src/js/atome/specific/wasm.js +12 -0
  188. data/vendor/assets/src/js/third_parties/browser.script.iife.min.js +13 -0
  189. data/vendor/assets/src/js/third_parties/fabric.min.js +1 -1
  190. data/vendor/assets/src/js/third_parties/html-to-image.min.js +2 -0
  191. data/vendor/assets/src/js/third_parties/jsencrypt.min.js +2 -0
  192. data/vendor/assets/src/js/third_parties/papaparse.min.js +7 -0
  193. data/vendor/assets/src/medias/fonts/Roboto/LICENSE.txt +202 -0
  194. data/vendor/assets/src/medias/fonts/Roboto/Roboto-Black.ttf +0 -0
  195. data/vendor/assets/src/medias/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
  196. data/vendor/assets/src/medias/fonts/Roboto/Roboto-Bold.ttf +0 -0
  197. data/vendor/assets/src/medias/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
  198. data/vendor/assets/src/medias/fonts/Roboto/Roboto-Italic.ttf +0 -0
  199. data/vendor/assets/src/medias/fonts/Roboto/Roboto-Light.ttf +0 -0
  200. data/vendor/assets/src/medias/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
  201. data/vendor/assets/src/medias/fonts/Roboto/Roboto-Medium.ttf +0 -0
  202. data/vendor/assets/src/medias/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  203. data/vendor/assets/src/medias/fonts/Roboto/Roboto-Regular.ttf +0 -0
  204. data/vendor/assets/src/medias/fonts/Roboto/Roboto-Thin.ttf +0 -0
  205. data/vendor/assets/src/medias/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
  206. data/vendor/assets/src/medias/images/logos/Facebook.svg +1 -1
  207. data/vendor/assets/src/medias/images/logos/LinkedIn-full.svg +109 -0
  208. data/vendor/assets/src/medias/images/logos/LinkedIn.svg +11 -0
  209. data/vendor/assets/src/medias/images/logos/X.svg +5 -0
  210. data/vendor/assets/src-tauri/Cargo.toml +1 -1
  211. data/vendor/assets/src-tauri/src/main.rs +59 -5
  212. data/vendor/assets/src-tauri/tauri.conf.json +1 -1
  213. data/vendor/assets/src-wasm/wasm/wasi-vfs-osx_arm +0 -0
  214. data/vendor/assets/src-wasm/wasm/wasi-vfs-osx_x86 +0 -0
  215. data/vendor/assets/src-wasm/wasm/wasi-vfs-unix +0 -0
  216. data/vendor/assets/src-wasm/wasm/wasi-vfs.exe +0 -0
  217. metadata +188 -180
  218. data/lib/atome/extensions/mathematic.rb +0 -20
  219. data/lib/atome/extensions/matrix.rb +0 -346
  220. data/lib/atome/helpers/callbacks.rb +0 -133
  221. data/lib/atome/kernel/batch.rb +0 -26
  222. data/lib/atome/kernel/essentials.rb +0 -23
  223. data/lib/atome/renderers/browser/atome.rb +0 -158
  224. data/lib/atome/renderers/browser/browser.rb +0 -47
  225. data/lib/atome/renderers/browser/effect.rb +0 -23
  226. data/lib/atome/renderers/browser/event.rb +0 -96
  227. data/lib/atome/renderers/browser/geometry.rb +0 -27
  228. data/lib/atome/renderers/browser/helpers/animation_helper.rb +0 -69
  229. data/lib/atome/renderers/browser/helpers/browser_helper.rb +0 -101
  230. data/lib/atome/renderers/browser/helpers/color_helper.rb +0 -80
  231. data/lib/atome/renderers/browser/helpers/drag_helper.rb +0 -52
  232. data/lib/atome/renderers/browser/helpers/drop_helper.rb +0 -13
  233. data/lib/atome/renderers/browser/helpers/effect_helper.rb +0 -23
  234. data/lib/atome/renderers/browser/helpers/event_helper.rb +0 -76
  235. data/lib/atome/renderers/browser/helpers/image_helper.rb +0 -27
  236. data/lib/atome/renderers/browser/helpers/over_helper.rb +0 -13
  237. data/lib/atome/renderers/browser/helpers/shadow_helper.rb +0 -74
  238. data/lib/atome/renderers/browser/helpers/shape_helper.rb +0 -22
  239. data/lib/atome/renderers/browser/helpers/text_helper.rb +0 -38
  240. data/lib/atome/renderers/browser/helpers/video_helper.rb +0 -50
  241. data/lib/atome/renderers/browser/helpers/web_helper.rb +0 -26
  242. data/lib/atome/renderers/browser/identity.rb +0 -61
  243. data/lib/atome/renderers/browser/material.rb +0 -121
  244. data/lib/atome/renderers/browser/opal_add_on.rb +0 -31
  245. data/lib/atome/renderers/browser/opal_browser.rb +0 -6
  246. data/lib/atome/renderers/browser/spatial.rb +0 -59
  247. data/lib/atome/renderers/browser/time.rb +0 -3
  248. data/lib/atome/renderers/browser/utility.rb +0 -49
  249. data/lib/atome/renderers/headless/headless.rb +0 -10
  250. data/lib/atome/renderers/headless/utility.rb +0 -6
  251. data/lib/atome/renderers/html/atome.rb +0 -49
  252. data/lib/atome/renderers/html/effect.rb +0 -19
  253. data/lib/atome/renderers/html/event.rb +0 -9
  254. data/lib/atome/renderers/html/geometry.rb +0 -11
  255. data/lib/atome/renderers/html/html.rb +0 -42
  256. data/lib/atome/renderers/html/identity.rb +0 -14
  257. data/lib/atome/renderers/html/opal_browser.rb +0 -6
  258. data/lib/atome/renderers/html/spatial.rb +0 -28
  259. data/lib/atome/renderers/html/utility.rb +0 -17
  260. data/lib/atome/renderers/opal/extensions/atome.rb +0 -29
  261. data/lib/atome/renderers/opal/extensions/ping.rb +0 -18
  262. data/lib/atome/renderers/renderer.rb +0 -15
  263. data/lib/atome/renderers/server/server.rb +0 -10
  264. data/lib/atome/renderers/server/utility.rb +0 -6
  265. data/vendor/assets/aui.rb +0 -5
  266. data/vendor/assets/r&d/misc.rb +0 -219
  267. data/vendor/assets/r&d/ping.rb +0 -3
  268. data/vendor/assets/r&d/storage.rb +0 -9
  269. data/vendor/assets/r&d/view_example.rb +0 -21
  270. data/vendor/assets/src/js/atome/atome_helpers/atome_communication.js +0 -40
  271. data/vendor/assets/src/medias/javascripts/test.js +0 -1
  272. data/vendor/assets/src/medias/rubies/demos.rb +0 -63
  273. data/vendor/assets/src/medias/rubies/examples/add.rb +0 -24
  274. data/vendor/assets/src/medias/rubies/examples/animation.rb +0 -81
  275. data/vendor/assets/src/medias/rubies/examples/atome_new.rb +0 -27
  276. data/vendor/assets/src/medias/rubies/examples/attach.rb +0 -15
  277. data/vendor/assets/src/medias/rubies/examples/attached.rb +0 -15
  278. data/vendor/assets/src/medias/rubies/examples/auto_height.rb +0 -5
  279. data/vendor/assets/src/medias/rubies/examples/auto_width.rb +0 -4
  280. data/vendor/assets/src/medias/rubies/examples/batch.rb +0 -17
  281. data/vendor/assets/src/medias/rubies/examples/blur.rb +0 -4
  282. data/vendor/assets/src/medias/rubies/examples/bottom.rb +0 -3
  283. data/vendor/assets/src/medias/rubies/examples/box.rb +0 -20
  284. data/vendor/assets/src/medias/rubies/examples/center.rb +0 -21
  285. data/vendor/assets/src/medias/rubies/examples/circle.rb +0 -3
  286. data/vendor/assets/src/medias/rubies/examples/class.rb +0 -13
  287. data/vendor/assets/src/medias/rubies/examples/clear.rb +0 -10
  288. data/vendor/assets/src/medias/rubies/examples/clone.rb +0 -35
  289. data/vendor/assets/src/medias/rubies/examples/code.rb +0 -11
  290. data/vendor/assets/src/medias/rubies/examples/color.rb +0 -73
  291. data/vendor/assets/src/medias/rubies/examples/create_atome_in_atome.rb +0 -13
  292. data/vendor/assets/src/medias/rubies/examples/cursor.rb +0 -7
  293. data/vendor/assets/src/medias/rubies/examples/delete.rb +0 -42
  294. data/vendor/assets/src/medias/rubies/examples/depth.rb +0 -6
  295. data/vendor/assets/src/medias/rubies/examples/detached.rb +0 -13
  296. data/vendor/assets/src/medias/rubies/examples/drag.rb +0 -98
  297. data/vendor/assets/src/medias/rubies/examples/drop.rb +0 -26
  298. data/vendor/assets/src/medias/rubies/examples/edit.rb +0 -12
  299. data/vendor/assets/src/medias/rubies/examples/element.rb +0 -6
  300. data/vendor/assets/src/medias/rubies/examples/empty_atome.rb +0 -12
  301. data/vendor/assets/src/medias/rubies/examples/fullscreen.rb +0 -15
  302. data/vendor/assets/src/medias/rubies/examples/grab.rb +0 -5
  303. data/vendor/assets/src/medias/rubies/examples/height.rb +0 -7
  304. data/vendor/assets/src/medias/rubies/examples/hide.rb +0 -7
  305. data/vendor/assets/src/medias/rubies/examples/id.rb +0 -14
  306. data/vendor/assets/src/medias/rubies/examples/image.rb +0 -8
  307. data/vendor/assets/src/medias/rubies/examples/left.rb +0 -7
  308. data/vendor/assets/src/medias/rubies/examples/link.rb +0 -22
  309. data/vendor/assets/src/medias/rubies/examples/markers.rb +0 -48
  310. data/vendor/assets/src/medias/rubies/examples/materials.rb +0 -15
  311. data/vendor/assets/src/medias/rubies/examples/matrix.rb +0 -102
  312. data/vendor/assets/src/medias/rubies/examples/matrix_changes.rb +0 -483
  313. data/vendor/assets/src/medias/rubies/examples/matrix_simple.rb +0 -32
  314. data/vendor/assets/src/medias/rubies/examples/monitoring.rb +0 -70
  315. data/vendor/assets/src/medias/rubies/examples/mute.rb +0 -22
  316. data/vendor/assets/src/medias/rubies/examples/on.rb +0 -26
  317. data/vendor/assets/src/medias/rubies/examples/opacity.rb +0 -5
  318. data/vendor/assets/src/medias/rubies/examples/over.rb +0 -21
  319. data/vendor/assets/src/medias/rubies/examples/pause.rb +0 -15
  320. data/vendor/assets/src/medias/rubies/examples/physical.rb +0 -19
  321. data/vendor/assets/src/medias/rubies/examples/play.rb +0 -15
  322. data/vendor/assets/src/medias/rubies/examples/read.rb +0 -11
  323. data/vendor/assets/src/medias/rubies/examples/refresh.rb +0 -8
  324. data/vendor/assets/src/medias/rubies/examples/remove.rb +0 -16
  325. data/vendor/assets/src/medias/rubies/examples/repeat.rb +0 -6
  326. data/vendor/assets/src/medias/rubies/examples/right.rb +0 -3
  327. data/vendor/assets/src/medias/rubies/examples/rotate.rb +0 -4
  328. data/vendor/assets/src/medias/rubies/examples/schedule.rb +0 -13
  329. data/vendor/assets/src/medias/rubies/examples/shadow.rb +0 -84
  330. data/vendor/assets/src/medias/rubies/examples/size.rb +0 -8
  331. data/vendor/assets/src/medias/rubies/examples/sort.rb +0 -18
  332. data/vendor/assets/src/medias/rubies/examples/style.rb +0 -4
  333. data/vendor/assets/src/medias/rubies/examples/tags.rb +0 -10
  334. data/vendor/assets/src/medias/rubies/examples/text.rb +0 -39
  335. data/vendor/assets/src/medias/rubies/examples/time.rb +0 -18
  336. data/vendor/assets/src/medias/rubies/examples/to_px.rb +0 -10
  337. data/vendor/assets/src/medias/rubies/examples/touch.rb +0 -56
  338. data/vendor/assets/src/medias/rubies/examples/vector.rb +0 -39
  339. data/vendor/assets/src/medias/rubies/examples/video.rb +0 -65
  340. data/vendor/assets/src/medias/rubies/examples/wait.rb +0 -8
  341. data/vendor/assets/src/medias/rubies/examples/web.rb +0 -13
  342. data/vendor/assets/src/medias/rubies/examples/width.rb +0 -6
  343. data/vendor/assets/src/medias/rubies/test.rb +0 -1
  344. data/vendor/assets/src/medias/rubies/text_read.rb +0 -1
  345. data/vendor/assets/src/medias/rubies/unstable/!run.rb +0 -16
  346. data/vendor/assets/src/medias/rubies/unstable/_2_solve.rb +0 -72
  347. data/vendor/assets/src/medias/rubies/unstable/_attach.rb +0 -12
  348. data/vendor/assets/src/medias/rubies/unstable/_audio.rb +0 -231
  349. data/vendor/assets/src/medias/rubies/unstable/_dataset.rb +0 -257
  350. data/vendor/assets/src/medias/rubies/unstable/_matrix.rb +0 -58
  351. data/vendor/assets/src/medias/rubies/unstable/_os.rb +0 -29
  352. data/vendor/assets/src/medias/rubies/unstable/_table2.rb +0 -108
  353. data/vendor/assets/src/medias/rubies/unstable/_vie.rb +0 -211
  354. data/vendor/assets/src/medias/rubies/users/code.rb +0 -6
  355. /data/lib/{atome/renderers → platform_specific}/opal/opal.rb +0 -0
  356. /data/lib/{atome/renderers → platform_specific}/opal/opal_parser.rb +0 -0
  357. /data/{vendor/assets/src/utilities/mode.rb → lib/renderers/html/communication.rb} +0 -0
  358. /data/{vendor/assets/src/medias/rubies/unstable/_test.rb → lib/renderers/html/security.rb} +0 -0
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ b = box({ top: 166, data: :hello })
4
+ c=color({ id: :col1, red: 1, blue: 1})
5
+
6
+ b.instance_variable_set("@top", 30)
7
+ b.instance_variable_set("@apply", [c.id])
8
+ b.instance_variable_set("@path", './medias/images/red_planet.png' )
9
+
10
+ b.instance_variable_set("@smooth", 30)
11
+ wait 1 do
12
+ b.refresh
13
+ b.instance_variable_set("@left", 300)
14
+ wait 1 do
15
+ b.refresh
16
+ b.instance_variable_set("@type", :text)
17
+ wait 1 do
18
+ b.refresh
19
+ b.instance_variable_set("@type", :image)
20
+ wait 1 do
21
+ b.refresh
22
+ end
23
+ end
24
+ end
25
+ end
26
+ # i=image(:green_planet)
27
+ # alert i.path
28
+ # i.instance_variable_set("@path", './medias/images/red_planet.png')
29
+ # wait 2 do
30
+ # i.refresh
31
+ # # i.path'./medias/images/red_planet.png'
32
+ # end
33
+
34
+
35
+ #
36
+ # b.instance_variable_set("@left", 300)
37
+ # b.instance_variable_set("@top", 400)
38
+ # # b.instance_variable_set("@width", 150)
39
+ #
40
+ # # b.instance_variable_set("@smooth", 9)
41
+ # # new({particle: :tototo})
42
+ #
43
+ # wait 1 do
44
+ # b.refresh
45
+ # # b.instance_variable_set("@type", :text)
46
+ # b.instance_variable_set("@smooth", 9)
47
+ # b.instance_variable_set("@apply", [c.id])
48
+ # wait 1 do
49
+ # b.refresh
50
+ # # b.instance_variable_set("@type", :image)
51
+ # # wait 1 do
52
+ # # alert b.type
53
+ # # # b.refresh
54
+ # # end
55
+ # end
56
+ # end
57
+ #
58
+ # t=text(:test)
59
+ # t.touch(true) do
60
+ # b.smooth(9)
61
+ # b.refresh
62
+ # end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ b = box({ top: 166 , id: :the_box, left: 333})
4
+ b.color({id: :new_col, red: 1})
5
+ b.color({id: :other_col, green: 1})
6
+ # b.paint({gradient: [:other_col, :new_col]})
7
+ color({id: :last_col, green: 0.3, blue: 0.5})
8
+ color({id: :last_col2, red: 1, blue: 0.5})
9
+
10
+ b.shadow({
11
+ id: :s1,
12
+ # affect: [:the_circle],
13
+ left: 9, top: 3, blur: 9,
14
+ invert: false,
15
+ red: 0, green: 0, blue: 0, alpha: 1
16
+ })
17
+ wait 1 do
18
+ b.remove(:other_col)
19
+ wait 1 do
20
+ b.remove(:new_col)
21
+ wait 1 do
22
+ b.remove(:box_color)
23
+ wait 1 do
24
+ b.apply(:last_col)
25
+ wait 1 do
26
+ b.apply(:last_col2)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ b.touch(true) do
33
+ puts "before => #{b.apply}"
34
+ b.remove({all: :color})
35
+ puts "after => #{b.apply}"
36
+ wait 1 do
37
+ b.paint({id: :the_gradient_1,gradient: [:box_color, :circle_color]})
38
+ b.paint({id: :the_gradient,gradient: [:other_col, :new_col]})
39
+ wait 1 do
40
+ b.remove(:the_gradient)
41
+ wait 1 do
42
+ b.remove(all: :shadow)
43
+ end
44
+ end
45
+ end
46
+ end
47
+
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ c=circle({width: 66, height: 66})
5
+ t1=c.text({id: :first, data: 0, left: 28})
6
+ cc=circle({width: 66, height: 66, left: 0 })
7
+ t2=cc.text({id: :second, data: 0, left: 28})
8
+ first_repeater=repeat(1, repeat = 99) do |counter|
9
+ t1.data(counter)
10
+ end
11
+
12
+ my_repeater=repeat(3, repeat = 9) do |counter|
13
+ t2.data(counter)
14
+ end
15
+
16
+ c.touch(true) do
17
+ stop({ repeat: first_repeater })
18
+ t1.data(:stopped)
19
+ end
20
+
21
+ cc.touch(true) do
22
+ stop({ repeat: my_repeater })
23
+ t2.data(:stopped)
24
+ end
25
+
26
+ # use Float::INFINITY to infinite repeat
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ m = shape({ id: :the_shape, width: 333, left: 130, top: 30, right: 100, height: 399, smooth: 8, color: :yellowgreen, })
4
+ m.drag(true)
5
+ m.on(:resize) do |event|
6
+ puts event[:dx]
7
+ end
8
+
9
+ m.resize({ size: { min: { width: 90, height: 190 }, max: { width: 300, height: 600 } } }) do |event|
10
+ puts "width is is #{event[:rect][:width]}"
11
+ end
12
+
13
+ t=text({data: ' click me to unbind resize'})
14
+ t.touch(true) do
15
+ t.data('resize unbinded')
16
+ m.resize(:remove)
17
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ b = box({ id: :the_container, width: 300, height: 300 })
4
+ b.box({top: 500, color: :red})
5
+ cc=b.circle({ top: 160, id: :the_circle })
6
+
7
+ initial_height=cc.height
8
+ b.overflow(:scroll) do |event|
9
+ new_height = initial_height + event[:top]
10
+ cc.height(new_height)
11
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ c=circle({left: 220})
5
+ t=text({left: 550,data: :hello,password: { read: {atome: :my_secret} }})
6
+ b = box({ id: :the_box, left: 66,smooth: 1.789,
7
+ password: {
8
+ read: {
9
+ atome: :the_pass,
10
+ smooth: :read_pass
11
+ },
12
+ write: {
13
+ atome: :the_write_pass,
14
+ smooth: :write_pass
15
+ }
16
+ }
17
+ })
18
+
19
+
20
+
21
+ b.authorise({ read: {atome: :the_pass,smooth: :read_pass }, write: {smooth: :write_pass}, destroy: true} )
22
+ puts b.smooth
23
+ # next will be rejected because destroy: true
24
+ puts b.smooth
25
+ #
26
+ b.authorise({ read: {atome: :wrong_pass,smooth: :no_read_pass }, write: {smooth: :wrong_write_pass}, destroy: false} )
27
+ puts 'will send the wrong password'
28
+ puts b.smooth
29
+
30
+ b.authorise({ read: {atome: :wrong_pass,smooth: :read_pass }, write: {smooth: :wrong_write_pass}, destroy: false} )
31
+ puts "'with send the right password it'll works"
32
+ puts b.smooth
33
+ # authorise has two params the first is the password to authorise the second is used to destroy the password or keep for
34
+ # further alteration of the particle
35
+ wait 1 do
36
+ b.authorise({write: {smooth: :write_pass}, destroy: true} )
37
+ b.smooth(22)
38
+ wait 1 do
39
+ b.smooth(12)
40
+ wait 1 do
41
+ b.authorise({write: {smooth: :write_pass}, destroy: false} )
42
+ b.smooth(66)
43
+ wait 1 do
44
+ b.authorise({write: {smooth: :false_pass, atome: :no_apss, destroy: true}} )
45
+ b.smooth(6)
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+
52
+
53
+
54
+
55
+
56
+ # ###########
57
+
58
+ # b.password(:kgjhg)
59
+ # puts b.password
60
+ # puts b.left(555)
61
+ #
62
+ # b.authorise(:poio, false)
63
+ # b.smooth(22)
64
+
65
+
66
+ # b.authorise(:star_wars, false)
67
+ # b.smooth(22)
68
+ # b.authorise(:star_war, true)
69
+ # b.smooth(66)
70
+ # puts b.history({ operation: :write, id: :the_box, particle: :smooth })
71
+ # puts '----'
72
+ # puts "b.security : #{b.security}"
73
+ # puts '----'
74
+ # puts "user hashed pass is : #{grab(Universe.current_user).password}"
75
+ # b.authorise(:star_wars, false)
76
+ # puts "b.smooth is : #{b.smooth}"
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ t = text({ data: 'touch me to select all', id: :the_text })
4
+ b = box({ left: 12, id: :the_box })
5
+ circle({ left: 230, id: :the_circle })
6
+ image({ path: 'medias/images/red_planet.png', id: :the__red_planet, top: 233 })
7
+
8
+ t.touch(true) do
9
+ puts "1 current_user - #{grab(Universe.current_user).selection}"
10
+ puts "1 - b selected : #{b.selected}"
11
+ grab(:view).attached.each do |atome_found|
12
+ grab(atome_found).selected(true)
13
+ end
14
+ puts "2 - current_user : #{grab(Universe.current_user).selection}"
15
+ puts "2 - b selected : #{b.selected}"
16
+ selected_items = grab(Universe.current_user).selection # we create a group
17
+
18
+ selected_items.each do |atome_id_selected|
19
+ atome_selected=grab(atome_id_selected)
20
+ atome_selected.width=rand(333)
21
+ atome_selected.height=rand(333)
22
+
23
+ end
24
+
25
+ b.selected(false)
26
+ puts "3 current_user- #{grab(Universe.current_user).selection}"
27
+ puts "3 - b selected : #{b.selected}"
28
+ end
29
+
30
+
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ c = circle({ id: :the_circle, left: 122, color: :orange, drag: { move: true, inertia: true, lock: :start } })
4
+ c.color({ id: :col1, red: 1, blue: 1 })
5
+
6
+ c.shadow({
7
+ id: :s1,
8
+ # affect: [:the_circle],
9
+ left: 9, top: 3, blur: 9,
10
+ invert: false,
11
+ red: 0, green: 0, blue: 0, alpha: 1
12
+ })
13
+
14
+ shadow({
15
+ id: :s2,
16
+ affect: [:the_circle],
17
+ left: 3, top: 9, blur: 9,
18
+ invert: true,
19
+ red: 0, green: 0, blue: 0, alpha: 1
20
+ })
21
+
22
+ c.shadow({
23
+ id: :s4,
24
+ left: 20, top: 0, blur: 9,
25
+ option: :natural,
26
+ red: 0, green: 1, blue: 0, alpha: 1
27
+ })
28
+
29
+ wait 2 do
30
+ c.remove(:s4)
31
+ wait 2 do
32
+ c.remove({ all: :shadow })
33
+ end
34
+ end
35
+
36
+
37
+ the_text = text({ data: 'hello for al the people in front of their machine', center: true, top: 222, width: 777, component: { size: 66 } })
38
+
39
+
40
+
41
+ the_text.shadow({
42
+ id: :s4,
43
+ left: 20, top: 0, blur: 9,
44
+ option: :natural,
45
+ red: 0, green: 1, blue: 0, alpha: 1
46
+ })
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ shape(
4
+ { renderers: [:html], id: :my_test_box, type: :shape, apply: [:shape_color],
5
+ left: 120, top: 0, width: 100, smooth: 15, height: 100, overflow: :visible, attached: [], center: true
6
+ })
@@ -1,5 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  b = box({ width: 333, left: 333 })
4
+ b.smooth(9)
5
+
6
+ wait 2 do
7
+ b.smooth([33, 2, 90])
8
+ end
4
9
 
5
- b.smooth([33, 2, 90])
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+ b = box
3
+
4
+ b.style({ left: 33, width: 44, rotate: 23, color: :yellowgreen, blur: 44 })
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+ b = box({ id: :the_box })
3
+ b.data(:canyouwritethis)
4
+ b.rotate(33)
5
+ b.rotate(88)
6
+ b.rotate(99)
7
+ b.rotate(12)
8
+ b.rotate(6)
9
+ b.data
10
+ b.touch(true) do
11
+ b.data(:super)
12
+ b.data
13
+ # operation has two option write or read, it filter the history on those two options, write retrieve all alteration
14
+ # of the particle , read list everytime a particle was get
15
+ # id retrieve all operation on a given ID
16
+ # particle retrieve all operation on a given particle
17
+ # alert b.retrieve({ operation: :write, id: :the_box, particle: :data })
18
+ end
19
+
20
+
21
+ # alert b.instance_variable_get('@history')
22
+ box_rotate_history=b.history({ operation: :write, id: :the_box, particle: :rotate })
23
+ puts "get all all rotate write operation : #{box_rotate_history}"
24
+ first_rotate_operation_state=b.history({ operation: :write, id: :the_box, particle: :rotate })[0][:sync]
25
+
26
+ # we check if an operation synced (that means saved on atome's server)
27
+ puts "first rotate operation state : #{box_rotate_history[0]}"
28
+
29
+ # we check if an operation synced (that means saved on atome's server)
30
+ puts "first rotate operation initial state : #{box_rotate_history[0]}"
31
+ puts "synced : #{first_rotate_operation_state}"
32
+ first_rotate_operation_number=b.history({ operation: :write, id: :the_box, particle: :rotate })[0][:operation]
33
+ puts "first rotate 'write' operation number is: #{first_rotate_operation_number}"
34
+
35
+ # now we sync the state
36
+ Universe.synchronised(first_rotate_operation_number, :star_wars)
37
+ # now we check if it's synced
38
+ box_rotate_history=b.history({ operation: :write, id: :the_box, particle: :rotate })
39
+ puts "new state for first rotate operation : #{box_rotate_history[0]}"
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ b=box
4
+ b.circle({left: 0, top: 0, tag: {group: :to_grid}})
5
+ b.box({left: 120, top: 120, tag: {group: :from_grid}})
6
+ b.circle({left: 240, top: 240, tag: {group: :from_grid}})
7
+ b.box({left: 330, top: 330,tag: {group: :to_grid}})
8
+ b.box({left: 330, top: 600,tag: :no_tag})
9
+
10
+
11
+ wait 1 do
12
+ tagged(:group).each do |atome_id|
13
+ grab(atome_id).color(:green)
14
+ wait 1 do
15
+ tagged({group: :to_grid }).each do |atome_id|
16
+ grab(atome_id).color(:blue)
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+
23
+
24
+
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+ A.terminal('pwd') do |data|
3
+ text "terminal response :\n #{data}"
4
+ end
@@ -0,0 +1,5 @@
1
+ frozen_string_literal
2
+
3
+ t2 = text({ data: ['this is ', :super, { data: 'cool', color: :red, id: :new_one }], component: { size: 33 }, left: 120 })
4
+ the_text = text({ data: 'hello for al the people in front of their machine', center: true, top: 120, width: 77, component: { size: 11 } })
5
+
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ b = box({ left: 666, color: :blue, smooth: 6, id: :the_box2 })
4
+
5
+ t=text({id: :the_text, data: 'type of touch : ?'})
6
+
7
+ t.touch(:down) do
8
+ b.touch({remove: :down})
9
+ # b.touch(:remove) # or b.touch(false) to remove all touches bindings
10
+ t.data('touch down killed')
11
+ end
12
+ b.touch(true) do
13
+ # t.data('type of touch : ?')
14
+ b.color(:red)
15
+ puts 'box tapped'
16
+ end
17
+
18
+ b.touch(:long) do
19
+ t.data('type of touch is : long ')
20
+ b.color(:black)
21
+ end
22
+
23
+ b.touch(:up) do
24
+
25
+ t.data('type of touch is : up ')
26
+ b.color(:orange)
27
+ end
28
+
29
+ b.touch(:down) do
30
+ t.data('type of touch is : down ')
31
+ b.color(:white)
32
+ end
33
+
34
+ b.touch(:double) do
35
+ t.color(:red)
36
+ t.data('type of touch is : double ')
37
+ b.color(:yellowgreen)
38
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ b = box({ top: 166, data: :hello,path: './medias/images/red_planet.png' })
4
+ b.color({ id: :col1, red: 1, blue: 1})
5
+
6
+ # b.instance_variable_set("@top", 30)
7
+ # b.instance_variable_set("@apply", [c.id])
8
+ # b.instance_variable_set("@path", )
9
+
10
+ # b.instance_variable_set("@smooth", 30)
11
+ wait 1 do
12
+ b.type=:text
13
+ b.refresh
14
+ wait 1 do
15
+ b.type=:image
16
+ b.refresh
17
+ end
18
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ puts "atomes : #{Universe.atomes}"
4
+ puts "user_atomes : #{Universe.user_atomes}"
5
+ puts "particle_list : #{Universe.particle_list}"
6
+ puts "users : #{Universe.users}"
7
+ puts "current_machine : #{Universe.current_machine}"
8
+ puts "internet connected : #{Universe.internet}"
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ edition = "M257.7 752c2 0 4-0.2 6-0.5L431.9 722c2-0.4 3.9-1.3 5.3-2.8l423.9-423.9c3.9-3.9 3.9-10.2 0-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2c-1.9 11.1 1.5 21.9 9.4 29.8 6.6 6.4 14.9 9.9 23.8 9.9z m67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z"
4
+
5
+ v = vector({ data: { path: { d: edition, id: :p1, stroke: :black, 'stroke-width' => 37, fill: :red } } })
6
+
7
+ wait 1 do
8
+ v.data(circle: { cx: 1000, cy: 1000, r: 340, id: :p2, stroke: :green, 'stroke-width' => 35, fill: :yellow })
9
+ wait 1 do
10
+ v.color(:cyan) # colorise everything with the color method
11
+ wait 1 do
12
+ v.shadow({
13
+ id: :s4,
14
+ left: 20, top: 0, blur: 9,
15
+ option: :natural,
16
+ red: 0, green: 1, blue: 0, alpha: 1
17
+ })
18
+ v.component(p2: {fill: :blue,'stroke-width' => 166 })
19
+ v.left(222)
20
+ end
21
+ end
22
+ end
23
+
24
+
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ if Universe.internet
4
+ v = video({ path: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4" })
5
+ else
6
+ v = video(:video_missing)
7
+ end
8
+
9
+ v.touch(true) do
10
+ v.play(true)
11
+ wait 3 do
12
+ v.play(66)
13
+ end
14
+ end
@@ -0,0 +1,6 @@
1
+ # # frozen_string_literal: true
2
+ b = box
3
+
4
+ wait 2 do
5
+ b.color(:red)
6
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ b = box
4
+
5
+ b.www({ path: "https://www.youtube.com/embed/usQDazZKWAk", left: 333 })
6
+
7
+ Atome.new(
8
+ renderers: [:html], id: :youtube1, type: :www, attach: [:view], path: "https://www.youtube.com/embed/fjJOyfQCMvc?si=lPTz18xXqIfd_3Ql", left: 33, top: 33, width: 199, height: 199,
9
+
10
+ )
@@ -5,4 +5,4 @@
5
5
  # open the console in your browser ou your native app and should see the text below
6
6
  puts "hello world"
7
7
 
8
- require 'application/required_example'
8
+ require './required_example'
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ # my code here ..
4
+
5
+ # open the console in your browser ou your native app and should see the text below
6
+ cmd=text ({data: "ruby run_server.rb", left: 0, top: 0, edit: true})
7
+ response_text=text ({data: "response_here", top: 444, edit: true})
8
+ image(:red_planet)
9
+
10
+ image({path: 'medias/images/logos/atome.svg', width: 33})
11
+
12
+ commanditor=circle({left: 6,top: 255, width: 33, height: 33, color: :black})
13
+ commanditor.touch(true) do
14
+ cmd_to_send=cmd.data.downcase
15
+ A.terminal(cmd_to_send) do |data|
16
+ response_text.data(data.downcase)
17
+ end
18
+ end
19
+
20
+ evaluator=circle({top: 255, width: 33, height: 33, color: :orange})
21
+ evaluator.touch(true) do
22
+ code_found=cmd.data.downcase
23
+ eval(code_found)
24
+ end
25
+ terminator=circle({left: 190,top: 255, width: 33, height: 33, color: :red})
26
+ terminator.touch(true) do
27
+ JS.global[:location].reload()
28
+ end
29
+