atome 0.5.6.4.5 → 0.5.6.4.8
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/lib/atome/extensions/atome.rb +3 -4
- data/lib/atome/genesis/atomes.rb +13 -0
- data/lib/atome/genesis/genesis.rb +1 -1
- data/lib/atome/genesis/particles/hierarchy.rb +3 -7
- data/lib/atome/genesis/particles/security.rb +47 -3
- data/lib/atome/genesis/sparkle.rb +10 -4
- data/lib/atome/helpers/utilities.rb +51 -0
- data/lib/atome/kernel/universe.rb +11 -4
- data/lib/atome/version.rb +1 -1
- data/lib/renderers/html/effect.rb +1 -1
- data/lib/renderers/html/hierarchy.rb +1 -1
- data/lib/renderers/html/html.rb +5 -2
- data/vendor/assets/application/examples/blur.rb +22 -2
- data/vendor/assets/application/examples/file.rb +1 -0
- data/vendor/assets/application/examples/gradient.rb +1 -0
- data/vendor/assets/application/examples/matrix.rb +10 -6
- data/vendor/assets/application/examples/shadow.rb +8 -5
- data/vendor/assets/server/eDen.rb +7 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc73dbaea0b164408d4656f53afb29c6f207d7a3a9238d7e0f017fee5d99c76a
|
4
|
+
data.tar.gz: 97860122c2abfec80d74880bd80e24d3c4fb2bab39661aaf3d97e7d6bc1528b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd5524c4909dd4c276c9af722af86b5eaa1505f82ff6503737a5cd6e50e62009bb8be7e7cd82db7e482e7f18e7beb7e1339c2728fbb211f96060b60143f3e136
|
7
|
+
data.tar.gz: b485ea4522218c293c36f92e79caeb22fb9233e6146cbeb7271d9b328e2be809a86268871338bc49b4ba105352878f3d4ea99361cb7d41b122b46e37e2bb4fac
|
@@ -111,8 +111,8 @@ class Object
|
|
111
111
|
ordered_part = ordered_keys.map { |k| [k, hash_to_reorder[k]] }.to_h
|
112
112
|
other_part = hash_to_reorder.reject { |k, _| ordered_keys.include?(k) }
|
113
113
|
# merge the parts to obtain an re-ordered hash
|
114
|
-
|
115
|
-
reordered_hash
|
114
|
+
ordered_part.merge(other_part)
|
115
|
+
# reordered_hash
|
116
116
|
end
|
117
117
|
|
118
118
|
def delete (atomes)
|
@@ -120,8 +120,7 @@ class Object
|
|
120
120
|
end
|
121
121
|
|
122
122
|
def identity_generator
|
123
|
-
|
124
|
-
"#{Universe.app_identity}_#{Universe.counter}".to_sym
|
123
|
+
"a_#{Universe.app_identity}_#{Universe.counter}".to_sym
|
125
124
|
end
|
126
125
|
|
127
126
|
def hook(a_id)
|
data/lib/atome/genesis/atomes.rb
CHANGED
@@ -69,10 +69,23 @@ new({ sanitizer: :video }) do |params|
|
|
69
69
|
end
|
70
70
|
new({ atome: :www })
|
71
71
|
new({ atome: :shadow }) do |params|
|
72
|
+
# if params
|
73
|
+
# if params.delete(:affect)
|
74
|
+
# attach_value = params.delete(:affect)
|
75
|
+
# else
|
76
|
+
# attach_value=id
|
77
|
+
# end
|
78
|
+
#
|
79
|
+
# params[:affect] = attach_value
|
80
|
+
# alert "=> params : #{params}"
|
81
|
+
#
|
82
|
+
# end
|
83
|
+
|
72
84
|
if params
|
73
85
|
attach_value = params.delete(:affect)
|
74
86
|
params[:affect] = attach_value
|
75
87
|
end
|
88
|
+
# alert "=> params : #{params}"
|
76
89
|
params
|
77
90
|
end
|
78
91
|
new({ atome: :raw })
|
@@ -100,7 +100,7 @@ class Genesis
|
|
100
100
|
|
101
101
|
# we historicize all write action below
|
102
102
|
# we add the changes to the stack that must be synchronised
|
103
|
-
Universe.historicize(@
|
103
|
+
Universe.historicize(@aid, :write, element, params)
|
104
104
|
computed_params
|
105
105
|
elsif params || params == false
|
106
106
|
"send a valid password to write #{element} value"
|
@@ -82,18 +82,14 @@ end
|
|
82
82
|
new({ particle: :affect, category: :hierarchy, type: :string, render: false }) do |children_ids, &user_proc|
|
83
83
|
children_ids = [children_ids] unless children_ids.instance_of? Array
|
84
84
|
children_ids.each do |child_id|
|
85
|
-
# params[:affect].each do |affected|
|
86
|
-
# end
|
87
|
-
|
88
85
|
child_found = grab(child_id)
|
89
|
-
#
|
90
|
-
# puts "correct condition below #{id}"
|
91
|
-
#FIXME : found why it crash when removing the conditon below
|
86
|
+
#FIXME : found why it crash when removing the condition below
|
92
87
|
unless child_found.id == :black_matter
|
93
88
|
child_found.remove({all: :paint})
|
94
89
|
end
|
95
|
-
|
90
|
+
child_found.apply([id], &user_proc)
|
96
91
|
end
|
92
|
+
|
97
93
|
children_ids
|
98
94
|
end
|
99
95
|
|
@@ -26,8 +26,52 @@ new ({ sanitizer: :password }) do |params|
|
|
26
26
|
end
|
27
27
|
|
28
28
|
new({ read: :password }) do |params|
|
29
|
-
|
30
|
-
params
|
31
|
-
params[:
|
29
|
+
# TODO : check if we have to reactive the lines below
|
30
|
+
# params = Black_matter.password if params.nil?
|
31
|
+
# params[:read][:atome] = Black_matter.password[:read][:atome] unless @authorisations[:write][:atome]
|
32
|
+
# params[:write][:atome] = Black_matter.password[:write][:atome] unless @authorisations[:write][:atome]
|
33
|
+
|
32
34
|
params
|
33
35
|
end
|
36
|
+
|
37
|
+
# def get_all_local_storage_items
|
38
|
+
# Création d'un hash pour stocker les paires clé/valeur de localStorage
|
39
|
+
storage_items = {}
|
40
|
+
|
41
|
+
# Obtention du nombre d'éléments dans le localStorage
|
42
|
+
# storage= JS.global[:localStorage]
|
43
|
+
# # storage=storage.to_s
|
44
|
+
# storage_array= storage.to_a
|
45
|
+
# # alert storage_array.length
|
46
|
+
# storage_items={}
|
47
|
+
# storage_array.each_with_index do |_i, index|
|
48
|
+
# key = JS.global[:localStorage].key(index)
|
49
|
+
# #
|
50
|
+
# # # Récupération de la valeur associée à cette clé
|
51
|
+
# value = JS.global[:localStorage].getItem(key)
|
52
|
+
# #
|
53
|
+
# # # Stockage de la paire clé/valeur dans le hash
|
54
|
+
# storage_items[key] = value
|
55
|
+
# end
|
56
|
+
# puts storage_items
|
57
|
+
|
58
|
+
# alert Native(storage_length).class
|
59
|
+
# Itération sur tous les éléments de localStorage
|
60
|
+
# (0...storage_length).each do |i|
|
61
|
+
# # Récupération de la clé pour l'élément actuel
|
62
|
+
# key = JS.global[:localStorage].key(i)
|
63
|
+
#
|
64
|
+
# # Récupération de la valeur associée à cette clé
|
65
|
+
# value = JS.global[:localStorage].getItem(key)
|
66
|
+
#
|
67
|
+
# # Stockage de la paire clé/valeur dans le hash
|
68
|
+
# storage_items[key] = value
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
# # Retour du hash contenant toutes les paires clé/valeur de localStorage
|
72
|
+
# storage_items
|
73
|
+
# end
|
74
|
+
#
|
75
|
+
# # Appel de la fonction pour récupérer et afficher le contenu de localStorage
|
76
|
+
# all_items = get_all_local_storage_items
|
77
|
+
# puts all_items
|
@@ -3,7 +3,6 @@
|
|
3
3
|
# now let's get the default render engine
|
4
4
|
|
5
5
|
# Lets create the U.I.
|
6
|
-
|
7
6
|
default_render = Essentials.default_params[:render_engines]
|
8
7
|
Atome.new(
|
9
8
|
{ renderers: [], id: :eDen, type: :element, tag: { system: true } }
|
@@ -90,7 +89,8 @@ Atome.new({ renderers: default_render, id: machine_id, type: :machine, password:
|
|
90
89
|
# user
|
91
90
|
user_password = { global: :star_win, read: { atome: :star_wars }, write: { atome: :star_wars } }
|
92
91
|
|
93
|
-
human({ id: :anonymous, login: true, password: user_password, data: { birthday: '10/05/1996' }, selection: [], attach: :user_view })
|
92
|
+
# human({ id: :anonymous, login: true, password: user_password, data: { birthday: '10/05/1996' }, selection: [], attach: :user_view })
|
93
|
+
human({ id: identity_generator, login: true, password: user_password, data: { birthday: '10/05/1996' }, selection: [], attach: :user_view })
|
94
94
|
|
95
95
|
Universe.current_machine = machine_id
|
96
96
|
# the constant A is used to access alla atomes methods
|
@@ -146,7 +146,7 @@ def atome_genesis
|
|
146
146
|
end
|
147
147
|
end
|
148
148
|
|
149
|
-
def init_database # this method is call from JS (atome/communication)
|
149
|
+
def init_database # this method is call from JS (atome/communication) at WS connection
|
150
150
|
# we init the db file eDen
|
151
151
|
A.message({ action: :init_db, data: { database: :eDen } }) do |_db_state|
|
152
152
|
end
|
@@ -184,6 +184,11 @@ def init_database # this method is call from JS (atome/communication)
|
|
184
184
|
end
|
185
185
|
end
|
186
186
|
|
187
|
+
# now we send localstorage content to the server
|
188
|
+
puts "now we send localstorage send_localstorage_content to the server"
|
189
|
+
send_localstorage_content
|
190
|
+
# A.message({ action: :localstorage, data: get_localstorage_content }) do |_db_state|
|
191
|
+
# end
|
187
192
|
end
|
188
193
|
|
189
194
|
def user_login
|
@@ -193,6 +198,7 @@ def user_login
|
|
193
198
|
puts "email received : #{email}"
|
194
199
|
end
|
195
200
|
message({ action: :authorization, data: { password: password } }) do |pass|
|
196
|
-
puts "password
|
201
|
+
puts "password received : #{pass}"
|
197
202
|
end
|
198
203
|
end
|
204
|
+
# Universe.allow_history=true
|
@@ -6,6 +6,7 @@ require 'json'
|
|
6
6
|
class Atome
|
7
7
|
class << self
|
8
8
|
|
9
|
+
|
9
10
|
def file_handler(parent, content, bloc)
|
10
11
|
grab(parent).instance_exec(content, &bloc)
|
11
12
|
end
|
@@ -398,6 +399,56 @@ class Atome
|
|
398
399
|
# Digest::SHA256.hexdigest(string)
|
399
400
|
# end
|
400
401
|
end
|
402
|
+
def get_localstorage_content
|
403
|
+
storage= JS.global[:localStorage]
|
404
|
+
storage_array= storage.to_a
|
405
|
+
storage_items={}
|
406
|
+
storage_array.each_with_index do |_i, index|
|
407
|
+
key = JS.global[:localStorage].key(index)
|
408
|
+
value = JS.global[:localStorage].getItem(key)
|
409
|
+
storage_items[key] = value
|
410
|
+
end
|
411
|
+
storage_items
|
412
|
+
end
|
413
|
+
|
414
|
+
def sanitize_data_for_json(data)
|
415
|
+
data=data.gsub('"', '\\"')
|
416
|
+
# case data
|
417
|
+
# when String
|
418
|
+
# data.gsub('"', '\\"')
|
419
|
+
# when Hash
|
420
|
+
# data.transform_values { |value| sanitize_data(value) }
|
421
|
+
# when Array
|
422
|
+
# data.map { |value| sanitize_data(value) }
|
423
|
+
# else
|
424
|
+
# data
|
425
|
+
# end
|
426
|
+
data
|
427
|
+
end
|
428
|
+
|
429
|
+
def send_localstorage_content
|
430
|
+
storage= JS.global[:localStorage]
|
431
|
+
storage_array= storage.to_a
|
432
|
+
# storage_items={}
|
433
|
+
storage_array.each_with_index do |_i, index|
|
434
|
+
key = JS.global[:localStorage].key(index)
|
435
|
+
value = sanitize_data_for_json(JS.global[:localStorage].getItem(key))
|
436
|
+
# storage_items[key] = value
|
437
|
+
# puts key
|
438
|
+
# puts value
|
439
|
+
# A.message({ action: :localstorage, data: {key => value} }) do |_db_state|
|
440
|
+
# # puts _db_state
|
441
|
+
# end
|
442
|
+
end
|
443
|
+
# A.message({ action: :end_localstorage, data: '' }) do |_db_state|
|
444
|
+
# puts _db_state
|
445
|
+
# end
|
446
|
+
end
|
447
|
+
|
448
|
+
def to_sym
|
449
|
+
puts "sanitizer temp patch when an atome is passed instead of an id"
|
450
|
+
@id
|
451
|
+
end
|
401
452
|
end
|
402
453
|
|
403
454
|
|
@@ -11,17 +11,18 @@ class Universe
|
|
11
11
|
@sanitizers = {}
|
12
12
|
@specificities = {}
|
13
13
|
@messages = {}
|
14
|
-
|
14
|
+
@increment=0
|
15
15
|
@categories = %w[atome communication effect event geometry hierarchy identity material
|
16
16
|
property security spatial time utility ]
|
17
17
|
@history = {}
|
18
18
|
@users = {}
|
19
19
|
@help = {}
|
20
20
|
@example = {}
|
21
|
-
|
21
|
+
@allow_history= false
|
22
|
+
# @historicize=false
|
22
23
|
class << self
|
23
24
|
attr_reader :atomes,:atomes_ids, :renderer_list, :atome_list, :particle_list, :classes, :counter, :atomes_specificities
|
24
|
-
|
25
|
+
attr_accessor :allow_history
|
25
26
|
def messages
|
26
27
|
@messages
|
27
28
|
end
|
@@ -236,7 +237,13 @@ class Universe
|
|
236
237
|
end
|
237
238
|
|
238
239
|
def historicize(id, operation, element, params)
|
239
|
-
@
|
240
|
+
if @allow_history
|
241
|
+
operation_timing= Time.now.strftime("%Y%m%d%H%M%S%3N")+@increment.to_s
|
242
|
+
@increment+=1
|
243
|
+
@increment=@increment%100
|
244
|
+
JS.global[:localStorage].setItem(operation_timing,"{ #{id} => { #{operation} => { #{element} => #{params} } }, sync: false }")
|
245
|
+
@history[@history.length] = { operation_timing => { id => { operation => { element => params } }, sync: false, time: Time.now } }
|
246
|
+
end
|
240
247
|
end
|
241
248
|
|
242
249
|
def story(filter)
|
data/lib/atome/version.rb
CHANGED
@@ -21,7 +21,7 @@ new({ renderer: :html, method: :smooth, type: :string }) do |value, _user_proc|
|
|
21
21
|
end
|
22
22
|
|
23
23
|
new({ renderer: :html, method: :blur, type: :integer }) do |params, _user_proc|
|
24
|
-
if params[:affect] == :back
|
24
|
+
if params[:affect] == :back || params[:affect] == :back
|
25
25
|
html.backdropFilter(:blur, "#{params[:value]}px")
|
26
26
|
else
|
27
27
|
html.filter(:blur, "#{params[:value]}px")
|
@@ -93,7 +93,7 @@ new({ renderer: :html, method: :apply, type: :string, specific: :text }) do |par
|
|
93
93
|
alpha = shadow_found.alpha
|
94
94
|
left = shadow_found.left
|
95
95
|
top = shadow_found.top
|
96
|
-
blur = shadow_found.blur
|
96
|
+
blur = shadow_found.blur[:value] # new correct behavior all atome's value should now be get using :value,here to resolve conflict with blur and back blur
|
97
97
|
inset = :inset if shadow_found.invert
|
98
98
|
if shadow_found.option == :natural
|
99
99
|
shadows_to_apply[:filter] << "drop-shadow(#{left}px #{top}px #{blur}px rgba(#{red}, #{green}, #{blue}, #{alpha}))"
|
data/lib/renderers/html/html.rb
CHANGED
@@ -1450,21 +1450,24 @@ class HTML
|
|
1450
1450
|
when :all
|
1451
1451
|
case v
|
1452
1452
|
when :paint
|
1453
|
-
style(:background, '
|
1453
|
+
style(:background, 'none')
|
1454
1454
|
# style('box-shadow', 'none')
|
1455
1455
|
# style('text-shadow', 'none')
|
1456
1456
|
when :color
|
1457
1457
|
when :shadow
|
1458
1458
|
style('box-shadow', 'none')
|
1459
1459
|
style('text-shadow', 'none')
|
1460
|
+
style("filter", 'none')
|
1460
1461
|
end
|
1461
1462
|
end
|
1462
1463
|
end
|
1463
1464
|
else
|
1464
1465
|
@original_atome.apply.delete(params)
|
1465
|
-
style(:background, '
|
1466
|
+
style(:background, 'none')
|
1466
1467
|
style('box-shadow', 'none')
|
1467
1468
|
style('text-shadow', 'none')
|
1469
|
+
style("boxShadow", 'none')
|
1470
|
+
style("filter", 'none')
|
1468
1471
|
@original_atome.apply(@original_atome.apply)
|
1469
1472
|
end
|
1470
1473
|
# alert "remove : #{params} , type: #{@original_atome.type}"
|
@@ -1,6 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
b=circle({left: 333})
|
4
|
+
b.blur(6)
|
3
5
|
|
6
|
+
image(:red_planet)
|
7
|
+
b2=box({color: {alpha: 0.1, red: 1, green: 0, blue: 0.2}, left: 99, top: 99, width: 99, height: 99})
|
8
|
+
b2.drag(true)
|
9
|
+
b2.border({ thickness: 0.3, color: :gray, pattern: :solid })
|
10
|
+
b2.smooth(12)
|
11
|
+
b2.shadow({
|
12
|
+
invert: true,
|
13
|
+
id: :s4,
|
14
|
+
left: 2, top: 2, blur: 9,
|
15
|
+
# option: :natural,
|
16
|
+
red: 0, green: 0, blue: 0, alpha: 0.3
|
17
|
+
})
|
4
18
|
|
5
|
-
|
6
|
-
|
19
|
+
b2.shadow({
|
20
|
+
# invert: true,
|
21
|
+
id: :s5,
|
22
|
+
left: 2, top: 2, blur: 9,
|
23
|
+
# option: :natural,
|
24
|
+
red: 0, green: 0, blue: 0, alpha: 0.6
|
25
|
+
})
|
26
|
+
b2.blur({affect: :back, value: 15})
|
@@ -121,18 +121,22 @@ module Molecule
|
|
121
121
|
|
122
122
|
end
|
123
123
|
end
|
124
|
-
|
124
|
+
c= circle({left: 399})
|
125
125
|
test_cell.touch(true) do
|
126
|
-
alert :ok
|
127
126
|
test_cell.alternate([{ width: 33, color: :red }, { width: 66, color: :orange }])
|
128
127
|
# puts "=> #{Universe.atomes.length}"
|
129
128
|
# puts test_cell.color
|
130
129
|
# if test_cell.data==true
|
131
130
|
# test_cell.data(false)
|
132
|
-
col_1 = color(:black)
|
133
|
-
|
134
|
-
|
135
|
-
test_cell.color(:
|
131
|
+
# col_1 = color(:black)
|
132
|
+
|
133
|
+
@current_matrix.paint({ gradient: [col_1.id, col_1.id], direction: :top })
|
134
|
+
other_col=test_cell.color(:white)
|
135
|
+
c.paint({ gradient: [col_1, col_2], direction: :left })
|
136
|
+
test_cell.paint({ gradient: [col_1, other_col], direction: :left })
|
137
|
+
# test_cell
|
138
|
+
# grab(:red_col).delete(true)
|
139
|
+
# test_cell.color(:green)
|
136
140
|
# else
|
137
141
|
# test_cell.data(true)
|
138
142
|
# test_cell.color(:blue)
|
@@ -34,14 +34,17 @@ wait 2 do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
|
37
|
-
the_text = text({ data: '
|
38
|
-
|
37
|
+
the_text = text({ data: 'text with shadow!', center: true, top: 222, width: 777, component: { size: 66 } })
|
39
38
|
|
40
39
|
|
41
40
|
the_text.shadow({
|
42
|
-
id: :
|
43
|
-
left:
|
41
|
+
id: :my_shadow,
|
42
|
+
left: 6, top: 6, blur: 6,
|
44
43
|
option: :natural,
|
45
|
-
red: 0, green:
|
44
|
+
red: 0, green: 0, blue: 0, alpha: 1
|
46
45
|
})
|
47
46
|
|
47
|
+
the_text.left(255)
|
48
|
+
the_text.top(66)
|
49
|
+
the_text.color(:red)
|
50
|
+
|
@@ -78,6 +78,13 @@ class EDen
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
+
def localstorage(data, message_id)
|
82
|
+
# return test
|
83
|
+
# ws.send(return_message.to_json)
|
84
|
+
return { return: 'localstorage content received', authorized: true, message_id: message_id }
|
85
|
+
|
86
|
+
end
|
87
|
+
|
81
88
|
def init_db(_data, message_id)
|
82
89
|
unless File.exist?("eden.sqlite3")
|
83
90
|
Sequel.connect("sqlite://eden.sqlite3")
|
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.6.4.
|
4
|
+
version: 0.5.6.4.8
|
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-
|
11
|
+
date: 2024-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: artoo
|