atome 0.5.7.1.2 → 0.5.7.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/atome.gemspec +2 -2
  4. data/documentation/deep learning/basic_infos.txt +1 -1
  5. data/lib/atome/extensions/atome.rb +57 -19
  6. data/lib/atome/genesis/atomes.rb +11 -0
  7. data/lib/atome/genesis/particles/event.rb +24 -2
  8. data/lib/atome/genesis/sparkle.rb +2 -1
  9. data/lib/atome/presets/atome.rb +5 -14
  10. data/lib/atome/utilities/utilities.rb +0 -10
  11. data/lib/atome/version.rb +1 -1
  12. data/lib/atome.rb +2 -1
  13. data/lib/atome_relative.rb +2 -1
  14. data/lib/molecules/intuition/tools.rb +344 -0
  15. data/lib/renderers/html/hierarchy.rb +2 -2
  16. data/lib/renderers/html/html.rb +52 -48
  17. data/lib/renderers/html/identity.rb +4 -1
  18. data/lib/renderers/html/utility.rb +1 -1
  19. data/vendor/assets/application/examples/above_below_before_after.rb +22 -0
  20. data/vendor/assets/application/examples/animation.rb +29 -1
  21. data/vendor/assets/application/examples/audio.rb +54 -0
  22. data/vendor/assets/application/examples/hypertext.rb +24 -3
  23. data/vendor/assets/application/examples/test.rb +1 -56
  24. data/vendor/assets/application/examples/tools.rb +7 -384
  25. data/vendor/assets/src/index.html +13 -6
  26. data/vendor/assets/src/index_opal.html +15 -7
  27. data/vendor/assets/src/index_server.html +19 -0
  28. data/vendor/assets/src/index_server_wasm.html +13 -6
  29. data/vendor/assets/src/index_wasm.html +19 -12
  30. data/vendor/assets/src/js/third_parties/webaudio-pianoroll.min.js +66 -0
  31. data/vendor/assets/src/medias/images/utils/full_keyboard.svg +50 -0
  32. data/vendor/assets/src/medias/images/utils/keyboard.svg +29 -0
  33. data/vendor/assets/src/medias/images/utils/notes.svg +28 -0
  34. metadata +25 -18
  35. /data/lib/molecules/intuition/{utillities.rb → utilities.rb} +0 -0
@@ -4,8 +4,6 @@
4
4
 
5
5
  class HTML
6
6
 
7
-
8
-
9
7
  # def id
10
8
  # :poil
11
9
  # end
@@ -47,14 +45,14 @@ class HTML
47
45
  def add_font_to_css(params)
48
46
  font_path = params[:path]
49
47
  font_name = params[:name]
50
- str_to_eval = <<STRDELIM
51
- var styleSheet = document.styleSheets[0];
52
- styleSheet.insertRule(`
53
- @font-face {
54
- font-family: '#{font_name}';
55
- src: url('../medias/fonts/#{font_path}/#{font_name}.ttf') format('truetype');
56
- }`, styleSheet.cssRules.length);
57
- STRDELIM
48
+ str_to_eval = <<~STRDELIM
49
+ var styleSheet = document.styleSheets[0];
50
+ styleSheet.insertRule(`
51
+ @font-face {
52
+ font-family: '#{font_name}';
53
+ src: url('../medias/fonts/#{font_path}/#{font_name}.ttf') format('truetype');
54
+ }`, styleSheet.cssRules.length);
55
+ STRDELIM
58
56
  JS.eval(str_to_eval)
59
57
  end
60
58
 
@@ -221,7 +219,6 @@ STRDELIM
221
219
  particles_from_style[key.to_sym] = value if key && value
222
220
  end
223
221
 
224
- # alert "hyperedit"
225
222
 
226
223
  particles_found = particles_found.merge(particles_from_style)
227
224
  current_atome = grab(@id)
@@ -378,6 +375,18 @@ STRDELIM
378
375
  self
379
376
  end
380
377
 
378
+ def audio(id)
379
+ # we remove any element if the id already exist
380
+ check_double(id)
381
+ markup_found = @original_atome.markup || :audio
382
+ @element_type = markup_found.to_s
383
+ @element = JS.global[:document].createElement(@element_type)
384
+ JS.global[:document][:body].appendChild(@element)
385
+ add_class('atome')
386
+ self.id(id)
387
+ self
388
+ end
389
+
381
390
  def www(id)
