atome 0.4.5.4 → 0.4.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -3
  3. data/Rakefile +1 -0
  4. data/app_builder_helpers/Rakefile +2 -0
  5. data/lib/atome/atome_native_extensions.rb +3 -3
  6. data/lib/atome/extensions/helper.rb +20 -31
  7. data/lib/atome/kernel/atome.rb +9 -8
  8. data/lib/atome/kernel/generators/generator.rb +210 -80
  9. data/lib/atome/kernel/generators/genesis.rb +58 -46
  10. data/lib/atome/kernel/generators/sanitizer.rb +3 -7
  11. data/lib/atome/kernel/generators/shapes.rb +25 -10
  12. data/lib/atome/{extensions → kernel/helpers}/geolocation.rb +0 -0
  13. data/lib/atome/kernel/helpers/internal_methods.rb +173 -0
  14. data/lib/atome/kernel/helpers/ping.rb +17 -0
  15. data/lib/atome/{extensions → kernel/helpers}/sha.rb +0 -0
  16. data/lib/atome/{extensions → kernel/helpers}/utilities.rb +5 -5
  17. data/lib/atome/kernel/properties/essential.rb +35 -1
  18. data/lib/atome/kernel/sparkle.rb +2 -1
  19. data/lib/atome/kernel/universe.rb +12 -4
  20. data/lib/atome/renderers/opal/extensions/geolocation.rb +0 -1
  21. data/lib/atome/renderers/renderer.rb +1 -0
  22. data/lib/atome/renderers/server/properties/generator.rb +1 -1
  23. data/lib/atome/version.rb +2 -1
  24. data/lib/atome.rb +6 -15
  25. data/vendor/assets/build/css/style.css +4 -0
  26. data/vendor/assets/build/index.html +4 -2
  27. data/vendor/assets/build/js/atome/atome.js +25 -11
  28. data/vendor/assets/build/js/third_parties/interact.min.js +2 -3
  29. data/vendor/assets/build/js/{ping.min.js → third_parties/ping.min.js} +0 -0
  30. data/vendor/assets/build/js/{utilities → third_parties}/w3color.js +0 -0
  31. data/vendor/assets/build/js/third_parties/zim.min.js +1 -0
  32. data/vendor/assets/build/medias/audios/guitar.wav +0 -0
  33. data/vendor/assets/build/medias/images/beach.jpg +0 -0
  34. data/vendor/assets/build/medias/rubies/examples/!run.rb +16 -0
  35. data/vendor/assets/build/medias/rubies/examples/box.rb +16 -1
  36. data/vendor/assets/build/medias/rubies/examples/circle.rb +1 -0
  37. data/vendor/assets/build/medias/rubies/examples/clear.rb +9 -0
  38. data/vendor/assets/build/medias/rubies/examples/code.rb +5 -0
  39. data/vendor/assets/build/medias/rubies/examples/drag.rb +42 -4
  40. data/vendor/assets/build/medias/rubies/examples/link.rb +8 -10
  41. data/vendor/assets/build/medias/rubies/examples/on.rb +16 -0
  42. data/vendor/assets/build/medias/rubies/examples/parent.rb +2 -1
  43. data/vendor/assets/build/medias/rubies/examples/read.rb +1 -1
  44. data/vendor/assets/build/medias/rubies/examples/text.rb +17 -4
  45. data/vendor/assets/build/medias/rubies/examples/video.rb +51 -3
  46. data/vendor/assets/build/medias/rubies/examples/web.rb +3 -2
  47. data/vendor/assets/build/medias/videos/avengers.mp4 +0 -0
  48. data/vendor/assets/build/medias/videos/lion_king.mp4 +0 -0
  49. data/vendor/assets/build/medias/videos/madmax.mp4 +0 -0
  50. data/vendor/assets/build/medias/videos/starwars.mov +0 -0
  51. data/vendor/assets/build/medias/videos/superman.mp4 +0 -0
  52. metadata +24 -12
  53. data/lib/atome/extensions/ping.rb +0 -13
  54. data/vendor/assets/build/js/third_parties/createjs.min.js +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49cc8d868d75099b8958e82985a3fbf1c43eaea349619ffa01e810fd9ea10ca0
