atome 0.5.7.3.1 → 0.5.7.3.3

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: bda2b32c6739ba09c874bfdda703d1e64a3e01856b3f80fa01aba15866628335
4
- data.tar.gz: 8ce5a6571be7d57c82aa64a345997f881a35c80ad12a3ec77b9ecc6a6fe00d47
3
+ metadata.gz: 0f111d86401c9293ac46fa899d202bf0ab2a1c905d5d17186f0b87ba0560f65d
4
+ data.tar.gz: ae3208f9349448b93a93864308445ce9108c450366ce8ee2ac1b7026724b40c2
5
5
  SHA512:
6
- metadata.gz: 1e5d67579d27b6fe58b41e63a1b6ac4811b3d47e5cae67f005c234d835760721ddf6d5591594a011b660a719b4a0873b3f5c8eb7840e7a4886dd6cbcc31f2e5b
7
- data.tar.gz: 4f01d01a81f832cd14741c3a97ba93b82ee717821971b42aaf9d72f6820975c8b46a0adea51cf679cf114dd80678cd55ef4371b18a4b23fcb18a9e0f48dc0849
6
+ metadata.gz: 3139df2c2320097e707d095e2aa577104669823e61c77fa9b7a4e43553537068926cea7701bd0cd9c8e21bd41087f9d1e04f101883adcd0ea3b5cc84ba1d665e
7
+ data.tar.gz: c151bca3643df87d2388087cf534eb44e22e3ca8bf4281de8a9311bc7a20717164dd8be7c4a65dced3365e23e110af18648d732374706aaa9aab1fabcfc98bee
data/lib/atome/atome.rb CHANGED
@@ -48,6 +48,7 @@ class Atome
48
48
  @collect = {}
49
49
  @int8 = {}
50
50
  @css = {}
51
+ @code={}
51
52
  @aid= new_atome[:aid] || identity_generator
52
53
  @controller_proc=[]
53
54
  @id = new_atome[:id] || @aid
@@ -216,9 +216,9 @@ class Object
216
216
  id
217
217
  end
218
218
 
219
- def repeater(counter, proc)
220
- instance_exec(counter, &proc) if proc.is_a?(Proc)
221
- end
219
+ # def repeater(counter, proc)
220
+ # instance_exec(counter, &proc) if proc.is_a?(Proc)
221
+ # end
222
222
 
223
223
  def repeat_callback(params, counter)
224
224
  @repeat[params].call(counter)
@@ -255,7 +255,7 @@ class Object
255
255
 
256
256
  return intervalId;
257
257
  JS
258
-
258
+ repeat_id+1
259
259
  end
260
260
 
261
261
  def stop(params)
@@ -266,6 +266,11 @@ class Object
266
266
  JS.eval(<<~JS)