382
391
  # we remove any element if the id already exist
383
392
  check_double(id)
@@ -505,7 +514,6 @@ STRDELIM
505
514
  end
506
515
  end
507
516
 
508
-
509
517
  def transform(property, value = nil)
510
518
  transform_needed = "#{property}(#{value}deg)"
511
519
  @element[:style][:transform] = transform_needed.to_s
@@ -578,8 +586,6 @@ STRDELIM
578
586
  @element[:style][:"-webkit-backdrop-filter"] = filter_needed
579
587
  end
580
588
 
581
-
582
-
583
589
  def currentTime(time)
584
590
  @element[:currentTime] = time
585
591
  end
@@ -598,7 +604,6 @@ STRDELIM
598
604
 
599
605
  def action(_particle, action_found, option = nil)
600
606
 
601
- # alert option
602
607
  if action_found == :stop
603
608
  currentTime(option)
604
609
  @element.pause
@@ -1146,13 +1151,11 @@ STRDELIM
1146
1151
  end
1147
1152
 
1148
1153
  def touch_tap(_option)
1149
- # alert :touch_tap
1150
1154
  @element[:style][:cursor] = 'pointer'
1151
1155
  interact = JS.eval("return interact('##{@id}')")
1152
1156
  touch_tap = @original_atome.instance_variable_get('@touch_code')[:tap]
1153
1157
  # unless @touch_removed[:tap]
1154
1158
  interact.on('tap') do |native_event|
1155
- # alert 'touchy'
1156
1159
  event = Native(native_event)
1157
1160
  # we use .call instead of instance_eval because instance_eval bring the current object as context
1158
1161
  # and it's lead to a problem of context and force the use of grab(:view) when using atome method such as shape ,
@@ -1300,37 +1303,30 @@ STRDELIM
1300
1303
  end
1301
1304
  end
1302
1305
 
1306
+
1303
1307
  # animation below
1304
1308
  def animate(animation_properties)
1305
- command = <<~JS
1306
- var target_div = document.getElementById('#{@id}');
1307
- window.currentAnimation = popmotion.animate({
1308
- from: #{animation_properties[:from]},
1309
- to: #{animation_properties[:to]},
1310
- duration: #{animation_properties[:duration]},
1311
- onUpdate: function(v) {
1312
- atomeJsToRuby("puts x= "+v)
1313
- atomeJsToRuby("grab('#{@id}').left("+v+")")
1314
- },
1315
- onComplete: function() {
1316
- window.currentAnimation = null;
1317
- atomeJsToRuby("puts :complete")
1318
- }
1319
- });
1309
+ prop= animation_properties[:particle]
1310
+ command = <<~JS
1311
+ var target_div = document.getElementById('#{@id}');
1312
+ window.currentAnimation = popmotion.animate({
1313
+ from: #{animation_properties[ :from]},
1314
+ to: #{animation_properties[:to]},
1315
+ duration: #{animation_properties[:duration]},
1316
+ onUpdate: function(v) {
1317
+ atomeJsToRuby("grab('#{@id}').animation_callback('#{prop}', "+v+")")
1318
+ atomeJsToRuby("grab('#{@id}').#{prop}("+v+")")
1319
+ },
1320
+ onComplete: function(v) {
1321
+ window.currentAnimation = null;
1322
+ atomeJsToRuby("grab('#{@id}').animation_callback('#{prop}_end')")
1323
+ }
1324
+ });
1320
1325
  JS
1321
1326
  JS.eval(command)
1322
1327
  end
1323
1328
 
1324
- def play_animation(properties)
1325
- puts 'change for standard method : action'
1326
- required_keys = [:from, :to, :duration]
1327
- unless properties.is_a?(Hash) && (required_keys - properties.keys).empty?
1328
- raise ArgumentError, 'Properties must be a hash with :from, :to, and :duration keys'
1329
- end
1330
1329
 
1331
- animate(properties)
1332
-
1333
- end
1334
1330
 
1335
1331
  def stop_animation
1336
1332
  JS.eval('if (window.currentAnimation) window.currentAnimation.stop();')
