atome 0.5.7.1.8 → 0.5.7.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0584500fbf0b3f088007209b206d7b6200985b6a7b03c40bddb9ee781bb6697a'
4
- data.tar.gz: f0ceedb97e2382612a63a26e00f12eda52e543a84c4d6346c4497ffac9b157fd
3
+ metadata.gz: 63cd85893b4535b12f8f24da43d2d615234820584a74ae4e4f67c2c1da28068d
4
+ data.tar.gz: 8c0e70603aee556e09abb0867d0084ccea315d54334ddc6328bf54e8da254a59
5
5
  SHA512:
6
- metadata.gz: 6265f34e1c06296bd11fcb639a8dcf2553217d6200253617700fc21243bcf6a6c51b82835b7c7318a0bb95558a485eb8a2e28832bd3e3f9d2552d6897409cfa3
7
- data.tar.gz: 0d0e50b7c4cb0ef7afd41aaf5a75a1457d63ce9eaabc70b3443af9e2ef75af610b1c86ba0b98dea34b74ce99475827aee86ecf6d1b5bd42896b3c5eaec848b7f
6
+ metadata.gz: 4f6d187398d27418a21ad283dc4184b0c047635665133fbd05790d49c2592d9213898a6396dfe943a38b68ccda327d205e08d168ef92d7212243a7e1e4b003a2
7
+ data.tar.gz: 686e3049efeef466841eb3979202d4be3ac753123e419d71a8fb3565159aad2e58ce66e9e28a1de6328243aed298a7480c0ce3504cbc1d00aa3ba80238a0ca5d
@@ -8,8 +8,8 @@ new({ particle: :run, category: :utility, type: :boolean }) do |params|
8
8
  end
9
9
  # new({ particle: :broadcast })
10
10
 
11
- def delete_recursive(atome_id)
12
- return if grab(atome_id).tag && (grab(atome_id).tag[:persistent] || grab(atome_id).tag[:system])
11
+ def delete_recursive(atome_id, force=false)
12
+ return if grab(atome_id).tag && (grab(atome_id).tag[:persistent] || grab(atome_id).tag[:system]) unless force
13
13
 
14
14
  parent_id_found = grab(atome_id).attach
15
15
  parent_found = grab(parent_id_found)
@@ -17,11 +17,11 @@ def delete_recursive(atome_id)
17
17
  new_array.delete(atome_id)
18
18
  parent_found.instance_variable_set('@attached', new_array)
19
19
  grab(atome_id).attached.each do |atome_id_found|
20
- delete_recursive(atome_id_found)
20
+ delete_recursive(atome_id_found, force)
21
21
  end
22
22
  grab(atome_id).render(:delete, { :recursive => true })
23
23
  grab(atome_id).touch(:remove)
24
- Universe.delete(atome_id)
24
+ Universe.delete(grab(atome_id).aid)
25
25
  end
26
26
 
27
27
  new({ particle: :delete, category: :utility, type: :boolean, render: false }) do |params|
@@ -48,6 +48,24 @@ new({ particle: :delete, category: :utility, type: :boolean, render: false }) do
48
48
  end
49
49
  Universe.delete(@aid)
50
50
  end
51
+ # elsif params == :force
52
+ # cells.delete(true)
53
+ # group.delete(true)
54
+ # # now we detach the atome from it's parent
55
+ # # now we init rendering
56
+ # render(:delete, params)
57
+ # # the machine delete the current atome from the universe
58
+ # id_found = @id.to_sym
59
+ # if @attach
60
+ # parent_found = grab(@attach)
61
+ # parent_found.attached.delete(id_found)
62
+ # end
63
+ # @affect&.each do |affected_atome|
64
+ # affected_found = grab(affected_atome)
65
+ # affected_found.apply.delete(id_found)
66
+ # affected_found.refresh
67
+ # end
68
+ # Universe.delete(@aid)
51
69
  elsif params.instance_of? Hash
52
70
  # if we are on a matrix we delete cells found & group found
53
71
  cells.delete(true)
@@ -57,14 +75,22 @@ new({ particle: :delete, category: :utility, type: :boolean, render: false }) do
57
75
  attached.each do |atttached_atomes|
58
76
  delete_recursive(atttached_atomes)
59
77
  end
60
- # group.each do |el|
61
- # delete_recursive(el)
62
- # end
63
-
64
78
  touch(:remove)
65
79
  render(:delete, params)
66
- Universe.delete(@id)
80
+ Universe.delete(@aid)
81
+ end
82
+ elsif params[:force]
83
+ attached.each do |atttached_atomes|
84
+ # alert "attached : #{attached}"
85
+ delete_recursive(atttached_atomes, true)
67
86
  end
87
+ touch(:remove)
88
+ render(:delete, params)
89
+ # alert "Universe : #{Universe.atomes[@aid]}"
90
+ # alert "length = #{Universe.atomes.length}"
91
+ Universe.delete(@aid)
92
+ # alert "Universe : #{Universe.atomes.length}"
93
+
68
94
  else
69
95
  # the machine try to find the sub particle id and remove it eg a.delete(monitor: :my_monitor) remove the monitor
70
96
  # with id my_monitor
@@ -280,7 +280,7 @@ class Universe
280
280
  if @allow_localstorage.include? element
281
281
  JS.global[:localStorage].setItem(operation_timing, "{ #{id} => { #{operation} => { #{element} => #{params} } }, sync: false }")
282
282
  @history[@history.length] = { operation_timing => { id => { operation => { element => params } }, sync: false, time: Time.now } }