267
267
  clearInterval(#{repeater_to_stop});
268
268
  JS
269
+ elsif params.key?(:wait)
270
+ waiter_to_stop = params[:wait]
271
+ JS.eval(<<~JS)
272
+ clearTimeout(window.timeoutIds['#{waiter_to_stop}'])
273
+ JS
269
274
  else
270
275
  puts "La clé :repeat n'existe pas dans params"
271
276
  end
@@ -4,14 +4,14 @@ new({ particle: :touch, category: :event, type: :hash, store: false })
4
4
  new({ sanitizer: :touch }) do |params, user_bloc|
5
5
  if params
6
6
  # TODO: factorise code below
7
- # alert "touch_code: #{@touch_code}"
8
7
  @touch ||= {}
9
8
  @touch_code ||= {}
10
9
  option = true
11
10
  params = if params.instance_of? Hash
12
- @touch_code[params.keys[0]] = user_bloc
13
- option = params[params.keys[0]]
14
- params.keys[0]
11
+ user_bloc =params.delete(:code) if params[:code]
12
+ @touch_code[params.keys[0]] = user_bloc
13
+ option = params[params.keys[0]]
14
+ params.keys[0]
15
15
  else
16
16
  case params
17
17
  when true
@@ -120,9 +120,10 @@ new({ sanitizer: :drag }) do |params, user_bloc|
120
120
  @drag_code ||= {}
121
121
  option = true
122
122
  params = if params.instance_of? Hash
123
- @drag_code[params.keys[0]] = user_bloc
124
- option = params[params.keys[0]]
125
- params.keys[0]
123
+ user_bloc =params.delete(:code) if params[:code]
124
+ @drag_code[params.keys[0]] = user_bloc
125
+ option = params[params.keys[0]]
126
+ params.keys[0]
126
127
  else
127
128
  case params
128
129
  when true
@@ -173,9 +174,10 @@ new({ sanitizer: :drop }) do |params, user_bloc|
173
174
  @drop_code ||= {}
174
175
  option = true
175
176
  params = if params.instance_of? Hash
176
- @drop_code[params.keys[0]] = user_bloc
177
- option = params[params.keys[0]]
178
- params.keys[0]
177
+ user_bloc =params.delete(:code) if params[:code]
178
+ @drop_code[params.keys[0]] = user_bloc
179
+ option = params[params.keys[0]]
180
+ params.keys[0]
179
181
  else
180
182
  case params
181
183
  when true
@@ -210,10 +212,10 @@ new({ sanitizer: :over }) do |params, user_bloc|
210
212
  @over_code ||= {}
211
213
  option = true
212
214
  params = if params.instance_of? Hash
213
-
214
- @over_code[params.keys[0]] = user_bloc
215
- option = params[params.keys[0]]
216
- params.keys[0]
215
+ user_bloc =params.delete(:code) if params[:code]
216
+ @over_code[params.keys[0]] = user_bloc
217
+ option = params[params.keys[0]]
218
+ params.keys[0]
217
219
  else
218
220
  case params
219
221
  when true
@@ -259,7 +261,7 @@ new({ particle: :mass, category: :event, type: :int })
259
261
  new({ particle: :damping, category: :event, type: :int })
260
262
  new({ particle: :stiffness, category: :event, type: :int })
261
263
  new({ particle: :velocity, category: :event, type: :int })
262
- new({ particle: :repeat, category: :event, type: :boolean })
264
+ # new({ particle: :repeat, category: :event, type: :boolean })
263
265
  new({ particle: :ease, category: :event, type: :boolean })
264
266
  new(particle: :keyboard, category: :event, type: :hash, store: false)
265
267
  new({ sanitizer: :keyboard }) do |params, user_bloc|
@@ -269,8 +271,12 @@ new({ sanitizer: :keyboard }) do |params, user_bloc|
269
271
  option = {}
270
272
  params = if params.instance_of? Hash
271
273
  # @keyboard_code[:keyboard] = user_bloc
274
+ # option = params[params.keys[0]]
275
+ # :remove
276
+ user_bloc =params.delete(:code) if params[:code]
277
+ @keyboard_code[params.keys[0]] = user_bloc
272
278
  option = params[params.keys[0]]
273
- :remove
279
+ params.keys[0]
274
280
  else
275
281
  case params
276
282
  when true
@@ -1,11 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  new({ particle: :renderers, category: :utility, type: :string })
4
- new({ particle: :code, category: :utility, type: :string })
5
- new({ particle: :run, category: :utility, type: :boolean }) do |params|
6
- code_found = @code
7
- instance_exec(params, &code_found) if code_found.is_a?(Proc)
4
+ new({ particle: :code, category: :utility, type: :string, store: false }) do |params, code|
5
+ @code[params]=code
8
6
  end
7
+ # new({ particle: :run, category: :utility, type: :boolean }) do |params|
8
+ # code_found = @code
9
+ # instance_exec(params, &code_found) if code_found.is_a?(Proc)
10
+ # end
11
+
12
+ new({ particle: :run }) do |params, code|
13
+ instance_exec(&params) if params.is_a?(Proc)
14
+ code_found = @code[params]
15
+ instance_exec(params, &code_found) if code_found.is_a?(Proc)
16
+ end
17
+
18
+ new({ particle: :target }) do |params|
19
+ params.each do |atome_f, value_f|
20
+ if value_f.instance_of?(Hash)
21
+ value_f.each do |part_f, part_val|
22
+ grab(atome_f).send(part_f, part_val)
23
+ end
24
+ else
25
+ grab(atome_f).send(value_f)
26
+ end
27
+ end
28
+ end
29
+
30
+
9
31
  # new({ particle: :broadcast })
10
32
 
11
33
  def delete_recursive(atome_id, force=false)
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.3.1'
5
+ VERSION = '0.5.7.3.3'
6
6
  end
@@ -427,11 +427,13 @@ new(molecule: :matrix) do |params, &bloc|
427
427
  matrix_back.data(params)
428
428
  matrix_back
429
429
  end
430
+
430
431
  new(molecule: :page) do |params, &bloc|
431
432
  b = box({ color: :red, left: 99, drag: true })
432
433
  b.remove(:box_color)
433
434
  b.text(params)
434
435
  end
436
+
435
437
  new(molecule: :application) do |params, &bloc|
436
438
 
437
439
  main_page = box({ drag: true, width: :auto, height: :auto, top: 0, bottom: 0, left: 0, right: 0 })
@@ -650,7 +650,13 @@ class HTML
650
650
  mql = JS.global[:window].matchMedia(media_query)
651
651
 
652
652
  event_handler = ->(event) do
653
- bloc.call({ matches: event[:matches] }) if bloc.is_a? Proc
653
+ # bloc.call({ matches: event[:matches] }) if bloc.is_a? Proc
654
+ proc_content = bloc.call({ matches: event[:matches] }) if event_validation(bloc)
655
+ if proc_content.instance_of? Hash
656
+ proc_content.each do |k, v|
657
+ @original_atome.send(k, v)
658
+ end
659
+ end
654
660
  end
655
661
 
656
662
  # add a listener to matchMedia object
@@ -660,12 +666,33 @@ class HTML
660
666
  event_handler = ->(event) do
661
667
  width = JS.global[:window][:innerWidth]
662
668
  height = JS.global[:window][:innerHeight]
663
- bloc.call({ width: width, height: height }) if bloc.is_a? Proc
669
+ # bloc.call({ width: width, height: height }) if bloc.is_a? Proc
670
+ proc_content = bloc.call({ width: width, height: height }) if event_validation(bloc)
671
+ if proc_content.instance_of? Hash
672
+ proc_content.each do |k, v|
673
+ @original_atome.send(k, v)
674
+ end
675
+ end
664
676
  end
677
+
678
+ # proc_content = @drag_move.call(event) if event_validation(@drag_move)
679
+ # if proc_content.instance_of? Hash
680
+ # proc_content.each do |k, v|
681
+ # @original_atome.send(k, v)
682
+ # end
683
+ # end
684
+ # puts event_handler.class
665
685
  JS.global[:window].addEventListener('resize', event_handler)
686
+ # JS.global[:window].addEventListener('resize', event_handler)
666
687
  else
667
688
  event_handler = ->(event) do
668
- bloc.call(event) if bloc.is_a? Proc
689
+ # bloc.call(event) if bloc.is_a? Proc
690
+ proc_content = bloc.call(event) if event_validation(bloc)
691
+ if proc_content.instance_of? Hash
692
+ proc_content.each do |k, v|
693
+ @original_atome.send(k, v)
694
+ end
695
+ end
669
696
  end
670
697
  @element.addEventListener(property, event_handler)
671
698
  end
@@ -680,7 +707,13 @@ class HTML
680
707
  # we use .call instead of instance_eval because instance_eval bring the current object as context
681
708
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
682
709
  # group etc..
683
- @keyboard_press.call(event) if @keyboard_press.is_a?(Proc)
710
+ # @keyboard_press.call(event) if @keyboard_press.is_a?(Proc)
711
+ proc_content = @keyboard_press.call(event) if event_validation(@keyboard_press)
712
+ if proc_content.instance_of? Hash
713
+ proc_content.each do |k, v|
714
+ @original_atome.send(k, v)
715
+ end
716
+ end
684
717
  end
685
718
  @element.addEventListener('keypress', keypress_handler)
686
719
  end
@@ -692,7 +725,13 @@ class HTML
692
725
  # we use .call instead of instance_eval because instance_eval bring the current object as context
693
726
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
694
727
  # group etc..
695
- @keyboard_down.call(event) if @keyboard_down.is_a?(Proc)
728
+ # @keyboard_down.call(event) if @keyboard_down.is_a?(Proc)
729
+ proc_content = @keyboard_down.call(event) if event_validation(@keyboard_down)
730
+ if proc_content.instance_of? Hash
731
+ proc_content.each do |k, v|
732
+ @original_atome.send(k, v)
733
+ end
734
+ end
696
735
  end
697
736
  @element.addEventListener('keydown', keypress_handler)
698
737
  end
@@ -704,7 +743,13 @@ class HTML
704
743
  # we use .call instead of instance_eval because instance_eval bring the current object as context
705
744
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
706
745
  # group etc..
707
- @keyboard_up.call(event) if @keyboard_up.is_a?(Proc)
746
+ # @keyboard_up.call(event) if @keyboard_up.is_a?(Proc)
747
+ proc_content = @keyboard_up.call(event) if event_validation(@keyboard_up)
748
+ if proc_content.instance_of? Hash
749
+ proc_content.each do |k, v|
750
+ @original_atome.send(k, v)
751
+ end
752
+ end
708
753
  end
709
754
  @element.addEventListener('keyup', keypress_handler)
710
755
  end
@@ -772,7 +817,13 @@ class HTML
772
817
  # we use .call instead of instance_eval because instance_eval bring the current object as context
773
818
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
774
819
  # group etc..
775
- @drag_start.call(event) if event_validation(@drag_start)
820
+ # @drag_start.call(event) if event_validation(@drag_start)
821
+ proc_content = @drag_start.call(event) if event_validation(@drag_start)
822
+ if proc_content.instance_of? Hash
823
+ proc_content.each do |k, v|
824
+ @original_atome.send(k, v)
825
+ end
826
+ end
776
827
  end
777
828
  end
778
829
 
@@ -784,7 +835,13 @@ class HTML
784
835
  # we use .call instead of instance_eval because instance_eval bring the current object as context
785
836
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
786
837
  # group etc..
787
- @drag_end.call(event) if event_validation(@drag_end)
838
+ # @drag_end.call(event) if event_validation(@drag_end)
839
+ proc_content = @drag_end.call(event) if event_validation(@drag_end)
840
+ if proc_content.instance_of? Hash
841
+ proc_content.each do |k, v|
842
+ @original_atome.send(k, v)
843
+ end
844
+ end
788
845
  end
789
846
  end
790
847
 
@@ -807,7 +864,13 @@ class HTML
807
864
  # we use .call instead of instance_eval because instance_eval bring the current object as context
808
865
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
809
866
  # group etc..
810
- @drag_move.call(event) if event_validation(@drag_move)
867
+ # @drag_move.call(event) if event_validation(@drag_move)
868
+ proc_content = @drag_move.call(event) if event_validation(@drag_move)
869
+ if proc_content.instance_of? Hash
870
+ proc_content.each do |k, v|
871
+ @original_atome.send(k, v)
872
+ end
873
+ end
811
874
  Universe.allow_tool_operations = false
812
875
  dx = event[:dx]
813
876
  dy = event[:dy]
@@ -871,7 +934,13 @@ class HTML
871
934
  # we use .call instead of instance_eval because instance_eval bring the current object as context
872
935
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
873
936
  # group etc..
874
- @drag_move.call(event) if event_validation(@drag_move)
937
+ # @drag_move.call(event) if event_validation(@drag_move)
938
+ proc_content = @drag_move.call(event) if event_validation(@drag_move)
939
+ if proc_content.instance_of? Hash
940
+ proc_content.each do |k, v|
941
+ @original_atome.send(k, v)
942
+ end
943
+ end
875
944
  dx = event[:dx]
876
945
  dy = event[:dy]
877
946
  x = (@original_atome.left || 0) + dx.to_f
@@ -898,7 +967,13 @@ class HTML
898
967
  # we use .call instead of instance_eval because instance_eval bring the current object as context
899
968
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
900
969
  # group etc..
901
- @drag_lock.call(event) if event_validation(@drag_lock)
970
+ # @drag_lock.call(event) if event_validation(@drag_lock)
971
+ proc_content = @drag_lock.call(event) if event_validation(@drag_lock)
972
+ if proc_content.instance_of? Hash
973
+ proc_content.each do |k, v|
974
+ @original_atome.send(k, v)
975
+ end
976
+ end
902
977
  end
903
978
  end
904
979
 
@@ -909,7 +984,13 @@ class HTML
909
984
  # we use .call instead of instance_eval because instance_eval bring the current object as context
910
985
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
911
986
  # group etc..
912
- bloc.call({ source: draggable_element, destination: dropzone_element }) if event_validation(bloc)
987
+ # bloc.call({ source: draggable_element, destination: dropzone_element }) if event_validation(bloc)
988
+ proc_content = bloc.call({ source: draggable_element, destination: dropzone_element }) if event_validation(bloc)
989
+ if proc_content.instance_of? Hash
990
+ proc_content.each do |k, v|
991
+ @original_atome.send(k, v)
992
+ end
993
+ end
913
994
  end
914
995
 
915
996
  def drop_activate(_option)
@@ -920,7 +1001,16 @@ class HTML
920
1001
  accept: nil, # Accept any element
921
1002
  overlap: 0.75,
922
1003
  ondropactivate: lambda do |native_event|
1004
+ event = Native(native_event)
1005
+
923
1006
  drop_action(native_event, @drop_activate) if event_validation(@drop_activate)
1007
+ # @drag_lock.call(event) if event_validation(@drag_lock)
1008
+ # proc_content = @drop_activate.call(event) if event_validation(@drop_activate)
1009
+ # if proc_content.instance_of? Hash
1010
+ # proc_content.each do |k, v|
1011
+ # @original_atome.send(k, v)
1012
+ # end
1013
+ # end
924
1014
  end
925
1015
  })