@@ -1359,7 +1355,6 @@ STRDELIM
1359
1355
 
1360
1356
  table_html.appendChild(thead)
1361
1357
  tbody = JS.global[:document].createElement('tbody')
1362
- # alert data
1363
1358
  data.each_with_index do |row, row_index|
1364
1359
  tr = JS.global[:document].createElement('tr')
1365
1360
 
@@ -1389,8 +1384,6 @@ STRDELIM
1389
1384
  JS.global[:document].querySelector("##{@id}").appendChild(table_html)
1390
1385
  end
1391
1386
 
1392
-
1393
-
1394
1387
  # Helper function to handle Atome objects
1395
1388
  def handle_atome(atome, td_element)
1396
1389
  atome.fit(cell_height)
@@ -1402,7 +1395,6 @@ STRDELIM
1402
1395
  atome.left(0)
1403
1396
  end
1404
1397
 
1405
-
1406
1398
  def refresh_table(_params)
1407
1399
  # first we need to extact all atome from the table or they will be deleted by the table refres
1408
1400
  data = @original_atome.data
@@ -1442,9 +1434,21 @@ STRDELIM
1442
1434
  def set_td_style(td)
1443
1435
  cell_height = @original_atome.component[:height]
1444
1436
  cell_width = @original_atome.component[:width]
1445
- td[:style][:border] = '1px solid black'
1437
+ # shadow_found = @original_atome.component[:shadow]
1438
+ # if shadow_found
1439
+ # red = shadow_found[:red] * 255
1440
+ # green = shadow_found[:green] * 255
1441
+ # blue = shadow_found[:blue] * 255
1442
+ # alpha = shadow_found[:alpha]
1443
+ # left = shadow_found[:left]
1444
+ # top = shadow_found[:top]
1445
+ # blur = shadow_found[:blur] # new correct behavior all atome's value should now be get using :value,here to resolve conflict with blur and back blur
1446
+ # inset = :inset if shadow_found[:invert]
1447
+ # shadow_created = "#{left}px #{top}px #{blur}px rgba(#{red}, #{green}, #{blue}, #{alpha}) #{inset}"
1448
+ # end
1449
+ # td[:style][:border] = '1px solid black'
1446
1450
  td[:style][:backgroundColor] = 'white'
1447
- td[:style][:boxShadow] = '10px 10px 5px #888888'
1451
+ # td[:style][:boxShadow] = shadow_created
1448
1452
  td[:style][:width] = "#{cell_width}px"
1449
1453
  td[:style]['min-width'] = "#{cell_width}px"
1450
1454
  td[:style]['max-width'] = "#{cell_height}px"
@@ -1641,7 +1645,7 @@ STRDELIM
1641
1645
 
1642
1646
  # atomisation!
1643
1647
  def atomized(html_object)
1644
- html_object = html_object[0] if html_object.instance_of? Array
1648
+ # html_object = html_object[0] if html_object.instance_of? Array
1645
1649
  @element = html_object
1646
1650
  end
1647
1651
 
@@ -17,6 +17,9 @@ end
17
17
  new({ method: :type, type: :string, renderer: :html, specific: :video }) do |_value, _user_proc|
18
18
  html.video(@id)
19
19
  end
20
+ new({ method: :type, type: :string, renderer: :html, specific: :audio }) do |_value, _user_proc|
21
+ html.audio(@id)
22
+ end
20
23
 
21
24
  new({ method: :type, type: :string, renderer: :html, specific: :www }) do |_value, _user_proc|
22
25
  html.www(@id)
@@ -95,7 +98,7 @@ new({ method: :data, type: :string, specific: :table, renderer: :html }) do |val
95
98
  end
96
99
 
97
100
  new({ method: :type, type: :hash, specific: :atomized, renderer: :html }) do |value, _user_proc|
98
- html.atomized(value)
101
+ html.atomized(alien)
99
102
  end
100
103
 
101
104
 
@@ -167,4 +167,4 @@ new({ renderer: :html, method: :record }) do |params, user_proc|
167
167
  end
168
168
  end
169
169
 