283
- puts "===> { #{id} => { #{operation} => { #{element} => #{params} } }, sync: false }"
283
+ # puts "===> { #{id} => { #{operation} => { #{element} => #{params} } }, sync: false }"
284
284
  end
285
285
 
286
286
 
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.7.1.8'
5
+ VERSION = '0.5.7.3.0'
6
6
  end
@@ -8,9 +8,8 @@ shadow({
8
8
  invert: false,
9
9
  red: 0, green: 0, blue: 0, alpha: 0.6
10
10
  })
11
-
12
- color({ id: :tool_inactive_color, red: 1, green: 1, blue: 1, alpha: 0.12 })
13
- color({ id: :tool_active_color, red: 1, green: 1, blue: 1, alpha: 0.3 })
11
+ color({ id: :active_tool_col, alpha: 1, red: 1, green: 1, blue: 1 })
12
+ color({ id: :inactive_tool_col, alpha: 0.1 })
14
13
  border({ id: :tool_box_border, thickness: 1, red: 1, green: 1, blue: 1, alpha: 0.06, pattern: :solid, inside: true })
15
14
  # Tool's style object container below
16
15
  element({ aid: :toolbox_style, id: :toolbox_style, data: {
@@ -20,13 +19,21 @@ element({ aid: :toolbox_style, id: :toolbox_style, data: {
20
19
  } })
21
20
 
22
21
  class Atome
22
+ def toolbox(tool_list)
23
+ @toolbox = tool_list[:tools]
24
+ tool_list[:tools].each_with_index do |root_tool, index|
25
+ tools_scheme = Universe.tools[root_tool]
26
+ build_tool({ name: root_tool, scheme: tools_scheme, index: index, toolbox: tool_list[:toolbox] })
27
+ end
28
+ end
29
+
23
30
  class << self
24
31
  def init_intuition
25
32
  Atome.start_click_analysis
26
33
  toolbox_root = Universe.tools_root
27
34
  toolbox_root[:tools].each_with_index do |root_tool, index|
28
35
  tools_scheme = Universe.tools[root_tool]
29
- A.build_tool({ name: root_tool, scheme: tools_scheme, index: index ,toolbox: toolbox_root[:toolbox] })
36
+ A.build_tool({ name: root_tool, scheme: tools_scheme, index: index, toolbox: toolbox_root[:toolbox] })
30
37
  end
31
38
  end
32
39
 
@@ -35,7 +42,6 @@ class Atome
35
42
  end
36
43
 
37
44
  def activate_click_analysis
38
-
39
45
  # the condition below avoid touchdown analysis accumulation
40
46
  unless @click_analysis_active
41
47
  # this method analyse all object under the touchdown to find the first user objet and return it's id
@@ -50,8 +56,6 @@ class Atome
50
56
  id_found = atome_touched[:id].to_s
51
57
  atome_found = grab(id_found)
52
58
  unless atome_found && atome_found.tag[:system]
53
-
54
- # if atome_found
55
59
  Universe.active_tools.each do |tool|
56
60
  apply_tool(tool, atome_found, event)
57
61
  end
@@ -83,24 +87,18 @@ class Atome
83
87
  if atome_touched
84
88
  storage_allowed = Universe.allow_localstorage
85
89
  action_found = tool_actions[:action]
86
- pre = tool_actions[:pre]
87
90
  post = tool_actions[:post]
88
91
  params = { current_tool: current_tool, atome_touched: atome_touched, event: a_event }
89
92
  action_found.each do |part, val|
90
93
  Universe.allow_localstorage = false
91
- #################################
92
- touch_found = atome_touched.touch
93
- touch_procs = atome_touched.instance_variable_get("@touch_code")
94
- resize_found = atome_touched.resize
95
- resize_procs = atome_touched.instance_variable_get("@resize_code")
96
- current_tool.data[:prev_states][atome_touched] = { events: { touch: touch_found, resize: resize_found },
97
- procs: { touch_code: touch_procs, resize_code: resize_procs } }
98
- #################################
99
- current_tool.instance_exec(params, &pre) if pre.is_a? Proc
100
94
  Universe.allow_localstorage = storage_allowed
101
95
  if current_tool.data[:allow_alteration]
102
- atome_touched.send(part, val)
103
- current_tool.data[:treated] << atome_touched
96
+ if val.instance_of?(Proc)
97
+ atome_touched.instance_exec(&val)
98
+ else
99
+ atome_touched.send(part, val)
100
+ end
101
+ current_tool.data[:treated] << atome_touched if current_tool.data[:treated]
104
102
  end
105
103
  current_tool.instance_exec(params, &post) if post.is_a? Proc
106
104
  end
@@ -124,11 +122,11 @@ class Atome
124
122
  temp_val = particle.merge({ resize: true, drag: true, top: a_event[:pageY].to_i, left: a_event[:pageX].to_i })
125
123
  if current_tool.data[:allow_creation]
126
124
  # uncomment the line below if you want to attach to current atome
127
- if atome_touched
128
- new_atome = atome_touched.send(atome, temp_val)
129
- else
130
- new_atome = grab(:view).send(atome, temp_val)
131
- end
125
+ new_atome = if atome_touched
126
+ atome_touched.send(atome, temp_val)
127
+ else
128
+ grab(:view).send(atome, temp_val)
129
+ end
132
130
  # current_tool.data[:treated] << new_atome
133
131
  current_tool.data[:created] << new_atome
134
132
  params.delete(:atome_touched)
@@ -152,7 +150,9 @@ class Atome
152
150
  tool_actions[:action] = { noop: true }
153
151
  current_tool.data = tool_actions
154
152
  end
155
-
153
+ # tool_actions.delete(:inactivation)
154
+ # alert "==> #{tool_actions[:inactivation]}"
155
+ # puts "==> #{method_found},\n==> #{current_tool.id} ,\nactions ==> #{tool_actions},\n==> #{atome_touched},\n==> #{a_event}"
156
156
  send(method_found, current_tool, tool_actions, atome_touched, a_event)
157
157
  end
158
158
 
@@ -164,13 +164,100 @@ class Atome
164
164
 
165
165
  def set_action_on_touch(&action)
166
166
  @touch_action = action
167
-
168
167
  end
169
168
 
170
169
  def remove_get_atome_on_touch
171
170
  @touch_action = nil
172
171
  end
173
172
 
173
+ def activate_tool
174
+ tool_name = id
175
+ tool_scheme = @tool_scheme
176
+ tool = self
177
+
178
+ alterations = tool_scheme[:alteration] ? tool_scheme[:alteration].keys : []
179
+ creations = tool_scheme[:creation] ? tool_scheme[:creation].keys : []
180
+ prev_auth = Universe.allow_localstorage ||= []
181
+ events_allow = [:top, :left, :right, :bottom, :width, :height]
182
+ storage_allowed = events_allow.concat(alterations).concat(creations).concat(prev_auth).uniq
183
+ # alert "#{events_allow}, \n#{alterations} , \n#{creations}, \n #{prev_auth}, \n\n\n#{storage_allowed}"
184
+
185
+ Universe.allow_localstorage = storage_allowed
186
+ # we set edit mode to true (this allow to prevent user atome to respond from click)
187
+
188
+ Universe.edit_mode = true
189
+ # init the tool
190
+ tool.data[:treated] = []
191
+ tool.data[:created] = []
192
+ tool.data[:prev_states] = {}
193
+ # generic behavior
194
+ tool.apply(:active_tool_col)
195
+ Universe.active_tools << tool_name
196
+ # activation code
197
+ activation_code = tool_scheme[:activation]
198
+ tool.instance_exec(&activation_code) if activation_code.is_a? Proc
199
+ # below we the particles of selected atomes to feed tools values
200
+ # possibility 1 (pipette like):
201
+ # now we get the values from selected atomes
202
+ Atome.selection.each do |atome_id_to_treat|
203
+ tool.data[:action]&.each_key do |particle_req|
204
+ unless Universe.atome_preset
205
+ value_found = grab(atome_id_to_treat).send(particle_req)
206
+ if value_found
207
+ tool.data[:action][particle_req] = value_found
208
+ else
209
+ end
210
+ end
211
+ end
212
+ end
213
+ # possibility 2 (immediate apply):
214
+ allow_creation = tool.data[:allow_creation]
215
+ allow_alteration = tool.data[:allow_alteration]
216
+ unless tool_name.to_sym == :select_tool || !allow_creation || !allow_alteration
217
+ Atome.selection.each do |atome_id_to_treat|
218
+ atome_found = grab(atome_id_to_treat)
219
+ event = { pageX: 0, pageY: 0, clientX: 0, clientY: 0 }
220
+ Atome.apply_tool(tool_name, atome_found, event)
221
+ end
222
+ end
223
+
224
+ # # activate tool analysis test
225
+ Atome.activate_click_analysis
226
+ tool.active(true)
227
+ end
228
+
229
+ def deactivate_tool
230
+ tool_name = id
231
+ tool_scheme = @tool_scheme
232
+ tool = self
233
+ tool.active(false)
234
+ tool.instance_variable_get("@toolbox")&.each do |sub_tool_id|
235
+ toolbox_tool = grab("#{sub_tool_id}_tool")
236
+ toolbox_tool.deactivate_tool
237
+ # we delete the attached toolbox if it exist
238
+ toolbox_tool.delete({ force: true })
239
+ end
240
+
241
+ # when closing delete tools action from tool_actions_to_exec
242
+ Universe.active_tools.delete(tool_name)
243
+ # we check if all tools are inactive if so we set edit_mode to false
244
+ if Universe.active_tools.length == 0
245
+ Atome.de_activate_click_analysis
246
+ Universe.edit_mode = false
247
+ Universe.allow_localstorage = false
248
+ end
249
+
250
+ inactivation_code = tool_scheme[:inactivation]
251
+ tool.instance_exec(tool.data, &inactivation_code) if inactivation_code.is_a? Proc
252
+ # generic behavior
253
+ # we remove touch and resize binding on newly created atomes
254
+ tool.apply(:inactive_tool_col)
255
+ tool.data[:created]&.each do |new_atome|
256
+ new_atome.drag(false)
257
+ new_atome.resize(:remove)
258
+ end
259
+ end
260
+
174
261
  def build_tool(params)
175
262
  # here is the main entry for tool creation
176
263
  language ||= grab(:view).language
@@ -179,10 +266,10 @@ class Atome
179
266
  tool_name = "#{params[:name]}_tool"
180
267
  index = params[:index]
181
268
  tool_scheme = params[:scheme]
182
- toolbox=params[:toolbox] || {}
269
+ # @tool_scheme=params[:scheme]
270
+ toolbox = params[:toolbox] || {}
183
271
  orientation_wanted = tool_scheme[:orientation] || :sn
184
- color({ id: :active_tool_col, alpha: 1, red: 1, green: 1, blue: 1 })
185
- color({ id: :inactive_tool_col, alpha: 0.6 })
272
+
186
273
  grab(:intuition).storage[:tool_open] ||= []
187
274
  grab(:intuition).storage[:tool_open] << tool_name
188
275
  size = grab(:toolbox_style).data[:size]
@@ -190,9 +277,9 @@ class Atome
190
277
  case orientation_wanted
191
278
  when :sn
192
279
  top = :auto
193
- bottom_offset=toolbox[:bottom] || 3
280
+ bottom_offset = toolbox[:bottom] || 3
194
281
  spacing = toolbox[:spacing] || 3
195
- bottom = index * (size + spacing)+bottom_offset
282
+ bottom = index * (size + spacing) + bottom_offset
196
283
  left = toolbox[:left] || 3
197
284
  right = :auto
198
285
  when :ns
@@ -222,7 +309,7 @@ class Atome
222
309
  width: size,
223
310
  height: size,
224
311
  smooth: smooth,
225
- apply: [:tool_inactive_color, :tool_box_border, :tool_shade],
312
+ apply: [:inactive_tool_col, :tool_box_border, :tool_shade],
226
313
  state: :closed,
227
314
  data: { method: method,
228
315
  action: action,
@@ -235,125 +322,30 @@ class Atome
235
322
  }
236
323
 
237
324
  })
325
+
326
+ tool.instance_variable_set("@tool_scheme", tool_scheme)
238
327
  edition = "M257.7 752c2 0 4-0.2 6-0.5L431.9 722c2-0.4 3.9-1.3 5.3-2.8l423.9-423.9c3.9-3.9 3.9-10.2 0-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2c-1.9 11.1 1.5 21.9 9.4 29.8 6.6 6.4 14.9 9.9 23.8 9.9z m67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z"
328
+ icon = tool.vector({ tag: { system: true }, left: 9, top: :auto, bottom: 9, width: 18, height: 18, id: "#{tool_name}_icon",
329
+ data: { path: { d: edition, id: "p1_#{tool_name}_icon", stroke: :black, 'stroke-width' => 37, fill: :white } } })
330
+
331
+ icon.color(:yellowgreen)
239
332
 
240
- icon= tool.vector({ tag: { system: true }, left: 9, top: :auto, bottom: 9, width: 18, height: 18, id: "#{tool_name}_icon",
241
- data: { path: { d: edition, id: :p1, stroke: :black, 'stroke-width' => 37, fill: :white } }})
242
- # wait 2 do
243
- # alert "#{tool_name}_icon"
244
- # alert "current vector : #{grab("#{tool_name}_icon").id}"
245
- grab("#{tool_name}_icon").color(:blue)
246
- # icon.color(:red)
247
- # end
248
- # icon= tool_scheme[:icon] || params[:name]
249
- # tool.image({path: "medias/images/icons/#{icon}.svg"})
250
333
  tool.text({ tag: { system: true }, data: label, component: { size: 9 }, color: :grey, id: "#{tool_name}_label" })
251
334
  code_for_zone = tool_scheme[:zone]
252
335
  tool.instance_exec(tool, &code_for_zone) if code_for_zone.is_a? Proc
336
+ tool.active(false)
253
337
  tool.touch(true) do
254
338
  # we add all specific tool actions to @tools_actions_to_exec hash
255
339
  # we set allow_tool_operations to false to ignore tool operation when clicking on a tool
256
340
  Universe.allow_tool_operations = false
257
341
  # we create the creation_layer if not already exist
258
- tick(tool_name)
259
- # active code exec
260
- if tick[tool_name] == 1 # first click
261
- events_allow = [:top, :left, :right, :bottom, :width, :height]
262
- alterations = tool_scheme[:alteration] ? tool_scheme[:alteration].keys : []
263
- creations = tool_scheme[:creation] ? tool_scheme[:creation].keys : []
264
- prev_auth = Universe.allow_localstorage ||= []
265
- storage_allowed = events_allow.concat(alterations).concat(creations).concat(prev_auth).uniq
266
- Universe.allow_localstorage = storage_allowed
267
- # we set edit mode to true (this allow to prevent user atome to respond from click)
268
- Universe.edit_mode = true
269
- Universe.active_tools << tool_name
270
- # init the tool
271
- tool.data[:treated] = []
272
- tool.data[:created] = []
273
- tool.data[:prev_states] = {}
274
- # generic behavior
275
- tool.apply(:active_tool_col)
276
- # activation code
277
- activation_code = tool_scheme[:activation]
278
- tool.instance_exec(&activation_code) if activation_code.is_a? Proc
279
- # below we the particles of selected atomes to feed tools values
280
- # possibility 1 (pipette like):
281
- # now we get the values from selected atomes
282
- Atome.selection.each do |atome_id_to_treat|
283
- tool.data[:action].each do |particle_req, value_f|
284
- unless Universe.atome_preset
285
- value_found = grab(atome_id_to_treat).send(particle_req)
286
- if value_found
287
- tool.data[:action][particle_req] = value_found
288
- else
289
- end
290
- end
291
- end
292
- end
293
- # possibility 2 (immediate apply):
294
- allow_creation = tool.data[:allow_creation]
295
- allow_alteration = tool.data[:allow_alteration]
296
- Atome.selection.each do |atome_id_to_treat|
297
- atome_found = grab(atome_id_to_treat)
298
- event = { pageX: 0, pageY: 0, clientX: 0, clientY: 0 }
299
- Atome.apply_tool(tool_name, atome_found, event)
300
- end unless tool_name.to_sym == :select_tool || !allow_creation || !allow_alteration
301
-
302
- # activate tool analysis test
303
- Atome.activate_click_analysis
342
+ if tool.active == false # first click
343
+ tool.activate_tool
304
344
  else
305
- Universe.allow_localstorage = false
306
- # when closing delete tools action from tool_actions_to_exec
307
- Universe.active_tools.delete(tool_name)
308
- # we check if all tools are inactive if so we set edit_mode to false
309
- if Universe.active_tools.length == 0
310
- Atome.de_activate_click_analysis
311
- Universe.edit_mode = false
312
- end
313
-
314
- inactivation_code = tool_scheme[:inactivation]
315
- tool.instance_exec(tool.data, &inactivation_code) if inactivation_code.is_a? Proc
316
- # end if tool_content && tool_content[:inactive]
317
-
318
- # generic behavior
319
- # we remove touch and resize binding on newly created atomes
320
- tool.apply(:inactive_tool_col)
321
- tool.data[:created].each do |new_atome|
322
- new_atome.drag(false)
323
- new_atome.resize(:remove)
324
- end
325
- ################################
326
- # we restore prev touch and resize
327
- tool.data[:prev_states].each do |atome_f, prev_par|
328
- puts prev_par
329
- # params[:events].each do |part_f, val_f|
330
- # # alert "@#{part_f}, #{part_f}"
331
- # atome_f.send(part_f, val_f)
332
- # end
333
- # alert "--> params : #{params[:events]}"
334
- # alert "--> procs : #{params[:procs][params[:events]]}"
335
- # atome_f.touch(false)
336
- # atome_f.touch(true) do
337
- # alert :kool
338
- # end
339
- # alert params[:procs]
340
- # params[:procs].each do |var_n, procs_f|
341
- # # procs_f.each do |action_f, proc|
342
- # # # puts "#{var_n}==> #{action_f}, #{proc}"
343
- # # end
344
- # puts "==> #{var_n}, #{proc_f}"
345
- # # atome_f.instance_variable_set("@#{var_n}", proc_f)
346
- # end
347
- # atome_f.touch(false)
348
- # alert "#{atome_f.touch} : #{atome_f.instance_variable_get("@touch_code")}"
349
- end
350
-
351
- # atome_f.touch(touch_found)
352
- # atome_f.resize(resize_found)
353
- # inactivation code
354
- #################################
345
+ tool.deactivate_tool
355
346
  tick[tool_name] = 0
356
347
  end
357
348
  end
358
349
  end
350
+
359
351
  end
@@ -219,7 +219,6 @@ class HTML
219
219
  particles_from_style[key.to_sym] = value if key && value
220
220
  end
221
221
 
222
-
223
222
  particles_found = particles_found.merge(particles_from_style)
224
223
  current_atome = grab(@id)
225
224
  usr_bloc.call(particles_found)
@@ -735,7 +734,7 @@ class HTML
735
734
  end
736
735
 
737
736
  def drag_remove(option)
738
-
737
+ @draggable = nil
739
738
  interact = JS.eval("return interact('##{@id}')")
740
739
 
741
740
  case option
@@ -745,8 +744,9 @@ class HTML
745
744
  @drag_end = ''
746
745
  when :move
747
746
  interact.draggable(false)
748
- interact.unset
747
+ # interact.unset
749
748
  @drag_move = nil
749
+
750
750
  when :locked
751
751
  @drag_locked = ''
752
752
  when :restrict
@@ -759,7 +759,7 @@ class HTML
759
759
  @drag_restrict = ''
760
760
  @drag_move = nil
761
761
  interact.draggable(false)
762
- interact.unset
762
+ # interact.unset
763
763
  end
764
764
 
765
765
  end
@@ -772,7 +772,7 @@ class HTML
772
772
  # we use .call instead of instance_eval because instance_eval bring the current object as context
773
773
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
774
774
  # group etc..
775
- @drag_start.call(event) if @drag_start.is_a?(Proc)
775
+ @drag_start.call(event) if event_validation(@drag_start)
776
776
  end
777
777
  end
778
778
 
@@ -784,38 +784,43 @@ class HTML
784
784
  # we use .call instead of instance_eval because instance_eval bring the current object as context
785
785
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
786
786
  # group etc..
787
- @drag_end.call(event) if @drag_end.is_a?(Proc)
787
+ @drag_end.call(event) if event_validation(@drag_end)
788
788
  end
789
789
  end
790
790
 
791
791
  def drag_move(_option)
792
-
792
+ # the condition below prevent drag accumulation
793
793
  interact = JS.eval("return interact('##{@id}')")
794
- # interact.draggable(false)
795
794
 
796
- interact.draggable({
797
- drag: true,
798
- inertia: { resistance: 12,
799
- minSpeed: 200,
800
- endSpeed: 100 },
801
- })
795
+ unless @draggable
796
+ interact.draggable({
797
+ drag: true,
798
+ inertia: { resistance: 12,
799
+ minSpeed: 200,
800
+ endSpeed: 100 },
801
+ })
802
+ @drag_move = @original_atome.instance_variable_get('@drag_code')[:move]
803
+ unless @first_drag
804
+ interact.on('dragmove') do |native_event|
805
+ # the use of Native is only for Opal (look at lib/platform_specific/atome_wasm_extensions.rb for more infos)
806
+ event = Native(native_event)
807
+ # we use .call instead of instance_eval because instance_eval bring the current object as context
808
+ # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
809
+ # group etc..
810
+ @drag_move.call(event) if event_validation(@drag_move)
811
+ Universe.allow_tool_operations = false
812
+ dx = event[:dx]
813
+ dy = event[:dy]
814
+ x = (@original_atome.left || 0) + dx.to_f
815
+ y = (@original_atome.top || 0) + dy.to_f
816
+ @original_atome.left(x)
817
+ @original_atome.top(y)
818
+ end
802
819
 
803
- @drag_move = @original_atome.instance_variable_get('@drag_code')[:move]
804
- interact.on('dragmove') do |native_event|
805
- # the use of Native is only for Opal (look at lib/platform_specific/atome_wasm_extensions.rb for more infos)
806
- event = Native(native_event)
807
- # we use .call instead of instance_eval because instance_eval bring the current object as context
808
- # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
809
- # group etc..
810
- @drag_move.call(event) if @drag_move.is_a?(Proc)
811
- Universe.allow_tool_operations = false
812
- dx = event[:dx]
813
- dy = event[:dy]
814
- x = (@original_atome.left || 0) + dx.to_f
815
- y = (@original_atome.top || 0) + dy.to_f
816
- @original_atome.left(x)
817
- @original_atome.top(y)
820
+ end
818
821
  end
822
+ @first_drag = true
823
+ @draggable = true
819
824
  end
820
825
 
821
826
  def drag_restrict(option)
@@ -866,7 +871,7 @@ class HTML
866
871
  # we use .call instead of instance_eval because instance_eval bring the current object as context
867
872
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
868
873
  # group etc..
869
- @drag_move.call(event) if @drag_move.is_a?(Proc)
874
+ @drag_move.call(event) if event_validation(@drag_move)
870
875
  dx = event[:dx]
871
876
  dy = event[:dy]
872
877
  x = (@original_atome.left || 0) + dx.to_f
@@ -893,7 +898,7 @@ class HTML
893
898
  # we use .call instead of instance_eval because instance_eval bring the current object as context
894
899
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
895
900
  # group etc..
896
- @drag_lock.call(event) if @drag_lock.is_a?(Proc)
901
+ @drag_lock.call(event) if event_validation(@drag_lock)
897
902
  end
898
903
  end
899
904
 
@@ -904,7 +909,7 @@ class HTML
904
909
  # we use .call instead of instance_eval because instance_eval bring the current object as context
905
910
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
906
911
  # group etc..
907
- bloc.call({ source: draggable_element, destination: dropzone_element }) if bloc.is_a?(Proc)
912
+ bloc.call({ source: draggable_element, destination: dropzone_element }) if event_validation(bloc)
908
913
  end
909
914
 
910
915
  def drop_activate(_option)
@@ -915,7 +920,7 @@ class HTML
915
920
  accept: nil, # Accept any element
916
921
  overlap: 0.75,
917
922
  ondropactivate: lambda do |native_event|
918
- drop_action(native_event, @drop_activate)
923
+ drop_action(native_event, @drop_activate) if event_validation(@drop_activate)
919
924
  end
920
925
  })
