atome 0.4.5.4 → 0.4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -17,8 +17,6 @@ module GenesisKernel
17
17
  # particle's methods
18
18
  def set_new_particle(particle, value, &proc)
19
19
  return false unless validation(particle)
20
-
21
- # instance_exec({ options: value }, &proc) if proc.is_a?(Proc)
22
20
  # now we exec the first optional method
23
21
  value = Genesis.run_optional_methods_helper("#{particle}_pre_render_proc".to_sym,
24
22
  { method: particle, value: value, atome: self, proc: proc })
@@ -30,18 +28,23 @@ module GenesisKernel
30
28
  { method: particle, value: value, proc: proc })
31
29
  broadcaster(particle, value)
32
30
  history(particle, value)
31
+
33
32
  self
34
33
  end
35
34
 
36
35
  def get_new_particle(particle)
37
36
  return false unless validation(particle)
37
+
38
38
  particle_instance_variable = "@#{particle}"
39
- value_getted=instance_variable_get(particle_instance_variable)
40
- Genesis.run_optional_methods_helper("#{particle}_getter_pre_proc".to_sym, { value: value_getted, atome: self })
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
41
  end
42
42
 
43
- def new_particle(particle, params, proc)
43
+ def new_particle(particle, params, proc, &method_proc)
44
44
  if params
45
+ if method_proc.is_a?(Proc)
46
+ params = instance_exec(params, &method_proc)
47
+ end
45
48
  set_new_particle(particle, params, &proc)
46
49
  else
47
50
  get_new_particle(particle)
@@ -50,48 +53,53 @@ module GenesisKernel
50
53
 
51
54
  # atome's methods
52
55
 
53
- def create_new_atomes(params, instance_var, _atome)
54
- new_atome = Atome.new({})
55
- instance_variable_set(instance_var, new_atome)
56
- # FIXME : move this to sanitizer and ensure that no reorder happen for "id" and "render" when
57
- params.each do |param, value|
58
- new_atome.send(param, value)
59
- end
60
- end
61
-
62
- def set_new_atome(atome, params, proc)
63
- return false unless validation(atome)
64
-
65
- instance_var = "@#{atome}"
66
- # now we exec the first optional method
67
- params=Genesis.run_optional_methods_helper("#{atome}_pre_save_proc".to_sym, { value: params, proc: proc })
68
- create_new_atomes(params[:value], instance_var, atome)
69
- # now we exec the second optional method
70
- Genesis.run_optional_methods_helper("#{atome}_post_save_proc".to_sym, { value: params, proc: proc })
71
- @dna = "#{Atome.current_user}_#{Universe.app_identity}_#{Universe.atomes.length}"
72
- self
73
- end
74
-
75
56
  def get_new_atome(atome)
76
57
  return false unless validation(atome)
77
58
 
78
- # Genesis.run_optional_methods_helper("#{atome}_getter_pre_proc".to_sym, { value: false })
79
59
  atome_instance_variable = "@#{atome}"
80
- value_getted=instance_variable_get(atome_instance_variable)
81
- Genesis.run_optional_methods_helper("#{atome}_getter_pre_proc".to_sym, { value: value_getted })
60
+ value_get = instance_variable_get(atome_instance_variable)
61
+ Genesis.run_optional_methods_helper("#{atome}_getter_pre_proc".to_sym, { value: value_get })
82
62
 
83
63
  end
84
64
 
85
- def new_atome(atome, params, proc)
65
+ def new_atome(atome, params, userproc, &method_proc)
86
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)
87
69
  params = add_essential_properties(atome, params)
88
70
  params = sanitizer(params)
89
- set_new_atome(atome, params, proc)
71
+ set_new_atome(atome, params, userproc)
90
72
  else
91
73
  get_new_atome(atome)
92
74
  end
93
75
  end
94
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
+
95
103
  def additional_atomes(atome, params)
96
104
  atome_instance_variable = "@#{atome}"
97
105
  if params
@@ -114,20 +122,25 @@ module Genesis
114
122
  @optionals_methods[property_name] = proc
115
123
  end
116
124
 
117
- def self.run_optional_methods_helper(method_name, params, atome=nil)
125
+ def self.run_optional_methods_helper(method_name, params, atome = nil)
126
+
118
127
  proc = nil
119
128
  proc = @optionals_methods[method_name] if @optionals_methods