926
1016
  end
@@ -1030,7 +1120,14 @@ class HTML
1030
1120
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1031
1121
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1032
1122
  # group etc..
1033
- @resize.call(event) if event_validation(@resize)
1123
+ # @resize.call(event) if event_validation(@resize)
1124
+ proc_content = @resize.call(event) if event_validation(@resize)
1125
+ if proc_content.instance_of? Hash
1126
+ proc_content.each do |k, v|
1127
+ @original_atome.send(k, v)
1128
+ end
1129
+ end
1130
+
1034
1131
  x = (@element[:offsetLeft].to_i || 0)
1035
1132
  y = (@element[:offsetTop].to_i || 0)
1036
1133
  width = event[:rect][:width]
@@ -1054,13 +1151,21 @@ class HTML
1054
1151
  def overflow(params, bloc)
1055
1152
  style(:overflow, params)
1056
1153
  @overflow = @original_atome.instance_variable_get('@overflow_code')[:overflow]
1057
- @element.addEventListener('scroll', lambda do |event|
1154
+ @element.addEventListener('scroll', lambda do |native_event|
1155
+ # event = Native(native_event)
1058
1156
  scroll_top = @element[:scrollTop].to_i
1059
1157
  scroll_left = @element[:scrollLeft].to_i
1060
1158
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1061
1159
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1062
1160
  # group etc..
1063
1161
  @overflow.call({ left: scroll_left, top: scroll_top }) if event_validation(@overflow)
1162
+
1163
+ proc_content = @overflow.call({ left: scroll_left, top: scroll_top }) if event_validation(@overflow)
1164
+ if proc_content.instance_of? Hash
1165
+ proc_content.each do |k, v|
1166
+ @original_atome.send(k, v)
1167
+ end
1168
+ end
1064
1169
  end)
1065
1170
  end
1066
1171
 
@@ -1073,7 +1178,14 @@ class HTML
1073
1178
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1074
1179
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1075
1180
  # group etc..
1076
- @over_over.call(event) if event_validation(@over_over)
1181
+ # @over_over.call(event) if event_validation(@over_over)
1182
+
1183
+ proc_content = @over_over.call(event) if event_validation(@over_over)
1184
+ if proc_content.instance_of? Hash
1185
+ proc_content.each do |k, v|
1186
+ @original_atome.send(k, v)
1187
+ end
1188
+ end
1077
1189
  end
1078
1190
  end
1079
1191
 
@@ -1085,7 +1197,13 @@ class HTML
1085
1197
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1086
1198
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1087
1199
  # group etc..
1088
- @over_enter.call(event) if event_validation(@over_enter)
1200
+ # @over_enter.call(event) if event_validation(@over_enter)
1201
+ proc_content = @over_enter.call(event) if event_validation(@over_enter)
1202
+ if proc_content.instance_of? Hash
1203
+ proc_content.each do |k, v|
1204
+ @original_atome.send(k, v)
1205
+ end
1206
+ end
1089
1207
  end
1090
1208
  @element.addEventListener('mouseenter', @over_enter_callback)
1091
1209
 
@@ -1101,7 +1219,13 @@ class HTML
1101
1219
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1102
1220
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1103
1221
  # group etc..
1104
- @over_leave.call(event) if event_validation(@over_leave)
1222
+ # @over_leave.call(event) if event_validation(@over_leave)
1223
+ proc_content = @over_leave.call(event) if event_validation(@over_leave)
1224
+ if proc_content.instance_of? Hash
1225
+ proc_content.each do |k, v|
1226
+ @original_atome.send(k, v)
1227
+ end
1228
+ end
1105
1229
  end
1106
1230
  @element.addEventListener('mouseleave', @over_leave_callback)
1107
1231
 
@@ -1148,7 +1272,13 @@ class HTML
1148
1272
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1149
1273
  # group etc..
1150
1274
  # @touch_down.call(event) if @touch_down.is_a?(Proc) && (!Universe.edit_mode || @original_atome.tag[:system])
1151
- @touch_down.call(event) if event_validation(@touch_down)
1275
+ # @touch_down.call(event) if event_validation(@touch_down)
1276
+ proc_content = @touch_down.call(event) if event_validation(@touch_down)
1277
+ if proc_content.instance_of? Hash
1278
+ proc_content.each do |k, v|
1279
+ @original_atome.send(k, v)
1280
+ end
1281
+ end
1152
1282
  # end
1153
1283
  # end
1154
1284
  end
@@ -1168,14 +1298,14 @@ class HTML
1168
1298
  # @touch_up.call(event) if @touch_up.is_a?(Proc) && (!Universe.edit_mode || @original_atome.tag[:system])
1169
1299
  # event = Native(native_event)
1170
1300
  # ########## old code :
1171
- @touch_tap.call(event) if event_validation(@touch_tap)
1301
+ # @touch_tap.call(event) if event_validation(@touch_tap)
1172
1302
  # ########## new code:
1173
- # proc_content = @touch_tap.call(event) if event_validation(@touch_tap)
1174
- # if proc_content.instance_of? Hash
1175
- # proc_content.each do |k, v|
1176
- # @original_atome.send(k, v)
1177
- # end
1178
- # end
1303
+ proc_content = @touch_tap.call(event) if event_validation(@touch_tap)
1304
+ if proc_content.instance_of? Hash
1305
+ proc_content.each do |k, v|
1306
+ @original_atome.send(k, v)
1307
+ end
1308
+ end
1179
1309
  end
1180
1310
  # end
1181
1311
  end
@@ -1191,7 +1321,13 @@ class HTML
1191
1321
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1192
1322
  # group etc..
1193
1323
  # @touch_up.call(event) if @touch_up.is_a?(Proc) && (!Universe.edit_mode || @original_atome.tag[:system])
1194
- @touch_up.call(event) if event_validation(@touch_up)
1324
+ # @touch_up.call(event) if event_validation(@touch_up)
1325
+ proc_content = @touch_up.call(event) if event_validation(@touch_up)
1326
+ if proc_content.instance_of? Hash
1327
+ proc_content.each do |k, v|
1328
+ @original_atome.send(k, v)
1329
+ end
1330
+ end
1195
1331
  end
1196
1332
 
1197
1333
  # end
@@ -1208,8 +1344,13 @@ class HTML
1208
1344
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1209
1345
  # group etc..
1210
1346
  # @touch_double.call(event) if @touch_double.is_a?(Proc) && (!Universe.edit_mode || @original_atome.tag[:system])
1211
- @touch_double.call(event) if event_validation(@touch_double)
1212
-
1347
+ # @touch_double.call(event) if event_validation(@touch_double)
1348
+ proc_content = @touch_double.call(event) if event_validation(@touch_double)
1349
+ if proc_content.instance_of? Hash
1350
+ proc_content.each do |k, v|
1351
+ @original_atome.send(k, v)
1352
+ end
1353
+ end
1213
1354
  # end
1214
1355
  end
1215
1356
 
@@ -1225,7 +1366,13 @@ class HTML
1225
1366
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1226
1367
  # and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
1227
1368
  # group etc..
1228
- @touch_long.call(event) if event_validation(@touch_long)
1369
+ # @touch_long.call(event) if event_validation(@touch_long)
1370
+ proc_content = @touch_long.call(event) if event_validation(@touch_long)
1371
+ if proc_content.instance_of? Hash
1372
+ proc_content.each do |k, v|
1373
+ @original_atome.send(k, v)
1374
+ end
1375
+ end
1229
1376
  # @touch_long.call(event) if @touch_long.is_a?(Proc) && (!Universe.edit_mode || @original_atome.tag[:system])
1230
1377
  # @touch_double.call(event) if event_validation(@touch_double)
1231
1378
 
@@ -1,11 +1,8 @@
1
1
  # frozen_string_literal: true
2
- new({ particle: :run }) do |params, code|
3
- code_found = @code_code[:code]
4
- instance_exec(params, &code_found) if code_found.is_a?(Proc)
5
- end
2
+
6
3
  a = box
7
4
  a.code(:hello) do
8
- circle({ left: 333 })
5
+ circle({ left: 333, color: :orange })
9
6
  end
10
7
  wait 1 do
11
8
  a.run(:hello)
@@ -8,4 +8,5 @@ initial_height=cc.height
8
8
  b.overflow(:scroll) do |event|
9
9
  new_height = initial_height + event[:top]
10
10
  cc.height(new_height)
11
+ {left: event[:top]}
11
12
  end
@@ -3,21 +3,28 @@
3
3
 
4
4
  c=circle({width: 66, height: 66})
5
5
  t1=c.text({id: :first, data: 0, left: 28})
6
- cc=circle({width: 66, height: 66, left: 0 })
7
- t2=cc.text({id: :second, data: 0, left: 28})
6
+
8
7
  first_repeater=repeat(1, repeat = 99) do |counter|
9
8
  t1.data(counter)
10
9
  end
11
10
 
12
- my_repeater=repeat(1, repeat = 9) do |counter|
13
- t2.data(counter)
14
- end
15
11
 
16
12
  c.touch(true) do
17
13
  stop({ repeat: first_repeater })
18
14
  t1.data(:stopped)
19
15
  end
20
16
 
17
+
18
+ cc=circle({width: 66, height: 66, left: 90 })
19
+ t2=cc.text({id: :second, data: 0, left: 28})
20
+
21
+ # # alert first_repeater
22
+ my_repeater=repeat(1, repeat = 9) do |counter|
23
+ t2.data(counter)
24
+ end
25
+ #
26
+
27
+ #
21
28
  cc.touch(true) do
22
29
  stop({ repeat: my_repeater })
23
30
  t2.data(:stopped)
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ b = box({ left: 333, color: :blue, smooth: 6, id: :the_box2 })
4
+
5
+
6
+
7
+ exec_code=lambda do
8
+
9
+ wait 1 do
10
+ b.color(:violet)
11
+ end
12
+
13
+ end
14
+
15
+ b.run(exec_code)
16
+
17
+
@@ -0,0 +1,159 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'time'
4
+ # Helper method to store task configuration in localStorage
5
+ def store_task(name, config)
6
+ JS.global[:localStorage].setItem(name, config.to_json)
7
+ end
8
+
9
+ # Helper method to retrieve task configuration from localStorage
10
+ def retrieve_task(name)
11
+ config = JS.global[:localStorage].getItem(name)
12
+ config.nil? ? nil : JSON.parse(config)
13
+ end
14
+
15
+ # Helper method to retrieve all tasks from localStorage
16
+ def retrieve_all_tasks
17
+ tasks = []
18
+ local_storage = JS.global[:localStorage]
19
+ if Atome::host == "web-opal"
20
+ local_storage.each do |key|
21
+ value = local_storage.getItem(key)
22
+ if value
23
+ value= JSON.parse(value)
24
+ tasks << { name: key, config:value }
25
+ end
26
+ end
27
+ else
28
+ length = local_storage[:length].to_i
29
+ length.times do |i|
30
+ key = local_storage.call(:key, i)
31
+ value = local_storage.call(:getItem, key)
32
+ tasks << { name: key, config: JSON.parse(value.to_s) } if value
33
+ end
34
+ end
35
+ tasks
36
+ end
37
+
38
+ # Helper method to schedule a task
39
+ def schedule_task(name, years, month, day, hours, minutes, seconds, recurrence: nil, &block)
40
+ target_time = Time.new(years, month, day, hours, minutes, seconds)
41
+ now = Time.now
42
+
43
+ if target_time < now
44
+ schedule_recurrence(name, target_time, recurrence, &block)
45
+ else
46
+ seconds_until_target = target_time - now
47
+ wait_task = wait(seconds_until_target) do
48
+ block.call
49
+ schedule_recurrence(name, target_time, recurrence, &block) if recurrence
50
+ end
51
+ store_task(name, { wait: wait_task, target_time: target_time, recurrence: recurrence })
52
+ end
53
+ end
54
+
55
+ def schedule_recurrence(name, target_time, recurrence, &block)
56
+ now = Time.now
57
+ next_time = target_time
58
+
59
+ case recurrence
60
+ when :yearly
61
+ next_time += 365 * 24 * 60 * 60 while next_time <= now
62
+ when :monthly
63
+ next_time = next_time >> 1 while next_time <= now
64
+ when :weekly
65
+ next_time += 7 * 24 * 60 * 60 while next_time <= now
66
+ when :daily
67
+ next_time += 24 * 60 * 60 while next_time <= now
68
+ when :hourly
69
+ next_time += 60 * 60 while next_time <= now
70
+ when :minutely
71
+ next_time += 60 while next_time <= now
72
+ when :secondly
73
+ next_time += 1 while next_time <= now
74
+ when Hash
75
+ if recurrence[:weekly]
76
+ wday = recurrence[:weekly]
77
+ next_time += 7 * 24 * 60 * 60 while next_time <= now
78
+ next_time += 24 * 60 * 60 until next_time.wday == wday
79
+ elsif recurrence[:monthly]
80
+ week_of_month = recurrence[:monthly][:week]
81
+ wday = recurrence[:monthly][:wday]
82
+ while next_time <= now
83
+ next_month = next_time >> 1
84
+ next_time = Time.new(next_month.year, next_month.month, 1, target_time.hour, target_time.min, target_time.sec)
85
+ next_time += 24 * 60 * 60 while next_time.wday != wday
86
+ next_time += (week_of_month - 1) * 7 * 24 * 60 * 60
87
+ end
88
+ end
89
+ else
90
+ puts "Invalid recurrence option"
91
+ return
92
+ end
93
+
94
+ seconds_until_next = next_time - Time.now
95
+ wait_task = wait(seconds_until_next) do
96
+ block.call
97
+ schedule_recurrence(name, next_time, recurrence, &block)
98
+ end
99
+ store_task(name, { wait: wait_task, target_time: next_time, recurrence: recurrence })
100
+ end
101
+
102
+ # Helper method to stop a scheduled task
103
+ def stop_task(name)
104
+ task_config = retrieve_task(name)
105
+ return unless task_config
106
+
107
+ stop({ wait: task_config['wait'] })
108
+ JS.global[:localStorage].removeItem(name)
109
+ end
110
+
111
+ # Method to relaunch all tasks from localStorage
112
+ def relaunch_all_tasks
113
+ tasks = retrieve_all_tasks
114
+
115
+ tasks.each do |task|
116
+ name = task[:name]
117
+ config = task[:config]
118
+ target_time_found = config['target_time']
119
+ target_time = Time.parse(target_time_found)
120
+ recurrence_found = config['recurrence']
121
+ next unless recurrence_found
122
+ recurrence = config['recurrence'].is_a?(Hash) ? config['recurrence'].transform_keys(&:to_sym) : config['recurrence'].to_sym
123
+ puts "found : #{name}, #{target_time.year}, #{target_time.month}, #{target_time.day}, #{target_time.hour}, #{target_time.min}, #{target_time.sec}, recurrence: #{recurrence}"
124
+ schedule_task(name, target_time.year, target_time.month, target_time.day, target_time.hour, target_time.min, target_time.sec, recurrence: recurrence) do
125
+ puts "Relaunched task #{name}"
126
+ end
127
+ end
128
+ end
129
+
130
+ ######## check
131
+
132
+ # Relaunch all tasks
133
+ relaunch_all_tasks
134
+
135
+ # Example: Schedule a task to run at a specific date and time
136
+ schedule_task('specific_time_task', 2024, 11, 12, 15, 12, 30) do
137
+ puts "Task running at the specific date and time"
138
+ end
139
+
140
+ # Example: Schedule a task to run every minute
141
+ schedule_task('every_minute_task', 2024, 05, 12, 15, 12, 3, recurrence: :minutely) do
142
+ puts "Task running every minute"
143
+ end
144
+
145
+ # Example: Schedule a task to run every Tuesday at the same time
146
+ schedule_task('weekly_tuesday_task', 2024, 11, 12, 15, 12, 30, recurrence: { weekly: 2 }) do
147
+ puts "Task running every Tuesday at the same time"
148
+ end
149
+
150
+ # Example: Schedule a task to run every second Wednesday of the month at the same time
151
+ schedule_task('second_wednesday_task', 2024, 11, 12, 15, 12, 30, recurrence: { monthly: { week: 2, wday: 3 } }) do
152
+ puts "Task running every second Wednesday of the month at the same time"
153
+ end
154
+
155
+ # Stop a task
156
+ # wait 133 do
157
+ # puts 'stop'
158
+ # stop_task('every_minute_task')
159
+ # end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ b = box({ left: 333, color: :blue, smooth: 6, id: :the_box2 })
4
+
5
+ t = text({ id: :the_text, data: 'touch the box and wait!' })
6
+
7
+ exec_code=lambda do
8
+
9
+ wait 2 do
10
+ t.data('it works!! ')
11
+ end
12
+
13
+ end
14
+ b.code(:hello) do
15
+ circle({ left: rand(333), color: :green })
16
+ end
17
+ b.run(:hello)
18
+ b.touch(:tap) do
19
+ {
20
+ color: :cyan,
21
+ target: { the_text: { data: :super! } },
22
+ run: exec_code
23
+ }
24
+ end
25
+
@@ -311,4 +311,11 @@ JS.eval("localStorage.clear();")
311
311
  # verif(val=33) do |var|
312
312
  # # puts left = '20' + var.to_s
313
313
  # {left: '20' + var.to_s, alert: 'hello! and big bisous!!'}
314
- # end
314
+ # end
315
+
316
+
317
+ b=box
318
+ b.touch({tap: true}) do
319
+ alert :hello
320
+ end
321
+
@@ -2,7 +2,7 @@
2
2
 
3
3
  b = box({ left: 333, color: :blue, smooth: 6, id: :the_box2 })
4
4
 
5
- t=text({id: :the_text, data: 'type of touch : ?'})
5
+ t = text({ id: :the_text, data: 'type of touch : ?' })
6
6
 
7
7
  t.touch(:down) do |event|
8
8
  puts :down
@@ -17,17 +17,19 @@ t.touch(:down) do |event|
17
17
  # b.touch(:remove) # or b.touch(false) to remove all touches bindings
18
18
  t.data('touch down killed')
19
19
  end
20
- b.touch(true) do
21
- puts :true
20
+
21
+ touch_code =lambda do
22
22
  b.color(:red)
23
23
  puts 'box tapped'
24
24
  # b.instance_variable_set('@touch_code', nil)
25
25
  end
26
+ b.touch(tap: true, code: touch_code)
26
27
 
27
28
  b.touch(:long) do
28
- puts :long
29
- t.data('type of touch is : long ')
30
- b.color(:black)
29
+ # puts :long
30
+ # t.data('type of touch is : long ')
31
+ # b.color(:black)
32
+ {color: :cyan}
31
33
  end
32
34
 
33
35
  b.touch(:up) do
@@ -48,3 +50,6 @@ b.touch(:double) do
48
50
  t.data('type of touch is : double ')
49
51
  b.color(:yellowgreen)
50
52
  end
53
+
54
+
55
+
@@ -1,6 +1,17 @@
1
1
  # # frozen_string_literal: true
2
2
  b = box
3
3
 
4
- wait 2 do
4
+ first_wait=wait 2 do
5
5
  b.color(:red)
6
+ end
7
+ wait 1 do
8
+ puts 'now'
9
+ stop({ wait: first_wait })
10
+ # or
11
+ # wait(:kill, first_wait)
12
+ end
13
+
14
+
15
+ wait 3 do
16
+ b.color(:green)
6
17
  end
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="98" xml:space="preserve" id="canvas1">
4
+ <path id="canvas1-bezier2" stroke="rgb(205, 231, 182)" stroke-width="16" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" fill="none" d="M 10,24 L 10,85 70,85" />
5
+ <path id="canvas1-bezier" stroke="rgb(205, 231, 182)" stroke-width="16" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" fill="none" d="M -43,3.75 L -36,32.75 -4,42.75" transform="translate(44.37, 49.72) rotate(-169.32)" />
6
+ <circle id="canvas1-oval" stroke="rgb(106, 140, 201)" stroke-width="16" stroke-miterlimit="10" fill="none" cx="47.5" cy="46.5" r="16.5" />
7
+ </svg>
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.3.1
4
+ version: 0.5.7.3.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-06-07 00:00:00.000000000 Z
11
+ date: 2024-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -628,6 +628,8 @@ files:
628
628
  - vendor/assets/application/examples/repeat.rb
629
629
  - vendor/assets/application/examples/resize.rb
630
630
  - vendor/assets/application/examples/rotate.rb
631
+ - vendor/assets/application/examples/run.rb
632
+ - vendor/assets/application/examples/scheduler.rb
631
633
  - vendor/assets/application/examples/security.rb
632
634
  - vendor/assets/application/examples/select_text.rb
633
635
  - vendor/assets/application/examples/selected.rb
@@ -646,6 +648,7 @@ files:
646
648
  - vendor/assets/application/examples/sync.rb
647
649
  - vendor/assets/application/examples/table.rb
648
650
  - vendor/assets/application/examples/tagged.rb
651
+ - vendor/assets/application/examples/target.rb
649
652
  - vendor/assets/application/examples/terminal.rb
650
653
  - vendor/assets/application/examples/test.rb
651
654
  - vendor/assets/application/examples/text.rb
@@ -850,6 +853,7 @@ files:
850
853
  - vendor/assets/src/medias/images/logos/X.svg
851
854
  - vendor/assets/src/medias/images/logos/YouTube.svg
852
855
  - vendor/assets/src/medias/images/logos/apple.svg
856
+ - vendor/assets/src/medias/images/logos/arp.svg
853
857
  - vendor/assets/src/medias/images/logos/atome.svg
854
858
  - vendor/assets/src/medias/images/logos/freebsd.png
855
859
  - vendor/assets/src/medias/images/logos/freebsd.svg