921
926
  end
@@ -928,7 +933,7 @@ class HTML
928
933
  # overlap: 0.75,
929
934
  # FIXME : remove because os an opal bug since 1.8 reactivate when opal will be debbuged
930
935
  ondropdeactivate: lambda do |native_event|
931
- drop_action(native_event, @drop_deactivate)
936
+ drop_action(native_event, @drop_deactivate) if event_validation(@drop_deactivate)
932
937
  end
933
938
  })
934
939
  end
@@ -941,7 +946,7 @@ class HTML
941
946
  overlap: 0.75,
942
947
  # FIXME : remove because os an opal bug since 1.8 reactivate when opal will be debbuged
943
948
  ondrop: lambda do |native_event|
944
- drop_action(native_event, @drop_dropped)
949
+ drop_action(native_event, @drop_dropped) if event_validation(@drop_dropped)
945
950
  end
946
951
  })
947
952
  end
@@ -956,7 +961,7 @@ class HTML
956
961
  overlap: 0.001,
957
962
  # FIXME : remove because os an opal bug since 1.8 reactivate when opal will be debbuged
958
963
  ondragenter: lambda do |native_event|
959
- drop_action(native_event, @drop_enter)
964
+ drop_action(native_event, @drop_enter) if event_validation(@drop_enter)
960
965
  end