170
- end
170
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ b=box
4
+ margin = 12
5
+ b2=box({top: below(b, margin)})
6
+ b3=box({top: below(b2, margin)})
7
+ b4=box({top: below(b3, margin)})
8
+ box({top: below(b4, margin)})
9
+ i=0
10
+ while i< 10 do
11
+ b2=box({top: below(b, margin)})
12
+ i+=1
13
+ end
14
+
15
+ b = circle(left: 66)
16
+ margin = 12
17
+ i = 0
18
+
19
+ while i < 10 do
20
+ b = circle({top: below(b, margin), left: 66})
21
+ i += 1
22
+ end
@@ -87,5 +87,33 @@
87
87
 
88
88
  b=box({id: :the_box})
89
89
 
90
- b.animate({ to: 90 })
90
+ b.animate({ to: 333, particle: :width, duration: 3000}) do |val|
91
+ puts "width +#{val}"
92
+ end
93
+
94
+ b.animate({ to: 456, particle: :left, duration: 5000}) do |val|
95
+ puts "left +#{val}"
96
+ end
97
+
98
+ b.animate({ end: :left}) do |val|
99
+ puts "left ended"
100
+ end
101
+
102
+ b.animate({ to: 69, particle: :smooth, duration: 10000}) do |val|
103
+ puts "smooth +#{val}"
104
+ end
105
+
106
+ b.animate({ end: :smooth}) do |val|
107
+ puts " cool smooth end now!!!"
108
+ end
109
+
110
+ b.animate({ to: 90, particle: :rotate, duration: 10000}) do |val|
111
+ puts "rotate +#{val}"
112
+ end
113
+
114
+ b.animate({ to: 222, particle: :top, duration: 10000}) do |val|
115
+ puts "top +#{val}"
116
+ end
117
+
118
+
91
119
 
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ # audio tag
4
+ a = audio({ path: 'medias/audios/clap.wav', id: :basic_audio })
5
+ b=box({id: :playButton})
6
+ b.text(:audio_tag)
7
+ a.left(333)
8
+ b.touch(:down) do
9
+ a.play(true)
10
+ end
11
+
12
+
13
+
14
+ ### Web Audio
15
+ audio({ path: 'medias/audios/clap.wav', id: :audioElement })
16
+ @audio_context = JS.eval('return new AudioContext()')
17
+ @audio_element = JS.global[:document].getElementById('audioElement')
18
+ @track = @audio_context.createMediaElementSource(@audio_element)
19
+
20
+ @gain_node = @audio_context.createGain()
21
+ @gain_node[:gain][:value] = 0.5
22
+
23
+ @track.connect(@gain_node)
24
+ @gain_node.connect(@audio_context[:destination])
25
+
26
+ def play_audio
27
+ @audio_context[:resume].to_s if @audio_context[:state].to_s == 'suspended'
28
+ @audio_element.play
29
+ end
30
+ b2=box({left: 166})
31
+ b2.text(:web_audio)
32
+ b2.touch(:down) do
33
+ play_audio
34
+ end
35
+
36
+
37
+ # ######### wadjs
38
+ bb=box({left: 333})
39
+ bb.text(:wadjs)
40
+ init_code = "window.snare = new Wad({source : 'medias/audios/clap.wav'});"
41
+ JS.eval(init_code)
42
+
43
+ play_code = <<~STRDEL
44
+ window.snare.play();
45
+ setTimeout(function() {
46
+ window.snare.stop();
47
+ }, 300);
48
+ STRDEL
49
+
50
+
51
+ bb.touch(:down) do
52
+ JS.eval(play_code)
53
+ end
54
+
@@ -58,7 +58,7 @@ html_desc = <<STR
58
58
  </nav>
59
59
  </header>
60
60
 
61
- <section id='title' class="section my_class" style='left: 333px;color: yellow'>
61
+ <section id='div_id' class="section my_class" style='left: 333px;color: yellow'>
62
62
  <h2>PRODUCTIONS AUDIOVISUELLES</h2>
63
63
  <!-- Contenu de la section -->
64
64
  </section>
@@ -105,8 +105,29 @@ b.hypertext(html_desc)
105
105
  # get tag content convert to data
106
106
  # get style and class convert to particle
107
107
  # end
