atome 0.5.6.7.8 → 0.5.6.8.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/atome/atome.rb +4 -1
- data/lib/atome/extensions/atome.rb +13 -0
- data/lib/atome/genesis/genesis.rb +74 -0
- data/lib/atome/genesis/particles/communication.rb +13 -3
- data/lib/atome/genesis/particles/property.rb +10 -1
- data/lib/atome/genesis/particles/utility.rb +11 -1
- data/lib/atome/kernel/universe.rb +13 -5
- data/lib/atome/presets/atome.rb +6 -1
- data/lib/atome/utilities/essentials.rb +3 -0
- data/lib/atome/version.rb +1 -1
- data/lib/molecules/intuition/utillities.rb +258 -67
- data/lib/renderers/html/html.rb +1 -0
- data/vendor/assets/application/examples/alternate.rb +20 -2
- data/vendor/assets/application/examples/behavior.rb +32 -0
- data/vendor/assets/application/examples/executor.rb +36 -0
- data/vendor/assets/application/examples/holder.rb +62 -0
- data/vendor/assets/application/examples/input.rb +35 -0
- data/vendor/assets/application/examples/list.rb +5 -4
- data/vendor/assets/application/examples/sliders.rb +13 -2
- data/vendor/assets/src/js/atome/atome_helpers/communication.js +4 -4
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56128962742a3c148f7ce1187577af8438466642a81d1b227e0c3ab66275e322
|
4
|
+
data.tar.gz: aada78b1931101f52fe14e414e0396e9e15eb03754005d0836b1198f1b0091ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 817bee9de2868ed5983838b98a6b650423f04dbf4d5f35ceb20c2315b6ae54c991465e31c2e10ee74f8300d963e4106e53d036f1ecbd2ef10d668783e3194cc9
|
7
|
+
data.tar.gz: 6f075107a7e5b85f33ae0d0e757025a0702447365d7ffdb048b65a4f89138ac3d8e95acfb53b795b9a9743b2229692bae3edf32f17597a5bdc5e578dc26cede5
|
data/lib/atome/atome.rb
CHANGED
@@ -5,6 +5,8 @@
|
|
5
5
|
# Atome.instance_variable_set('@initialized',{})
|
6
6
|
class Atome
|
7
7
|
include Essentials
|
8
|
+
# controller_proc is used to stack multiple procs from native controller
|
9
|
+
attr_accessor :controller_proc
|
8
10
|
|
9
11
|
def aid(_v = nil)
|
10
12
|
@aid
|
@@ -36,6 +38,7 @@ class Atome
|
|
36
38
|
# @language = :english
|
37
39
|
# @callback = {}
|
38
40
|
@tag = {}
|
41
|
+
@behavior = {}
|
39
42
|
@selected = false
|
40
43
|
#@metrics = {}
|
41
44
|
@unit = {}
|
@@ -44,7 +47,7 @@ class Atome
|
|
44
47
|
@int8 = {}
|
45
48
|
@css = {}
|
46
49
|
@aid = identity_generator
|
47
|
-
|
50
|
+
@controller_proc=[]
|
48
51
|
@id = new_atome[:id] || @aid
|
49
52
|
Universe.atomes.each do |_aid,atome_f|
|
50
53
|
# we affect the already existing atome to target
|
@@ -51,6 +51,10 @@ module ObjectExtension
|
|
51
51
|
# alert option
|
52
52
|
# bloc.call(option)
|
53
53
|
# end
|
54
|
+
elsif params.key?(:molecule)
|
55
|
+
molecule=params[:molecule]
|
56
|
+
Genesis.build_molecule(molecule, &bloc)
|
57
|
+
Universe.add_to_molecule_list(molecule)
|
54
58
|
end
|
55
59
|
super if defined?(super)
|
56
60
|
end
|
@@ -156,6 +160,10 @@ class Object
|
|
156
160
|
grab(:view).box(params, &proc)
|
157
161
|
end
|
158
162
|
|
163
|
+
# def intuition(params = {}, &proc)
|
164
|
+
# grab(:view).intuition(params, &proc)
|
165
|
+
# end
|
166
|
+
|
159
167
|
def circle(params = {}, &proc)
|
160
168
|
grab(:view).circle(params, &proc)
|
161
169
|
end
|
@@ -661,6 +669,11 @@ class CssProxy
|
|
661
669
|
@current_atome.instance_variable_get('@css').to_s
|
662
670
|
end
|
663
671
|
|
672
|
+
def receptor(msg, &bloc)
|
673
|
+
parsed = JSON.parse(msg)
|
674
|
+
bloc.call(parsed)
|
675
|
+
end
|
676
|
+
|
664
677
|
end
|
665
678
|
|
666
679
|
|
@@ -50,6 +50,12 @@ class Genesis
|
|
50
50
|
new_atome(atome_name, &atome_proc)
|
51
51
|
|
52
52
|
end
|
53
|
+
def build_molecule(molecule_name, &molecule_proc)
|
54
|
+
new_molecule(molecule_name, &molecule_proc)
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
|
53
59
|
|
54
60
|
def auto_render_generator(element)
|
55
61
|
Universe.renderer_list.each do |render_engine|
|
@@ -193,6 +199,74 @@ class Genesis
|
|
193
199
|
|
194
200
|
end
|
195
201
|
|
202
|
+
def new_molecule(molecule, &method_proc)
|
203
|
+
|
204
|
+
Molecule.define_method molecule do |params, &user_proc|
|
205
|
+
m= instance_exec(params, user_proc, &method_proc) if method_proc.is_a?(Proc)
|
206
|
+
m
|
207
|
+
end
|
208
|
+
|
209
|
+
|
210
|
+
|
211
|
+
# # the method define below is the slowest but params are analysed and sanitized
|
212
|
+
# Atome.define_method element do |params = nil, &user_proc|
|
213
|
+
# instance_exec(params, user_proc, &method_proc) if method_proc.is_a?(Proc)
|
214
|
+
# if params
|
215
|
+
# params = atome_sanitizer(element, params, &user_proc)
|
216
|
+
# atome_processor(element, params, &user_proc)
|
217
|
+
# else
|
218
|
+
# # when no params passed whe assume teh user want a getter,
|
219
|
+
# # as getter should give us all atome of a given within the atome
|
220
|
+
# # ex : puts a.shape => return all atome with the type 'shape' in this atome
|
221
|
+
# collected_atomes = []
|
222
|
+
# # attached.each do |attached_atome|
|
223
|
+
# # collected_atomes << attached_atome if grab(attached_atome).type.to_sym == element.to_sym
|
224
|
+
# # end
|
225
|
+
# # TODO : add category for atome( material/physical vs modifier : color, shadow, .. vs shape, image ..)
|
226
|
+
# # then add condition same things fo code in presets/atome atome_common
|
227
|
+
# if %i[color shadow paint border].include?(element)
|
228
|
+
# # we do the same for apply to be able to retrieve 'color' and other atome that apply instead of being attached
|
229
|
+
# @apply.each do |attached_atome|
|
230
|
+
# collected_atomes << attached_atome if grab(attached_atome).type.to_sym == element.to_sym
|
231
|
+
# end
|
232
|
+
# else
|
233
|
+
# # collected_atomes = attached
|
234
|
+
# # if @attached
|
235
|
+
# attached.each do |attached_atome|
|
236
|
+
# collected_atomes << attached_atome if grab(attached_atome).type.to_sym == element.to_sym
|
237
|
+
# end
|
238
|
+
# # end
|
239
|
+
#
|
240
|
+
# end
|
241
|
+
# # TODO/ FIXME : potential problem with group here"
|
242
|
+
# # group({ collect: collected_atomes })
|
243
|
+
# collected_atomes
|
244
|
+
# end
|
245
|
+
# end
|
246
|
+
#
|
247
|
+
# # the method define below is the fastest params are passed directly
|
248
|
+
# Atome.define_method "set_#{element}" do |params, &user_proc|
|
249
|
+
# # we generate the corresponding module here:
|
250
|
+
# # Object.const_set(element, Module.new)
|
251
|
+
# # we add the newly created atome to the list of "child in it's category, eg if it's a shape we add the new atome
|
252
|
+
# # to the shape particles list : @!atome[:shape] << params[:id]
|
253
|
+
# # Atome.new(params, &user_proc)
|
254
|
+
#
|
255
|
+
# if Universe.atomes[params[:id]]
|
256
|
+
# # if atome id already exist we grab the previous one
|
257
|
+
# # this prevent the creation of new atome if the atome already exist
|
258
|
+
# previous_atome= grab(params[:id])
|
259
|
+
# # now we must re-affect affected atomes
|
260
|
+
# previous_atome.affect(params[:affect])
|
261
|
+
# previous_atome
|
262
|
+
# else
|
263
|
+
# Atome.new(params, &user_proc)
|
264
|
+
# end
|
265
|
+
# # Now we return the newly created atome instead of the current atome that is the parent cf: b=box; c=b.circle
|
266
|
+
# end
|
267
|
+
|
268
|
+
end
|
269
|
+
|
196
270
|
end
|
197
271
|
|
198
272
|
end
|
@@ -20,9 +20,7 @@ new({ particle: :message, category: :communication, type: :hash }) do |params, b
|
|
20
20
|
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
Atome.controller_sender(msg)
|
25
|
-
end
|
23
|
+
|
26
24
|
|
27
25
|
new({ particle: :int8, category: :communication, type: :int })
|
28
26
|
|
@@ -30,4 +28,16 @@ new({ particle: :language, category: :communication, type: :string }) do |params
|
|
30
28
|
@data = int8[params]
|
31
29
|
params
|
32
30
|
end
|
31
|
+
# method below are used for communication with ntaive core
|
32
|
+
def receptor(msg)
|
33
|
+
parsed = JSON.parse(msg)
|
34
|
+
A.controller_code[:controller].call(parsed)
|
35
|
+
end
|
33
36
|
|
37
|
+
new({ particle: :controller, category: :communication, type: :hash }) do |msg|
|
38
|
+
Atome.controller_sender(msg)
|
39
|
+
end
|
40
|
+
|
41
|
+
new({post: :controller}) do |_p, bloc|
|
42
|
+
@controller_proc << bloc
|
43
|
+
end
|
@@ -134,4 +134,13 @@ new({particle: :inside, render: false})
|
|
134
134
|
new({ initialized: :inside }) do |params, &user_proc|
|
135
135
|
render(:inside, params, &user_proc)
|
136
136
|
end
|
137
|
-
new({ particle: :margin })
|
137
|
+
new({ particle: :margin })
|
138
|
+
|
139
|
+
new({ particle: :value }) do |val|
|
140
|
+
pro_f = behavior[:value]
|
141
|
+
instance_exec(val, &pro_f) if pro_f.is_a?(Proc)
|
142
|
+
val
|
143
|
+
end
|
144
|
+
|
145
|
+
|
146
|
+
new({ particle: :behavior })
|
@@ -234,4 +234,14 @@ new ({ particle: :css, category: :utility, type: :string })
|
|
234
234
|
|
235
235
|
new({ read: :css }) do
|
236
236
|
CssProxy.new(js, nil, self)
|
237
|
-
end
|
237
|
+
end
|
238
|
+
|
239
|
+
new({particle: :holder, category: :utility, type: :atome})
|
240
|
+
|
241
|
+
# this particle is mainly used in conjunction with alternate particle as a 'lambda' to alternate methods
|
242
|
+
new({particle: :executor, category: :utility, type: :hash}) do |params|
|
243
|
+
params.each do |method, opt|
|
244
|
+
send(method, opt)
|
245
|
+
end
|
246
|
+
params
|
247
|
+
end
|
@@ -6,6 +6,7 @@ class Universe
|
|
6
6
|
@atomes = {}
|
7
7
|
@atomes_ids = {}
|
8
8
|
@atome_list = []
|
9
|
+
@molecule_list = []
|
9
10
|
@particle_list = {}
|
10
11
|
@renderer_list = %i[html browser headless server log]
|
11
12
|
@sanitizers = {}
|
@@ -24,7 +25,7 @@ class Universe
|
|
24
25
|
@database_ready = false
|
25
26
|
# @historicize=false
|
26
27
|
class << self
|
27
|
-
attr_reader :atomes, :atomes_ids, :renderer_list, :atome_list, :particle_list, :classes, :counter, :atomes_specificities
|
28
|
+
attr_reader :atomes, :atomes_ids, :renderer_list,:molecule_list, :atome_list, :particle_list, :classes, :counter, :atomes_specificities
|
28
29
|
attr_accessor :connected,:allow_sync, :allow_localstorage, :database_ready
|
29
30
|
|
30
31
|
def messages
|
@@ -68,7 +69,8 @@ class Universe
|
|
68
69
|
end
|
69
70
|
|
70
71
|
def add_to_particle_list(particle = nil, type, category)
|
71
|
-
instance_variable_get('@particle_list')[particle] = { type: type, category: category }
|
72
|
+
# instance_variable_get('@particle_list')[particle] = { type: type, category: category }
|
73
|
+
@particle_list[particle] = { type: type, category: category }
|
72
74
|
end
|
73
75
|
|
74
76
|
def add_atomes_specificities atome_type_to_add
|
@@ -87,16 +89,22 @@ class Universe
|
|
87
89
|
|
88
90
|
def add_sanitizer_method(method_name, &method_proc)
|
89
91
|
# this method is used to add sanitizer methods
|
90
|
-
instance_variable_get('@sanitizers').merge!({ method_name => method_proc })
|
92
|
+
# instance_variable_get('@sanitizers').merge!({ method_name => method_proc })
|
93
|
+
@sanitizers.merge!({ method_name => method_proc })
|
91
94
|
end
|
92
95
|
|
93
96
|
def get_sanitizer_method(method_name)
|
94
97
|
# this method is used to add optional methods
|
95
|
-
instance_variable_get('@sanitizers')[method_name]
|
98
|
+
# instance_variable_get('@sanitizers')[method_name]
|
99
|
+
@sanitizers[method_name]
|
96
100
|
end
|
97
101
|
|
98
102
|
def add_to_atome_list(atome)
|
99
|
-
|
103
|
+
@atome_list.push(atome)
|
104
|
+
end
|
105
|
+
|
106
|
+
def add_to_molecule_list(molecule)
|
107
|
+
@molecule_list.push(molecule)
|
100
108
|
end
|
101
109
|
|
102
110
|
def add_to_atomes(aid, atome)
|
data/lib/atome/presets/atome.rb
CHANGED
@@ -54,12 +54,17 @@ class Atome
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def box(params = {}, &bloc)
|
57
|
-
|
58
57
|
atome_preset = :box
|
59
58
|
params = atome_common(atome_preset, params)
|
60
59
|
preset_common(params, &bloc)
|
61
60
|
end
|
62
61
|
|
62
|
+
# def intuition(params = {}, &bloc)
|
63
|
+
# atome_preset = :intuition
|
64
|
+
# params = atome_common(atome_preset, params)
|
65
|
+
# preset_common(params, &bloc)
|
66
|
+
# end
|
67
|
+
|
63
68
|
def circle(params = {}, &bloc)
|
64
69
|
atome_preset = :circle
|
65
70
|
params = atome_common(atome_preset, params)
|
@@ -25,6 +25,9 @@ module Essentials
|
|
25
25
|
box: { type: :shape, width: 39, height: 39,
|
26
26
|
apply: [:box_color],
|
27
27
|
left: 0, top: 0, preset: :box },
|
28
|
+
# intuition: { type: :intuition, width: 39, height: 39,
|
29
|
+
# apply: [:box_color],
|
30
|
+
# left: 0, top: 0, preset: :intuition },
|
28
31
|
vector: { type: :vector, width: 39, height: 39,
|
29
32
|
left: 0, top: 0, preset: :vector, definition: corp },
|
30
33
|
circle: { type: :shape, width: 39, height: 39, smooth: '100%',
|
data/lib/atome/version.rb
CHANGED
@@ -1,78 +1,269 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
3
|
+
new(molecule: :input) do |params, bloc|
|
4
|
+
params[:height] ||= 15
|
5
|
+
params[:width] ||= 222
|
6
|
+
trigger = params.delete(:trigger)
|
7
|
+
trigger ||= :return
|
8
|
+
limit = params.delete(:limit)
|
9
|
+
limit ||= 15
|
10
|
+
back_col = params.delete(:back)
|
11
|
+
back_col ||= :grey
|
12
|
+
text_col = params.delete(:text)
|
13
|
+
text_col ||= :black
|
14
|
+
default_text = params.delete(:default)
|
15
|
+
default_text ||= :input
|
16
|
+
default_parent = if self.instance_of?(Atome)
|
17
|
+
id
|
18
|
+
else
|
19
|
+
:view
|
20
|
+
end
|
21
|
+
attach_to = params[:attach] || default_parent
|
22
|
+
renderer_found = grab(attach_to).renderers
|
23
|
+
input_back = Atome.new(
|
24
|
+
{ renderers: renderer_found, type: :shape, color: back_col,
|
25
|
+
left: 0, top: 0, data: '', attach: attach_to,
|
26
|
+
smooth: 6, overflow: :hidden,
|
27
|
+
})
|
28
|
+
|
29
|
+
text_input = Atome.new(
|
30
|
+
{ renderers: [:html], type: :text, color: text_col, component: { size: params[:height] },
|
31
|
+
data: default_text, left: params[:height] * 20 / 100, top: 0, edit: true, attach: input_back.id, height: params[:height],
|
32
|
+
position: :absolute
|
33
|
+
}
|
34
|
+
)
|
35
|
+
|
36
|
+
text_input.touch(:down) do
|
37
|
+
text_input.edit(true)
|
38
|
+
end
|
39
|
+
|
40
|
+
text_input.keyboard(:down) do |native_event|
|
41
|
+
# text_input.component({ selected: { color: :red, text: :red } })
|
42
|
+
|
43
|
+
event = Native(native_event)
|
44
|
+
if event[:keyCode].to_s == '8' || event[:keyCode].to_s == '46'
|
45
|
+
# always allow
|
46
|
+
elsif event[:keyCode].to_s == '13'
|
47
|
+
# we prevent the input
|
48
|
+
if trigger == :return
|
49
|
+
bloc.call(text_input.data)
|
50
|
+
end
|
51
|
+
text_input.edit(false)
|
52
|
+
event.preventDefault()
|
53
|
+
elsif text_input.data.length > limit
|
54
|
+
event.preventDefault()
|
55
|
+
end
|
56
|
+
if trigger == :down
|
57
|
+
bloc.call(text_input.data)
|
32
58
|
end
|
33
|
-
slider
|
34
59
|
end
|
35
60
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
61
|
+
text_input.keyboard(:up) do |native_event|
|
62
|
+
input_back.data = text_input.data
|
63
|
+
if trigger == :up
|
64
|
+
bloc.call(text_input.data)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
params.each do |part_f, val_f|
|
68
|
+
input_back.send(part_f, val_f)
|
69
|
+
end
|
70
|
+
input_back.holder(text_input)
|
71
|
+
input_back
|
72
|
+
end
|
73
|
+
new(molecule: :list) do |params, _bloc|
|
74
|
+
|
75
|
+
styles_found = params.delete(:styles)
|
76
|
+
element = params.delete(:element)
|
77
|
+
listing = params.delete(:listing)
|
78
|
+
|
79
|
+
styles_found ||= {
|
80
|
+
width: 99,
|
81
|
+
height: 33,
|
82
|
+
margin: 6,
|
83
|
+
shadow: { blur: 9, left: 3, top: 3, id: :cell_shadow, red: 0, green: 0, blue: 0, alpha: 0.6 },
|
84
|
+
left: 0,
|
85
|
+
color: :yellowgreen
|
86
|
+
}
|
87
|
+
element ||= { width: 33,
|
88
|
+
height: 33,
|
89
|
+
left: :center,
|
90
|
+
top: :center,
|
91
|
+
color: :orange,
|
92
|
+
type: :text }
|
93
|
+
unless params[:width]
|
94
|
+
params[:width] = styles_found[:width]
|
95
|
+
end
|
96
|
+
unless element[:width]
|
97
|
+
element[:width] = styles_found[width]
|
98
|
+
end
|
99
|
+
margin = styles_found[:margin]
|
100
|
+
height_found = styles_found[:height]
|
101
|
+
|
102
|
+
# lets create the listing container
|
103
|
+
default_parent = if self.instance_of?(Atome)
|
104
|
+
id
|
105
|
+
else
|
106
|
+
:view
|
107
|
+
end
|
108
|
+
attach_to = params[:attach] || default_parent
|
109
|
+
renderer_found = grab(attach_to).renderers
|
110
|
+
list = Atome.new({ renderers: renderer_found, type: :shape, color: { alpha: 0 }, attach: attach_to }.merge(params))
|
111
|
+
# Atome.new(
|
112
|
+
# { renderers: [:html], type: :shape, attach: :view, color: back_col,
|
113
|
+
# left: 0, top: 0, data: '', attach: attach_to,
|
114
|
+
# smooth: 6, overflow: :hidden,
|
115
|
+
# })
|
116
|
+
# now the listing
|
117
|
+
listing.each_with_index do |data, index|
|
118
|
+
# let's create the container
|
119
|
+
new_atome = { renderers: renderer_found, attach: list.id }.merge(styles_found).merge({ type: :shape })
|
120
|
+
el = Atome.new(new_atome)
|
121
|
+
el.top((height_found + margin) * index)
|
122
|
+
# now the content
|
123
|
+
Atome.new({ renderers: renderer_found, attach: el.id }.merge(element).merge(data))
|
124
|
+
|
125
|
+
end
|
126
|
+
list
|
127
|
+
end
|
128
|
+
new({ molecule: :slider }) do |params, bloc|
|
129
|
+
|
130
|
+
default_value = params[:value] ||= 0
|
131
|
+
orientation = params.delete(:orientation) || :horizontal
|
132
|
+
range_found = params.delete(:range)
|
133
|
+
min_value = params.delete(:min) || 0
|
134
|
+
max_value = params.delete(:max) || 100
|
135
|
+
color_found = params[:color] ||= :gray
|
136
|
+
default_smooth = 9
|
137
|
+
default_slider_particles = { color: color_found, width: 333, height: 33, left: 0, top: 0, smooth: default_smooth }
|
138
|
+
default_cursor_particles = { color: color_found, width: 29, height: 29, left: 0, smooth: '100%' }
|
139
|
+
cursor_found = params.delete(:cursor)
|
140
|
+
slider_particle = default_slider_particles.merge(params)
|
141
|
+
slider = box(slider_particle)
|
142
|
+
|
143
|
+
slider_shadow = slider.shadow({
|
144
|
+
id: :s2,
|
145
|
+
left: 3, top: 3, blur: 9,
|
146
|
+
invert: true,
|
147
|
+
red: 0, green: 0, blue: 0, alpha: 0.7
|
148
|
+
})
|
149
|
+
|
150
|
+
range = slider.box({ id: "#{slider.id}_range", top: :auto, bottom: 0 })
|
151
|
+
|
152
|
+
if range_found
|
153
|
+
range.apply(slider_shadow.id,)
|
154
|
+
range_found.each do |part, val|
|
155
|
+
range.send(part, val)
|
57
156
|
end
|
58
|
-
|
59
|
-
|
157
|
+
else
|
158
|
+
range.color({ alpha: 0 })
|
159
|
+
end
|
160
|
+
cursor_particle = default_cursor_particles.merge(cursor_found).merge({ id: "#{slider.id}_cursor" })
|
161
|
+
cursor = slider.box(cursor_particle)
|
162
|
+
cursor_left = (slider_particle[:width] - cursor_particle[:width]) / 2.0
|
163
|
+
cursor_top = (slider_particle[:height] - cursor_particle[:height]) / 2.0
|
164
|
+
|
165
|
+
my_behavior = lambda() do |new_value|
|
166
|
+
if orientation == :vertical
|
167
|
+
if cursor.width < slider.width
|
168
|
+
range.width(cursor.width)
|
169
|
+
range.left(cursor_left)
|
170
|
+
else
|
171
|
+
range.width(slider.width)
|
172
|
+
range.smooth(default_smooth)
|
173
|
+
end
|
174
|
+
cursor_top_initial = ((max_value - new_value).to_f / (max_value - min_value)) * (slider_particle[:height] - cursor_particle[:height])
|
175
|
+
bloc.call(new_value)
|
176
|
+
slider.instance_variable_set('@value',new_value)
|
177
|
+
cursor.top(cursor_top_initial)
|
178
|
+
cursor.left(cursor_left)
|
179
|
+
range.height((slider.height - cursor.top) - cursor.height / 2)
|
180
|
+
else
|
181
|
+
if cursor.height < slider.height
|
182
|
+
range.height(cursor.height)
|
183
|
+
range.top(cursor_top)
|
184
|
+
else
|
185
|
+
range.height(slider.height)
|
186
|
+
range.smooth(default_smooth)
|
187
|
+
end
|
188
|
+
cursor_left_initial = ((new_value - min_value).to_f / (max_value - min_value)) * (slider_particle[:width] - cursor_particle[:width])
|
189
|
+
bloc.call(new_value)
|
190
|
+
slider.instance_variable_set('@value',new_value)
|
191
|
+
cursor.left(cursor_left_initial)
|
192
|
+
cursor.top(cursor_top)
|
193
|
+
range.width(cursor.left + cursor.width / 2)
|
60
194
|
end
|
61
|
-
|
62
|
-
|
63
|
-
renderer_found = renderers
|
64
|
-
# lets create the listing container
|
65
|
-
list = box({ attach: id, color: { alpha: 0 } }.merge(params))
|
66
|
-
# now the listing
|
67
|
-
listing.each_with_index do |data, index|
|
68
|
-
# let's create the container
|
69
|
-
new_atome = { renderers: renderer_found, attach: list.id }.merge(styles_found).merge({ type: :shape })
|
70
|
-
el = Atome.new(new_atome)
|
71
|
-
el.top((height_found + margin) * index)
|
72
|
-
# now the content
|
73
|
-
Atome.new({ renderers: renderer_found, attach: el.id }.merge(element).merge(data))
|
195
|
+
end
|
196
|
+
slider.behavior({ value: my_behavior })
|
74
197
|
|
198
|
+
update_value = lambda do |cursor_position, cursor_size, slider_size, orientation|
|
199
|
+
effective_slider_size = slider_size - cursor_size
|
200
|
+
if orientation == :vertical
|
201
|
+
percentage = 1.0 - (cursor_position.to_f / effective_slider_size)
|
202
|
+
else
|
203
|
+
percentage = cursor_position.to_f / effective_slider_size
|
75
204
|
end
|
76
|
-
|
205
|
+
value_range = max_value - min_value
|
206
|
+
calculated_value = min_value + (value_range * percentage).round
|
207
|
+
calculated_value.clamp(min_value, max_value)
|
77
208
|
end
|
209
|
+
|
210
|
+
if orientation == :vertical
|
211
|
+
if cursor.width < slider.width
|
212
|
+
range.width(cursor.width)
|
213
|
+
range.left(cursor_left)
|
214
|
+
else
|
215
|
+
range.width(slider.width)
|
216
|
+
range.smooth(default_smooth)
|
217
|
+
end
|
218
|
+
|
219
|
+
cursor_top_initial = ((max_value - default_value).to_f / (max_value - min_value)) * (slider_particle[:height] - cursor_particle[:height])
|
220
|
+
bloc.call(default_value)
|
221
|
+
cursor.top(cursor_top_initial)
|
222
|
+
cursor.left(cursor_left)
|
223
|
+
range.height((slider.height - cursor.top) - cursor.height / 2)
|
224
|
+
# now the event
|
225
|
+
cursor.drag({ restrict: { max: { top: slider_particle[:height] - cursor_particle[:height], left: cursor_left }, min: { left: cursor_left } } }) do |event|
|
226
|
+
value = update_value.call(cursor.top, cursor_particle[:height], slider_particle[:height], orientation)
|
227
|
+
range.height((slider.height - cursor.top) - cursor.height / 2)
|
228
|
+
bloc.call(value)
|
229
|
+
slider.instance_variable_set('@value',value)
|
230
|
+
end
|
231
|
+
|
232
|
+
else
|
233
|
+
|
234
|
+
if cursor.height < slider.height
|
235
|
+
range.height(cursor.height)
|
236
|
+
range.top(cursor_top)
|
237
|
+
else
|
238
|
+
range.height(slider.height)
|
239
|
+
range.smooth(default_smooth)
|
240
|
+
end
|
241
|
+
|
242
|
+
cursor_left_initial = ((default_value - min_value).to_f / (max_value - min_value)) * (slider_particle[:width] - cursor_particle[:width])
|
243
|
+
bloc.call(default_value)
|
244
|
+
cursor.left(cursor_left_initial)
|
245
|
+
cursor.top(cursor_top)
|
246
|
+
range.width(cursor.left + cursor.width / 2)
|
247
|
+
|
248
|
+
# now the event
|
249
|
+
cursor.drag({ restrict: { max: { left: slider_particle[:width] - cursor_particle[:width], top: cursor_top }, min: { top: cursor_top } } }) do |event|
|
250
|
+
value = update_value.call(cursor.left, cursor_particle[:width], slider_particle[:width], orientation)
|
251
|
+
range.width(cursor.left + cursor.width / 2)
|
252
|
+
bloc.call(value)
|
253
|
+
slider.instance_variable_set('@value',value)
|
254
|
+
end
|
255
|
+
end
|
256
|
+
cursor.touch(:double) do
|
257
|
+
slider.value(default_value)
|
258
|
+
end
|
259
|
+
|
260
|
+
cursor.shadow({
|
261
|
+
id: :s4,
|
262
|
+
left: 1, top: 1, blur: 3,
|
263
|
+
option: :natural,
|
264
|
+
red: 0, green: 0, blue: 0, alpha: 0.6
|
265
|
+
})
|
266
|
+
slider
|
267
|
+
|
78
268
|
end
|
269
|
+
new({ particle: :behavior })
|
data/lib/renderers/html/html.rb
CHANGED
@@ -1,4 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
def act_on(obj)
|
3
|
+
obj.color(:red)
|
4
|
+
obj.left(56)
|
5
|
+
end
|
6
|
+
|
7
|
+
def act_off(obj)
|
8
|
+
obj.color(:blue)
|
9
|
+
obj.left(33)
|
10
|
+
end
|
11
|
+
|
2
12
|
|
3
13
|
b = box({ left: 12, id: :the_first_box, top: 30 })
|
4
14
|
|
@@ -6,7 +16,7 @@ b.touch(true) do
|
|
6
16
|
b.alternate({ width: 33, color: :red, height: 33 , smooth: 0 }, { width: 66, color: :orange, blur: 8}, { height: 66, color: :green, smooth: 9, blur: 0})
|
7
17
|
end
|
8
18
|
|
9
|
-
c = circle({ left:
|
19
|
+
c = circle({ left: 99 , top: 30})
|
10
20
|
|
11
21
|
c.touch(true) do
|
12
22
|
alt = b.alternate(true, false)
|
@@ -15,4 +25,12 @@ c.touch(true) do
|
|
15
25
|
else
|
16
26
|
c.color(:orange)
|
17
27
|
end
|
18
|
-
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
c2 = circle({ left: 333 , top: 30})
|
32
|
+
|
33
|
+
|
34
|
+
c2.touch(true) do
|
35
|
+
b.alternate({ executor: {act_on: b} }, { executor: {act_off: b}})
|
36
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Behaviors allow you to add specific code to any particle, enabling the particle to behave differently.
|
4
|
+
# Here, when the first box receives a value, it behaves differently from the second box even if they received
|
5
|
+
# the same params .
|
6
|
+
|
7
|
+
text({ data: :hello, id: :the_txt, left: 120 })
|
8
|
+
|
9
|
+
b=box
|
10
|
+
|
11
|
+
my_lambda= lambda do |new_value|
|
12
|
+
grab(:the_txt).color(:red)
|
13
|
+
end
|
14
|
+
|
15
|
+
b.behavior({value: my_lambda})
|
16
|
+
|
17
|
+
my_second_lambda= lambda do |new_value|
|
18
|
+
grab(:the_txt).data('from cirle')
|
19
|
+
end
|
20
|
+
c=box({top: 69})
|
21
|
+
c.behavior({value: my_second_lambda})
|
22
|
+
|
23
|
+
wait 1 do
|
24
|
+
c.value(:ok)
|
25
|
+
end
|
26
|
+
wait 2 do
|
27
|
+
b.value(:ok)
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
def act_on(obj)
|
3
|
+
obj.color(:red)
|
4
|
+
obj.left(56)
|
5
|
+
end
|
6
|
+
|
7
|
+
def act_off(obj)
|
8
|
+
obj.color(:blue)
|
9
|
+
obj.left(33)
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
b = box({ left: 12, id: :the_first_box, top: 30 })
|
14
|
+
|
15
|
+
b.touch(true) do
|
16
|
+
b.alternate({ width: 33, color: :red, height: 33 , smooth: 0 }, { width: 66, color: :orange, blur: 8}, { height: 66, color: :green, smooth: 9, blur: 0})
|
17
|
+
end
|
18
|
+
|
19
|
+
c = circle({ left: 99 , top: 30})
|
20
|
+
|
21
|
+
c.touch(true) do
|
22
|
+
alt = b.alternate(true, false)
|
23
|
+
if alt
|
24
|
+
c.color(:yellowgreen)
|
25
|
+
else
|
26
|
+
c.color(:orange)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
c2 = circle({ left: 333 , top: 30})
|
32
|
+
|
33
|
+
|
34
|
+
c2.touch(true) do
|
35
|
+
b.alternate({ executor: {act_on: b} }, { executor: {act_off: b}})
|
36
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# holder is a particle that contain an atome so we use my_objet.holder.left(33)
|
3
|
+
# and it will move the atome contain in the holder particle to be manipulated
|
4
|
+
# it facilitate the access of some atome without being worried about their id
|
5
|
+
# this is mainly used int context of input , slider , etc...
|
6
|
+
|
7
|
+
|
8
|
+
# simple example
|
9
|
+
b=box({color: :black})
|
10
|
+
|
11
|
+
c=b.circle({width: 10, height: 10, color: :red})
|
12
|
+
|
13
|
+
b.holder(c)
|
14
|
+
wait 1 do
|
15
|
+
b.holder.center(true)
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
# second example ( holder is build in the input molecule)
|
24
|
+
text({ left: 33, top: 33, data: 'data collected', id: :infos })
|
25
|
+
|
26
|
+
inp = A.input({ width: 166,
|
27
|
+
trigger: :up,
|
28
|
+
back: :orange,
|
29
|
+
shadow: {
|
30
|
+
id: :s2,
|
31
|
+
left: 3, top: 3, blur: 3,
|
32
|
+
invert: true,
|
33
|
+
red: 0, green: 0, blue: 0, alpha: 0.9
|
34
|
+
},
|
35
|
+
text: :black,
|
36
|
+
smooth: 3,
|
37
|
+
left: 66,
|
38
|
+
top: 33,
|
39
|
+
default: 'type here'
|
40
|
+
}) do |val|
|
41
|
+
|
42
|
+
grab(:infos).data(val)
|
43
|
+
end
|
44
|
+
|
45
|
+
wait 2 do
|
46
|
+
inp.top(12)
|
47
|
+
wait 1 do
|
48
|
+
inp.width(666)
|
49
|
+
inp.holder.blur(6)
|
50
|
+
wait 1 do
|
51
|
+
inp.holder.blur(0)
|
52
|
+
inp.holder.data('injected data')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
t = text({ left: 33, top: 33, data: 'data collected', id: :infos })
|
3
|
+
|
4
|
+
inp=input({ width: 166,
|
5
|
+
trigger: :up,
|
6
|
+
back: :orange,
|
7
|
+
shadow: {
|
8
|
+
id: :s2,
|
9
|
+
left: 3, top: 3, blur: 3,
|
10
|
+
invert: true,
|
11
|
+
red: 0, green: 0, blue: 0, alpha: 0.9
|
12
|
+
},
|
13
|
+
attach: :intuition,
|
14
|
+
text: :black,
|
15
|
+
smooth: 3,
|
16
|
+
left: 66,
|
17
|
+
top: 33,
|
18
|
+
default: 'type here'
|
19
|
+
}) do |val|
|
20
|
+
|
21
|
+
grab(:infos).data(val)
|
22
|
+
end
|
23
|
+
|
24
|
+
inp.top(12)
|
25
|
+
|
26
|
+
wait 1 do
|
27
|
+
inp.width(666)
|
28
|
+
wait 1 do
|
29
|
+
inp.holder.data('new data')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
3
|
styles = {
|
5
4
|
width: 199,
|
6
5
|
height: 33,
|
@@ -24,11 +23,13 @@ listing = [
|
|
24
23
|
{ data: :hi },
|
25
24
|
{ data: :ho }
|
26
25
|
]
|
27
|
-
|
28
|
-
list_1 =
|
26
|
+
b=box({drag: true})
|
27
|
+
list_1 = grab(:intuition).list({
|
29
28
|
styles: styles,
|
30
29
|
element: element,
|
31
|
-
listing: listing
|
30
|
+
listing: listing,
|
31
|
+
left: 33,
|
32
|
+
attach: b.id
|
32
33
|
})
|
33
34
|
|
34
35
|
# test2
|
@@ -1,6 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
label=text({data: 0, top: 69, left: 69,attach: :intuition, component: { size: 12 }, color: :gray})
|
3
2
|
|
4
|
-
|
3
|
+
label = text({ data: 0, top: 400, left: 69, component: { size: 12 }, color: :gray })
|
4
|
+
|
5
|
+
aaa = grab(:intuition).slider({ id: :toto, range: { color: :yellow }, min: -12, max: 33, width: 333, value: 12, height: 25, left: 99, top: 350, color: :orange, cursor: { color: :orange, width: 25, height: 25 } }) do |value|
|
6
|
+
label.data("(#{value})")
|
7
|
+
end
|
8
|
+
|
9
|
+
aa = grab(:intuition).slider({ orientation: :vertical, range: { color: :white }, value: 55, width: 55, height: 555, attach: :intuition, left: 555, top: 33, color: :red, cursor: { color: {alpha: 1, red: 0.12, green: 0.12, blue: 0.12}, width: 33, height: 66, smooth: 3 } }) do |value|
|
5
10
|
label.data("(#{value})")
|
6
11
|
end
|
12
|
+
|
13
|
+
b=box
|
14
|
+
b.touch(true) do
|
15
|
+
aa.value(12)
|
16
|
+
aaa.value(-6)
|
17
|
+
end
|
@@ -29,7 +29,7 @@
|
|
29
29
|
// }
|
30
30
|
|
31
31
|
|
32
|
-
function controller_message(msg) {
|
33
|
-
|
34
|
-
|
35
|
-
}
|
32
|
+
// function controller_message(msg) {
|
33
|
+
// // let json_msgs = JSON.parse(msg);
|
34
|
+
// rubyVMCallback("A.receptor("+msg+")")
|
35
|
+
// }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atome
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.6.
|
4
|
+
version: 0.5.6.8.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean-Eric Godard
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: artoo
|
@@ -540,6 +540,7 @@ files:
|
|
540
540
|
- vendor/assets/application/examples/attach.rb
|
541
541
|
- vendor/assets/application/examples/attached.rb
|
542
542
|
- vendor/assets/application/examples/basic_understanding.rb
|
543
|
+
- vendor/assets/application/examples/behavior.rb
|
543
544
|
- vendor/assets/application/examples/blur.rb
|
544
545
|
- vendor/assets/application/examples/border.rb
|
545
546
|
- vendor/assets/application/examples/browse.rb
|
@@ -569,6 +570,7 @@ files:
|
|
569
570
|
- vendor/assets/application/examples/encode.rb
|
570
571
|
- vendor/assets/application/examples/encrypt.rb
|
571
572
|
- vendor/assets/application/examples/example.rb
|
573
|
+
- vendor/assets/application/examples/executor.rb
|
572
574
|
- vendor/assets/application/examples/file.rb
|
573
575
|
- vendor/assets/application/examples/fill.rb
|
574
576
|
- vendor/assets/application/examples/find.rb
|
@@ -581,11 +583,13 @@ files:
|
|
581
583
|
- vendor/assets/application/examples/help.rb
|
582
584
|
- vendor/assets/application/examples/hierarchy.rb
|
583
585
|
- vendor/assets/application/examples/history.rb
|
586
|
+
- vendor/assets/application/examples/holder.rb
|
584
587
|
- vendor/assets/application/examples/hypertext.rb
|
585
588
|
- vendor/assets/application/examples/image.rb
|
586
589
|
- vendor/assets/application/examples/import.rb
|
587
590
|
- vendor/assets/application/examples/increment.rb
|
588
591
|
- vendor/assets/application/examples/infos.rb
|
592
|
+
- vendor/assets/application/examples/input.rb
|
589
593
|
- vendor/assets/application/examples/int8.rb
|
590
594
|
- vendor/assets/application/examples/js&ruby.rb
|
591
595
|
- vendor/assets/application/examples/keyboard.rb
|