961
966
  })
962
967
  end
@@ -970,7 +975,7 @@ class HTML
970
975
  # overlap: 0.75,
971
976
  # FIXME : remove because os an opal bug since 1.8 reactivate when opal will be debbuged
972
977
  ondragleave: lambda do |native_event|
973
- drop_action(native_event, @drop_leave)
978
+ drop_action(native_event, @drop_leave) if event_validation(@drop_enter)
974
979
  end
975
980
  })
976
981
 
@@ -990,8 +995,8 @@ class HTML
990
995
  @drop_leave = ''
991
996
  else
992
997
  # to remove all interact event ( touch, drag, scale, ... uncomment below)
993
- interact = JS.eval("return interact('##{@id}')")
994
- interact.unset
998
+ # interact = JS.eval("return interact('##{@id}')")
999
+ # interact.unset
995
1000
  @drop_activate = ''
996
1001
  @drop_deactivate = ''
997
1002
  @drop_dropped = ''
@@ -1025,7 +1030,7 @@ class HTML
1025
1030
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1026
1031
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1027
1032
  # group etc..
1028
- @resize.call(event) if @resize.is_a?(Proc)
1033
+ @resize.call(event) if event_validation(@resize)
1029
1034
  x = (@element[:offsetLeft].to_i || 0)