120
- instance_exec(params,atome, &proc) if proc.is_a?(Proc)
121
- end
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)
122
135
 
123
- # #fIXME : we may have to remove the 2 methods below its only for test
124
136
 
125
- # render methods generator
137
+ end
138
+
126
139
  def self.generate_html_renderer(method_name, &methods_proc)
127
140
  current_renderer = :html
128
141
  generated_method_name = "#{method_name}_#{current_renderer}".to_sym
129
142
  Atome.define_method generated_method_name do |value, atome, &user_proc|
130
- instance_exec(value, atome, user_proc, &methods_proc) if methods_proc.is_a?(Proc)
143
+ params[:atome].instance_exec(value, atome, user_proc, &methods_proc) if methods_proc.is_a?(Proc)
131
144
  end
132
145
  end
133
146
 
@@ -166,12 +179,12 @@ module Genesis
166
179
  params
167
180
  end
168
181
 
169
- Genesis.atome_creator_option("#{method_name}_sanitizer_proc".to_sym) do |params,atome, proc|
182
+ Genesis.atome_creator_option("#{method_name}_sanitizer_proc".to_sym) do |params, atome, proc|
170
183
  # we return the value
171
184
  params
172
185
  end
173
186
 
174
- Genesis.atome_creator_option("#{method_name}_getter_pre_proc".to_sym) do |params,atome, proc|
187
+ Genesis.atome_creator_option("#{method_name}_getter_pre_proc".to_sym) do |params, atome, proc|
175
188
  # we return the value
176
189
  params[:value]
177
190
  end
@@ -194,13 +207,13 @@ module Genesis
194
207
  end
195
208
 
196
209
  # we create the easy methods here : ¬
197
- def self.atome_creator(method_name, &proc)
198
- instance_exec(method_name, &proc) if proc.is_a?(Proc)
210
+ def self.atome_creator(method_name, &method_proc)
211
+
199
212
  # we add the new method to the atome's collection of methods
200
213
  Utilities.atome_list(method_name)
201
214
  # we define many methods : easy, method=,pluralised and the fasts one, here is the easy
202
215
  Atome.define_method method_name do |params = nil, &user_proc|
203
- new_atome(method_name, params, user_proc)
216
+ new_atome(method_name, params, user_proc, &method_proc)
204
217
  end
205
218
  # no we also add the method= for easy setting
206
219
  Atome.define_method("#{method_name}=") do |params, &user_proc|
@@ -249,12 +262,11 @@ module Genesis
249
262
  optional_particle_methods(method_name)
250
263
  end
251
264
 
252
- def self.particle_creator(method_name, &proc)
253
- instance_exec(method_name, &proc) if proc.is_a?(Proc)
265
+ def self.particle_creator(method_name, &method_proc)
254
266
  # we add the new method to the particle's collection of methods
255
267
  Utilities.particle_list(method_name)
256
268
  Atome.define_method method_name do |params = nil, &user_proc|
257
- new_particle(method_name, params, user_proc)
269
+ new_particle(method_name, params, user_proc, &method_proc)
258
270
  end
259
271
  # no we also add the method= for easy setting
260
272
  Atome.define_method("#{method_name}=") do |params, &user_proc|
@@ -60,18 +60,14 @@ module Sanitizer
60
60
  def add_essential_properties(atome_type, params)
61
61
  # params_to_sanitize={atome: self, params: params}
62
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
- # if params.instance_of? Hash
63
+ # TODO remove the condition below once the line above works
65
64
  params[:id] = add_missing_id(atome_type, params) unless params[:id]
66
65
  # FIXME : inject this in async mode to avoid big lag!
67
66
  params[:drm] = add_essential_drm(params) unless params[:drm]
68
-
69
- render= Sanitizer.default_params[:render]
67
+ # forcing default render can causes problems and crashes
68
+ # render= Sanitizer.default_params[:render]
70
69
  params[:render] = render unless params[:render]
71
70
  check_parent(params)
72
- # else
73
- # params
74
- # end
75
71
 
76
72
  end
77
73
  end
@@ -1,22 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
  # TODO: params shouldn't be merge but they must respect the order
3
-
3
+ # TODO: Add default value for each methods below
4
+ # TODO: Factorise codes below
4
5
  class Atome
5
- def box(params = {})
6
+ def box(params = {}, &bloc)
6
7
  default_renderer = Sanitizer.default_params[:render]
