atome 0.1.00009 → 0.4.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (368) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/README.md +74 -6
  4. data/Rakefile +15 -6
  5. data/app_builder_helpers/Rakefile +184 -24
  6. data/documentation/atome.md +14 -0
  7. data/documentation/database.JPG +0 -0
  8. data/documentation/framework/apis.md +14 -0
  9. data/documentation/framework/atome_explained.md +179 -0
  10. data/documentation/framework/box_content.md +53 -0
  11. data/documentation/framework/buld_the_gem.md +52 -0
  12. data/documentation/framework/datas_flows.md +28 -0
  13. data/documentation/framework/enhance_atome.md +79 -0
  14. data/documentation/framework/folder_architecture.md +47 -0
  15. data/documentation/framework/technical/rendering_flow.md +18 -0
  16. data/documentation/framework/technical/technical_description.md +23 -0
  17. data/documentation/framework/what_is_it.md +65 -0
  18. data/documentation/framework/what_it_can_do.md +25 -0
  19. data/documentation/images/1.png +0 -0
  20. data/documentation/images/2.png +0 -0
  21. data/documentation/images/3.png +0 -0
  22. data/documentation/images/atome.svg +12 -0
  23. data/documentation/images/list.png +0 -0
  24. data/documentation/images/logos/cordova.png +0 -0
  25. data/documentation/images/logos/freebsd.png +0 -0
  26. data/documentation/images/logos/opal.png +0 -0
  27. data/documentation/images/logos/puma.png +0 -0
  28. data/documentation/images/logos/roda.svg +1 -0
  29. data/documentation/images/logos/ruby.png +0 -0
  30. data/documentation/images/logos/tauri.png +0 -0
  31. data/documentation/installation/atome_server.md +184 -0
  32. data/documentation/tutorials/first_steps.md +148 -0
  33. data/documentation/tutorials/tutorials.md +15 -0
  34. data/documentation/tutorials/working_with_atome.md +60 -0
  35. data/exe/atome +178 -53
  36. data/lib/atome/atome_native_extensions.rb +5 -0
  37. data/lib/atome/extensions/helper.rb +112 -0
  38. data/lib/atome/kernel/atome.rb +99 -0
  39. data/lib/atome/kernel/generators/generator.rb +517 -0
  40. data/lib/atome/kernel/generators/genesis.rb +277 -0
  41. data/lib/atome/kernel/generators/sanitizer.rb +73 -0
  42. data/lib/atome/kernel/generators/shapes.rb +55 -0
  43. data/lib/atome/kernel/helpers/geolocation.rb +14 -0
  44. data/lib/atome/kernel/helpers/internal_methods.rb +173 -0
  45. data/lib/atome/kernel/helpers/ping.rb +17 -0
  46. data/lib/atome/kernel/helpers/sha.rb +6 -0
  47. data/lib/atome/kernel/helpers/utilities.rb +39 -0
  48. data/lib/atome/kernel/properties/essential.rb +77 -0
  49. data/lib/atome/kernel/sparkle.rb +38 -0
  50. data/lib/atome/kernel/universe.rb +37 -0
  51. data/lib/atome/renderers/headless/properties/generator.rb +1 -0
  52. data/lib/atome/renderers/opal/atome_opal_extensions.rb +7 -0
  53. data/lib/atome/renderers/opal/extensions/color.rb +23 -0
  54. data/lib/atome/renderers/opal/extensions/geolocation.rb +13 -0
  55. data/lib/atome/renderers/opal/extensions/ping.rb +18 -0
  56. data/lib/atome/renderers/opal/extensions/sha.rb +12 -0
  57. data/lib/atome/renderers/opal/opal_browser.rb +2 -1
  58. data/lib/atome/renderers/opal/opal_parser.rb +1 -0
  59. data/lib/atome/renderers/opal/properties/generator.rb +1 -0
  60. data/lib/atome/renderers/renderer.rb +13 -0
  61. data/lib/atome/renderers/server/properties/generator.rb +9 -0
  62. data/lib/atome/version.rb +2 -1
  63. data/lib/atome.rb +46 -2
  64. data/vendor/assets/Guardfile +4 -0
  65. data/vendor/assets/Rakefile +3 -0
  66. data/vendor/assets/application/index.rb +4 -0
  67. data/vendor/assets/build/css/style.css +25 -8
  68. data/vendor/assets/build/favicon.ico +0 -0
  69. data/vendor/assets/build/index.html +15 -4
  70. data/vendor/assets/build/js/atome/atome.js +82 -0
  71. data/vendor/assets/build/js/third_parties/fabric.min.js +1 -0
  72. data/vendor/assets/build/js/third_parties/interact.min.js +2 -3
  73. data/vendor/assets/build/js/third_parties/ping.min.js +2 -0
  74. data/vendor/assets/build/js/third_parties/sha256.min.js +9 -0
  75. data/vendor/assets/build/js/third_parties/three.min.js +6 -0
  76. data/vendor/assets/build/js/third_parties/w3color.js +646 -0
  77. data/vendor/assets/build/js/third_parties/zim.min.js +1 -0
  78. data/vendor/assets/build/medias/audios/audio_missing.wav +0 -0
  79. data/vendor/assets/build/medias/audios/clap.wav +0 -0
  80. data/vendor/assets/build/medias/audios/cowbell.wav +0 -0
  81. data/vendor/assets/build/medias/audios/guitar.wav +0 -0
  82. data/vendor/assets/build/medias/audios/hihat.wav +0 -0
  83. data/vendor/assets/build/medias/audios/kick.wav +0 -0
  84. data/vendor/assets/build/medias/audios/riff.m4a +0 -0
  85. data/vendor/assets/build/medias/audios/snare.wav +0 -0
  86. data/vendor/assets/build/medias/audios/tom.wav +0 -0
  87. data/vendor/assets/build/medias/fonts/Dancing_Script/DancingScript-VariableFont_wght.ttf +0 -0
  88. data/vendor/assets/build/medias/fonts/Dancing_Script/OFL.txt +93 -0
  89. data/vendor/assets/build/medias/fonts/Dancing_Script/README.txt +66 -0
  90. data/vendor/assets/build/medias/fonts/Dancing_Script/static/DancingScript-Bold.ttf +0 -0
  91. data/vendor/assets/build/medias/fonts/Dancing_Script/static/DancingScript-Medium.ttf +0 -0
  92. data/vendor/assets/build/medias/fonts/Dancing_Script/static/DancingScript-Regular.ttf +0 -0
  93. data/vendor/assets/build/medias/fonts/Dancing_Script/static/DancingScript-SemiBold.ttf +0 -0
  94. data/vendor/assets/build/medias/fonts/Mate_SC/MateSC-Regular.ttf +0 -0
  95. data/vendor/assets/build/medias/fonts/Mate_SC/OFL.txt +94 -0
  96. data/vendor/assets/build/medias/fonts/Raleway/OFL.txt +93 -0
  97. data/vendor/assets/build/medias/fonts/Raleway/README.txt +81 -0
  98. data/vendor/assets/build/medias/fonts/Raleway/Raleway-Italic-VariableFont_wght.ttf +0 -0
  99. data/vendor/assets/build/medias/fonts/Raleway/Raleway-VariableFont_wght.ttf +0 -0
  100. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-Black.ttf +0 -0
  101. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-BlackItalic.ttf +0 -0
  102. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-Bold.ttf +0 -0
  103. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-BoldItalic.ttf +0 -0
  104. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-ExtraBold.ttf +0 -0
  105. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-ExtraBoldItalic.ttf +0 -0
  106. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-ExtraLight.ttf +0 -0
  107. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-ExtraLightItalic.ttf +0 -0
  108. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-Italic.ttf +0 -0
  109. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-Light.ttf +0 -0
  110. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-LightItalic.ttf +0 -0
  111. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-Medium.ttf +0 -0
  112. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-MediumItalic.ttf +0 -0
  113. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-Regular.ttf +0 -0
  114. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-SemiBold.ttf +0 -0
  115. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-SemiBoldItalic.ttf +0 -0
  116. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-Thin.ttf +0 -0
  117. data/vendor/assets/build/medias/fonts/Raleway/static/Raleway-ThinItalic.ttf +0 -0
  118. data/vendor/assets/build/medias/fonts/Roboto_Slab/LICENSE.txt +202 -0
  119. data/vendor/assets/build/medias/fonts/Roboto_Slab/README.txt +71 -0
  120. data/vendor/assets/build/medias/fonts/Roboto_Slab/RobotoSlab-VariableFont_wght.ttf +0 -0
  121. data/vendor/assets/build/medias/fonts/Roboto_Slab/static/RobotoSlab-Black.ttf +0 -0
  122. data/vendor/assets/build/medias/fonts/Roboto_Slab/static/RobotoSlab-Bold.ttf +0 -0
  123. data/vendor/assets/build/medias/fonts/Roboto_Slab/static/RobotoSlab-ExtraBold.ttf +0 -0
  124. data/vendor/assets/build/medias/fonts/Roboto_Slab/static/RobotoSlab-ExtraLight.ttf +0 -0
  125. data/vendor/assets/build/medias/fonts/Roboto_Slab/static/RobotoSlab-Light.ttf +0 -0
  126. data/vendor/assets/build/medias/fonts/Roboto_Slab/static/RobotoSlab-Medium.ttf +0 -0
  127. data/vendor/assets/build/medias/fonts/Roboto_Slab/static/RobotoSlab-Regular.ttf +0 -0
  128. data/vendor/assets/build/medias/fonts/Roboto_Slab/static/RobotoSlab-SemiBold.ttf +0 -0
  129. data/vendor/assets/build/medias/fonts/Roboto_Slab/static/RobotoSlab-Thin.ttf +0 -0
  130. data/vendor/assets/build/medias/fonts/Vollkorn/OFL.txt +93 -0
  131. data/vendor/assets/build/medias/fonts/Vollkorn/README.txt +75 -0
  132. data/vendor/assets/build/medias/fonts/Vollkorn/Vollkorn-Italic-VariableFont_wght.ttf +0 -0
  133. data/vendor/assets/build/medias/fonts/Vollkorn/Vollkorn-VariableFont_wght.ttf +0 -0
  134. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-Black.ttf +0 -0
  135. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-BlackItalic.ttf +0 -0
  136. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-Bold.ttf +0 -0
  137. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-BoldItalic.ttf +0 -0
  138. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-ExtraBold.ttf +0 -0
  139. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-ExtraBoldItalic.ttf +0 -0
  140. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-Italic.ttf +0 -0
  141. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-Medium.ttf +0 -0
  142. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-MediumItalic.ttf +0 -0
  143. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-Regular.ttf +0 -0
  144. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-SemiBold.ttf +0 -0
  145. data/vendor/assets/build/medias/fonts/Vollkorn/static/Vollkorn-SemiBoldItalic.ttf +0 -0
  146. data/vendor/assets/build/medias/images/Icon_Help.png +0 -0
  147. data/vendor/assets/build/medias/images/atome.svg +12 -0
  148. data/vendor/assets/build/medias/images/avion.jpg +0 -0
  149. data/vendor/assets/build/medias/images/ballanim.png +0 -0
  150. data/vendor/assets/build/medias/images/beach.jpg +0 -0
  151. data/vendor/assets/build/medias/images/blank.png +0 -0
  152. data/vendor/assets/build/medias/images/boat.png +0 -0
  153. data/vendor/assets/build/medias/images/cache.svg +10 -0
  154. data/vendor/assets/build/medias/images/dices.png +0 -0
  155. data/vendor/assets/build/medias/images/eVe_back.png +0 -0
  156. data/vendor/assets/build/medias/images/elephant.png +0 -0
  157. data/vendor/assets/build/medias/images/eyes.jpg +0 -0
  158. data/vendor/assets/build/medias/images/freebsd.png +0 -0
  159. data/vendor/assets/build/medias/images/grain_texture.png +0 -0
  160. data/vendor/assets/build/medias/images/green_planet.png +0 -0
  161. data/vendor/assets/build/medias/images/image_missing.svg +9 -0
  162. data/vendor/assets/build/medias/images/jeezs.png +0 -0
  163. data/vendor/assets/build/medias/images/keyboard.png +0 -0
  164. data/vendor/assets/build/medias/images/killer.jpg +0 -0
  165. data/vendor/assets/build/medias/images/living_room.png +0 -0
  166. data/vendor/assets/build/medias/images/logo.svg +14 -0
  167. data/vendor/assets/build/medias/images/logos/Facebook.svg +8 -0
  168. data/vendor/assets/build/medias/images/logos/GitHub Black.svg +7 -0
  169. data/vendor/assets/build/medias/images/logos/GitHub-Mark.eps +7696 -0
  170. data/vendor/assets/build/medias/images/logos/GitHub.svg +7 -0
  171. data/vendor/assets/build/medias/images/logos/TikTok.svg +11 -0
  172. data/vendor/assets/build/medias/images/logos/Twitter.svg +35 -0
  173. data/vendor/assets/build/medias/images/logos/YouTube.svg +1 -0
  174. data/vendor/assets/build/medias/images/logos/apple.svg +4 -0
  175. data/vendor/assets/build/medias/images/logos/atome.svg +12 -0
  176. data/vendor/assets/build/medias/images/logos/freebsd.png +0 -0
  177. data/vendor/assets/build/medias/images/logos/instagram.svg +6 -0
  178. data/vendor/assets/build/medias/images/logos/tiktok_back.svg +1 -0
  179. data/vendor/assets/build/medias/images/moto.png +0 -0
  180. data/vendor/assets/build/medias/images/noise.svg +17 -0
  181. data/vendor/assets/build/medias/images/piano.png +0 -0
  182. data/vendor/assets/build/medias/images/poisson.jpg +0 -0
  183. data/vendor/assets/build/medias/images/red_planet.png +0 -0
  184. data/vendor/assets/build/medias/images/sky.jpg +0 -0
  185. data/vendor/assets/build/medias/images/the_mask.svg +8 -0
  186. data/vendor/assets/build/medias/images/tile.png +0 -0
  187. data/vendor/assets/build/medias/images/tile_black.png +0 -0
  188. data/vendor/assets/build/medias/images/tile_white.png +0 -0
  189. data/vendor/assets/build/medias/javascripts/test.js +1 -0
  190. data/vendor/assets/build/medias/rubies/examples/!run.rb +16 -0
  191. data/vendor/assets/build/medias/rubies/examples/Old_examples/!demos.rb +111 -0
  192. data/vendor/assets/build/medias/rubies/examples/Old_examples/action.rb +12 -0
  193. data/vendor/assets/build/medias/rubies/examples/Old_examples/add.rb +26 -0
  194. data/vendor/assets/build/medias/rubies/examples/Old_examples/alignment.rb +27 -0
  195. data/vendor/assets/build/medias/rubies/examples/Old_examples/animation.rb +92 -0
  196. data/vendor/assets/build/medias/rubies/examples/Old_examples/atome_as_property.rb +20 -0
  197. data/vendor/assets/build/medias/rubies/examples/Old_examples/atome_list.rb +4 -0
  198. data/vendor/assets/build/medias/rubies/examples/Old_examples/atomiser.rb +17 -0
  199. data/vendor/assets/build/medias/rubies/examples/Old_examples/attach_extract.rb +13 -0
  200. data/vendor/assets/build/medias/rubies/examples/Old_examples/authorisation.rb +22 -0
  201. data/vendor/assets/build/medias/rubies/examples/Old_examples/batch.rb +6 -0
  202. data/vendor/assets/build/medias/rubies/examples/Old_examples/blend.rb +15 -0
  203. data/vendor/assets/build/medias/rubies/examples/Old_examples/blur.rb +9 -0
  204. data/vendor/assets/build/medias/rubies/examples/Old_examples/border.rb +9 -0
  205. data/vendor/assets/build/medias/rubies/examples/Old_examples/calendar.rb +5 -0
  206. data/vendor/assets/build/medias/rubies/examples/Old_examples/capture.rb +57 -0
  207. data/vendor/assets/build/medias/rubies/examples/Old_examples/center.rb +21 -0
  208. data/vendor/assets/build/medias/rubies/examples/Old_examples/child.rb +18 -0
  209. data/vendor/assets/build/medias/rubies/examples/Old_examples/clear.rb +21 -0
  210. data/vendor/assets/build/medias/rubies/examples/Old_examples/clip.rb +11 -0
  211. data/vendor/assets/build/medias/rubies/examples/Old_examples/code.rb +7 -0
  212. data/vendor/assets/build/medias/rubies/examples/Old_examples/code_editor.rb +26 -0
  213. data/vendor/assets/build/medias/rubies/examples/Old_examples/collaborate.rb +115 -0
  214. data/vendor/assets/build/medias/rubies/examples/Old_examples/convert_to_px.rb +14 -0
  215. data/vendor/assets/build/medias/rubies/examples/Old_examples/copy_paste.rb +35 -0
  216. data/vendor/assets/build/medias/rubies/examples/Old_examples/current_code.rb +14 -0
  217. data/vendor/assets/build/medias/rubies/examples/Old_examples/cursor.rb +3 -0
  218. data/vendor/assets/build/medias/rubies/examples/Old_examples/data.rb +11 -0
  219. data/vendor/assets/build/medias/rubies/examples/Old_examples/database.rb +29 -0
  220. data/vendor/assets/build/medias/rubies/examples/Old_examples/delete.rb +12 -0
  221. data/vendor/assets/build/medias/rubies/examples/Old_examples/display.rb +19 -0
  222. data/vendor/assets/build/medias/rubies/examples/Old_examples/disposition.rb +10 -0
  223. data/vendor/assets/build/medias/rubies/examples/Old_examples/double_and_long_touch.rb +23 -0
  224. data/vendor/assets/build/medias/rubies/examples/Old_examples/drag.rb +61 -0
  225. data/vendor/assets/build/medias/rubies/examples/Old_examples/drag_and_drop_import.rb +1 -0
  226. data/vendor/assets/build/medias/rubies/examples/Old_examples/drop.rb +23 -0
  227. data/vendor/assets/build/medias/rubies/examples/Old_examples/duplicate.rb +11 -0
  228. data/vendor/assets/build/medias/rubies/examples/Old_examples/edit.rb +6 -0
  229. data/vendor/assets/build/medias/rubies/examples/Old_examples/eval.rb +9 -0
  230. data/vendor/assets/build/medias/rubies/examples/Old_examples/extract_detach.rb +23 -0
  231. data/vendor/assets/build/medias/rubies/examples/Old_examples/fill.rb +10 -0
  232. data/vendor/assets/build/medias/rubies/examples/Old_examples/find.rb +37 -0
  233. data/vendor/assets/build/medias/rubies/examples/Old_examples/fit.rb +44 -0
  234. data/vendor/assets/build/medias/rubies/examples/Old_examples/fullscreen.rb +28 -0
  235. data/vendor/assets/build/medias/rubies/examples/Old_examples/generate.rb +7 -0
  236. data/vendor/assets/build/medias/rubies/examples/Old_examples/gradient.rb +24 -0
  237. data/vendor/assets/build/medias/rubies/examples/Old_examples/group.rb +21 -0
  238. data/vendor/assets/build/medias/rubies/examples/Old_examples/helper.rb +64 -0
  239. data/vendor/assets/build/medias/rubies/examples/Old_examples/history.rb +7 -0
  240. data/vendor/assets/build/medias/rubies/examples/Old_examples/hue.rb +10 -0
  241. data/vendor/assets/build/medias/rubies/examples/Old_examples/input_text.rb +54 -0
  242. data/vendor/assets/build/medias/rubies/examples/Old_examples/insert_attach.rb +13 -0
  243. data/vendor/assets/build/medias/rubies/examples/Old_examples/internationalisation.rb +10 -0
  244. data/vendor/assets/build/medias/rubies/examples/Old_examples/key.rb +19 -0
  245. data/vendor/assets/build/medias/rubies/examples/Old_examples/keyboard_shortcut.rb +69 -0
  246. data/vendor/assets/build/medias/rubies/examples/Old_examples/list_methods.rb +4 -0
  247. data/vendor/assets/build/medias/rubies/examples/Old_examples/list_types.rb +4 -0
  248. data/vendor/assets/build/medias/rubies/examples/Old_examples/listen.rb +47 -0
  249. data/vendor/assets/build/medias/rubies/examples/Old_examples/mail.rb +9 -0
  250. data/vendor/assets/build/medias/rubies/examples/Old_examples/map.rb +6 -0
  251. data/vendor/assets/build/medias/rubies/examples/Old_examples/mask.rb +15 -0
  252. data/vendor/assets/build/medias/rubies/examples/Old_examples/media_recorder.rb +24 -0
  253. data/vendor/assets/build/medias/rubies/examples/Old_examples/media_streaming.rb +41 -0
  254. data/vendor/assets/build/medias/rubies/examples/Old_examples/meteo.rb +41 -0
  255. data/vendor/assets/build/medias/rubies/examples/Old_examples/methods_chaining.rb +8 -0
  256. data/vendor/assets/build/medias/rubies/examples/Old_examples/midi.rb +37 -0
  257. data/vendor/assets/build/medias/rubies/examples/Old_examples/monitoring.rb +47 -0
  258. data/vendor/assets/build/medias/rubies/examples/Old_examples/mulitrendering.rb +7 -0
  259. data/vendor/assets/build/medias/rubies/examples/Old_examples/noise_gradient_texture.rb +26 -0
  260. data/vendor/assets/build/medias/rubies/examples/Old_examples/notification.rb +9 -0
  261. data/vendor/assets/build/medias/rubies/examples/Old_examples/object_in_object.rb +13 -0
  262. data/vendor/assets/build/medias/rubies/examples/Old_examples/on_resize.rb +12 -0
  263. data/vendor/assets/build/medias/rubies/examples/Old_examples/over.rb +15 -0
  264. data/vendor/assets/build/medias/rubies/examples/Old_examples/overflow.rb +22 -0
  265. data/vendor/assets/build/medias/rubies/examples/Old_examples/parameter.rb +14 -0
  266. data/vendor/assets/build/medias/rubies/examples/Old_examples/parent.rb +19 -0
  267. data/vendor/assets/build/medias/rubies/examples/Old_examples/particle.rb +15 -0
  268. data/vendor/assets/build/medias/rubies/examples/Old_examples/pay.rb +7 -0
  269. data/vendor/assets/build/medias/rubies/examples/Old_examples/ping.rb +7 -0
  270. data/vendor/assets/build/medias/rubies/examples/Old_examples/play.rb +24 -0
  271. data/vendor/assets/build/medias/rubies/examples/Old_examples/play_audio.rb +6 -0
  272. data/vendor/assets/build/medias/rubies/examples/Old_examples/position.rb +7 -0
  273. data/vendor/assets/build/medias/rubies/examples/Old_examples/read_file.rb +9 -0
  274. data/vendor/assets/build/medias/rubies/examples/Old_examples/reboot.rb +15 -0
  275. data/vendor/assets/build/medias/rubies/examples/Old_examples/refresh.rb +17 -0
  276. data/vendor/assets/build/medias/rubies/examples/Old_examples/remote_server.rb +31 -0
  277. data/vendor/assets/build/medias/rubies/examples/Old_examples/render.rb +17 -0
  278. data/vendor/assets/build/medias/rubies/examples/Old_examples/repeat.rb +19 -0
  279. data/vendor/assets/build/medias/rubies/examples/Old_examples/require_remote.rb +3 -0
  280. data/vendor/assets/build/medias/rubies/examples/Old_examples/restore_atome.rb +11 -0
  281. data/vendor/assets/build/medias/rubies/examples/Old_examples/resurect.rb +30 -0
  282. data/vendor/assets/build/medias/rubies/examples/Old_examples/ruby_version.rb +1 -0
  283. data/vendor/assets/build/medias/rubies/examples/Old_examples/say.rb +3 -0
  284. data/vendor/assets/build/medias/rubies/examples/Old_examples/scale.rb +41 -0
  285. data/vendor/assets/build/medias/rubies/examples/Old_examples/schedule.rb +39 -0
  286. data/vendor/assets/build/medias/rubies/examples/Old_examples/scroll.rb +9 -0
  287. data/vendor/assets/build/medias/rubies/examples/Old_examples/select.rb +32 -0
  288. data/vendor/assets/build/medias/rubies/examples/Old_examples/selector.rb +6 -0
  289. data/vendor/assets/build/medias/rubies/examples/Old_examples/shadow.rb +30 -0
  290. data/vendor/assets/build/medias/rubies/examples/Old_examples/shape_with_path.rb +7 -0
  291. data/vendor/assets/build/medias/rubies/examples/Old_examples/size.rb +109 -0
  292. data/vendor/assets/build/medias/rubies/examples/Old_examples/smooth.rb +5 -0
  293. data/vendor/assets/build/medias/rubies/examples/Old_examples/speech_renderer.rb +5 -0
  294. data/vendor/assets/build/medias/rubies/examples/Old_examples/synth.rb +6 -0
  295. data/vendor/assets/build/medias/rubies/examples/Old_examples/system.rb +3 -0
  296. data/vendor/assets/build/medias/rubies/examples/Old_examples/tags.rb +18 -0
  297. data/vendor/assets/build/medias/rubies/examples/Old_examples/text.rb +33 -0
  298. data/vendor/assets/build/medias/rubies/examples/Old_examples/text_selection.rb +33 -0
  299. data/vendor/assets/build/medias/rubies/examples/Old_examples/text_to_midi.rb +22 -0
  300. data/vendor/assets/build/medias/rubies/examples/Old_examples/touch.rb +23 -0
  301. data/vendor/assets/build/medias/rubies/examples/Old_examples/touch_stop_propagation.rb +27 -0
  302. data/vendor/assets/build/medias/rubies/examples/Old_examples/treat_object_in_object.rb +26 -0
  303. data/vendor/assets/build/medias/rubies/examples/Old_examples/type_mutations.rb +27 -0
  304. data/vendor/assets/build/medias/rubies/examples/Old_examples/video_callback.rb +46 -0
  305. data/vendor/assets/build/medias/rubies/examples/Old_examples/view_mode.rb +29 -0
  306. data/vendor/assets/build/medias/rubies/examples/Old_examples/virtual_events.rb +17 -0
  307. data/vendor/assets/build/medias/rubies/examples/Old_examples/visual.rb +23 -0
  308. data/vendor/assets/build/medias/rubies/examples/Old_examples/vr_display.rb +5 -0
  309. data/vendor/assets/build/medias/rubies/examples/Old_examples/wait.rb +21 -0
  310. data/vendor/assets/build/medias/rubies/examples/Old_examples/web.rb +10 -0
  311. data/vendor/assets/build/medias/rubies/examples/Old_examples/web_address_bar.rb +14 -0
  312. data/vendor/assets/build/medias/rubies/examples/Old_examples/websocket.rb +16 -0
  313. data/vendor/assets/build/medias/rubies/examples/Old_examples/webstate.rb +10 -0
  314. data/vendor/assets/build/{js/atome/kernel.js → medias/rubies/examples/animation.rb} +0 -0
  315. data/vendor/assets/build/medias/rubies/examples/atome.new.rb +12 -0
  316. data/vendor/assets/build/medias/rubies/examples/auto_height.rb +3 -0
  317. data/vendor/assets/build/medias/rubies/examples/auto_width.rb +2 -0
  318. data/vendor/assets/build/medias/rubies/examples/bottom.rb +1 -0
  319. data/vendor/assets/build/medias/rubies/examples/box.rb +16 -0
  320. data/vendor/assets/build/medias/rubies/examples/circle.rb +1 -0
  321. data/vendor/assets/build/medias/rubies/examples/clear.rb +9 -0
  322. data/vendor/assets/build/medias/rubies/examples/code.rb +5 -0
  323. data/vendor/assets/build/medias/rubies/examples/color.rb +13 -0
  324. data/vendor/assets/build/medias/rubies/examples/create_atome_in_atome.rb +11 -0
  325. data/vendor/assets/build/medias/rubies/examples/drag.rb +43 -0
  326. data/vendor/assets/build/medias/rubies/examples/get_renderer_list.rb +1 -0
  327. data/vendor/assets/build/medias/rubies/examples/grab.rb +3 -0
  328. data/vendor/assets/build/medias/rubies/examples/height.rb +2 -0
  329. data/vendor/assets/build/medias/rubies/examples/image.rb +4 -0
  330. data/vendor/assets/build/medias/rubies/examples/left.rb +2 -0
  331. data/vendor/assets/build/medias/rubies/examples/link.rb +11 -0
  332. data/vendor/assets/build/medias/rubies/examples/on.rb +16 -0
  333. data/vendor/assets/build/medias/rubies/examples/parent.rb +13 -0
  334. data/vendor/assets/build/medias/rubies/examples/read.rb +3 -0
  335. data/vendor/assets/build/medias/rubies/examples/repeat.rb +3 -0
  336. data/vendor/assets/build/medias/rubies/examples/right.rb +1 -0
  337. data/vendor/assets/build/medias/rubies/examples/rotate.rb +2 -0
  338. data/vendor/assets/build/medias/rubies/examples/schedule.rb +13 -0
  339. data/vendor/assets/build/medias/rubies/examples/smooth.rb +3 -0
  340. data/vendor/assets/build/medias/rubies/examples/text.rb +18 -0
  341. data/vendor/assets/build/medias/rubies/examples/top.rb +1 -0
  342. data/vendor/assets/build/medias/rubies/examples/touch.rb +6 -0
  343. data/vendor/assets/build/medias/rubies/examples/video.rb +52 -0
  344. data/vendor/assets/build/medias/rubies/examples/wait.rb +3 -0
  345. data/vendor/assets/build/medias/rubies/examples/web.rb +10 -0
  346. data/vendor/assets/build/medias/rubies/examples/width.rb +2 -0
  347. data/vendor/assets/build/medias/rubies/test.rb +1 -0
  348. data/vendor/assets/build/medias/rubies/text_read.rb +1 -0
  349. data/vendor/assets/build/medias/rubies/users/code.rb +6 -0
  350. data/vendor/assets/build/medias/utils/infos/color.rb +29 -0
  351. data/vendor/assets/build/medias/utils/infos/width.rb +25 -0
  352. data/vendor/assets/build/medias/videos/avengers.mp4 +0 -0
  353. data/vendor/assets/build/medias/videos/lion_king.mp4 +0 -0
  354. data/vendor/assets/build/medias/videos/madmax.mp4 +0 -0
  355. data/vendor/assets/build/medias/videos/starwars.mov +0 -0
  356. data/vendor/assets/build/medias/videos/superman.mp4 +0 -0
  357. data/vendor/assets/build/medias/videos/video_missing.mp4 +0 -0
  358. data/vendor/assets/{index.rb → r&d/misc.rb} +54 -1
  359. data/vendor/assets/r&d/ping.rb +3 -0
  360. data/vendor/assets/r&d/storage.rb +9 -0
  361. data/vendor/assets/r&d/view_example.rb +21 -0
  362. data/vendor/assets/server/atome_server.rb +74 -27
  363. data/vendor/assets/server/config.ru +2 -14
  364. metadata +438 -14
  365. data/lib/atome/kernel/atome_genesis.rb +0 -2
  366. data/lib/atome/kernel/properties/geometry.rb +0 -2
  367. data/vendor/assets/build/js/opal/opal_browser.js +0 -0
  368. data/vendor/assets/build/js/opal/opal_parser.js +0 -0