1030
1035
  y = (@element[:offsetTop].to_i || 0)
1031
1036
  width = event[:rect][:width]
@@ -1055,7 +1060,7 @@ class HTML
1055
1060
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1056
1061
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1057
1062
  # group etc..
1058
- @overflow.call({ left: scroll_left, top: scroll_top }) if @overflow.is_a?(Proc)
1063
+ @overflow.call({ left: scroll_left, top: scroll_top }) if event_validation(@overflow)
1059
1064
  end)
1060
1065
  end
1061
1066
 
@@ -1064,12 +1069,11 @@ class HTML
1064
1069
  @over_over = @original_atome.over_code[:over]
1065
1070
  interact.on('mouseover') do |native_event|
1066
1071
  JS.global[:myRubyMouseOverCallback] = Proc.new { @original_atome.over_code[:over].call }
1067
- JS.eval("document.querySelector('##{@id}').addEventListener('mouseleave', myRubyMouseOverCallback);")
1068
1072
  event = Native(native_event)
1069
1073
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1070
1074
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1071
1075
  # group etc..
1072
- @over_over.call(event) if @over_over.is_a?(Proc)
1076
+ @over_over.call(event) if event_validation(@over_over)
1073
1077
  end
1074
1078
  end
1075
1079
 
@@ -1081,21 +1085,23 @@ class HTML
1081
1085
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1082
1086
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1083
1087
  # group etc..