4
- data.tar.gz: 5e9b7460dea168d8fb9b21de448edbb57deed81173fc1d04bf95f12262e80ba7
3
+ metadata.gz: c05926a443ccc93706250a217fe46a42d571f0c97cb9549fd445036b8cb0ff93
4
+ data.tar.gz: f9c922aaab0da02ff843af4f721f7370b538d39a4afd238338e9a6ad7071c34d
5
5
  SHA512:
6
- metadata.gz: 12f981205e19cfc5f4243e8498c190b7b5903009660f0c68219c4eaee95195b47e0ff69fcecc67c69cd7624b66a8dd10340249dc7bc9576682d05031ec497ed3
7
- data.tar.gz: ee6814778ba2ca00d75a7fb714847c680982ce20ffccc2df34160554340f1cb400efaab3a996d1820e91879ba72a0430f5bd90c2eb2463c39a25a2e1becdc540
6
+ metadata.gz: 6067a7cc1206d75a5245c3098976993745d17bf296ae6931ed3a3eda13d885389c89e7f47af061a506092866ec7a637e4e848089caefc74595693f90b18dd46d
7
+ data.tar.gz: 02a14025506b36a050d885fb5b09be305f011a3f2a067561994608a7e77fa236d18a62f3d92293b311459418fd384645b9f3447fc462881da2c77e3db3e27c09
data/Gemfile CHANGED
@@ -9,6 +9,4 @@ gem "rake", "~> 13.0"
9
9
 
10
10
  gem "minitest", "~> 5.0"
11
11
  gem 'rubocop', group: 'development'
12
- gem 'rubocop', group: 'development'
13
- gem 'rubocop', group: 'development'
14
- gem 'rubocop', group: 'development'
12
+
data/Rakefile CHANGED
@@ -13,6 +13,7 @@
13
13
  # task default: :test
14
14
 
15
15
  task :test do
16
+ FileUtils.copy_entry('vendor/assets/build/js/atome/', 'test/test_app/build/js/atome/')
16
17
  `gem cleanup atome;yes | gem uninstall atome ;gem build atome.gemspec;gem install atome`
17
18
  `cd test/test_app;atome update;atome run guard`
18
19
  end
@@ -195,6 +195,8 @@ end
195
195
  task :system_updater, :user_project_path, :production do |_t, args|
196
196
  user_project_path = args[:user_project_path]
197
197
  production = args[:production]
198
+ gem_location = File.join(File.dirname(__FILE__))
199
+ build_libraries(user_project_path, gem_location)
198
200
  build_common_libraries(user_project_path, production)
199
201
  end
200
202
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'atome/extensions/sha'
4
- require 'atome/extensions/ping'
5
- require 'atome/extensions/geolocation'
3
+ require 'atome/kernel/helpers/sha'
4
+ require 'atome/kernel/helpers/ping'
5
+ require 'atome/kernel/helpers/geolocation'
@@ -1,27 +1,12 @@
1
- def grab(val)
2
- Atome.grab(val)
3
- end
4
1
 
5
2
 
6
- def read_ruby(file)
7
- `
8
- fetch('medias/rubies/'+#{file})
9
- .then(response => response.text())
10
- .then(text => Opal.eval(text))
11
- `
12
- end
13
-
14
- def read_text(file)
15
- `
16
- fetch('medias/rubies/'+#{file})
17
- .then(response => response.text())
18
- .then(text => console.log(text))
19
- `
3
+ def grab(val)
4
+ Atome.grab(val)
20
5
  end
21
6
 
22
7
 
23
8
  def read(file, action=:text)
24
- send("read_#{action}", file)
9
+ Internal.send("read_#{action}", file)
25
10
  end
26
11
 
27
12
  def wait(seconds)
