atome 0.5.5.6.9 → 0.5.5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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
|