1084
- @over_enter.call(event) if @over_enter.is_a?(Proc)
1088
+ @over_enter.call(event) if event_validation(@over_enter)
1085
1089
  end
1086
1090
  @element.addEventListener('mouseenter', @over_enter_callback)
1087
1091
 
1088
1092
  end
1089
1093
 
1090
1094
  def over_leave(_option)
1095
+
1091
1096
  @over_leave = @original_atome.instance_variable_get('@over_code')[:leave]
1092
1097
  return unless @over_leave
1093
1098
 
1094
1099
  @over_leave_callback = lambda do |event|
1100
+
1095
1101
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1096
1102
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1097
1103
  # group etc..
1098
- @over_leave.call(event) if @over_leave.is_a?(Proc)
1104
+ @over_leave.call(event) if event_validation(@over_leave)
1099
1105
  end
1100
1106
  @element.addEventListener('mouseleave', @over_leave_callback)
1101
1107
 
@@ -1142,7 +1148,6 @@ class HTML
1142
1148
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1143
1149
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1144
1150
  # group etc..
1145
- # unless Universe.edit_mode == true
1146
1151
  # @touch_down.call(event) if @touch_down.is_a?(Proc) && (!Universe.edit_mode || @original_atome.tag[:system])
1147
1152
  @touch_down.call(event) if event_validation(@touch_down)
