atome 0.4.7.0 → 0.5.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (258) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/README.md +7 -4
  4. data/Rakefile +22 -13
  5. data/app_builder_helpers/Rakefile +63 -21
  6. data/exe/atome +91 -45
  7. data/lib/atome/atome_meta_engine.rb +132 -0
  8. data/lib/atome/extensions/atome.rb +41 -0
  9. data/lib/atome/{kernel/helpers → extensions}/geolocation.rb +0 -0
  10. data/lib/atome/{kernel/helpers → extensions}/ping.rb +0 -0
  11. data/lib/atome/{kernel/helpers → extensions}/sha.rb +3 -1
  12. data/lib/atome/genesis/generators/atome.rb +13 -0
  13. data/lib/atome/{renderers/headless/properties/generator.rb → genesis/generators/communication.rb} +2 -0
  14. data/lib/atome/genesis/generators/effect.rb +6 -0
  15. data/lib/atome/genesis/generators/event.rb +5 -0
  16. data/lib/atome/genesis/generators/geometry.rb +6 -0
  17. data/lib/atome/genesis/generators/identity.rb +15 -0
  18. data/lib/atome/genesis/generators/material.rb +10 -0
  19. data/lib/atome/genesis/generators/spatial.rb +12 -0
  20. data/lib/atome/genesis/generators/utility.rb +14 -0
  21. data/lib/atome/genesis/genesis.rb +51 -0
  22. data/lib/atome/genesis/sparkle.rb +58 -0
  23. data/lib/atome/helpers/color_helper/color/cmyk.rb +263 -0
  24. data/lib/atome/helpers/color_helper/color/css.rb +7 -0
  25. data/lib/atome/helpers/color_helper/color/grayscale.rb +197 -0
  26. data/lib/atome/helpers/color_helper/color/hsl.rb +240 -0
  27. data/lib/atome/helpers/color_helper/color/palette/adobecolor.rb +260 -0
  28. data/lib/atome/helpers/color_helper/color/palette/gimp.rb +104 -0
  29. data/lib/atome/helpers/color_helper/color/palette/monocontrast.rb +164 -0
  30. data/lib/atome/helpers/color_helper/color/palette.rb +4 -0
  31. data/lib/atome/helpers/color_helper/color/rgb/colors.rb +167 -0
  32. data/lib/atome/helpers/color_helper/color/rgb/contrast.rb +57 -0
  33. data/lib/atome/helpers/color_helper/color/rgb/metallic.rb +28 -0
  34. data/lib/atome/helpers/color_helper/color/rgb.rb +715 -0
  35. data/lib/atome/helpers/color_helper/color/yiq.rb +62 -0
  36. data/lib/atome/helpers/color_helper/color.rb +196 -0
  37. data/lib/atome/helpers/essentials.rb +42 -0
  38. data/lib/atome/helpers/sanitizer.rb +42 -0
  39. data/lib/atome/helpers/utilities.rb +57 -0
  40. data/lib/atome/kernel/essentials.rb +30 -0
  41. data/lib/atome/kernel/universe.rb +75 -26
  42. data/lib/atome/presets/atome.rb +66 -0
  43. data/lib/atome/processors/utilities.rb +10 -0
  44. data/lib/atome/renderers/browser/atome.rb +95 -0
  45. data/lib/atome/renderers/browser/browser.rb +158 -0
  46. data/lib/atome/renderers/browser/effect.rb +23 -0
  47. data/lib/atome/renderers/browser/event.rb +9 -0
  48. data/lib/atome/renderers/browser/geometry.rb +11 -0
  49. data/lib/atome/renderers/browser/identity.rb +20 -0
  50. data/lib/atome/renderers/browser/material.rb +43 -0
  51. data/lib/atome/renderers/{opal → browser}/opal_browser.rb +0 -2
  52. data/lib/atome/renderers/browser/spatial.rb +22 -0
  53. data/lib/atome/renderers/browser/utility.rb +26 -0
  54. data/lib/atome/renderers/html/atome.rb +47 -0
  55. data/lib/atome/renderers/html/effect.rb +19 -0
  56. data/lib/atome/renderers/html/event.rb +9 -0
  57. data/lib/atome/renderers/html/geometry.rb +11 -0
  58. data/lib/atome/renderers/html/html.rb +42 -0
  59. data/lib/atome/renderers/html/identity.rb +14 -0
  60. data/lib/atome/renderers/html/opal_browser.rb +6 -0
  61. data/lib/atome/renderers/html/spatial.rb +28 -0
  62. data/lib/atome/renderers/html/utility.rb +15 -0
  63. data/lib/atome/renderers/opal/atome_opal_extensions.rb +1 -1
  64. data/lib/atome/renderers/opal/extensions/atome.rb +29 -0
  65. data/lib/atome/renderers/opal/opal.rb +4 -0
  66. data/lib/atome/version.rb +1 -2
  67. data/lib/atome.rb +22 -45
  68. data/vendor/assets/application/index.rb +3 -1
  69. data/vendor/assets/application/required_example.rb +1 -0
  70. data/{lib/atome/renderers/headless/headless.rb → vendor/assets/aui.rb} +0 -0
  71. data/vendor/assets/build/css/style.css +51 -0
  72. data/vendor/assets/build/index.html +10 -7
  73. data/vendor/assets/build/js/atome/atome.js +61 -61
  74. data/{lib/atome/renderers/server/server.rb → vendor/assets/build/medias/rubies/examples/_animation.rb} +0 -0
  75. data/vendor/assets/build/medias/rubies/examples/_code.rb +12 -0
  76. data/vendor/assets/build/medias/rubies/examples/_id.rb +14 -0
  77. data/vendor/assets/build/medias/rubies/examples/_link.rb +17 -0
  78. data/vendor/assets/build/medias/rubies/examples/{on.rb → _on.rb} +3 -1
  79. data/vendor/assets/build/medias/rubies/examples/{read.rb → _read.rb} +2 -0
  80. data/vendor/assets/build/medias/rubies/examples/_refresh.rb +9 -0
  81. data/vendor/assets/build/medias/rubies/examples/atome.new.rb +13 -10
  82. data/vendor/assets/build/medias/rubies/examples/auto_height.rb +2 -0
  83. data/vendor/assets/build/medias/rubies/examples/auto_width.rb +2 -0
  84. data/vendor/assets/build/medias/rubies/examples/blur.rb +4 -0
  85. data/vendor/assets/build/medias/rubies/examples/bottom.rb +3 -1
  86. data/vendor/assets/build/medias/rubies/examples/box.rb +15 -8
  87. data/vendor/assets/build/medias/rubies/examples/circle.rb +2 -0
  88. data/vendor/assets/build/medias/rubies/examples/clear.rb +2 -1
  89. data/vendor/assets/build/medias/rubies/examples/color.rb +47 -8
  90. data/vendor/assets/build/medias/rubies/examples/create_atome_in_atome.rb +2 -0
  91. data/vendor/assets/build/medias/rubies/examples/delete.rb +7 -0
  92. data/vendor/assets/build/medias/rubies/examples/drag.rb +1 -0
  93. data/vendor/assets/build/medias/rubies/examples/element.rb +6 -0
  94. data/vendor/assets/build/medias/rubies/examples/get_renderer_list.rb +3 -1
  95. data/vendor/assets/build/medias/rubies/examples/grab.rb +2 -0
  96. data/vendor/assets/build/medias/rubies/examples/height.rb +2 -0
  97. data/vendor/assets/build/medias/rubies/examples/image.rb +6 -2
  98. data/vendor/assets/build/medias/rubies/examples/left.rb +2 -0
  99. data/vendor/assets/build/medias/rubies/examples/monitoring.rb +20 -0
  100. data/vendor/assets/build/medias/rubies/examples/parent.rb +7 -5
  101. data/vendor/assets/build/medias/rubies/examples/repeat.rb +2 -0
  102. data/vendor/assets/build/medias/rubies/examples/right.rb +3 -1
  103. data/vendor/assets/build/medias/rubies/examples/schedule.rb +0 -4
  104. data/vendor/assets/build/medias/rubies/examples/shadow.rb +30 -0
  105. data/vendor/assets/build/medias/rubies/examples/text.rb +21 -7
  106. data/vendor/assets/build/medias/rubies/examples/touch.rb +2 -0
  107. data/vendor/assets/build/medias/rubies/examples/video.rb +2 -2
  108. data/vendor/assets/build/medias/rubies/examples/web.rb +2 -2
  109. data/vendor/assets/server/atome_server.rb +3 -5
  110. metadata +74 -174
  111. data/lib/atome/atome_native_extensions.rb +0 -5
  112. data/lib/atome/extensions/helper.rb +0 -112
  113. data/lib/atome/kernel/atome.rb +0 -99
  114. data/lib/atome/kernel/generators/generator.rb +0 -517
  115. data/lib/atome/kernel/generators/genesis.rb +0 -277
  116. data/lib/atome/kernel/generators/sanitizer.rb +0 -73
  117. data/lib/atome/kernel/generators/shapes.rb +0 -55
  118. data/lib/atome/kernel/helpers/internal_methods.rb +0 -173
  119. data/lib/atome/kernel/helpers/utilities.rb +0 -39
  120. data/lib/atome/kernel/properties/essential.rb +0 -77
  121. data/lib/atome/kernel/sparkle.rb +0 -38
  122. data/lib/atome/renderers/opal/properties/generator.rb +0 -1
  123. data/lib/atome/renderers/renderer.rb +0 -13
  124. data/lib/atome/renderers/server/properties/generator.rb +0 -9
  125. data/vendor/assets/build/js/application.js +0 -0
  126. data/vendor/assets/build/medias/audios/guitar.wav +0 -0
  127. data/vendor/assets/build/medias/images/beach.jpg +0 -0
  128. data/vendor/assets/build/medias/rubies/examples/Old_examples/!demos.rb +0 -111
  129. data/vendor/assets/build/medias/rubies/examples/Old_examples/action.rb +0 -12
  130. data/vendor/assets/build/medias/rubies/examples/Old_examples/add.rb +0 -26
  131. data/vendor/assets/build/medias/rubies/examples/Old_examples/alignment.rb +0 -27
  132. data/vendor/assets/build/medias/rubies/examples/Old_examples/animation.rb +0 -92
  133. data/vendor/assets/build/medias/rubies/examples/Old_examples/atome_as_property.rb +0 -20
  134. data/vendor/assets/build/medias/rubies/examples/Old_examples/atome_list.rb +0 -4
  135. data/vendor/assets/build/medias/rubies/examples/Old_examples/atomiser.rb +0 -17
  136. data/vendor/assets/build/medias/rubies/examples/Old_examples/attach_extract.rb +0 -13
  137. data/vendor/assets/build/medias/rubies/examples/Old_examples/authorisation.rb +0 -22
  138. data/vendor/assets/build/medias/rubies/examples/Old_examples/batch.rb +0 -6
  139. data/vendor/assets/build/medias/rubies/examples/Old_examples/blend.rb +0 -15
  140. data/vendor/assets/build/medias/rubies/examples/Old_examples/blur.rb +0 -9
  141. data/vendor/assets/build/medias/rubies/examples/Old_examples/border.rb +0 -9
  142. data/vendor/assets/build/medias/rubies/examples/Old_examples/calendar.rb +0 -5
  143. data/vendor/assets/build/medias/rubies/examples/Old_examples/capture.rb +0 -57
  144. data/vendor/assets/build/medias/rubies/examples/Old_examples/center.rb +0 -21
  145. data/vendor/assets/build/medias/rubies/examples/Old_examples/child.rb +0 -18
  146. data/vendor/assets/build/medias/rubies/examples/Old_examples/clear.rb +0 -21
  147. data/vendor/assets/build/medias/rubies/examples/Old_examples/clip.rb +0 -11
  148. data/vendor/assets/build/medias/rubies/examples/Old_examples/code.rb +0 -7
  149. data/vendor/assets/build/medias/rubies/examples/Old_examples/code_editor.rb +0 -26
  150. data/vendor/assets/build/medias/rubies/examples/Old_examples/collaborate.rb +0 -115
  151. data/vendor/assets/build/medias/rubies/examples/Old_examples/convert_to_px.rb +0 -14
  152. data/vendor/assets/build/medias/rubies/examples/Old_examples/copy_paste.rb +0 -35
  153. data/vendor/assets/build/medias/rubies/examples/Old_examples/current_code.rb +0 -14
  154. data/vendor/assets/build/medias/rubies/examples/Old_examples/cursor.rb +0 -3
  155. data/vendor/assets/build/medias/rubies/examples/Old_examples/data.rb +0 -11
  156. data/vendor/assets/build/medias/rubies/examples/Old_examples/database.rb +0 -29
  157. data/vendor/assets/build/medias/rubies/examples/Old_examples/delete.rb +0 -12
  158. data/vendor/assets/build/medias/rubies/examples/Old_examples/display.rb +0 -19
  159. data/vendor/assets/build/medias/rubies/examples/Old_examples/disposition.rb +0 -10
  160. data/vendor/assets/build/medias/rubies/examples/Old_examples/double_and_long_touch.rb +0 -23
  161. data/vendor/assets/build/medias/rubies/examples/Old_examples/drag.rb +0 -61
  162. data/vendor/assets/build/medias/rubies/examples/Old_examples/drag_and_drop_import.rb +0 -1
  163. data/vendor/assets/build/medias/rubies/examples/Old_examples/drop.rb +0 -23
  164. data/vendor/assets/build/medias/rubies/examples/Old_examples/duplicate.rb +0 -11
  165. data/vendor/assets/build/medias/rubies/examples/Old_examples/edit.rb +0 -6
  166. data/vendor/assets/build/medias/rubies/examples/Old_examples/eval.rb +0 -9
  167. data/vendor/assets/build/medias/rubies/examples/Old_examples/extract_detach.rb +0 -23
  168. data/vendor/assets/build/medias/rubies/examples/Old_examples/fill.rb +0 -10
  169. data/vendor/assets/build/medias/rubies/examples/Old_examples/find.rb +0 -37
  170. data/vendor/assets/build/medias/rubies/examples/Old_examples/fit.rb +0 -44
  171. data/vendor/assets/build/medias/rubies/examples/Old_examples/fullscreen.rb +0 -28
  172. data/vendor/assets/build/medias/rubies/examples/Old_examples/generate.rb +0 -7
  173. data/vendor/assets/build/medias/rubies/examples/Old_examples/gradient.rb +0 -24
  174. data/vendor/assets/build/medias/rubies/examples/Old_examples/group.rb +0 -21
  175. data/vendor/assets/build/medias/rubies/examples/Old_examples/helper.rb +0 -64
  176. data/vendor/assets/build/medias/rubies/examples/Old_examples/history.rb +0 -7
  177. data/vendor/assets/build/medias/rubies/examples/Old_examples/hue.rb +0 -10
  178. data/vendor/assets/build/medias/rubies/examples/Old_examples/input_text.rb +0 -54
  179. data/vendor/assets/build/medias/rubies/examples/Old_examples/insert_attach.rb +0 -13
  180. data/vendor/assets/build/medias/rubies/examples/Old_examples/internationalisation.rb +0 -10
  181. data/vendor/assets/build/medias/rubies/examples/Old_examples/key.rb +0 -19
  182. data/vendor/assets/build/medias/rubies/examples/Old_examples/keyboard_shortcut.rb +0 -69
  183. data/vendor/assets/build/medias/rubies/examples/Old_examples/list_methods.rb +0 -4
  184. data/vendor/assets/build/medias/rubies/examples/Old_examples/list_types.rb +0 -4
  185. data/vendor/assets/build/medias/rubies/examples/Old_examples/listen.rb +0 -47
  186. data/vendor/assets/build/medias/rubies/examples/Old_examples/mail.rb +0 -9
  187. data/vendor/assets/build/medias/rubies/examples/Old_examples/map.rb +0 -6
  188. data/vendor/assets/build/medias/rubies/examples/Old_examples/mask.rb +0 -15
  189. data/vendor/assets/build/medias/rubies/examples/Old_examples/media_recorder.rb +0 -24
  190. data/vendor/assets/build/medias/rubies/examples/Old_examples/media_streaming.rb +0 -41
  191. data/vendor/assets/build/medias/rubies/examples/Old_examples/meteo.rb +0 -41
  192. data/vendor/assets/build/medias/rubies/examples/Old_examples/methods_chaining.rb +0 -8
  193. data/vendor/assets/build/medias/rubies/examples/Old_examples/midi.rb +0 -37
  194. data/vendor/assets/build/medias/rubies/examples/Old_examples/monitoring.rb +0 -47
  195. data/vendor/assets/build/medias/rubies/examples/Old_examples/mulitrendering.rb +0 -7
  196. data/vendor/assets/build/medias/rubies/examples/Old_examples/noise_gradient_texture.rb +0 -26
  197. data/vendor/assets/build/medias/rubies/examples/Old_examples/notification.rb +0 -9
  198. data/vendor/assets/build/medias/rubies/examples/Old_examples/object_in_object.rb +0 -13
  199. data/vendor/assets/build/medias/rubies/examples/Old_examples/on_resize.rb +0 -12
  200. data/vendor/assets/build/medias/rubies/examples/Old_examples/over.rb +0 -15
  201. data/vendor/assets/build/medias/rubies/examples/Old_examples/overflow.rb +0 -22
  202. data/vendor/assets/build/medias/rubies/examples/Old_examples/parameter.rb +0 -14
  203. data/vendor/assets/build/medias/rubies/examples/Old_examples/parent.rb +0 -19
  204. data/vendor/assets/build/medias/rubies/examples/Old_examples/particle.rb +0 -15
  205. data/vendor/assets/build/medias/rubies/examples/Old_examples/pay.rb +0 -7
  206. data/vendor/assets/build/medias/rubies/examples/Old_examples/ping.rb +0 -7
  207. data/vendor/assets/build/medias/rubies/examples/Old_examples/play.rb +0 -24
  208. data/vendor/assets/build/medias/rubies/examples/Old_examples/play_audio.rb +0 -6
  209. data/vendor/assets/build/medias/rubies/examples/Old_examples/position.rb +0 -7
  210. data/vendor/assets/build/medias/rubies/examples/Old_examples/read_file.rb +0 -9
  211. data/vendor/assets/build/medias/rubies/examples/Old_examples/reboot.rb +0 -15
  212. data/vendor/assets/build/medias/rubies/examples/Old_examples/refresh.rb +0 -17
  213. data/vendor/assets/build/medias/rubies/examples/Old_examples/remote_server.rb +0 -31
  214. data/vendor/assets/build/medias/rubies/examples/Old_examples/render.rb +0 -17
  215. data/vendor/assets/build/medias/rubies/examples/Old_examples/repeat.rb +0 -19
  216. data/vendor/assets/build/medias/rubies/examples/Old_examples/require_remote.rb +0 -3
  217. data/vendor/assets/build/medias/rubies/examples/Old_examples/restore_atome.rb +0 -11
  218. data/vendor/assets/build/medias/rubies/examples/Old_examples/resurect.rb +0 -30
  219. data/vendor/assets/build/medias/rubies/examples/Old_examples/ruby_version.rb +0 -1
  220. data/vendor/assets/build/medias/rubies/examples/Old_examples/say.rb +0 -3
  221. data/vendor/assets/build/medias/rubies/examples/Old_examples/scale.rb +0 -41
  222. data/vendor/assets/build/medias/rubies/examples/Old_examples/schedule.rb +0 -39
  223. data/vendor/assets/build/medias/rubies/examples/Old_examples/scroll.rb +0 -9
  224. data/vendor/assets/build/medias/rubies/examples/Old_examples/select.rb +0 -32
  225. data/vendor/assets/build/medias/rubies/examples/Old_examples/selector.rb +0 -6
  226. data/vendor/assets/build/medias/rubies/examples/Old_examples/shadow.rb +0 -30
  227. data/vendor/assets/build/medias/rubies/examples/Old_examples/shape_with_path.rb +0 -7
  228. data/vendor/assets/build/medias/rubies/examples/Old_examples/size.rb +0 -109
  229. data/vendor/assets/build/medias/rubies/examples/Old_examples/smooth.rb +0 -5
  230. data/vendor/assets/build/medias/rubies/examples/Old_examples/speech_renderer.rb +0 -5
  231. data/vendor/assets/build/medias/rubies/examples/Old_examples/synth.rb +0 -6
  232. data/vendor/assets/build/medias/rubies/examples/Old_examples/system.rb +0 -3
  233. data/vendor/assets/build/medias/rubies/examples/Old_examples/tags.rb +0 -18
  234. data/vendor/assets/build/medias/rubies/examples/Old_examples/text.rb +0 -33
  235. data/vendor/assets/build/medias/rubies/examples/Old_examples/text_selection.rb +0 -33
  236. data/vendor/assets/build/medias/rubies/examples/Old_examples/text_to_midi.rb +0 -22
  237. data/vendor/assets/build/medias/rubies/examples/Old_examples/touch.rb +0 -23
  238. data/vendor/assets/build/medias/rubies/examples/Old_examples/touch_stop_propagation.rb +0 -27
  239. data/vendor/assets/build/medias/rubies/examples/Old_examples/treat_object_in_object.rb +0 -26
  240. data/vendor/assets/build/medias/rubies/examples/Old_examples/type_mutations.rb +0 -27
  241. data/vendor/assets/build/medias/rubies/examples/Old_examples/video_callback.rb +0 -46
  242. data/vendor/assets/build/medias/rubies/examples/Old_examples/view_mode.rb +0 -29
  243. data/vendor/assets/build/medias/rubies/examples/Old_examples/virtual_events.rb +0 -17
  244. data/vendor/assets/build/medias/rubies/examples/Old_examples/visual.rb +0 -23
  245. data/vendor/assets/build/medias/rubies/examples/Old_examples/vr_display.rb +0 -5
  246. data/vendor/assets/build/medias/rubies/examples/Old_examples/wait.rb +0 -21
  247. data/vendor/assets/build/medias/rubies/examples/Old_examples/web.rb +0 -10
  248. data/vendor/assets/build/medias/rubies/examples/Old_examples/web_address_bar.rb +0 -14
  249. data/vendor/assets/build/medias/rubies/examples/Old_examples/websocket.rb +0 -16
  250. data/vendor/assets/build/medias/rubies/examples/Old_examples/webstate.rb +0 -10
  251. data/vendor/assets/build/medias/rubies/examples/animation.rb +0 -0
  252. data/vendor/assets/build/medias/rubies/examples/code.rb +0 -5
  253. data/vendor/assets/build/medias/rubies/examples/link.rb +0 -11
  254. data/vendor/assets/build/medias/videos/avengers.mp4 +0 -0
  255. data/vendor/assets/build/medias/videos/lion_king.mp4 +0 -0
  256. data/vendor/assets/build/medias/videos/madmax.mp4 +0 -0
  257. data/vendor/assets/build/medias/videos/starwars.mov +0 -0
  258. data/vendor/assets/build/medias/videos/superman.mp4 +0 -0
