atome 0.5.7.1.7 → 0.5.7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49d9ecf130f643cc65b60e7a935dd513871f3ecf0afca6b97476b57650ac0fee
4
- data.tar.gz: 60843a34a863fc4ed3b324d0ae29913c58355eb69c7a8a732eb9445c933d256e
3
+ metadata.gz: 63cd85893b4535b12f8f24da43d2d615234820584a74ae4e4f67c2c1da28068d
4
+ data.tar.gz: 8c0e70603aee556e09abb0867d0084ccea315d54334ddc6328bf54e8da254a59
5
5
  SHA512:
6
- metadata.gz: e599f47ecf7ab87cf472fe12d95ac2991ad3e192b85e74252304b738537ec0c513bbda6371331912ffaee9fa33be66795a2ba31ca3607296d4e910bd4b06d0b9
7
- data.tar.gz: 5041dfd0b3600ec8b406f7a3d9bfbdc6e9e66c3e8b002ba576292d01e6277f379040d1f0f945922a21e33bcc09e8037f8889fb62caf4cb06472bad0109bba827
6
+ metadata.gz: 4f6d187398d27418a21ad283dc4184b0c047635665133fbd05790d49c2592d9213898a6396dfe943a38b68ccda327d205e08d168ef92d7212243a7e1e4b003a2
7
+ data.tar.gz: 686e3049efeef466841eb3979202d4be3ac753123e419d71a8fb3565159aad2e58ce66e9e28a1de6328243aed298a7480c0ce3504cbc1d00aa3ba80238a0ca5d
data/exe/atome CHANGED
@@ -577,10 +577,32 @@ if ARGV.include?('update')
577
577
 
578
578
  gem_name = 'atome'
579
579
  local_gem_spec = Gem::Specification.find_by_name(gem_name) rescue nil
580
- if local_gem_spec.nil?
581
- puts " #{gem_name} gem is not install will install from distant server"
580
+ # if local_gem_spec.nil?
581
+ # puts :case1
582
+ # puts " #{gem_name} gem is not install will install from distant server"
583
+ # system("gem update #{gem_name}")
584
+ # else
585
+ # puts :case2
586
+ #
587
+ # available_versions = Gem::Specification.find_all_by_name(gem_name).map(&:version)
588
+ #
589
+ # latest_version = available_versions.max
590
+ #
591
+ # if latest_version > local_gem_spec.version
592
+ # puts "update availlable: #{local_gem_spec.version} -> #{latest_version}"
593
+ # system("gem update #{gem_name}")
594
+ # else
595
+ # puts "No update necessary '#{gem_name}'. current version : #{local_gem_spec.version}"
596
+ # end
597
+ # end
598
+ #########
599
+ # if local_gem_spec.nil?
600
+ # puts :case1
601
+ # puts " #{gem_name} gem is not install will install from distant server"
582
602
  system("gem update #{gem_name}")
583
- else
603
+ # else
604
+ # puts :case2
605
+
584
606
  available_versions = Gem::Specification.find_all_by_name(gem_name).map(&:version)
585
607
 
586
608
  latest_version = available_versions.max
@@ -591,9 +613,9 @@ if ARGV.include?('update')
591
613
  else
592
614
  puts "No update necessary '#{gem_name}'. current version : #{local_gem_spec.version}"
593
615
  end
594
- end
595
-
616
+ # end
596
617
 
618
+ ########
597
619
  # TODO: also update index.html and all other files except the application folder
598
620
  # we check we are in atome app
599
621
  if Dir.exist?("#{destination}/application") && !Dir.exist?("#{destination}/vendor")
@@ -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.7'
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.7
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