@@ -0,0 +1,277 @@
1
+ # frozen_string_literal: true
2
+ # TODO: parent are not set correctly if not explicitly specified when attaching a child ex: b=box();c=b.box, c is not
3
+ # attached to b
4
+ # Genesis helper
5
+ module GenesisHelper
6
+ def broadcaster(property, value)
7
+ "broadcast : #{property} #{value}"
8
+ end
9
+
10
+ def history(property, value)
11
+ "historize : #{property} #{value}"
12
+ end
13
+ end
14
+
15
+ # genesis kernel
16
+ module GenesisKernel
17
+ # particle's methods
18
+ def set_new_particle(particle, value, &proc)
19
+ return false unless validation(particle)
20
+ # now we exec the first optional method
21
+ value = Genesis.run_optional_methods_helper("#{particle}_pre_render_proc".to_sym,
22
+ { method: particle, value: value, atome: self, proc: proc })
23
+ # render option below
24
+ Genesis.run_optional_methods_helper("#{particle}_render_proc".to_sym,
25
+ { method: particle, value: value, atome: self, proc: proc })
26
+ # now we exec post render optional proc
27
+ value = Genesis.run_optional_methods_helper("#{particle}_post_render_proc".to_sym,
28
+ { method: particle, value: value, proc: proc })
29
+ broadcaster(particle, value)
30
+ history(particle, value)
31
+
32
+ self
33
+ end
34
+
35
+ def get_new_particle(particle)
36
+ return false unless validation(particle)
37
+
38
+ particle_instance_variable = "@#{particle}"
39
+ value_get = instance_variable_get(particle_instance_variable)
40
+ Genesis.run_optional_methods_helper("#{particle}_getter_pre_proc".to_sym, { value: value_get, atome: self })
41
+ end
42
+
43
+ def new_particle(particle, params, proc, &method_proc)
44
+ if params
45
+ if method_proc.is_a?(Proc)
46
+ params = instance_exec(params, &method_proc)
47
+ end
48
+ set_new_particle(particle, params, &proc)
49
+ else
50
+ get_new_particle(particle)
51
+ end
52
+ end
53
+
54
+ # atome's methods
55
+
56
+ def get_new_atome(atome)
57
+ return false unless validation(atome)
58
+
59
+ atome_instance_variable = "@#{atome}"
60
+ value_get = instance_variable_get(atome_instance_variable)
61
+ Genesis.run_optional_methods_helper("#{atome}_getter_pre_proc".to_sym, { value: value_get })
62
+
63
+ end
64
+
65
+ def new_atome(atome, params, userproc, &method_proc)
66
+ if params
67
+ # the line below execute the proc associated to the method, ex Genesis.atome_creator(:color) do ...(proc)
68
+ params = instance_exec(params, &method_proc) if method_proc.is_a?(Proc)
69
+ params = add_essential_properties(atome, params)
70
+ params = sanitizer(params)
71
+ set_new_atome(atome, params, userproc)
72
+ else
73
+ get_new_atome(atome)
74
+ end
75
+ end
76
+
77
+ def set_new_atome(atome, params, userproc)
78
+ params[:bloc] = userproc
79
+ return false unless validation(atome)
80
+
81
+ instance_var = "@#{atome}"
82
+ new_atome = Atome.new({}, &userproc)
83
+ # now we exec the first optional method
84
+ params = Genesis.run_optional_methods_helper("#{atome}_pre_save_proc".to_sym, { value: params, atome: new_atome, proc: userproc })
85
+ new_atome = create_new_atomes(params[:value], instance_var, new_atome, &userproc)
86
+ # now we exec the second optional method
87
+ Genesis.run_optional_methods_helper("#{atome}_post_save_proc".to_sym, { value: params, atome: new_atome, proc: userproc })
88
+ @dna = "#{Atome.current_user}_#{Universe.app_identity}_#{Universe.atomes.length}"
89
+ new_atome
90
+ end
91
+
92
+ def create_new_atomes(params, instance_var, new_atome, &userproc)
93
+ # new_atome = Atome.new({}, &userproc)
94
+ Universe.atomes_add(new_atome, params[:id])
95
+ instance_variable_set(instance_var, new_atome)
96
+ # FIXME : move this to sanitizer and ensure that no reorder happen for "id" and "render" when
97
+ params.each do |param, value|
98
+ new_atome.send(param, value)
99
+ end
100
+ new_atome
101
+ end
102
+
103
+ def additional_atomes(atome, params)
104
+ atome_instance_variable = "@#{atome}"
105
+ if params
106
+ instance_variable_get(atome_instance_variable).additional(params)
107
+ else
108
+ instance_variable_get(atome_instance_variable).additional
109
+ end
110
+ end
111
+ end
112
+
113
+ # main entry for genesis
114
+ module Genesis
115
+ include GenesisHelper
116
+ include GenesisKernel
117
+
118
+ # include ParticleGenesis
119
+ @optionals_methods = {}
120
+
121
+ def self.atome_creator_option(property_name, &proc)
122
+ @optionals_methods[property_name] = proc
123
+ end
124
+
125
+ def self.run_optional_methods_helper(method_name, params, atome = nil)
126
+
127
+ proc = nil
128
+ proc = @optionals_methods[method_name] if @optionals_methods
129
+ # it run all methods that looks like :
130
+ # bloc_render_proc
131
+ # render_getter_pre_proc
132
+ # bloc_post_render_proc
133
+
134
+ params[:atome].instance_exec(params, atome, &proc) if proc.is_a?(Proc)
135
+
136
+
137
+ end
138
+
139
+ def self.generate_html_renderer(method_name, &methods_proc)
140
+ current_renderer = :html
141
+ generated_method_name = "#{method_name}_#{current_renderer}".to_sym
142
+ Atome.define_method generated_method_name do |value, atome, &user_proc|
143
+ params[:atome].instance_exec(value, atome, user_proc, &methods_proc) if methods_proc.is_a?(Proc)
144
+ end
145
+ end
146
+
147
+ def self.generate_server_renderer(method_name, &methods_proc)
148
+ current_renderer = :headless
149
+ generated_method_name = "#{method_name}_#{current_renderer}".to_sym
150
+ Atome.define_method generated_method_name do |value, atome, &user_proc|
151
+ instance_exec(value, atome, user_proc, &methods_proc) if methods_proc.is_a?(Proc)
152
+ end
153
+ end
154
+
155
+ # rendering methods are generated below:
156
+ def self.generate_renderers_methods(method_name)
157
+ # now we auto generate all rendering methods
158
+ Utilities.renderer_list.each do |render_method|
159
+ define_singleton_method("generate_#{render_method}_renderer") do |method_name, &methods_proc|
160
+ current_renderer = render_method
161
+ generated_method_name = "#{method_name}_#{current_renderer}".to_sym
162
+ Atome.define_method generated_method_name do |value, atome, &user_proc|
163
+ instance_exec(value, atome, user_proc, &methods_proc) if methods_proc.is_a?(Proc)
164
+ end
165
+ end
166
+
167
+ send("generate_#{render_method}_renderer", method_name)
168
+ end
169
+
170
+ Genesis.atome_creator_option("#{method_name}_post_render_proc".to_sym) do |params|
171
+ # we return the value
172
+ params[:value]
173
+ end
174
+ end
175
+
176
+ def self.optional_atome_methods(method_name)
177
+ Genesis.atome_creator_option("#{method_name}_pre_save_proc".to_sym) do |params, proc|
178
+ # we return the value
179
+ params
180
+ end
181
+
182
+ Genesis.atome_creator_option("#{method_name}_sanitizer_proc".to_sym) do |params, atome, proc|
183
+ # we return the value
184
+ params
185
+ end
186
+
187
+ Genesis.atome_creator_option("#{method_name}_getter_pre_proc".to_sym) do |params, atome, proc|
188
+ # we return the value
189
+ params[:value]
190
+ end
191
+
192
+ end
193
+
194
+ def self.additional_atome_methods(method_name)
195
+ # here is the pluralized
196
+ Atome.define_method "#{method_name}s" do |params = nil|
197
+ additional_atomes(method_name, params)
198
+ end
199
+ # here is the fast methods
200
+ Atome.define_method "set_#{method_name}" do |params = nil, &proc|
201
+ set_new_atome(method_name, params, proc)
202
+ end
203
+ Atome.define_method "get_#{method_name}" do
204
+ get_new_atome(method_name)
205
+ end
206
+ generate_renderers_methods(method_name)
207
+ end
208
+
209
+ # we create the easy methods here : ¬
210
+ def self.atome_creator(method_name, &method_proc)
211
+
212
+ # we add the new method to the atome's collection of methods
213
+ Utilities.atome_list(method_name)
214
+ # we define many methods : easy, method=,pluralised and the fasts one, here is the easy
215
+ Atome.define_method method_name do |params = nil, &user_proc|
216
+ new_atome(method_name, params, user_proc, &method_proc)
217
+ end
218
+ # no we also add the method= for easy setting
219
+ Atome.define_method("#{method_name}=") do |params, &user_proc|
220
+ new_atome(method_name, params, user_proc)
221
+ end
222
+ optional_atome_methods(method_name)
223
+ additional_atome_methods(method_name)
224
+ end
225
+
226
+ def self.optional_particle_methods(method_name)
227
+ # The rendering occur here setting up the optional rendering by default
228
+ Genesis.atome_creator_option("#{method_name}_render_proc".to_sym) do |params|
229
+ params[:atome].render_engine(params[:method], params[:value], params[:atome], &params[:proc])
230
+ # we return the value
231
+ params[:value]
232
+ end
233
+ Genesis.atome_creator_option("#{method_name}_pre_render_proc".to_sym) do |params|
234
+ particle_instance_variable = "@#{params[:method]}"
235
+ params[:atome].instance_variable_set(particle_instance_variable, params[:value])
236
+ # we return the value
237
+ params[:value]
238
+ end
239
+ Genesis.atome_creator_option("#{method_name}_post_render_proc".to_sym) do |params|
240
+ # we return the value
241
+ params[:value]
242
+ end
243
+ Genesis.atome_creator_option("#{method_name}_getter_pre_proc".to_sym) do |params|
244
+ # we return the value
245
+ params[:value]
246
+ end
247
+
248
+ end
249
+
250
+ def self.additional_particle_methods(method_name)
251
+ # here is the fast methods
252
+ Atome.define_method "set_#{method_name}" do |params, &proc|
253
+ set_new_particle(method_name, params, &proc)
254
+ end
255
+
256
+ Atome.define_method "get_#{method_name}" do
257
+ get_new_particle(method_name)
258
+ end
259
+ # now we generate all basic default rendering methods
260
+ generate_renderers_methods(method_name)
261
+ # now we generate all optional methods
262
+ optional_particle_methods(method_name)
263
+ end
264
+
265
+ def self.particle_creator(method_name, &method_proc)
266
+ # we add the new method to the particle's collection of methods
267
+ Utilities.particle_list(method_name)
268
+ Atome.define_method method_name do |params = nil, &user_proc|
269
+ new_particle(method_name, params, user_proc, &method_proc)
270
+ end
271
+ # no we also add the method= for easy setting
272
+ Atome.define_method("#{method_name}=") do |params, &user_proc|
273
+ new_particle(method_name, params, user_proc)
274
+ end
275
+ additional_particle_methods(method_name)
276
+ end
277
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ # use to sanitize and secure user input
4
+ module Sanitizer
5
+ @default_params = {
6
+ render: [:html],
7
+ color: { x: 0, y: 0, z: 0, red: 0.6, green: 0.6, blue: 0.6, alpha: 1, diffusion: :linear },
8
+ box: { width: 100, height: 100, x: 100, y: 100,
9
+ color: { x: 0, y: 0, z: 0, red: 0.9, green: 0.9, blue: 0.9, alpha: 1, diffusion: :linear },
10
+ generator: :box, preset: :box },
11
+ shape: { width: 100, height: 100, x: 100, y: 100,
12
+ color: { x: 0, y: 0, z: 0, red: 0.1, green: 0.9, blue: 0.9, alpha: 1, diffusion: :linear },
13
+ generator: :manual },
14
+ drm: { type: :drm },
15
+ shadow: {}
16
+ }
17
+
18
+ def self.default_params
19
+ @default_params
20
+ end
21
+
22
+ def validation(atome_instance_var)
23
+ # TODO: write validation scheme
24
+ true if atome_instance_var
25
+ end
26
+
27
+ def sanitizer(params)
28
+ # TODO: write sanitizer scheme
29
+ # we reorder id and place it a the beginning of the hash before render
30
+ # id_found = params.delete(:id)
31
+ # params = { id: id_found }.merge(params)
32
+
33
+ # we reorder render and place it a the beginning of the hash
34
+ # render_found = params.delete(:render)
35
+ # { render: render_found }.merge(params)
36
+ params
37
+ end
38
+
39
+ def add_essential_drm(params)
40
+ essential_drm = { authorisation: { read: [Atome.current_user], write: [Atome.current_user] },
41
+ atome: { read: [:all], write: [:me] } }
42
+ params[:drm] = if params[:drm]
43
+ essential_drm.merge(params[:drm])
44
+ else
45
+ essential_drm
46
+ end
47
+ end
48
+
49
+ def check_parent(params)
50
+ parent = [id]|| [:user_view]
51
+ params[:parent] = parent unless params[:parent]
52
+ params
53
+ end
54
+
55
+ def add_missing_id(atome_type, params)
56
+ type = params[:type] || atome_type
57
+ "#{type}_#{Universe.atomes.length}"
58
+ end
59
+
60
+ def add_essential_properties(atome_type, params)
61
+ # params_to_sanitize={atome: self, params: params}
62
+ params=Genesis.run_optional_methods_helper("#{atome_type}_sanitizer_proc".to_sym, params, self)
63
+ # TODO remove the condition below once the line above works
64
+ params[:id] = add_missing_id(atome_type, params) unless params[:id]
65
+ # FIXME : inject this in async mode to avoid big lag!
66
+ params[:drm] = add_essential_drm(params) unless params[:drm]
67
+ # forcing default render can causes problems and crashes
68
+ # render= Sanitizer.default_params[:render]
69
+ params[:render] = render unless params[:render]
70
+ check_parent(params)
71
+
72
+ end
73
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+ # TODO: params shouldn't be merge but they must respect the order
3
+ # TODO: Add default value for each methods below
4
+ # TODO: Factorise codes below
5
+ class Atome
6
+ def box(params = {}, &bloc)
7
+ default_renderer = Sanitizer.default_params[:render]
8
+ generated_id = params[:id] || "box_#{Universe.atomes.length}"
9
+ generated_render = params[:render] || default_renderer unless params[:render].instance_of? Hash
10
+ generated_parent = params[:parent] || id
11
+
12
+ temp_default = { render: [generated_render], id: generated_id, type: :shape, parent: [generated_parent], width: 99, height: 99, left: 9, top: 9,
13
+ color: { render: [generated_render], id: "color_#{generated_id}", type: :color,
14
+ red: 0.69, green: 0.69, blue: 0.69, alpha: 1 } }
15
+ params = temp_default.merge(params)
16
+ new_atome = Atome.new({ shape: params},&bloc )
17
+ new_atome.shape
18
+ end
19
+
20
+ def circle(params = {}, &bloc)
21
+ default_renderer = Sanitizer.default_params[:render]
22
+ generated_id = params[:id] || "circle_#{Universe.atomes.length}"
23
+ generated_render = params[:render] || default_renderer unless params[:render].instance_of? Hash
24
+ generated_parent = params[:parent] || id
25
+
26
+ temp_default = { render: [generated_render], id: generated_id, type: :shape, parent: [generated_parent], width: 99, height: 99, left: 9, top: 9,
27
+ color: { render: [generated_render], id: "color_#{generated_id}", type: :color,
28
+ red: 0.69, green: 0.69, blue: 0.69, alpha: 1 }, smooth: "100%" }
29
+ params = temp_default.merge(params)
30
+ new_atome = Atome.new({ shape: params },&bloc)
31
+ new_atome.shape
32
+ end
33
+
34
+ end
35
+
36
+ def box(params = {}, &proc)
37
+ Utilities.grab(:view).box(params,&proc)
38
+ end
39
+
40
+ def circle(params = {}, &proc)
41
+ Utilities.grab(:view).circle(params,&proc)
42
+ end
43
+
44
+ def text(params = {}, &bloc)
45
+ Utilities.grab(:view).text(params, &bloc)
46
+ end
47
+
48
+
49
+ def video(params = {}, &bloc)
50
+ Utilities.grab(:view).video(params, &bloc)
51
+ end
52
+
53
+ def drag(params = {}, &bloc)
54
+ Utilities.grab(:view).drag(params, &bloc)
55
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'geocoder'
4
+
5
+ # add on for the atome method
6
+ class Atome
7
+ def geolocation
8
+ # native version
9
+ public_ip = `curl https://api.ipify.org`
10
+ results = Geocoder.search(public_ip)
11
+ results.first.coordinates
12
+ end
13
+ end
14
+
@@ -0,0 +1,173 @@
1
+ module Internal
2
+ def self.read_ruby(file)
3
+ # TODO write a ruby script that'll list and sort all files so they can be read
4
+ `
5
+ fetch('medias/rubies/'+#{file})
6
+ .then(response => response.text())
7
+ .then(text => Opal.eval(text))
8
+ `
9
+ end
10
+
11
+ def self.read_text(file)
12
+ `
13
+ fetch('medias/rubies/'+#{file})
14
+ .then(response => response.text())
15
+ .then(text => console.log(text))
16
+ `
17
+ end
18
+
19
+ def text_data(value)
20
+ @html_object.text = value
21
+ end
22
+
23
+ def animator_data(value)
24
+ puts "send params to animation engine#{value}"
25
+ end
26
+
27
+ def _data(value)
28
+ #dummy method to handle atome with no type
29
+ end
30
+
31
+ def html_drag_helper(atome, options, parent = nil)
32
+ drag_id = atome.id
33
+ options[:max] = options[:max].to_n
34
+ `current_obj = Opal.Utilities.$grab(#{drag_id})`
35
+
36
+ `interact('.'+#{drag_id})
37
+ .draggable({
38
+ // enable inertial throwing
39
+ // startAxis: 'y',
40
+ // lockAxis: 'x',
41
+ lockAxis: #{options[:lock]},
42
+ inertia: true,
43
+ // keep the element within the area of it's parent
44
+ modifiers: [
45
+ interact.modifiers.restrictRect({
46
+ //restriction: 'parent',
47
+ //restriction: { left: 333 ,right: 90, top: 333, bottom: 30},
48
+ restriction: #{options[:max]},
49
+
50
+ //elementRect: { left: , right: 0, top: 1, bottom: 1 }
51
+ // endOnly: true,
52
+ }),
53
+
54
+ ],
55
+ // enable autoScroll
56
+ autoScroll: true,
57
+
58
+ listeners: {
59
+ // call this function on every dragmove event
60
+
61
+ // move: dragMoveListener,
62
+ move: dragMoveListener,
63
+ // move(event){
64
+ // console.log('current atome is: '+self.current_obj)
65
+ // },
66
+ start(event) {
67
+ bloc=#{atome.bloc}
68
+ //TODO: optimise this passing the proc to the drag callback
69
+ // lets get the current atome Object
70
+ // self.current_obj = Opal.Utilities.$grab(atome_drag_id)
71
+ // now get the grab proc
72
+ //self.proc_meth = current_obj.bloc
73
+ },
74
+ // call this function on every dragend event
75
+ end(event) {
76
+
77
+ }
78
+ }
79
+ })
80
+ `
81
+
82
+ if options[:fixed]
83
+ `
84
+ function allow_drag(target,x,y){
85
+
86
+ }
87
+ `
88
+ else
89
+ `
90
+ function allow_drag(target,x,y){
91
+ target.style.transform = 'translate(' + x + 'px, ' + y + 'px)'
92
+ // update the position attributes
93
+ target.setAttribute('data-x', x)
94
+ target.setAttribute('data-y', y)
95
+ }
96
+ `
97
+ end
98
+
99
+ `
100
+ function dragMoveListener(event) {
101
+ const target = event.target
102
+ // the code below can be conditioned to receive the drag event without moving the object
103
+ // keep the dragged position in the data-x/data-y attributes
104
+ const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
105
+ const y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy
106
+ // translate the element
107
+ allow_drag(target,x,y)
108
+ // CallBack here
109
+ var object_dragged_id=Opal.Utilities.$grab(target.id)
110
+ #{atome}.$dragCallback(event.pageX, event.pageY, event.rect.left, event.rect.top, #{atome},object_dragged_id, bloc);
111
+ }
112
+ `
113
+ end
114
+
115
+ def drag_remove_true(current_atome)
116
+ current_atome.target.each do |value|
117
+ atome_found = grab(value)
118
+ # we get the id of the drag and ad add it as a html class to all children so they become draggable
119
+ # atome_found.html_object.remove_class(id)
120
+ atome_found.html_object.remove_class(current_atome.id)
121
+ end
122
+ end
123
+
124
+ def shape_remove_drag(atome)
125
+ class_to_remove = atome.drag.id
126
+ atome.html_object.remove_class(class_to_remove)
127
+ end
128
+
129
+ def dragCallback(page_x, page_y, x, y, current_object, object_dragged_id, proc = nil)
130
+ dragged_atome = grab(object_dragged_id.id)
131
+ dragged_atome.instance_variable_set('@left', x)
132
+ dragged_atome.instance_variable_set('@top', y)
133
+ current_object.instance_exec({ x: page_x, y: page_y }, &proc) if proc.is_a?(Proc)
134
+ end
135
+
136
+ def constraint_helper(params, current_atome, option)
137
+ options = {}
138
+ current_atome.particles.each do |particle, value|
139
+ options[particle] = value if (particle != :id && particle != :render && particle != :child && particle != :html_type && particle != :type && particle != :html_object && particle != :target)
140
+ end
141
+ options = options.merge({ option => params[:value] })
142
+ current_atome.target.each do |value|
143
+ atome_found = grab(value)
144
+ # we get the id of the drag and ad add it as a html class to all children so they become draggable
145
+ atome_found.html_object.remove_class(current_atome.id)
146
+ atome_found.html_object.add_class(current_atome.id)
147
+ html_drag_helper(current_atome, options)
148
+ end
149
+
150
+ end
151
+
152
+ def html_decision(html_type, value, id)
153
+ case html_type
154
+ when :style
155
+ # remove previous class if the are of the same type of the type, example:
156
+ # if there's a color already assign we remove it to allow the new one to be visible
157
+ # comment / uncomment below if we need to remove class or not
158
+ html_parent = grab(value).instance_variable_get("@html_object")
159
+ html_parent.class_names.each do |class_name|
160
+ if $document[class_name] && $document[class_name].attributes[:atome]
161
+ class_to_remove = $document[class_name].attributes[:id]
162
+ html_parent.remove_class(class_to_remove)
163
+ end
164
+ end
165
+ $document[value].add_class(id)
166
+ when :unset
167
+ else
168
+ @html_object.append_to($document[value])
169
+ end
170
+
171
+ end
172
+
173
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Atome
4
+ def ping(address, my_proc: false)
5
+ # if RUBY_ENGINE.downcase != 'opal'
6
+ def up?(host, my_proc)
7
+ check = Net::Ping::External.new(host)
8
+ if check.ping?
9
+ puts "ping respond!! "
10
+ end
11
+ end
12
+
13
+ chost = address
14
+ puts up?(chost, my_proc) # prints "true" if ping replies
15
+ # end
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ class Atome
2
+ def calculate_sha(string)
3
+ Digest::SHA256.hexdigest(string)
4
+ end
5
+ end
6
+
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Utilities
4
+ module Utilities
5
+ @atome_list = []
6
+ @particle_list = []
7
+ @renderer_list = [:html, :headless, :server]
8
+
9
+
10
+ def self.renderer_list(atome = nil)
11
+ @renderer_list
12
+ end
13
+ def self.atome_list(atome = nil)
14
+ # this method is used to hold all available type of atomes
15
+ if atome
16
+ instance_variable_get('@atome_list').push(atome)
17
+ else
18
+ instance_variable_get('@atome_list')
19
+ end
20
+ end
21
+
22
+ #
23
+ def self.particle_list(particle = nil)
24
+ # this method is used to hold all available type of particles
25
+ if particle
26
+ instance_variable_get('@particle_list').push(particle)
27
+ else
28
+ instance_variable_get('@particle_list')
29
+ end
30
+ end
31
+
32
+ def self.grab(params)
33
+ Universe.atomes[params]
34
+ end
35
+
36
+
37
+
38
+
39
+ end