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 +4 -4
- data/lib/atome/atome.rb +1 -0
- data/lib/atome/extensions/atome.rb +9 -4
- data/lib/atome/genesis/particles/event.rb +22 -16
- data/lib/atome/genesis/particles/utility.rb +26 -4
- data/lib/atome/version.rb +1 -1
- data/lib/molecules/intuition/utilities.rb +2 -0
- data/lib/renderers/html/html.rb +176 -29
- data/vendor/assets/application/examples/code.rb +2 -5
- data/vendor/assets/application/examples/overflow.rb +1 -0
- data/vendor/assets/application/examples/repeat.rb +12 -5
- data/vendor/assets/application/examples/run.rb +17 -0
- data/vendor/assets/application/examples/scheduler.rb +159 -0
- data/vendor/assets/application/examples/target.rb +25 -0
- data/vendor/assets/application/examples/test.rb +8 -1
- data/vendor/assets/application/examples/touch.rb +11 -6
- data/vendor/assets/application/examples/wait.rb +12 -1
- data/vendor/assets/src/medias/images/logos/arp.svg +7 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f111d86401c9293ac46fa899d202bf0ab2a1c905d5d17186f0b87ba0560f65d
|
4
|
+
data.tar.gz: ae3208f9349448b93a93864308445ce9108c450366ce8ee2ac1b7026724b40c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3139df2c2320097e707d095e2aa577104669823e61c77fa9b7a4e43553537068926cea7701bd0cd9c8e21bd41087f9d1e04f101883adcd0ea3b5cc84ba1d665e
|
7
|
+
data.tar.gz: c151bca3643df87d2388087cf534eb44e22e3ca8bf4281de8a9311bc7a20717164dd8be7c4a65dced3365e23e110af18648d732374706aaa9aab1fabcfc98bee
|
data/lib/atome/atome.rb
CHANGED
@@ -216,9 +216,9 @@ class Object
|
|
216
216
|
id
|
217
217
|
end
|
218
218
|
|
219
|
-
def repeater(counter, proc)
|
220
|
-
|
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
|
-
|
13
|
-
|
14
|
-
|
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
|
-
|
124
|
-
|
125
|
-
|
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
|
-
|
177
|
-
|
178
|
-
|
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
|
-
|
215
|
-
|
216
|
-
|
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
|
-
|
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
|
-
|
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(¶ms) 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
@@ -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 })
|
data/lib/renderers/html/html.rb
CHANGED
@@ -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 |
|
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
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
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
|
-
|
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)
|
@@ -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
|
-
|
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,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
|
-
|
21
|
-
|
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
|
+
|
@@ -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.
|
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-
|
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
|