108
- b.hyperedit(:title) do |tag_desc|
109
- puts tag_desc
108
+ b.hyperedit(:div_id) do |tag_desc|
109
+ puts tag_desc.class
110
+ end
111
+
112
+ wait 2 do
113
+ div_result = HTML.locate(id: 'div_id') # find by ID
114
+
115
+ atomized_el= atomizer({ target: div_result, id: :my_second_html_obj })
116
+ atomized_el.rotate(55)
117
+ atomized_el.color(:purple)
118
+ atomized_el.position(:absolute)
119
+ atomized_el.left(255)
120
+ atomized_el.top(255)
121
+ end
122
+
123
+
124
+ wait 3 do
125
+ # or handle the objet in pure ruby js style
126
+ div_result = HTML.locate(id: 'div_id') # find by ID
127
+ div_result[:style][:left]= "66px"
128
+ puts "the div is : #{div_result[:style][:left]}"
129
+
130
+
110
131
  end
111
132
 
112
133
  # TODO : create an html to atome converter
@@ -1,57 +1,2 @@
1
- m = table({ renderers: [:html], attach: :view, id: :my_test_box, type: :table, apply: [:shape_color],
2
- left: 333, top: 0, width: 300, smooth: 15, height: 900, overflow: :scroll, option: { header: false },
3
- component: {
4
- border: { thickness: 5, color: :blue, pattern: :dotted },
5
- overflow: :auto,
6
- color: "white",
7
- shadow: {
8
- id: :s4,
9
- left: 20, top: 0, blur: 9,
10
- option: :natural,
11
- red: 0, green: 1, blue: 0, alpha: 1
12
- },
13
- # height: 80,
14
- # width: 12,
15
- component: { size: 12, color: :black }
16
- },
17
- data: [
18
- { remove_me: :nonono },
19
- { dfgdf: 1, name: 'Alice', age: 30, no: 'oko', t: 123, r: 654, f: 123, g: 654, w: 123, x: 654, c: 123, v: 654 },
20
- ]
21
- })
1
+ # frozen_string_literal: true
22
2
 
23
-
24
-
25
- m.data( [
26
- {header_title: nil },
27
- { dfgdf:nil, name: nil, age: nil, no: nil, t: nil, r: nil, f: nil, g: nil, w: nil, x: nil, c: nil, v: nil },
28
- { id: nil, name: nil, age: nil },
29
- { dfg: nil, name: nil, age: nil, no: nil },
30
- { dfgd: nil, name: nil, age: nil, no: nil },
31
- {header_title: nil },
32
- { dfgdf:nil, name: nil, age: nil, no: nil, t: nil, r: nil, f: nil, g: nil, w: nil, x: nil, c: nil, v: nil },
33
- { id: nil, name: nil, age: nil },
34
- { dfg: nil, name: nil, age: nil, no: nil },
35
- { dfgd: nil, name: nil, age: nil, no: nil },
36
- {header_title: nil },
37
- { dfgdf:nil, name: nil, age: nil, no: nil, t: nil, r: nil, f: nil, g: nil, w: nil, x: nil, c: nil, v: nil },
38
- { id: nil, name: nil, age: nil },
39
- { dfg: nil, name: nil, age: nil, no: nil },
40
- { dfgd: nil, name: nil, age: nil, no: nil },
41
- {header_title: nil },
42
- { dfgdf:nil, name: nil, age: nil, no: nil, t: nil, r: nil, f: nil, g: nil, w: nil, x: nil, c: nil, v: nil },
43
- { id: nil, name: nil, age: nil },
44
- { dfg: nil, name: nil, age: nil, no: nil },
45
- { dfgd: nil, name: nil, age: nil, no: nil },
46
- {header_title: nil },
47
- { dfgdf:nil, name: nil, age: nil, no: nil, t: nil, r: nil, f: nil, g: nil, w: nil, x: nil, c: nil, v: nil },
48
- { id: nil, name: nil, age: nil },
49
- { dfg: nil, name: nil, age: nil, no: nil },
50
- { dfgd: nil, name: nil, age: nil, no: nil },
51
- {header_title: nil },
52
- { dfgdf:nil, name: nil, age: nil, no: nil, t: nil, r: nil, f: nil, g: nil, w: nil, x: nil, c: nil, v: nil },
53
- { id: nil, name: nil, age: nil },
54
- { dfg: nil, name: nil, age: nil, no: nil },
55
- { dfgd: nil, name: nil, age: nil, no: nil },
56
-
57
- ])