@@ -0,0 +1,62 @@
1
+ # A colour object representing YIQ (NTSC) colour encoding.
2
+ class Color::YIQ
3
+ include Color
4
+
5
+ # Creates a YIQ colour object from fractional values 0 .. 1.
6
+ #
7
+ # Color::YIQ.new(0.3, 0.2, 0.1)
8
+ def self.from_fraction(y = 0, i = 0, q = 0, &block)
9
+ new(y, i, q, 1.0, &block)
10
+ end
11
+
12
+ # Creates a YIQ colour object from percentages 0 .. 100.
13
+ #
14
+ # Color::YIQ.new(10, 20, 30)
15
+ def initialize(y = 0, i = 0, q = 0, radix = 100.0, &block) # :yields self:
16
+ @y, @i, @q = [ y, i, q ].map { |v| Color.normalize(v / radix) }
17
+ block.call if block
18
+ end
19
+
20
+ def coerce(other)
21
+ other.to_yiq
22
+ end
23
+
24
+ def to_yiq
25
+ self
26
+ end
27
+
28
+ def brightness
29
+ @y
30
+ end
31
+ def to_grayscale
32
+ Color::GrayScale.new(@y)
33
+ end
34
+ alias to_greyscale to_grayscale
35
+
36
+ def y
37
+ @y
38
+ end
39
+ def y=(yy)
40
+ @y = Color.normalize(yy)
41
+ end
42
+ def i
43
+ @i
44
+ end
45
+ def i=(ii)
46
+ @i = Color.normalize(ii)
47
+ end
48
+ def q
49
+ @q
50
+ end
51
+ def q=(qq)
52
+ @q = Color.normalize(qq)
53
+ end
54
+
55
+ def inspect
56
+ "YIQ [%.2f%%, %.2f%%, %.2f%%]" % [ @y * 100, @i * 100, @q * 100 ]
57
+ end
58
+
59
+ def to_a
60
+ [ y, i, q ]
61
+ end
62
+ end
@@ -0,0 +1,196 @@
1
+ # :title: Color -- Colour Management with Ruby
2
+ # :main: README.rdoc
3
+
4
+ # = Colour Management with Ruby
5
+ module Color
6
+ COLOR_VERSION = '1.8'
7
+
8
+ class RGB; end
9
+
10
+ class CMYK; end
11
+
12
+ class HSL; end
13
+
14
+ class GrayScale; end
15
+
16
+ class YIQ; end
17
+
18
+ # The maximum "resolution" for colour math; if any value is less than or
19
+ # equal to this value, it is treated as zero.
20
+ COLOR_EPSILON = 1e-5
21
+ # The tolerance for comparing the components of two colours. In general,
22
+ # colours are considered equal if all of their components are within this
23
+ # tolerance value of each other.
24
+ COLOR_TOLERANCE = 1e-4
25
+
26
+ # Compares the +other+ colour to this one. The +other+ colour will be
27
+ # coerced to the same type as the current colour. Such converted colour
28
+ # comparisons will always be more approximate than non-converted
29
+ # comparisons.
30
+ #
31
+ # If the +other+ colour cannot be coerced to the current colour class, a
32
+ # +NoMethodError+ exception will be raised.
33
+ #
34
+ # All values are compared as floating-point values, so two colours will be
35
+ # reported equivalent if all component values are within COLOR_TOLERANCE
36
+ # of each other.
37
+ def ==(other)
38
+ Color.equivalent?(self, other)
39
+ end
40
+
41
+ # The primary name for the colour.
42
+ def name
43
+ names.first
44
+ end
45
+
46
+ # All names for the colour.
47
+ def names
48
+ self.names = nil unless defined? @names
49
+ @names
50
+ end
51
+
52
+ def names=(n)
53
+ # :nodoc:
54
+ @names = Array(n).flatten.compact.map(&:to_s).map(&:downcase).sort.uniq
55
+ end
56
+
57
+ alias_method :name=, :names=
58
+ end
59
+
60
+ class << Color
61
+ # Returns +true+ if the value is less than COLOR_EPSILON.
62
+ def near_zero?(value)
63
+ (value.abs <= Color::COLOR_EPSILON)
64
+ end
65
+
66
+ # Returns +true+ if the value is within COLOR_EPSILON of zero or less than
67
+ # zero.
68
+ def near_zero_or_less?(value)
69
+ (value < 0.0 or near_zero?(value))
70
+ end
71
+
72
+ # Returns +true+ if the value is within COLOR_EPSILON of one.
73
+ def near_one?(value)
74
+ near_zero?(value - 1.0)
75
+ end
76
+
77
+ # Returns +true+ if the value is within COLOR_EPSILON of one or more than
78
+ # one.
79
+ def near_one_or_more?(value)
80
+ (value > 1.0 or near_one?(value))
81
+ end
82
+
83
+ # Returns +true+ if the two values provided are near each other.
84
+ def near?(x, y)
85
+ (x - y).abs <= Color::COLOR_TOLERANCE
86
+ end
87
+
88
+ # Returns +true+ if the two colours are roughly equivalent. If colour
89
+ # conversions are required, this all conversions will be implemented
90
+ # using the default conversion mechanism.
91
+ def equivalent?(a, b)
92
+ return false unless a.kind_of?(Color) && b.kind_of?(Color)
93
+ a.to_a.zip(a.coerce(b).to_a).all? { |(x, y)| near?(x, y) }
94
+ end
95
+
96
+ # Coerces, if possible, the second given colour object to the first
97
+ # given colour object type. This will probably involve colour
98
+ # conversion and therefore a loss of fidelity.
99
+ def coerce(a, b)
100
+ a.coerce(b)
101
+ end
102
+
103
+ # Normalizes the value to the range (0.0) .. (1.0).
104
+ def normalize(value)
105
+ if near_zero_or_less? value
106
+ 0.0
107
+ elsif near_one_or_more? value
108
+ 1.0
109
+ else
110
+ value
111
+ end
112
+ end
113
+
114
+ alias normalize_fractional normalize
115
+
116
+ # Normalizes the value to the specified range.
117
+ def normalize_to_range(value, range)
118
+ range = (range.end..range.begin) if (range.end < range.begin)
119
+
120
+ if value <= range.begin
121
+ range.begin
122
+ elsif value >= range.end
123
+ range.end
124
+ else
125
+ value
126
+ end
127
+ end
128
+
129
+ # Normalize the value to the range (0) .. (255).
130
+ def normalize_byte(value)
131
+ normalize_to_range(value, 0..255).to_i
132
+ end
133
+
134
+ alias normalize_8bit normalize_byte
135
+
136
+ # Normalize the value to the range (0) .. (65535).
137
+ def normalize_word(value)
138
+ normalize_to_range(value, 0..65535).to_i
139
+ end
140
+
141
+ alias normalize_16bit normalize_word
142
+ end
143
+
144
+ require 'atome/helpers/color_helper/color/rgb'
145
+ require 'atome/helpers/color_helper/color/cmyk'
146
+ require 'atome/helpers/color_helper/color/grayscale'
147
+ require 'atome/helpers/color_helper/color/hsl'
148
+ require 'atome/helpers/color_helper/color/yiq'
149
+ require 'atome/helpers/color_helper/color/css'
150
+
151
+ class << Color
152
+ def const_missing(name)
153
+ #:nodoc:
154
+ case name
155
+ when "VERSION", :VERSION, "COLOR_TOOLS_VERSION", :COLOR_TOOLS_VERSION
156
+ warn "Color::#{name} has been deprecated. Use Color::COLOR_VERSION instead."
157
+ Color::COLOR_VERSION
158
+ else
159
+ if Color::RGB.const_defined?(name)
160
+ warn "Color::#{name} has been deprecated. Use Color::RGB::#{name} instead."
161
+ Color::RGB.const_get(name)
162
+ else
163
+ super
164
+ end
165
+ end
166
+ end
167
+
168
+ # Provides a thin veneer over the Color module to make it seem like this
169
+ # is Color 0.1.0 (a class) and not Color 1.4 (a module). This
170
+ # "constructor" will be removed in the future.
171
+ #
172
+ # mode = :hsl:: +values+ must be an array of [ hue deg, sat %, lum % ].
173
+ # A Color::HSL object will be created.
174
+ # mode = :rgb:: +values+ will either be an HTML-style colour string or
175
+ # an array of [ red, green, blue ] (range 0 .. 255). A
176
+ # Color::RGB object will be created.
177
+ # mode = :cmyk:: +values+ must be an array of [ cyan %, magenta %, yellow
178
+ # %, black % ]. A Color::CMYK object will be created.
179
+ def new(values, mode = :rgb)
180
+ warn "Color.new has been deprecated. Use Color::#{mode.to_s.upcase}.new instead."
181
+ color = case mode
182
+ when :hsl
183
+ Color::HSL.new(*values)
184
+ when :rgb
185
+ values = [values].flatten
186
+ if values.size == 1
187
+ Color::RGB.from_html(*values)
188
+ else
189
+ Color::RGB.new(*values)
190
+ end
191
+ when :cmyk
192
+ Color::CMYK.new(*values)
193
+ end
194
+ color.to_hsl
195
+ end
196
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ # use to sanitize and secure user input
4
+ module Essentials
5
+ @default_params = {
6
+ render_engines: [:browser],
7
+ element: { type: :element, renderers: [] },
8
+ box: { renderers: '', id: '', type: :shape, parents: [], children: [], width: 99, height: 99 },
9
+ circle: { renderers: '', id: '', type: :shape, parents: [], children: [], width: 99, height: 99, left: 12, top: 12,
10
+ smooth: '100%' },
11
+ shape: { renderers: '', id: '', width: 100, type: :shape, height: 100, left: 100, top: 100,
12
+ color: { left: 0, top: 0, z: 0, red: 0.1, green: 0.9, blue: 0.9, alpha: 1, diffusion: :linear },
13
+ generator: :manual },
14
+ text: { type: :text, parents: [:view], children: [], visual: { size: 25 },
15
+ data: 'this is a text sample', left: 300, top: 33, width: 199, height: 33 },
16
+ drm: { type: :drm },
17
+ shadow: {}
18
+ }
19
+
20
+ def self.default_params
21
+ @default_params
22
+ end
23
+
24
+ def self.new_default_params(new_default)
25
+ @default_params.merge!(new_default)
26
+ end
27
+
28
+ def validation(atome_instance_var)
29
+ # TODO: write validation scheme
30
+ true if atome_instance_var
31
+ end
32
+
33
+ def add_essential_drm(params)
34
+ essential_drm = { authorisation: { read: [Atome.current_user], write: [Atome.current_user] },
35
+ atome: { read: [:all], write: [:me] } }
36
+ params[:drm] = if params[:drm]
37
+ essential_drm.merge(params[:drm])
38
+ else
39
+ essential_drm
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ # atome sanitizer
4
+ class Atome
5
+ private
6
+
7
+ def create_color_hash(params)
8
+ rgb_color = Color::CSS[params].css_rgb
9
+ split_data = rgb_color.sub('rgb(', '').sub(')', '').gsub(',', '').split('%')
10
+ { red: split_data[0].to_f / 100, green: split_data[1].to_f / 100, blue: split_data[2].to_f / 100 }
11
+ end
12
+
13
+ def found_parent_and_render
14
+ if @atome
15
+ parent_found = [@atome[:id]]
16
+ render_found = @atome[:renderers]
17
+ else
18
+ parent_found = []
19
+ render_found = Essentials.default_params[:render_engines]
20
+ end
21
+ { parent: parent_found, renderers: render_found }
22
+ end
23
+
24
+ def sanitize_element(params)
25
+ parent_found = found_parent_and_render[:parent]
26
+ render_found = found_parent_and_render[:renderers]
27
+ default_params = { renderers: render_found, id: "element_#{Universe.atomes.length}", type: :element,
28
+ parents: parent_found }
29
+ default_params.merge!(params)
30
+ end
31
+
32
+ def sanitize_color(params)
33
+ parent_found = found_parent_and_render[:parent]
34
+ render_found = found_parent_and_render[:renderers]
35
+ default_params = { renderers: render_found, id: "color_#{Universe.atomes.length}", type: :color,
36
+ parents: parent_found,
37
+ red: 0, green: 0, blue: 0, alpha: 1 }
38
+ params = create_color_hash(params) unless params.instance_of? Hash
39
+ default_params.merge!(params)
40
+ end
41
+
42
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ # toolbox method here
4
+ class Atome
5
+ private
6
+
7
+ def a_render
8
+ @atome.each do |element, value|
9
+ send(element, value) unless element == :type
10
+ end
11
+ end
12
+
13
+ def security_pass(_element, _value)
14
+ true
15
+ end
16
+
17
+ def particle_sanitizer(_element, params)
18
+ params
19
+ end
20
+
21
+ def atome_sanitizer(element, params)
22
+ send("sanitize_#{element}", params)
23
+ end
24
+
25
+ def sanitize_particle(element, value, &user_proc)
26
+ value = particle_sanitizer(element, value)
27
+ create_particle(element, value, &user_proc)
28
+ end
29
+
30
+ def identity_generator
31
+ { date: Time.now, location: geolocation }
32
+ end
33
+
34
+ def broadcasting(element, value)
35
+ return unless @broadcast[:particles]&.include?(element)
36
+
37
+ bloc_found = @broadcast[:bloc]
38
+ instance_exec(self, element, value, &bloc_found) if bloc_found.is_a?(Proc)
39
+ end
40
+
41
+ def history(property, value)
42
+ "historize : #{property} #{value}"
43
+ end
44
+
45
+ public
46
+
47
+ def monitor(params, &proc_monitoring)
48
+ params[:atomes].each do |atome_id|
49
+ grab(atome_id).instance_variable_set('@broadcast', { particles: params[:particles], bloc: proc_monitoring })
50
+ end
51
+ end
52
+
53
+ def <<(particle)
54
+ value = particle.value
55
+ real_atome[property] << value
56
+ end
57
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Essentials method here
4
+ class Atome
5
+ private
6
+
7
+ def rendering(element_to_render, content, &user_proc)
8
+ render_engines = @atome[:renderers]
9
+ render_engines.each do |render_engine|
10
+ send("#{render_engine}_#{element_to_render}", content, &user_proc)
11
+ end
12
+ end
13
+
14
+ def get(element)
15
+ @atome[element]
16
+ end
17
+
18
+ def value
19
+ @atome
20
+ end
21
+
22
+ def to_s
23
+ if @value
24
+ @result = @value.to_s
25
+ elsif @atome
26
+ @result = @atome.to_s
27
+ end
28
+ @result.to_s
29
+ end
30
+ end
@@ -1,37 +1,86 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # all created atomes are listed here
3
+ # universe method here
4
4
  class Universe