1148
1153
  # end
@@ -1239,23 +1244,9 @@ class HTML
1239
1244
  @touch_removed[:up] = true
1240
1245
  @touch_up = ''
1241
1246
  else
1242
- interact = JS.eval("return interact('##{@id}')")
1243
- interact.unset
1244
- # @original_atome.instance_variable_set('@touch_code')
1245
- @original_atome.instance_variable_set('@touch_code', nil)
1246
- # @touch_removed[:double] = true
1247
- # @touch_removed[:down] = true
1248
- # @touch_removed[:long] = true
1249
- # @touch_removed[:tap] = true
1250
- # @touch_removed[:up] = true
1251
- # @touch_double = ''
1252
- # @touch_down = ''
1253
- # @touch_long = ''
1254
- # @touch_tap = ''
1255
- # @touch_up = ''
1256
- # to remove all interact event ( touch, drag, scale, ... uncomment below)
1257
1247
  # interact = JS.eval("return interact('##{@id}')")
1258
1248
  # interact.unset
1249
+ @original_atome.instance_variable_set('@touch_code', nil)
1259
1250
  end
1260
1251
 
1261
1252
  end
@@ -1303,14 +1294,13 @@ class HTML
1303
1294
  end
1304
1295
  end
1305
1296
 
1306
-
1307
1297
  # animation below
1308
1298
  def animate(animation_properties)
1309
- prop= animation_properties[:particle]
1310
- command = <<~JS
1299
+ prop = animation_properties[:particle]
1300
+ command = <<~JS
1311
1301
  var target_div = document.getElementById('#{@id}');