7
8
  generated_id = params[:id] || "box_#{Universe.atomes.length}"
8
9
  generated_render = params[:render] || default_renderer unless params[:render].instance_of? Hash
9
10
  generated_parent = params[:parent] || id
10
11
 
11
- temp_default = { render: [generated_render], id: generated_id, type: :shape, parent: [generated_parent], width: 99, height: 99, left: 9, top: 9,
12
+ temp_default = { render: [generated_render], id: generated_id, type: :shape, parent: [generated_parent], width: 99, height: 99, left: 9, top: 9,
12
13
  color: { render: [generated_render], id: "color_#{generated_id}", type: :color,
13
14
  red: 0.69, green: 0.69, blue: 0.69, alpha: 1 } }
14
15
  params = temp_default.merge(params)
15
- new_atome = Atome.new({ shape: params })
16
+ new_atome = Atome.new({ shape: params},&bloc )
16
17
  new_atome.shape
17
18
  end
18
19
 
19
- def circle(params = {})
20
+ def circle(params = {}, &bloc)
20
21
  default_renderer = Sanitizer.default_params[:render]
21
22
  generated_id = params[:id] || "circle_#{Universe.atomes.length}"
22
23
  generated_render = params[:render] || default_renderer unless params[:render].instance_of? Hash
@@ -26,15 +27,29 @@ class Atome
26
27
  color: { render: [generated_render], id: "color_#{generated_id}", type: :color,
27
28
  red: 0.69, green: 0.69, blue: 0.69, alpha: 1 }, smooth: "100%" }
28
29
  params = temp_default.merge(params)
29
- new_atome = Atome.new({ shape: params })
30
+ new_atome = Atome.new({ shape: params },&bloc)
30
31
  new_atome.shape
31
32
  end
33
+
34
+ end
35
+
36
+ def box(params = {}, &proc)
37
+ Utilities.grab(:view).box(params,&proc)
32
38
  end
33
39
 
34
- def box(params = {})
35
- Utilities.grab(:view).box(params)
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)
36
51
  end
37
52
 
38
- def circle(params = {})
39
- Utilities.grab(:view).circle(params)
53
+ def drag(params = {}, &bloc)
54
+ Utilities.grab(:view).drag(params, &bloc)
40
55
  end
@@ -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
File without changes
@@ -30,10 +30,10 @@ module Utilities
30
30
  end
31
31
 
32
32
  def self.grab(params)
33
- atome_found = nil
34
- Universe.atomes.each do |atome|
35
- atome_found = atome if atome.id == params
36
- end
37
- atome_found
33
+ Universe.atomes[params]
38
34
  end
35
+
36
+
37
+
38
+
39
39
  end
@@ -23,12 +23,46 @@ class Atome
23
23
  puts "update : #{params}"
24
24
  end
25
25
 
26
+ def refresh
27
+ # delete the object in the view
28
+ self.html_object&.remove
29
+ particles_found = particles
30
+ particles_found.delete(:html_type)
31
+ particles_found.delete(:html_object)
32
+ particles_found.delete(:id)
33
+ particles_found.delete(:dna)
34
+ atomes_to_re_attach = {}
35
+ Utilities.atome_list.each do |atome_to_refresh|
36
+ atome_found = particles_found.delete(atome_to_refresh)
37
+ if atome_found
38
+ particles_found.delete(atome_to_refresh)
39
+ atomes_to_re_attach[atome_found.type] = atome_found
40
+ end
41
+ end
42
+ particles_found.each do |particle_to_refresh, value|
43
+ send(particle_to_refresh, value)
44
+ end
45
+ atomes_to_re_attach.each do |atome_to_attatch, content|
46
+ instance_variable_set("@#{atome_to_attatch}", content)
47
+ html_decision(content.html_type, id, content.id)
48
+ end
49
+ end
50
+
51
+
26
52
  def replace(params)
27
53
  puts "replace : #{params}"
28
54
  end
29
55
 
56
+ def clear
57
+ child.each do |child_found|
58
+ grab(child_found).html_object&.remove
59
+ end
60
+ child([])
61
+ end
62
+
30
63
  def delete(params)
31
- puts "replace : #{params}"
64
+ self.html_object&.remove
65
+ Universe.delete(id)
32
66
  end
33
67
 
34
68
  def [](params)