5
- def self.app_identity
6
- # each app hav its own identity, this allow to generate new user identities from th
7
- @app_identity = 3
8
- # the identity is define as follow : parentCreatorID_softwareInstanceID_objetID
9
- # in this case parent is eve so 0, Software instance number is main eVe server which is also 0,
10
- # and finally the object is 3 as this the third object created by the main server
11
- end
5
+ @atomes = {}
6
+ @atome_list = []
7
+ @particle_list = []
8
+ @renderer_list = %i[html browser headless server]
9
+ @optionals_methods = {}
12
10
 
13
- def self.initialize
14
- @atomes = {}
15
- end
11
+ class << self
12
+ attr_reader :atomes, :renderer_list, :atome_list, :particle_list
16
13
 
17
- def self.atomes_add(new_atome,atome_id)
18
- new_atome.instance_variable_set('@id', atome_id)
19
- @atomes[atome_id] = new_atome
20
- end
14
+ def add_to_particle_list(particle = nil)
15
+ instance_variable_get('@particle_list').push(particle)
16
+ end
21
17
 
22
- def self.change_atome_id(prev_id, new_id)
23
- @atomes[new_id] = @atomes.delete(prev_id)
24
- end
18
+ def add_optionals_methods(method_name, &method_proc)
19
+ # this method is used to add optional methods
20
+ instance_variable_get('@optionals_methods').merge!({ method_name => method_proc })
21
+ end
25
22
 
