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
@@ -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