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.
- checksums.yaml +4 -4
- data/Gemfile +1 -3
- data/Rakefile +1 -0
- data/app_builder_helpers/Rakefile +2 -0
- data/lib/atome/atome_native_extensions.rb +3 -3
- data/lib/atome/extensions/helper.rb +20 -31
- data/lib/atome/kernel/atome.rb +9 -8
- data/lib/atome/kernel/generators/generator.rb +210 -80
- data/lib/atome/kernel/generators/genesis.rb +58 -46
- data/lib/atome/kernel/generators/sanitizer.rb +3 -7
- data/lib/atome/kernel/generators/shapes.rb +25 -10
- data/lib/atome/{extensions → kernel/helpers}/geolocation.rb +0 -0
- data/lib/atome/kernel/helpers/internal_methods.rb +173 -0
- data/lib/atome/kernel/helpers/ping.rb +17 -0
- data/lib/atome/{extensions → kernel/helpers}/sha.rb +0 -0
- data/lib/atome/{extensions → kernel/helpers}/utilities.rb +5 -5
- data/lib/atome/kernel/properties/essential.rb +35 -1
- data/lib/atome/kernel/sparkle.rb +2 -1
- data/lib/atome/kernel/universe.rb +12 -4
- data/lib/atome/renderers/opal/extensions/geolocation.rb +0 -1
- data/lib/atome/renderers/renderer.rb +1 -0
- data/lib/atome/renderers/server/properties/generator.rb +1 -1
- data/lib/atome/version.rb +2 -1
- data/lib/atome.rb +6 -15
- data/vendor/assets/build/css/style.css +4 -0
- data/vendor/assets/build/index.html +4 -2
- data/vendor/assets/build/js/atome/atome.js +25 -11
- data/vendor/assets/build/js/third_parties/interact.min.js +2 -3
- data/vendor/assets/build/js/{ping.min.js → third_parties/ping.min.js} +0 -0
- data/vendor/assets/build/js/{utilities → third_parties}/w3color.js +0 -0
- data/vendor/assets/build/js/third_parties/zim.min.js +1 -0
- data/vendor/assets/build/medias/audios/guitar.wav +0 -0
- data/vendor/assets/build/medias/images/beach.jpg +0 -0
- data/vendor/assets/build/medias/rubies/examples/!run.rb +16 -0
- data/vendor/assets/build/medias/rubies/examples/box.rb +16 -1
- data/vendor/assets/build/medias/rubies/examples/circle.rb +1 -0
- data/vendor/assets/build/medias/rubies/examples/clear.rb +9 -0
- data/vendor/assets/build/medias/rubies/examples/code.rb +5 -0
- data/vendor/assets/build/medias/rubies/examples/drag.rb +42 -4
- data/vendor/assets/build/medias/rubies/examples/link.rb +8 -10
- data/vendor/assets/build/medias/rubies/examples/on.rb +16 -0
- data/vendor/assets/build/medias/rubies/examples/parent.rb +2 -1
- data/vendor/assets/build/medias/rubies/examples/read.rb +1 -1
- data/vendor/assets/build/medias/rubies/examples/text.rb +17 -4
- data/vendor/assets/build/medias/rubies/examples/video.rb +51 -3
- data/vendor/assets/build/medias/rubies/examples/web.rb +3 -2
- data/vendor/assets/build/medias/videos/avengers.mp4 +0 -0
- data/vendor/assets/build/medias/videos/lion_king.mp4 +0 -0
- data/vendor/assets/build/medias/videos/madmax.mp4 +0 -0
- data/vendor/assets/build/medias/videos/starwars.mov +0 -0
- data/vendor/assets/build/medias/videos/superman.mp4 +0 -0
- metadata +24 -12
- data/lib/atome/extensions/ping.rb +0 -13
- 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
|
-
|
40
|
-
Genesis.run_optional_methods_helper("#{particle}_getter_pre_proc".to_sym, { value:
|
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
|
-
|
81
|
-
Genesis.run_optional_methods_helper("#{atome}_getter_pre_proc".to_sym, { value:
|
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,
|
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,
|
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
|
-
|
121
|
-
|
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
|
-
|
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, &
|
198
|
-
|
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, &
|
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
|
-
|
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,
|
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
|
35
|
-
Utilities.grab(:view).
|
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
|
39
|
-
Utilities.grab(:view).
|
53
|
+
def drag(params = {}, &bloc)
|
54
|
+
Utilities.grab(:view).drag(params, &bloc)
|
40
55
|
end
|
File without changes
|
@@ -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
|
@@ -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
|
-
|
64
|
+
self.html_object&.remove
|
65
|
+
Universe.delete(id)
|
32
66
|
end
|
33
67
|
|
34
68
|
def [](params)
|
data/lib/atome/kernel/sparkle.rb
CHANGED
@@ -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: :
|
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
|
-
|
19
|
-
@atomes
|
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
|
data/lib/atome/version.rb
CHANGED
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/
|
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
|
-
#
|
45
|
-
#
|
46
|
-
#
|
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
|
|