26
- def self.delete(id)
27
- @atomes.delete(id)
28
- end
23
+ def get_optionals_methods(method_name)
24
+ # this method is used to add optional methods
25
+ instance_variable_get('@optionals_methods')[method_name]
26
+ end
29
27
 
30
- class << self
31
- attr_reader :atomes
32
- end
28
+ def add_to_atome_list(atome)
29
+ instance_variable_get('@atome_list').push(atome)
30
+ end
31
+
32
+ def add_to_atomes(atome)
33
+ instance_variable_get('@atomes').merge!(atome)
34
+ end
35
+
36
+ def app_identity
37
+ # each app hav its own identity, this allow to generate new user identities from th
38
+ @app_identity = 3
39
+ # the identity is define as follow : parentsCreatorID_softwareInstanceID_objetID
40
+ # in this case parents is eve so 0, Software instance number is main eVe server which is also 0,
41
+ # and finally the object is 3 as this the third object created by the main server
42
+ end
43
+
44
+ def change_atome_id(prev_id, new_id)
45
+ @atomes[new_id] = @atomes.delete(prev_id)
46
+ end
47
+
48
+ def delete(id)
49
+ @atomes.delete(id)
50
+ end
51
+
52
+ def current_machine_decision(platform, output)
53
+ case platform
54
+ when /darwin/
55
+ ::Regexp.last_match(1) if output =~ /en1.*?(([A-F0-9]{2}:){5}[A-F0-9]{2})/im
56
+ when /win32/
57
+ ::Regexp.last_match(1) if output =~ /Physical Address.*?(([A-F0-9]{2}-){5}[A-F0-9]{2})/im
58
+ else
59
+ # Cases for other platforms...
60
+ 'unknown platform'
61
+ end
62
+ platform
63
+ end
64
+
65
+ def current_machine
66
+ platform = RUBY_PLATFORM.downcase
67
+ output = `#{platform =~ /win32/ ? 'ipconfig /all' : 'ifconfig'}`
68
+ current_machine_decision(platform, output)
69
+ # TODO: check the code above and create a sensible identity
70
+ end
71
+
72
+ def current_user
73
+ @user
74
+ end
75
+
76
+ def current_user=(user)
77
+ # TODO: create or load an existing user
78
+ # if user needs to be create the current_user will be eVe
79
+ @user = user
80
+ end
33
81
 