@@ -49,19 +34,6 @@ if (++x ===#{repeat} ) {
49
34
  end
50
35
 
51
36
 
52
-
53
- `
54
- const atome = {
55
- jsSchedule: function (years, months, days, hours, minutes, seconds, proc) {
56
- const now = new Date();
57
- const formatedDate = new Date(years, months - 1, days, hours, minutes, seconds);
58
- const diffTime = Math.abs(formatedDate - now);
59
- setTimeout(function () {
60
- Opal.Object.$schedule_callback(proc);
61
- }, diffTime);
62
- }}
63
- `
64
-
65
37
  def schedule(date, &proc)
66
38
  date = date.to_s
67
39
  delimiters = [",", " ", ":", "-"]
@@ -120,4 +92,21 @@ end
120
92
 
121
93
  def schedule_callback(proc)
122
94
  instance_exec(&proc) if proc.is_a?(Proc)
95
+ end
96
+
97
+ def play_video(params, &proc)
98
+ params[:atome].html_object.play
99
+ # TODO : change timeupdate for when possible requestVideoFrameCallback (opal-browser/opal/browser/event.rb line 36)
100
+ video_callback = params[:atome].bloc # this is the video callback not the play callback
101
+ play_callback = params[:proc] # this is the video callback not the play callback
102
+ params[:atome].html_object.on(:timeupdate) do |e|
103
+ # e.prevent # Prevent the default action (eg. form submission)
104
+ # You can also use `e.stop` to stop propagating the event to other handlers.
105
+ instance_exec(params[:atome].html_object.currentTime, &video_callback) if video_callback.is_a?(Proc)
106
+ instance_exec(params[:atome].html_object.currentTime, &play_callback) if play_callback.is_a?(Proc)
107
+ end
108
+ end
109
+
110
+ def pause_video(params, &proc)
111
+ params[:atome].html_object.pause
123
112
  end
@@ -19,6 +19,7 @@ class Atome
19
19
  include Sanitizer
20
20
  include ServerRenderer
21
21
  include Render
22
+ include Internal
22
23
  # include OpalRenderer
23
24
  # include HeadlessRenderer
24
25
  def self.atome(params)
@@ -79,20 +80,20 @@ class Atome
79
80
  end
80
81
  end
81
82
 
82
- def initialize(params = {}, &proc)
83
- # We initialize the renderer here
84
- @render=[]
83
+ def initialize(params = {}, &bloc)
84
+ @render = []
85
+ @child = []
86
+ @html_type = :unset
85
87
  # # TODO: check if we need to add properties for the root object before sending the params
86
88
  params.each do |atome, values|
87
- # We add the proc if it exist
88
- values[:bloc] = { bloc: proc }
89
- send(atome, values)
89
+ send(atome, values, &bloc)
90
90
  end
91
- Universe.atomes_add(self)
92
91
  end
92
+
93
+
94
+
93
95
  end
94
96
 
95
97
  # initialize Universe
96
98
  Universe.connected
97
99
  # Atome.new( identity: {type: :eVe, aui: :a_97987987987})
98
- puts "atome version : #{Atome::VERSION}"
@@ -3,8 +3,8 @@
3
3
  # generators
4
4
 
5
5
  Genesis.particle_creator(:html_type)
6
- Genesis.particle_creator(:html_object)
7
6
 
7
+ Genesis.particle_creator(:html_object)
8
8
 
9
9
  Genesis.atome_creator(:shape)
10
10
 
@@ -42,6 +42,20 @@ end
42
42
 
43
43
  Genesis.atome_creator(:shadow)
44
44
 
45
+ Genesis.atome_creator(:video) do |params, &proc|
46
+ # todo: factorise code below
47
+ if params
48
+ default_renderer = Sanitizer.default_params[:render]
49
+ generated_id = params[:id] || "video_#{Universe.atomes.length}"
50
+ generated_render = params[:render] || default_renderer unless params[:render].instance_of? Hash
51
+ generated_parent = params[:parent] || id
52
+ default_params = { render: [generated_render], id: generated_id, type: :video, parent: [generated_parent],
53
+ path: './medias/videos/video_missing.mp4', left: 139, top: 333, width: 199, height: 199 }
54
+ params = default_params.merge(params)
55
+ end
56
+ params
57
+ end
58
+
45
59
  # Example below
46
60
 
47
61
  # Genesis.atome_creator(:color) do |params|
@@ -70,8 +84,7 @@ Genesis.atome_creator(:shadow)
70
84
  # # puts "optional color_getter_pre_proc\n"
71
85
  # end
72
86
 
73
- Genesis.particle_creator(:id) do
74
- end
87
+ Genesis.particle_creator(:id)
75
88
  Genesis.particle_creator(:left)
76
89
  Genesis.particle_creator(:right)
77
90
  Genesis.particle_creator(:top)
@@ -86,8 +99,12 @@ Genesis.particle_creator(:type)
86
99
  Genesis.particle_creator(:smooth)
87
100
  Genesis.particle_creator(:blur)
88
101
  Genesis.particle_creator(:touch)
102
+ Genesis.particle_creator(:play)
103
+ Genesis.particle_creator(:pause)
104
+ Genesis.particle_creator(:time)
105
+
89
106
  # Genesis.atome_creator_option(:type_pre_render_proc) do |params|
90
- # # alert "it works and get #{params}"
107
+ # # "it works and get #{params}"
91
108
  # params[:value]
92
109
  # end
93
110
 
@@ -98,21 +115,47 @@ Genesis.particle_creator(:touch)
98
115
 
99
116
  Genesis.particle_creator(:render)
100
117
  Genesis.particle_creator(:drm)
101
- Genesis.particle_creator(:parent)
118
+
119
+ Genesis.particle_creator(:child)
120
+
121
+ Genesis.particle_creator(:parent) do |parents|
122
+ parents.each do |parent|
123
+ #TODO : create a root atome instead of using the condition below
124
+ if parent != :user_view
125
+ grab(parent).child << id
126
+ end
127
+ end
128
+ parents
129
+ end
102
130
 
103
131
  Genesis.atome_creator_option(:parent_pre_render_proc) do |params|
132
+ current_atome = params[:atome]
104
133
  unless params[:value].instance_of? Array
105
134
  params[:value] = [params[:value]]
106
135
  end
107
- params[:value]
136
+ current_atome.instance_variable_set("@parent", params[:value])
108
137
  end
138
+
109
139
  Genesis.particle_creator(:date)
110
140
  Genesis.particle_creator(:location)
111
141
 
142
+ Genesis.atome_creator_option(:id_pre_render_proc) do |params|
143
+ new_id = params[:value]
144
+ current_atome = params[:atome]
145
+ old_id = current_atome.id
146
+ current_atome.instance_variable_set('@id', new_id)
147
+ # we change id id the atomes hash
148
+ Universe.change_atome_id(old_id, new_id)
149
+ current_atome.html_object.id = new_id if current_atome.html_object
150
+
151
+ end
152
+
153
+
112
154
  # generate renderers
113
155
 
114
156
  Genesis.generate_html_renderer(:type) do |value, atome, proc|
115
157
  send("#{value}_html", value, atome, proc)
158
+ value
116
159
  end
117
160
 
118
161
  Genesis.generate_html_renderer(:shape) do |value, atome, proc|
@@ -128,7 +171,9 @@ end
128
171
  Genesis.generate_html_renderer(:color) do |value, atome, proc|
129
172
  instance_exec(&proc) if proc.is_a?(Proc)
130
173
  @html_type = :style
131
- $document.head << DOM("<style atome='#{type}' id='#{id}'></style>")
174
+ # we remove previous unused style tag
175
+ $document[id].remove if $document[id]
176
+ $document.head << DOM("<style atome='#{type}' id='#{id}'></style>")
132
177
  end
133
178
 
134
179
  Genesis.generate_html_renderer(:red) do |value, atome, proc|
@@ -173,29 +218,17 @@ Genesis.generate_html_renderer(:alpha) do |value, atome, proc|
173
218
  $document[id].inner_html = "\n.#{id}{background-color: rgba(#{red_found * 255},#{green_found * 255},#{blue_found * 255},#{value})}\n"
174
219
  end
175
220
 
176
- Genesis.generate_html_renderer(:drm) do |value, atome, proc|
177
- # instance_exec(&proc) if proc.is_a?(Proc)
178
- end
221
+ Genesis.generate_html_renderer(:drm)
179
222
 
180
223
  Genesis.generate_html_renderer(:parent) do |values, atome, proc|
181
224
  instance_exec(&proc) if proc.is_a?(Proc)
182
225
  values.each do |value|
183
- if @html_type == :style
184
- # we remove previous class if the are of the same type of the type
185
- # ex if there's a color already assign we remove it to allow the new one to be visible
186
- html_parent = grab(value).instance_variable_get("@html_object")
187
- html_parent.class_names.each do |class_name|
188
- if $document[class_name] && $document[class_name].attributes[:atome]
189
- class_to_remove = $document[class_name].attributes[:id]
190
- html_parent.remove_class(class_to_remove)
191
- end
192
- end
193
- $document[value].add_class(id)
194
- else
195
- @html_object.append_to($document[value])
196
- end
226
+ atome.html_decision(@html_type, value, id)
197
227
  end
198
228
  end
229
+
230
+
231
+
199
232
  Genesis.generate_html_renderer(:id) do |value, atome, proc|
200
233
  # send("#{value}_html", value, atome, proc)
201
234
  end
@@ -224,11 +257,8 @@ Genesis.generate_html_renderer(:height) do |value, atome, proc|
224
257
  @html_object.style[:height] = "#{value}px" unless @html_type == :style
225
258
  end
226
259
 
227
- Genesis.particle_creator(:rotate) do |params, atome, &proc|
228
- # puts atome
229
- # alert :pl
230
- instance_exec(method_name, params, atome, &proc) if proc.is_a?(Proc)
231
- end
260
+ Genesis.particle_creator(:rotate)
261
+
232
262
  Genesis.generate_html_renderer(:rotate) do |value, atome, proc|
233
263
  @html_object.style[:transform] = "rotate(#{value}deg)" unless @html_type == :style
234
264
  end
@@ -255,30 +285,17 @@ Genesis.generate_html_renderer(:touch) do |value, atome, proc|
255
285
  end
256
286
  end
257
287
 
258
- #drag
259
- def dragCallback(page_x, page_y, x, y, current_object, proc)
260
- current_object.instance_variable_set('@left', x)
261
- current_object.instance_variable_set('@top', y)
262
- instance_exec(page_x, page_y, &proc) if proc.is_a?(Proc)
263
- end
264
-
265
- Genesis.particle_creator(:drag)
266
-
267
- Genesis.generate_headless_renderer(:drag) do |value, atome, user_proc|
268
- puts "msg from headless drag method: value is #{value} , atome class is #{atome.class}"
269
- instance_exec(&user_proc) if user_proc.is_a?(Proc)
270
- end
271
-
272
- Genesis.generate_html_renderer(:drag) do |value, atome, user_proc|
273
- # FIXME: we should find a s solution to pass the proc to the dragCallback toavoid the test below
274
- @html_drag = user_proc if user_proc
275
- if value == :remove
276
- @html_object.remove_class(:draggable)
277
- else
278
- @html_object.add_class(:draggable)
279
- end
288
+ Genesis.generate_html_renderer(:video) do |value, atome, proc|
289
+ id_found = id
290
+ instance_exec(&proc) if proc.is_a?(Proc)
291
+ DOM do
292
+ video({ id: id_found, autoplay: false }).atome
293
+ end.append_to($document[:user_view])
294
+ @html_object = $document[id_found]
295
+ @html_type = :video
280
296
  end
281
297
 
298
+ # overflow
282
299
  Genesis.particle_creator(:overflow)
283
300
  Genesis.generate_html_renderer(:overflow) do |value, atome, proc|
284
301
  @html_object.style[:overflow] = value unless @html_type == :style
@@ -289,10 +306,7 @@ Genesis.particle_creator(:bloc)
289
306
  # image
290
307
 
291
308
  Genesis.atome_creator(:image)
292
- Genesis.particle_creator(:path)
293
- Genesis.generate_html_renderer(:path) do |value, atome, proc|
294
- @html_object[:src] = value
295
- end
309
+
296
310
  Genesis.generate_html_renderer(:image) do |value, atome, proc|
297
311
  id_found = id
298
312
  instance_exec(&proc) if proc.is_a?(Proc)
@@ -305,40 +319,41 @@ end
305
319
 
306
320
  # text
307
321
 
308
- Genesis.atome_creator(:text)
322
+ Genesis.atome_creator(:text) do |params|
323
+ # TODO: factorise code below
324
+ if params
325
+ default_renderer = Sanitizer.default_params[:render]
326
+ generated_id = params[:id] || "text_#{Universe.atomes.length}"
327
+ generated_render = params[:render] || default_renderer unless params[:render].instance_of? Hash
328
+ generated_parent = params[:parent] || id
329
+
330
+ default_params = { render: [generated_render], id: generated_id, type: :text, parent: [generated_parent],
331
+ visual: { size: 33 }, data: "hello world", left: 39, top: 33,
332
+ color: { render: [generated_render], id: "color_#{generated_id}", type: :color,
333
+ red: 0.09, green: 1, blue: 0.12, alpha: 1 }
334
+ }
335
+ params = default_params.merge(params)
336
+ params
337
+ end
338
+ # params
339
+ end
309
340
  Genesis.particle_creator(:string)
310
341
 
311
- Genesis.generate_html_renderer(:string) do |value, atome, proc|
312
- @html_object.text = value
313
- end
314
342
  Genesis.particle_creator(:visual)
315
343
  Genesis.generate_html_renderer(:visual) do |value, atome, proc|
316
344
  @html_object.style['font-size'] = "#{value[:size]}px"
317
345
  end
346
+
318
347
  Genesis.generate_html_renderer(:text) do |value, atome, proc|
319
348
  id_found = id
320
349
  instance_exec(&proc) if proc.is_a?(Proc)
321
350
  DOM do
322
- div(id: id_found).atome
351
+ div(id: id_found).atome.text
323
352
  end.append_to($document[:user_view])
324
353
  @html_object = $document[id_found]
325
354
  @html_type = :text
326
355
  end
327
356
 
328
-
329
- # video
330
- Genesis.atome_creator(:video)
331
- Genesis.generate_html_renderer(:video) do |value, atome, proc|
332
- id_found = id
333
- instance_exec(&proc) if proc.is_a?(Proc)
334
- DOM do
335
- video({ id: id_found, autoplay: true }).atome
336
- end.append_to($document[:user_view])
337
- @html_object = $document[id_found]
338
- @html_type = :video
339
- end
340
-
341
-
342
357
  # particles method below to allow to retrieve all particles for an atome
343
358
  Genesis.particle_creator(:particles)
344
359
  Genesis.atome_creator_option(:particles_getter_pre_proc) do |params|
@@ -346,25 +361,24 @@ Genesis.atome_creator_option(:particles_getter_pre_proc) do |params|
346
361
  particles_hash = {}
347
362
  atome_found.instance_variables.each do |particle_found|
348
363
  particle_content = atome_found.instance_variable_get(particle_found)
349
- particles_hash[particle_found] = particle_content
364
+ particles_hash[particle_found.sub('@', '')] = particle_content
350
365
  end
351
366
  particles_hash
352
367
  end
353
368
 
354
-
355
369
  # link
356
370
  Genesis.particle_creator(:link)
357
371
  Genesis.atome_creator_option(:link_pre_render_proc) do |params|
358
372
  atome_found = params[:atome]
359
373
  atome_to_link = grab(params[:value])
360
374
  particles_found = atome_to_link.particles
361
- atome_type = particles_found.delete('@type')
375
+ atome_type = particles_found.delete(:type)
362
376
  sanitized_particles = {}
363
377
  particles_found.each do |particle_name, value|
364
378
  particle_name = particle_name.gsub('@', '')
365
379
  sanitized_particles[particle_name] = value
366
380
  end
367
- sanitized_particles[:parent]=[atome_found.id]
381
+ sanitized_particles[:parent] = [atome_found.id]
368
382
  atome_found.send(atome_type, sanitized_particles)
369
383
  params[:value]
370
384
  end
@@ -373,6 +387,7 @@ Genesis.particle_creator(:path)
373
387
  Genesis.generate_html_renderer(:path) do |value, atome, proc|
374
388
  @html_object[:src] = value
375
389
  end
390
+
376
391
  Genesis.generate_html_renderer(:web) do |value, atome, proc|
377
392
  id_found = id
378
393
  instance_exec(&proc) if proc.is_a?(Proc)
@@ -380,8 +395,123 @@ Genesis.generate_html_renderer(:web) do |value, atome, proc|
380
395
  iframe({ id: id_found }).atome
381
396
  end.append_to($document[:user_view])
382
397
  @html_object = $document[id_found]
383
- @html_object.attributes[:allow]='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture'
384
- @html_object.attributes[:allowfullscreen]=true
398
+ @html_object.attributes[:allow] = 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture'
399
+ @html_object.attributes[:allowfullscreen] = true
385
400
  @html_type = :web
386
401
  end
387
402
 
403
+ Genesis.particle_creator(:data)
404
+
405
+ Genesis.generate_html_renderer(:data) do |value, atome, proc|
406
+ # TODO: create a method for each type
407
+ send("#{type}_data", value)
408
+ end
409
+
410
+ Genesis.particle_creator(:code)
411
+ Genesis.atome_creator_option(:code_pre_render_proc) do |params|
412
+ def get_binding
413
+ binding
414
+ end
415
+
416
+ str = params[:value][:code]
417
+ eval str, get_binding, __FILE__, __LINE__
418
+ params[:value]
419
+ end
420
+ Genesis.particle_creator(:on)
421
+
422
+ Genesis.generate_html_renderer(:on) do |value, atome, proc|
423
+ @html_object.on(value) do |e|
424
+ instance_exec(e, &proc) if proc.is_a?(Proc)
425
+ end
426
+ end
427
+
428
+ Genesis.atome_creator_option(:shape_post_save_proc) do |params|
429
+ current_atome = params[:atome]
430
+ #FIXME: look why we have to look in [:value][:value] this looks suspect
431
+ bloc_found = params[:value][:value][:bloc]
432
+ current_atome.instance_exec(params, &bloc_found) if bloc_found.is_a?(Proc)
433
+ params
434
+ end
435
+
436
+ Genesis.atome_creator_option(:text_post_save_proc) do |params|
437
+ current_atome = params[:atome]
438
+ #FIXME: look why we have to look in [:value][:value] this looks suspect
439
+ bloc_found = params[:value][:value][:bloc]
440
+ current_atome.instance_exec(params, &bloc_found) if bloc_found.is_a?(Proc)
441
+ params
442
+ end
443
+
444
+ Genesis.atome_creator_option(:play_pre_render_proc) do |params|
445
+ params[:atome].send("play_#{params[:atome].type}", params)
446
+ end
447
+
448
+ Genesis.atome_creator_option(:pause_pre_render_proc) do |params|
449
+ params[:atome].send("pause_#{params[:atome].type}", params)
450
+ proc_found = params[:proc]
451
+ params[:atome].instance_exec('::call back from pause render', &proc_found) if proc_found.is_a?(Proc)
452
+ end
453
+
454
+ Genesis.generate_html_renderer(:time) do |value, atome, proc|
455
+ # params[:atome].html_object.currentTime= 33
456
+ @html_object.currentTime = value
457
+ end
458
+
459
+ #drag
460
+ Genesis.generate_html_renderer(:drag) do |value, atome, proc|
461
+ alert ("this is very strange that I had a style tag please check")
462
+ instance_exec(&proc) if proc.is_a?(Proc)
463
+ @html_type = :style
464
+ $document.head << DOM("<style atome='#{type}' id='#{id}'></style>")
465
+ end
466
+ Genesis.particle_creator(:lock)
467
+ Genesis.particle_creator(:target)
468
+ Genesis.atome_creator(:drag) do |params|
469
+ # TODO: factorise code below
470
+ if params
471
+ default_renderer = Sanitizer.default_params[:render]
472
+ generated_id = params[:id] || "drag_#{Universe.atomes.length}"
473
+ generated_render = params[:render] || default_renderer unless params[:render].instance_of? Hash
474
+ generated_parent = params[:parent] || id
475
+ default_params = { render: [generated_render], id: generated_id, type: :drag, parent: [generated_parent], target: [generated_parent]
476
+ }
477
+ params = default_params.merge(params)
478
+ params
479
+ end
480
+ params
481
+ end
482
+ Genesis.particle_creator(:remove)
483
+ Genesis.particle_creator(:fixed)
484
+ Genesis.particle_creator(:max)
485
+ Genesis.particle_creator(:inside)
486
+ Genesis.atome_creator_option(:remove_pre_render_proc) do |params|
487
+ type_found = params[:atome].type
488
+ current_atome = params[:atome]
489
+ particle_to_remove = params[:value]
490
+ current_atome.send("#{type_found}_remove_#{particle_to_remove}", current_atome)
491
+ end
492
+ Genesis.atome_creator_option(:max_pre_render_proc) do |params|
493
+ current_atome = params[:atome]
494
+ current_atome.constraint_helper(params, current_atome, :max)
495
+ end
496
+ Genesis.atome_creator_option(:inside_pre_render_proc) do |params|
497
+ current_atome = params[:atome]
498
+ params[:value] = grab(params[:value]).html_object
499
+ current_atome.constraint_helper(params, current_atome, :max)
500
+ end
501
+ Genesis.atome_creator_option(:lock_pre_render_proc) do |params|
502
+ current_atome = params[:atome]
503
+ current_atome.constraint_helper(params, current_atome, :lock)
504
+ end
505
+ Genesis.atome_creator_option(:fixed_pre_render_proc) do |params|
506
+ current_atome = params[:atome]
507
+ current_atome.constraint_helper(params, current_atome, :fixed)
508
+ end
509
+ Genesis.generate_html_renderer(:target) do |targets, atome, proc|
510
+ targets.each do |value|
511
+ atome_found = grab(value)
512
+ # we get the id of the drag and ad add it as a html class to all children so they become draggable
513
+ atome_found.html_object.add_class(id)
514
+ end
515
+ html_drag_helper(atome, {})
516
+ end
517
+