atome 0.5.6.7.8 → 0.5.6.8.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 65f6cf64a7ecd0b856f3a84bbd519314197caa2745a1150ba9b2ed8a124c7e87
4
- data.tar.gz: 0d8a07920c05601ad82a3e6abaf9748316b190cfbec203ae0bd1d8045da44efc
3
+ metadata.gz: 56128962742a3c148f7ce1187577af8438466642a81d1b227e0c3ab66275e322
4
+ data.tar.gz: aada78b1931101f52fe14e414e0396e9e15eb03754005d0836b1198f1b0091ac
5
5
  SHA512:
6
- metadata.gz: 7f8e08c7ecd5716e16a798637ba60309537948906d370c35f8594267d43ec6f42fb3b648fa0c544c4d8d09790589c24bfa2725f2702c269727790ce79ec0a17a
7
- data.tar.gz: dbb3a6e0642b2908e6acf1634dd2d06fe2d263609cdb5b2b5f49d87b466eda7f64a5ffeae09336b8cdd22622f270045b7c0b9c8f2125531f6c0fa37dbda86c7f
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
- new({ particle: :controller, category: :communication, type: :hash }) do |msg|
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
- instance_variable_get('@atome_list').push(atome)
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)
@@ -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
@@ -2,5 +2,5 @@
2
2
 
3
3
  # return atome version
4
4
  class Atome
5
- VERSION = '0.5.6.7.8'
5
+ VERSION = '0.5.6.8.3'
6
6
  end
@@ -1,78 +1,269 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Molecule
4
- def slider(params, &bloc)
5
- attach_to = params[:attach] || :view
6
- color_found = params[:color] ||= :gray
7
- default_slider_particles = { color: color_found, width: 333, height: 33, left: 0, top: 0, smooth: 9 }
8
- default_cursor_particles = { color: color_found, width: 29, height: 29, left: 0, smooth: '100%' }
9
- cursor_found = params.delete(:cursor)
10
- cursor_particle = default_cursor_particles.merge(cursor_found)
11
- slider_particle = default_slider_particles.merge(params)
12
- slider = grab(attach_to).box(slider_particle)
13
- slider.shadow({
14
- id: :s2,
15
- left: 3, top: 3, blur: 9,
16
- invert: true,
17
- red: 0, green: 0, blue: 0, alpha: 0.7
18
- })
19
- cursor_top = (slider_particle[:height] - cursor_particle[:height]) / 2.0
20
- cursor = slider.box(cursor_particle)
21
- bloc.call(cursor_particle[:left])
22
- cursor.top(cursor_top)
23
- cursor.shadow({
24
- id: :s4,
25
- left: 1, top: 1, blur: 3,
26
- option: :natural,
27
- red: 0, green: 0, blue: 0, alpha: 0.6
28
- })
29
- cursor.drag({ restrict: { max: { left: slider_particle[:width] - cursor_particle[:width], top: cursor_top }, min: { top: cursor_top } } }) do |_event|
30
- value = cursor.left.to_f / (slider_particle[:width] - cursor_particle[:width]) * 100
31
- bloc.call(value)
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
- def list(params)
37
- styles_found = params.delete(:styles)
38
- element = params.delete(:element)
39
- listing = params.delete(:listing)
40
-
41
- styles_found ||= {
42
- width: 99,
43
- height: 33,
44
- margin: 6,
45
- shadow: { blur: 9, left: 3, top: 3, id: :cell_shadow, red: 0, green: 0, blue: 0, alpha: 0.6 },
46
- left: 0,
47
- color: :yellowgreen
48
- }
49
- element ||= { width: 33,
50
- height: 33,
51
- left: :center,
52
- top: :center,
53
- color: :orange,
54
- type: :text }
55
- unless params[:width]
56
- params[:width] = styles_found[:width]
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
- unless element[:width]
59
- element[:width] = styles_found[width]
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
- margin = styles_found[:margin]
62
- height_found = styles_found[:height]
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
- list
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 })
@@ -25,6 +25,7 @@ class HTML
25
25
  @id = id_found
26
26
  @original_atome = current_atome
27
27
  @touch_removed = {}
28
+
28
29
  end
29
30
 
30
31
  def object
@@ -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: 333 , top: 30})
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 = A.list({
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
- A.slider({width: 333} ) do |value|
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
- // let json_msgs = JSON.parse(msg);
34
- rubyVMCallback("A.receptor("+msg+")")
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.7.8
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-16 00:00:00.000000000 Z
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