1312
1302
  window.currentAnimation = popmotion.animate({
1313
- from: #{animation_properties[ :from]},
1303
+ from: #{animation_properties[:from]},
1314
1304
  to: #{animation_properties[:to]},
1315
1305
  duration: #{animation_properties[:duration]},
1316
1306
  onUpdate: function(v) {
@@ -1326,8 +1316,6 @@ class HTML
1326
1316
  JS.eval(command)
1327
1317
  end
1328
1318
 
1329
-
1330
-
1331
1319
  def stop_animation
1332
1320
  JS.eval('if (window.currentAnimation) window.currentAnimation.stop();')
1333
1321
  end
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
-
3
-
2
+ # wait 0.5 do
3
+ # JS.eval("console.clear()")
4
+ # end
4
5
  ########################### Test check and verification below ############################
5
6
 
6
- new({ tool: :blur }) do |params|
7
+ new({ tool: :combined }) do |params|
7
8
 
8
9
  active_code = lambda {
9
10
  puts :alteration_tool_code_activated
@@ -22,7 +23,7 @@ new({ tool: :blur }) do |params|
22
23
  }
23
24
 
24
25
  zone_spe = lambda { |current_tool|
25
- puts "current tool is : #{:current_tool} now creating specific zone"
26
+ # puts "current tool is : #{:current_tool} now creating specific zone"
26
27
  # b = box({ width: 33, height: 12 })
27
28
  # b.text({ data: :all })
28
29
 
@@ -68,7 +69,6 @@ new({ tool: :box }) do |params|
68
69
 
69
70
  end
70
71
 
71
-
72
72
  new({ tool: :project }) do
73
73
  active_code = lambda {
74
74
 
@@ -85,32 +85,86 @@ new({ tool: :project }) do
85
85
  { activation: active_code }
86
86
  end
87
87
 
88
- new({tool: :test}) do
88
+ new({tool: :move}) do
89
89
  active_code = lambda {
90
- b=grab(:view).box({})
91
- b.touch(true) do
92
- alert :kool
90
+ puts 'move activated'
91
+ }
92
+ move_code = lambda {
93
+ drag(true)
94
+ }
95
+ inactive_code = lambda {|data|
96
+ data[:treated].each do |atome_f|
97
+ atome_f.drag(false)
98
+ end
99
+ }
100
+
101
+ { activation: active_code, alteration: { event: move_code }, inactivation: inactive_code }
102
+ end
103
+
104
+ new({tool: :drag}) do
105
+ active_code = lambda {
106
+ puts 'move activated'
107
+ }
108
+ move_code = lambda {
109
+ drag(true) do
110
+ puts left
93
111
  end
94
112
  }
95
- # active_code=:tito
113
+
114
+ { activation: active_code, alteration: { event: move_code} }
115
+ end
116
+
117
+ new({tool: :touch}) do
118
+ move_code = lambda {
119
+ touch(:down) do
120
+ color(:red)
121
+ end
122
+ }
123
+ { alteration: { event: move_code } }
124
+ end
125
+
126
+ new({tool: :toolbox1}) do
127
+ active_code = lambda {
128
+ toolbox({tools: [:combined],toolbox: { orientation: :ew, left:90 , bottom: 9, spacing: 9} })
129
+ }
96
130
  { activation: active_code }
97
131
  end
98
132
 
133
+ # Universe.tools_root= {tools: [:blur, :box, :test, :toolbox1],toolbox: { orientation: :ew, left:90 , bottom: 9, spacing: 9} }
134
+ Universe.tools_root= {tools: [:box,:drag,:touch, :move,:toolbox1],toolbox: { orientation: :ew, left:9 , bottom: 9, spacing: 9} }
99
135
 
100
- Universe.tools_root= {tools: [:blur, :box, :test],toolbox: { orientation: :ew, left:9 , bottom: 9, spacing: 9} }
101
- # Universe.tools_root=[:test]
102
136
  Atome.init_intuition
103
137
 
104
- wait 1 do
105
- grab(:blur_tool_icon).color(:red)
106
- wait 1 do
107
- grab(:box_tool_icon).color(:red)
108
- wait 1 do
109
- grab(:test_tool_icon).color(:red)
110
- end
138
+ b=box({id: :the_test__box, selected: true})
139
+ circle({left: 90, id: :the_test_circle, selected: true})
140
+ b.touch(true) do
141
+ if b.width==170
142
+ b.width(55)
143
+ else
144
+ b.width(170)
111
145
  end
146
+
112
147
  end
113
148
 
149
+ # box({id: :the_box})
150
+ # circle({left: 90, id: :the_circle})
151
+ # alert b.aid
152
+
153
+ # b=box
154
+ #
155
+ # active_code = lambda {
156
+ # b=grab(:view).circle({color: :red, left: 88})
157
+ # b.touch(true) do
158
+ # alert :kool
159
+ # end
160
+ # }
161
+ # b.touch(true) do
162
+ # # c=circle({color: :red})
163
+ # active_code.call
164
+ # # c.touch(true) do
165
+ # # # active_code.call
166
+ # # end
167
+ # end
114
168
 
115
169
  # ################### check below
116
170
 
@@ -16,6 +16,25 @@ class EDen
16
16
  Database.db_access
17
17
  end
18
18
 
19
+ def email_exist(data, message_id, ws)
20
+
21
+ mail = data["email"]
22
+ puts "mail : #{mail}"
23
+ db = db_access
24
+ puts "db : #{db}"
25
+ user_table = db[:user]
26
+ puts "user_table : #{user_table}"
27
+ sanitized_email = sanitize_email(mail)
28
+ puts "sanitized_email : #{sanitized_email}"
29
+ user = user_table.where(email: sanitized_email).first
30
+ puts "user : #{user}"
31
+ # build the answer telling if email exist or not
32
+ email_exists_response = !user.nil?
33
+ puts "email_exists_response : #{email_exists_response}"
34
+ # response return
35
+ { data: {email_exist: email_exists_response}, message_id: message_id }
36
+ end
37
+
19
38
  def terminal(data, message_id, ws)
20
39
  { data: { message: `#{data}` }, message_id: message_id }
21
40
  end
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.7.1.8
4
+ version: 0.5.7.3.0
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-05-30 00:00:00.000000000 Z
11
+ date: 2024-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -613,6 +613,7 @@ files:
613
613
  - vendor/assets/application/examples/online.rb
614
614
  - vendor/assets/application/examples/opacity.rb
615
615
  - vendor/assets/application/examples/over.rb
616
+ - vendor/assets/application/examples/overflow.rb
616
617
  - vendor/assets/application/examples/paint.rb
617
618
  - vendor/assets/application/examples/particles.rb
618
619
  - vendor/assets/application/examples/percent_to_px.rb
@@ -627,7 +628,6 @@ files:
627
628
  - vendor/assets/application/examples/repeat.rb
628
629
  - vendor/assets/application/examples/resize.rb
629
630
  - vendor/assets/application/examples/rotate.rb
630
- - vendor/assets/application/examples/scroll.rb
631
631
  - vendor/assets/application/examples/security.rb
632
632
  - vendor/assets/application/examples/select_text.rb
633
633
  - vendor/assets/application/examples/selected.rb