atome 0.5.5.6.9 → 0.5.5.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/atome.gemspec +4 -5
- data/exe/atome +54 -30
- data/lib/atome/genesis/sparkle.rb +10 -0
- data/lib/atome/version.rb +1 -1
- data/lib/renderers/html/html.rb +68 -20
- data/lib/renderers/html/utility.rb +6 -0
- data/src/utilities/host_mode.rb +5 -0
- data/vendor/assets/Rakefile +1 -1
- data/vendor/assets/application/examples/atome.rb +6 -3
- data/vendor/assets/application/examples/edit.rb +3 -0
- data/vendor/assets/application/examples/select_text.rb +18 -0
- data/vendor/assets/application/works/vie.rb +140 -21
- data/vendor/assets/src/css/style.css +9 -1
- metadata +7 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0ffae09a6b7268d835b684c007438ebad68d883f57fe0c0b73fa7342da7cb88
|
4
|
+
data.tar.gz: e029768893e7b6c610898637f9276f410cd15a66978bfa20c77f0e8c30c317a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aacfa23147637a539a09dfe63115b1d53a1a386968d908a860694d4849c049f85b500d5d5abd480283b0a98a85694456f7c37f7b0d187d8eda797b658dbb25a2
|
7
|
+
data.tar.gz: 06ac2bc244a5cab24555c58f8850f8fdaba7fe3467f342bee71286da2ef136e7a7ab6b0660a3e599e1dfa2c081f494b11914578153c51e4d556e04c050985eef
|
data/atome.gemspec
CHANGED
@@ -6,13 +6,13 @@ Gem::Specification.new do |spec|
|
|
6
6
|
spec.name = 'atome'
|
7
7
|
spec.version = Atome::VERSION
|
8
8
|
spec.authors = ['Jean-Eric Godard']
|
9
|
-
spec.email = ['jeezs@
|
9
|
+
spec.email = ['jeezs@atome.one']
|
10
10
|
|
11
11
|
spec.summary = 'the creative framework'
|
12
12
|
spec.description = 'the creative framework.'
|
13
13
|
spec.homepage = 'https://atome.one'
|
14
14
|
spec.license = 'MIT'
|
15
|
-
spec.required_ruby_version = '>= 3.
|
15
|
+
spec.required_ruby_version = '>= 3.3'
|
16
16
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
17
17
|
|
18
18
|
spec.metadata['homepage_uri'] = spec.homepage
|
@@ -32,11 +32,12 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
33
33
|
spec.require_paths = ['lib']
|
34
34
|
|
35
|
-
spec.add_runtime_dependency 'arduino_firmata', '~> 0.3'
|
35
|
+
# spec.add_runtime_dependency 'arduino_firmata', '~> 0.3'
|
36
36
|
spec.add_runtime_dependency 'eventmachine', '~> 1.2.7'
|
37
37
|
spec.add_runtime_dependency 'faye-websocket', '~> 0.1'
|
38
38
|
spec.add_runtime_dependency 'geocoder', '~> 1.8'
|
39
39
|
spec.add_runtime_dependency 'guard', '~> 2.1'
|
40
|
+
# # spec.add_runtime_dependency 'guard', '2.1'
|
40
41
|
spec.add_runtime_dependency 'guard-rake', '~> 1.0'
|
41
42
|
spec.add_runtime_dependency 'image_size', '~> 3.0'
|
42
43
|
spec.add_runtime_dependency 'mail', '~> 2.1'
|
@@ -60,8 +61,6 @@ Gem::Specification.new do |spec|
|
|
60
61
|
spec.add_runtime_dependency 'tzinfo-data', '~> 1.2023.4'
|
61
62
|
|
62
63
|
|
63
|
-
|
64
|
-
|
65
64
|
# Uncomment to register a new dependency of your gem
|
66
65
|
# spec.add_dependency "example-gem", "~> 1.0"
|
67
66
|
|
data/exe/atome
CHANGED
@@ -9,10 +9,8 @@ require 'opal'
|
|
9
9
|
require 'parser'
|
10
10
|
require 'uglifier'
|
11
11
|
|
12
|
-
|
13
12
|
# utils
|
14
13
|
|
15
|
-
|
16
14
|
def modify_and_copy_file(source_path, destination_path, destination_dir)
|
17
15
|
|
18
16
|
file_content = File.read(source_path)
|
@@ -335,12 +333,12 @@ def wasm_initialize (source, destination, project_name, wasi_source)
|
|
335
333
|
system(command)
|
336
334
|
end
|
337
335
|
|
338
|
-
def guard_check
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
end
|
336
|
+
# def guard_check
|
337
|
+
# # loop do
|
338
|
+
# # sleep 1
|
339
|
+
# # end
|
340
|
+
# nil unless ARGV.include?('guard')
|
341
|
+
# end
|
344
342
|
|
345
343
|
def build_for_wasm(source, destination, project_name, wasi_file)
|
346
344
|
wasm_initialize(source, destination, project_name, wasi_file)
|
@@ -429,38 +427,43 @@ src/favicon.ico src/index.html src/index_opal.html src/index_server.html src/ind
|
|
429
427
|
end
|
430
428
|
|
431
429
|
if ARGV.include?('guard')
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
end
|
430
|
+
# puts "guarding"
|
431
|
+
# sleep 1.2
|
432
|
+
Dir.chdir("./#{location}") do
|
433
|
+
`bundle exec guard`
|
437
434
|
end
|
435
|
+
# end
|
438
436
|
end
|
439
437
|
|
440
438
|
if ARGV.include?('run')
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
segments = current_path.split("/")
|
439
|
+
current_path = if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
|
440
|
+
# code to exec with Windows
|
441
|
+
`cd`.chomp
|
442
|
+
elsif RbConfig::CONFIG['host_os'] =~ /darwin|mac os/
|
443
|
+
# code to exec with MacOS
|
444
|
+
`pwd`.chomp
|
445
|
+
else
|
446
|
+
# code to exec with Unix/Linux
|
447
|
+
`pwd`.chomp
|
448
|
+
end
|
449
|
+
segments = current_path.split('/')
|
453
450
|
project_name = segments.last
|
454
|
-
destination = segments[0...-1].join(
|
451
|
+
destination = segments[0...-1].join('/')
|
455
452
|
case ARGV[1]
|
456
453
|
when 'opal'
|
454
|
+
puts 'building Opal'
|
457
455
|
build_opal_application(nil, destination, project_name)
|
456
|
+
# build host_mode
|
457
|
+
build_host_mode(destination, project_name, 'web-opal')
|
458
|
+
# build Opal extensions
|
458
459
|
`open #{destination}/#{project_name}/src/index_opal.html`
|
459
460
|
when 'wasm' # osx wasi
|
461
|
+
puts 'building Ruby wasm'
|
460
462
|
wasi_file = 'wasi-vfs-osx_arm'
|
461
463
|
wasm_common(source, destination, project_name, wasi_file, :pure_wasi)
|
462
464
|
`open #{current_path}/src/index.html`
|
463
465
|
when 'server'
|
466
|
+
puts 'building Server'
|
464
467
|
build_opal_application(nil, destination, project_name)
|
465
468
|
threads = []
|
466
469
|
threads << Thread.new do
|
@@ -480,23 +483,31 @@ if ARGV.include?('run')
|
|
480
483
|
end
|
481
484
|
build_for_server(destination, project_name, 9292, :production)
|
482
485
|
when 'osx'
|
486
|
+
puts 'building osx'
|
483
487
|
wasi_file = 'wasi-vfs-osx_arm'
|
484
488
|
wasm_common(source, destination, project_name, wasi_file, :tauri)
|
485
489
|
build_for_osx(destination)
|
486
490
|
when 'android'
|
491
|
+
puts 'building Android'
|
492
|
+
|
487
493
|
# to be filled
|
488
494
|
when 'ios'
|
495
|
+
puts 'building iOS'
|
496
|
+
|
489
497
|
# to be filled
|
490
498
|
when 'windows'
|
499
|
+
puts 'building Windows'
|
491
500
|
# to be filled
|
492
501
|
when 'linux'
|
502
|
+
puts 'building Linux'
|
493
503
|
# to be filled
|
494
504
|
when 'freebsd'
|
505
|
+
puts 'building Freebsd'
|
495
506
|
# to be filled
|
496
507
|
else
|
508
|
+
puts 'building Default(Ruby Wasm)'
|
497
509
|
wasi_file = 'wasi-vfs-osx_arm'
|
498
510
|
wasm_common(source, destination, project_name, wasi_file, 'pure_wasm')
|
499
|
-
|
500
511
|
if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
|
501
512
|
# code to exec with Windows
|
502
513
|
`start "" "#{current_path}\\src\\index.html"`
|
@@ -512,9 +523,22 @@ if ARGV.include?('run')
|
|
512
523
|
|
513
524
|
end
|
514
525
|
|
515
|
-
|
516
526
|
# if ARGV.include?('build')
|
517
|
-
#
|
527
|
+
# # project_name = segments.last
|
528
|
+
# puts "( source: #{source}, destination: #{destination}, project_name: #{project_name})"
|
529
|
+
# # build_opal_library(source, destination, project_name)
|
530
|
+
# # build parser
|
531
|
+
# # build_opal_parser(source, destination, project_name)
|
532
|
+
# # # build atome kernel
|
533
|
+
# # build_atome_kernel_for_opal(source, destination, project_name)
|
534
|
+
# # # build host_mode
|
535
|
+
# # build_host_mode(destination, project_name, 'web-opal')
|
536
|
+
# # # build Opal extensions
|
537
|
+
# # build_opal_extensions(source, destination, project_name)
|
538
|
+
# # # build application
|
539
|
+
# # build_opal_application(source, destination, project_name)
|
518
540
|
# # path = found_path('build')
|
519
541
|
# # build_app(path, production)
|
520
|
-
# end
|
542
|
+
# end
|
543
|
+
|
544
|
+
|
@@ -44,6 +44,16 @@ Atome.new(
|
|
44
44
|
red: 0.6, green: 0.6, blue: 0.6, alpha: 1 }
|
45
45
|
)
|
46
46
|
|
47
|
+
Atome.new(
|
48
|
+
{ renderers: default_render, id: :back_selection, type: :color, tag: ({ system: true, persistent: true }),
|
49
|
+
red: 0.6, green: 0.6, blue: 0.1, alpha: 0.7}
|
50
|
+
)
|
51
|
+
|
52
|
+
Atome.new(
|
53
|
+
{ renderers: default_render, id: :text_selection, type: :color, tag: ({ system: true, persistent: true }),
|
54
|
+
red: 0.3, green: 0.3, blue: 0.3, alpha: 0.9}
|
55
|
+
)
|
56
|
+
|
47
57
|
# system object creation
|
48
58
|
# the black_matter is used to store un materialized atomes
|
49
59
|
Atome.new(
|
data/lib/atome/version.rb
CHANGED
data/lib/renderers/html/html.rb
CHANGED
@@ -248,9 +248,55 @@ class HTML
|
|
248
248
|
JS.global[:document][:body].appendChild(@element)
|
249
249
|
add_class('atome')
|
250
250
|
id(id)
|
251
|
+
####
|
252
|
+
|
253
|
+
# editable_pres = JS.global[:document].querySelectorAll('pre[contenteditable="true"]')
|
254
|
+
# editable_pres_array = Array.new(editable_pres[:length].to_i) { |i| editable_pres.call(:item, i) }
|
255
|
+
# editable_pres_array.each do |pre|
|
256
|
+
# pre.addEventListener('input') do
|
257
|
+
# if pre[:innerText].strip == ''
|
258
|
+
# pre[:innerHTML] = '​' # Insère un caractère d'espace insécable
|
259
|
+
# end
|
260
|
+
# end
|
261
|
+
# end
|
262
|
+
|
263
|
+
# editable_pres = JS.global[:document].querySelectorAll('pre[contenteditable="true"]')
|
264
|
+
#
|
265
|
+
# editable_pres_array = Array.new(editable_pres[:length].to_i) { |i| editable_pres.call(:item, i) }
|
266
|
+
# editable_pres_array.each do |pre|
|
267
|
+
# pre.addEventListener('click') do
|
268
|
+
# # Focus sur l'élément pour activer le curseur
|
269
|
+
# pre.focus()
|
270
|
+
# alert :ok
|
271
|
+
# # Optionnel : Ajoutez du style pour rendre le curseur plus visible
|
272
|
+
# pre[:style][:caretColor] = 'blue' # Changez la couleur du curseur en bleu
|
273
|
+
# end
|
274
|
+
# end
|
275
|
+
###
|
251
276
|
self
|
252
277
|
end
|
253
278
|
|
279
|
+
def select_text(range)
|
280
|
+
# TODO : use atome color object instead of basic css color
|
281
|
+
back_color = grab(:back_selection)
|
282
|
+
text_color = grab(:text_selection)
|
283
|
+
|
284
|
+
back_color_rgba = "rgba(#{back_color.red * 255},#{back_color.green * 255},#{back_color.blue * 255}, #{back_color.alpha})"
|
285
|
+
text_color_rgba = "rgba(#{text_color.red * 255},#{text_color.green * 255},#{text_color.blue * 255}, #{text_color.alpha})"
|
286
|
+
|
287
|
+
range = JS.global[:document].createRange()
|
288
|
+
range.selectNodeContents(@element)
|
289
|
+
selection = JS.global[:window].getSelection()
|
290
|
+
selection.removeAllRanges()
|
291
|
+
selection.addRange(range)
|
292
|
+
@element.focus()
|
293
|
+
style = JS.global[:document].createElement('style')
|
294
|
+
style[:innerHTML] = "::selection { background-color: #{back_color_rgba}; color: #{text_color_rgba}; }"
|
295
|
+
JS.global[:document][:head].appendChild(style)
|
296
|
+
return unless @element[:innerText].to_s.length == 1
|
297
|
+
@element[:innerHTML] = '​'
|
298
|
+
end
|
299
|
+
|
254
300
|
def image(id)
|
255
301
|
# we remove any element if the id already exist
|
256
302
|
check_double(id)
|
@@ -895,28 +941,30 @@ class HTML
|
|
895
941
|
|
896
942
|
def over_enter(_option)
|
897
943
|
@over_enter = @original_atome.instance_variable_get('@over_code')[:enter]
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
@element.addEventListener('mouseenter', @over_enter_callback)
|
944
|
+
return unless @over_enter
|
945
|
+
|
946
|
+
@over_enter_callback = lambda do |event|
|
947
|
+
# we use .call instead of instance_eval because instance_eval bring the current object as context
|
948
|
+
# and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
|
949
|
+
# group etc..
|
950
|
+
@over_enter.call(event) if @over_enter.is_a?(Proc)
|
906
951
|
end
|
952
|
+
@element.addEventListener('mouseenter', @over_enter_callback)
|
953
|
+
|
907
954
|
end
|
908
955
|
|
909
956
|
def over_leave(_option)
|
910
957
|
@over_leave = @original_atome.instance_variable_get('@over_code')[:leave]
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
@element.addEventListener('mouseleave', @over_leave_callback)
|
958
|
+
return unless @over_leave
|
959
|
+
|
960
|
+
@over_leave_callback = lambda do |event|
|
961
|
+
# we use .call instead of instance_eval because instance_eval bring the current object as context
|
962
|
+
# and it's lead to a problem of context and force the use of grab(:view) when suing atome method such as shape ,
|
963
|
+
# group etc..
|
964
|
+
@over_leave.call(event) if @over_leave.is_a?(Proc)
|
919
965
|
end
|
966
|
+
@element.addEventListener('mouseleave', @over_leave_callback)
|
967
|
+
|
920
968
|
end
|
921
969
|
|
922
970
|
def over_remove(option)
|
@@ -1030,7 +1078,6 @@ class HTML
|
|
1030
1078
|
|
1031
1079
|
end
|
1032
1080
|
|
1033
|
-
|
1034
1081
|
def internet
|
1035
1082
|
JS.eval('return navigator.onLine')
|
1036
1083
|
end
|
@@ -1098,11 +1145,12 @@ class HTML
|
|
1098
1145
|
def play_animation(properties)
|
1099
1146
|
puts 'change for standard method : action'
|
1100
1147
|
required_keys = [:from, :to, :duration]
|
1101
|
-
|
1102
|
-
animate(properties)
|
1103
|
-
else
|
1148
|
+
unless properties.is_a?(Hash) && (required_keys - properties.keys).empty?
|
1104
1149
|
raise ArgumentError, "Properties must be a hash with :from, :to, and :duration keys"
|
1105
1150
|
end
|
1151
|
+
|
1152
|
+
animate(properties)
|
1153
|
+
|
1106
1154
|
end
|
1107
1155
|
|
1108
1156
|
def stop_animation
|
data/vendor/assets/Rakefile
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
Atome.new(
|
4
|
-
|
5
|
-
|
3
|
+
Atome.new(
|
4
|
+
{ renderers: [:html], id: :test_box, type: :shape, attach: :view, apply: [:shape_color],
|
5
|
+
tag: { system: true }, left: 120, top: 120, bottom: 0, width: 333, height:333, overflow: :auto,
|
6
|
+
}
|
7
|
+
|
8
|
+
)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
new({particle: :select})
|
3
4
|
t = text :hello
|
4
5
|
t.left(99)
|
5
6
|
|
@@ -8,7 +9,9 @@ t.edit(true)
|
|
8
9
|
b=box
|
9
10
|
b.touch(true) do
|
10
11
|
puts t.data
|
12
|
+
t.component({ selected: true })
|
11
13
|
end
|
14
|
+
|
12
15
|
# # frozen_string_literal: true
|
13
16
|
#
|
14
17
|
# c = circle({ id: :the_circle, left: 122, color: :orange, drag: { move: true, inertia: true, lock: :start } })
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
new({particle: :select})
|
4
|
+
t = text :hello
|
5
|
+
t.left(99)
|
6
|
+
|
7
|
+
t.edit(true)
|
8
|
+
|
9
|
+
b=box
|
10
|
+
b.touch(true) do
|
11
|
+
puts t.data
|
12
|
+
back_color = grab(:back_selection)
|
13
|
+
text_color = grab(:text_selection)
|
14
|
+
back_color.red(1)
|
15
|
+
back_color.alpha(1)
|
16
|
+
text_color.green(1)
|
17
|
+
t.component({ selected: true })
|
18
|
+
end
|
@@ -1,14 +1,106 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# def atome_common(atome_preset, params)
|
4
|
+
# basic_params = { renderers: [] }
|
5
|
+
# # TODO : remove Essentials.default_params[atome_preset] || {} as it is
|
6
|
+
# # applied twice because preset is now a particle
|
7
|
+
# preset_params = Essentials.default_params[atome_preset] || {}
|
8
|
+
#
|
9
|
+
# basic_params[:type] = preset_params[:type] || :element
|
10
|
+
# basic_params[:id] = params[:id] || identity_generator(atome_preset)
|
11
|
+
# basic_params[:renderers] = @renderers || preset_params[:renderers]
|
12
|
+
# essential_params = basic_params.merge(preset_params)
|
13
|
+
# reordered_params = essential_params.reject { |key, _| params.has_key?(key) }
|
14
|
+
# params = reordered_params.merge(params)
|
15
|
+
#
|
16
|
+
# # condition to handle color/shadow/paint atomes that shouldn't be attach to view
|
17
|
+
# # TODO : add category for atome( material/physical vs modifier : color, shadow, .. vs shape, image ..)
|
18
|
+
# # then add condition same things fo code in genesis new_atome
|
19
|
+
# if %i[color shadow paint].include?(atome_preset)
|
20
|
+
# unless params[:affect]
|
21
|
+
# params[:affect] = if @id == :view
|
22
|
+
# [:black_matter]
|
23
|
+
# else
|
24
|
+
# [@id]
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
# else
|
28
|
+
# params[:attach] = params[:attach] || @id || :view
|
29
|
+
# end
|
30
|
+
# params
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# def preset_common(params, &bloc)
|
34
|
+
# # if an atome with current id exist we update the ID in the params
|
35
|
+
# params[:id] = "#{params[:id]}_#{Universe.atomes.length}" if grab(params[:id])
|
36
|
+
# Atome.new(params, &bloc)
|
37
|
+
# end
|
38
|
+
class EVe
|
39
|
+
def initialize
|
40
|
+
@atomes = {}
|
2
41
|
|
42
|
+
end
|
3
43
|
|
44
|
+
def atome(atome_to_find)
|
45
|
+
@atomes[atome_to_find]
|
46
|
+
end
|
4
47
|
|
5
|
-
|
6
|
-
|
48
|
+
def input_box(params = {}, &bloc)
|
49
|
+
# atome_preset = :box
|
50
|
+
# params = atome_common(atome_preset, params)
|
51
|
+
# preset_common(params, &bloc)
|
52
|
+
height_wanted= 15
|
53
|
+
width_wanted= 222
|
54
|
+
input_back = Atome.new(
|
55
|
+
{ renderers: [:html], id: :input_back, type: :shape, attach: :view, apply: [:shape_color],
|
56
|
+
left: 120, top: 120, width: width_wanted, height: height_wanted+height_wanted*20/100, smooth: 6})
|
57
|
+
|
58
|
+
@atomes[:input_back] = input_back
|
59
|
+
|
60
|
+
Atome.new(
|
61
|
+
{ renderers: [:html], id: :input_text_color, type: :color, tag: ({ system: true, persistent: true }),
|
62
|
+
red: 0.1, green: 0.1, blue: 0.1, alpha: 1 }
|
63
|
+
)
|
64
|
+
|
65
|
+
text_input = Atome.new(
|
66
|
+
{ renderers: [:html], id: :input_text, type: :text, apply: [:input_text_color],component:{size: height_wanted},
|
67
|
+
data: :input, left: height_wanted*20/100, top: 0, edit: true, attach: :input_back , height: height_wanted, position: :absolute})
|
68
|
+
|
69
|
+
text_input.touch(true) do
|
70
|
+
puts text_input.data
|
71
|
+
text_input.component({ selected: {color: 'rgba(0,0,0,0.3)', text: :orange} })
|
72
|
+
end
|
73
|
+
@atomes[:input_text] = text_input
|
74
|
+
|
75
|
+
input_back
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
def input_box(params = {}, &proc)
|
81
|
+
text_color=:white
|
82
|
+
text_size= 12
|
83
|
+
back_color= :gray
|
84
|
+
width= 2000
|
85
|
+
in_b = EVe.new()
|
86
|
+
in_b.input_box
|
87
|
+
|
88
|
+
|
89
|
+
# grab(:view).input_box(params, &proc)
|
7
90
|
end
|
8
91
|
|
9
92
|
|
93
|
+
#######
|
10
94
|
|
11
|
-
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
new({particle: :controller}) do |msg|
|
100
|
+
Atome.controller_sender(msg)
|
101
|
+
end
|
102
|
+
|
103
|
+
button = box({smooth: 6,left: 12,top: 120, color:{red: 0.3, green: 0.3, blue: 0.3},id: :my_box})
|
12
104
|
button.shadow({
|
13
105
|
id: :s1,
|
14
106
|
left: 3, top: 3, blur: 9,
|
@@ -50,25 +142,52 @@ end
|
|
50
142
|
support=box({top: 250, left: 12, width: 300, height: 40, smooth: 9, color:{red: 0.3, green: 0.3, blue: 0.3}, id: :support })
|
51
143
|
|
52
144
|
support.shadow({
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
145
|
+
id: :s3,
|
146
|
+
left: 3, top: 3, blur: 9,
|
147
|
+
invert: true,
|
148
|
+
red: 0, green: 0, blue: 0, alpha: 0.7
|
149
|
+
})
|
150
|
+
support.import(true) do |content|
|
151
|
+
puts "add code here, content: #{content}"
|
152
|
+
end
|
153
|
+
|
154
|
+
|
155
|
+
# input_element = JS.global[:document].createElement("input")
|
156
|
+
# input_element[:type] = "file"
|
157
|
+
#
|
158
|
+
# input_element.addEventListener("change") do |native_event|
|
159
|
+
# event = Native(native_event)
|
160
|
+
# file = event[:target][:files][0]
|
161
|
+
# if file
|
162
|
+
# puts "file requested: #{file[:name]}"
|
163
|
+
# support.controller({ action: :loadProject, params: { path: file[:name]} })
|
164
|
+
# end
|
165
|
+
# end
|
166
|
+
#
|
167
|
+
# view_div = JS.global[:document].querySelector("#support")
|
168
|
+
#
|
169
|
+
# view_div.appendChild(input_element)
|
170
|
+
|
171
|
+
def fill_toolzone(tools_ids)
|
172
|
+
|
68
173
|
end
|
69
174
|
|
70
|
-
|
175
|
+
fill_toolzone(%i[files edition select group link copy undo settings])
|
176
|
+
# clear play paste mix
|
177
|
+
|
178
|
+
|
179
|
+
in_box=input_box
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
|
190
|
+
|
71
191
|
|
72
|
-
view_div.appendChild(input_element)
|
73
192
|
|
74
193
|
|
@@ -16,6 +16,12 @@ html, body {
|
|
16
16
|
z-index: 0;
|
17
17
|
color: lightgray;
|
18
18
|
}
|
19
|
+
pre {
|
20
|
+
min-width: 100px;
|
21
|
+
margin: 0;
|
22
|
+
padding: 0;
|
23
|
+
}
|
24
|
+
|
19
25
|
|
20
26
|
.matrix{
|
21
27
|
background-color: blue;
|
@@ -151,4 +157,6 @@ html, body {
|
|
151
157
|
/*::-moz-selection {*/
|
152
158
|
/* color: transparent;*/
|
153
159
|
/* background: none;*/
|
154
|
-
/*}*/
|
160
|
+
/*}*/
|
161
|
+
|
162
|
+
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atome
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.5.
|
4
|
+
version: 0.5.5.7.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: 2023-12-
|
11
|
+
date: 2023-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: arduino_firmata
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.3'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.3'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: eventmachine
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -348,7 +334,7 @@ dependencies:
|
|
348
334
|
version: 1.2023.4
|
349
335
|
description: the creative framework.
|
350
336
|
email:
|
351
|
-
- jeezs@
|
337
|
+
- jeezs@atome.one
|
352
338
|
executables:
|
353
339
|
- atome
|
354
340
|
extensions: []
|
@@ -488,6 +474,7 @@ files:
|
|
488
474
|
- sig/matrix.rbs
|
489
475
|
- sig/object.rbs
|
490
476
|
- sig/universe.rbs
|
477
|
+
- src/utilities/host_mode.rb
|
491
478
|
- vendor/assets/Guardfile
|
492
479
|
- vendor/assets/Rakefile
|
493
480
|
- vendor/assets/application/examples/a_concat.rb
|
@@ -552,6 +539,7 @@ files:
|
|
552
539
|
- vendor/assets/application/examples/resize.rb
|
553
540
|
- vendor/assets/application/examples/scroll.rb
|
554
541
|
- vendor/assets/application/examples/security.rb
|
542
|
+
- vendor/assets/application/examples/select_text.rb
|
555
543
|
- vendor/assets/application/examples/selected.rb
|
556
544
|
- vendor/assets/application/examples/shadow.rb
|
557
545
|
- vendor/assets/application/examples/shapes.rb
|
@@ -736,14 +724,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
736
724
|
requirements:
|
737
725
|
- - ">="
|
738
726
|
- !ruby/object:Gem::Version
|
739
|
-
version: '3.
|
727
|
+
version: '3.3'
|
740
728
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
741
729
|
requirements:
|
742
730
|
- - ">="
|
743
731
|
- !ruby/object:Gem::Version
|
744
732
|
version: '0'
|
745
733
|
requirements: []
|
746
|
-
rubygems_version: 3.
|
734
|
+
rubygems_version: 3.5.3
|
747
735
|
signing_key:
|
748
736
|
specification_version: 4
|
749
737
|
summary: the creative framework
|