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