34
- def self.connected
35
- true
82
+ def connected
83
+ true
84
+ end
36
85
  end
37
86
  end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ # TODO: params shouldn't be merge but they must respect the order
4
+ # TODO: Add default value for each methods below
5
+ # TODO: Factorise codes below
6
+ # TODO we must clarified/unified the usage of presets and sanitizer it is not clear
7
+
8
+ # shaper creation
9
+ class Atome
10
+ def atome_common(atome_type, generated_id, generated_render, generated_parents, params)
11
+ temp_default = Essentials.default_params[atome_type]
12
+ temp_default[:id] = generated_id
13
+ temp_default[:parents] = generated_parents
14
+ temp_default[:renderers] = generated_render
15
+ temp_default.merge(params)
16
+ end
17
+
18
+ def box(params = {}, &bloc)
19
+ default_renderer = Essentials.default_params[:render_engines]
20
+ atome_type = :box
21
+ generated_render = params[:renderers] || default_renderer
22
+ generated_id = params[:id] || "#{atome_type}_#{Universe.atomes.length}"
23
+ generated_parents = params[:parents] || [id.value]
24
+ params = atome_common(atome_type, generated_id, generated_render, generated_parents, params)
25
+ color_generated = sanitize_color({ parents: [generated_id], red: 0.3, green: 0.3, blue: 0.3 })
26
+ params[:color] = color_generated
27
+ Atome.new({ atome_type => params }, &bloc)
28
+ end
29
+
30
+ def circle(params = {}, &bloc)
31
+ default_renderer = Essentials.default_params[:render_engines]
32
+ atome_type = :circle
33
+ generated_render = params[:renderers] || default_renderer
34
+ generated_id = params[:id] || "#{atome_type}_#{Universe.atomes.length}"
35
+ generated_parents = params[:parents] || [id.value]
36
+ params = atome_common(atome_type, generated_id, generated_render, generated_parents, params)
37
+ color_generated = sanitize_color({ parents: [generated_id], red: 0.6, green: 0.6, blue: 0.6 })
38
+ params[:color] = color_generated
39
+ Atome.new({ atome_type => params }, &bloc)
40
+ end
41
+
42
+ def image(params = {}, &bloc)
43
+ default_renderer = Essentials.default_params[:render_engines]
44
+
45
+ generated_id = params[:id] || "image_#{Universe.atomes.length}"
46
+ generated_render = params[:renderers] || default_renderer
47
+ generated_parents = params[:parents] || id.value
48
+
49
+ temp_default = { renderers: generated_render, id: generated_id, type: :image, parents: [generated_parents],
50
+ children: [], width: 99, height: 99, path: './medias/images/atome.svg' }
51
+ params = temp_default.merge(params)
52
+ Atome.new({ image: params }, &bloc)
53
+ end
54
+
55
+ def text(params = {}, &bloc)
56
+ default_renderer = Essentials.default_params[:render_engines]
57
+ atome_type = :text
58
+ generated_render = params[:renderers] || default_renderer
59
+ generated_id = params[:id] || "#{atome_type}_#{Universe.atomes.length}"
60
+ generated_parents = params[:parents] || [id.value]
61
+ params = atome_common(atome_type, generated_id, generated_render, generated_parents, params)
62
+ color_generated = sanitize_color({ parents: [generated_id], red: 0.9, green: 0.9, blue: 0.9 })
63
+ params[:color] = color_generated
64
+ Atome.new({ atome_type => params }, &bloc)
65
+ end
66
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Atome processors
4
+ class Atome
5
+ private
6
+
7
+ def data_code_processor(data)
8
+ eval data
9
+ end
10
+ end