@@ -9,11 +9,12 @@ default_render = if RUBY_ENGINE.downcase == 'opal'
9
9
  :headless
10
10
  end
11
11
 
12
+
12
13
  Sanitizer.default_params[:render] = default_render
13
14
  Atome.new(
14
15
  { shape: { render: [default_render], id: :view, type: :shape, parent: [:user_view],
15
16
  left: 0, right: 0, top: 0, bottom: 0,overflow: :auto,
16
- color: { render: [default_render], id: :c1, type: :color,
17
+ color: { render: [default_render], id: :view_color, type: :color,
17
18
  red: 0.15, green: 0.15, blue: 0.15, alpha: 1 } } }
18
19
  )
19
20
 
@@ -11,12 +11,20 @@ class Universe
11
11
  end
12
12
 
13
13
  def self.initialize
14
- @atomes = []
14
+ @atomes = {}
15
15
  end
16
16
 
17
- def self.atomes_add(new_atome)
18
- # @atomes[atome_id] = new_atome
19
- @atomes << new_atome
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
21
+
22
+ def self.change_atome_id(prev_id, new_id)
23
+ @atomes[new_id] = @atomes.delete(prev_id)
24
+ end
25
+
26
+ def self.delete(id)
27
+ @atomes.delete(id)
20
28
  end
21
29
 
22
30
  class << self
@@ -5,7 +5,6 @@ class Atome
5
5
  $window.navigator.geolocate.then do |pos|
6
6
  localisation[:latitude] = pos.coords.latitude
7
7
  localisation[:longitude] = pos.coords.longitude
8
- # alert self.inspect
9
8
  end.rescue do |err|
10
9
  p err
11
10
  localisation = nil
@@ -3,6 +3,7 @@
3
3
  # Main render engine
4
4
  module Render
5
5
  def render_engine(property, value, atome, &proc)
6
+
6
7
  renderer_found = atome.render
7
8
  renderer_found.each do |renderer|
8
9
  renderer_name = "#{property}_#{renderer}"
@@ -2,7 +2,7 @@
2
2
 
3
3
  # server render methods here
4
4
  module ServerRenderer
5
- def render_sever(params, &proc)
5
+ def render_server(params, &proc)
6
6
  instance_exec(params, &proc) if proc.is_a?(Proc)
7
7
  puts "----puts render sever render #{params}"
8
8
  end
data/lib/atome/version.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Atome
4
- VERSION = '0.4.5.4'
4
+ VERSION = '0.4.7.0'
5
5
  end
6
+ puts "atome version : #{Atome::VERSION}"
data/lib/atome.rb CHANGED
@@ -18,7 +18,8 @@ end
18
18
 
19
19
  require 'atome/kernel/universe'
20
20
  require 'atome/kernel/generators/genesis'
21
- require 'atome/extensions/utilities'
21
+ require 'atome/kernel/helpers/internal_methods'
22
+ require 'atome/kernel/helpers/utilities'
22
23
  require 'atome/renderers/renderer'
23
24
  require 'atome/kernel/generators/sanitizer'
24
25
  require 'atome/kernel/generators/generator'
@@ -40,20 +41,10 @@ Atome.current_user = :jeezs
40
41
  require 'atome/kernel/sparkle'
41
42
 
42
43
  # TODO: create a system to secure and validate generated renderer methods , optional methods and atome's methods
43
-
44
- # test below uncomment when production mode
45
- # require '../test/test_app/application/index'
46
- # if RUBY_ENGINE.downcase != 'opal'
47
- # rgb_color = Color::CSS["red"].css_rgb
48
- # color_converted = { red: 0, green: 0, blue: 0, alpha: 1 }
49
- # rgb_color.gsub("rgb(", "").gsub(")", "").gsub("%", "").split(",").each_with_index do |component, index|
50
- # component = component.to_i/100
51
- # color_converted[color_converted.keys[index]] = component
52
- # end
53
- # puts color_converted
54
- # end
55
-
56
-
44
+ # TODO: int8! : language
45
+ # TODO: record user actions
46
+ # TODO: separate the audio in the video
47
+ # TODO: add mute to video
57
48
 
58
49
 
59
50
 
@@ -63,4 +63,8 @@ html, body {
63
63
  overflow: visible;
64
64
  }
65
65
 
66
+ .text {
67
+ -webkit-text-fill-color: transparent;
68
+ -webkit-background-clip: text;
69
+ }
66
70