glimmer-dsl-opal 0.6.1 → 0.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/CHANGELOG.md +19 -0
- data/README.md +293 -7
- data/VERSION +1 -1
- data/lib/glimmer-dsl-opal.rb +1 -2
- data/lib/glimmer-dsl-opal/ext/date.rb +11 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_table.rb +283 -0
- data/lib/glimmer/data_binding/table_items_binding.rb +29 -18
- data/lib/glimmer/dsl/opal/block_property_expression.rb +41 -0
- data/lib/glimmer/dsl/opal/dsl.rb +2 -0
- data/lib/glimmer/swt/display_proxy.rb +4 -0
- data/lib/glimmer/swt/message_box_proxy.rb +2 -1
- data/lib/glimmer/swt/property_owner.rb +2 -2
- data/lib/glimmer/swt/shell_proxy.rb +8 -0
- data/lib/glimmer/swt/table_column_proxy.rb +62 -12
- data/lib/glimmer/swt/table_item_proxy.rb +8 -1
- data/lib/glimmer/swt/table_proxy.rb +213 -4
- data/lib/glimmer/swt/text_proxy.rb +48 -0
- data/lib/glimmer/swt/widget_proxy.rb +12 -1
- data/lib/net/http.rb +1 -5
- data/lib/uri.rb +3 -3
- metadata +10 -9
- data/lib/glimmer/data_binding/ext/observable_model.rb +0 -40
@@ -20,8 +20,56 @@ module Glimmer
|
|
20
20
|
event: 'keyup',
|
21
21
|
event_handler: -> (event_listener) {
|
22
22
|
-> (event) {
|
23
|
+
# TODO consider unifying this event handler with on_key_pressed by relying on its result instead of hooking another keyup event
|
24
|
+
if @last_key_pressed_event.nil? || @last_key_pressed_event.doit
|
25
|
+
@text = event.target.value
|
26
|
+
event_listener.call(event)
|
27
|
+
else
|
28
|
+
# TODO Fix doit false, it's not stopping input
|
29
|
+
event.prevent
|
30
|
+
event.prevent_default
|
31
|
+
event.stop_propagation
|
32
|
+
event.stop_immediate_propagation
|
33
|
+
end
|
34
|
+
}
|
35
|
+
}
|
36
|
+
},
|
37
|
+
'on_key_pressed' => {
|
38
|
+
event: 'keydown',
|
39
|
+
event_handler: -> (event_listener) {
|
40
|
+
-> (event) {
|
41
|
+
@last_key_pressed_event = event
|
23
42
|
@text = event.target.value
|
43
|
+
# TODO generalize this solution to all widgets that support key presses
|
44
|
+
# TODO support event.location once DOM3 is supported by opal-jquery
|
45
|
+
event.define_singleton_method(:keyCode) {event.which}
|
46
|
+
event.define_singleton_method(:key_code, &event.method(:keyCode))
|
47
|
+
event.define_singleton_method(:character) {event.which.chr}
|
48
|
+
event.define_singleton_method(:stateMask) do
|
49
|
+
state_mask = 0
|
50
|
+
state_mask |= SWTProxy[:alt] if event.alt_key
|
51
|
+
state_mask |= SWTProxy[:ctrl] if event.ctrl_key
|
52
|
+
state_mask |= SWTProxy[:shift] if event.shift_key
|
53
|
+
state_mask |= SWTProxy[:command] if event.meta_key
|
54
|
+
state_mask
|
55
|
+
end
|
56
|
+
event.define_singleton_method(:state_mask, &event.method(:stateMask))
|
57
|
+
doit = true
|
58
|
+
event.define_singleton_method(:doit=) do |value|
|
59
|
+
doit = value
|
60
|
+
end
|
61
|
+
event.define_singleton_method(:doit) { doit }
|
24
62
|
event_listener.call(event)
|
63
|
+
|
64
|
+
# TODO Fix doit false, it's not stopping input
|
65
|
+
unless doit
|
66
|
+
event.prevent
|
67
|
+
event.prevent_default
|
68
|
+
event.stop_propagation
|
69
|
+
event.stop_immediate_propagation
|
70
|
+
end
|
71
|
+
|
72
|
+
doit
|
25
73
|
}
|
26
74
|
}
|
27
75
|
}
|
@@ -488,6 +488,17 @@ module Glimmer
|
|
488
488
|
}
|
489
489
|
end
|
490
490
|
},
|
491
|
+
TableProxy => {
|
492
|
+
:selection => lambda do |observer|
|
493
|
+
on_widget_selected { |selection_event|
|
494
|
+
if has_style?(:multi)
|
495
|
+
observer.call(selection.map(&:get_data))
|
496
|
+
else
|
497
|
+
observer.call(selection.first&.get_data)
|
498
|
+
end
|
499
|
+
}
|
500
|
+
end,
|
501
|
+
},
|
491
502
|
# Java::OrgEclipseSwtWidgets::MenuItem => {
|
492
503
|
# :selection => lambda do |observer|
|
493
504
|
# on_widget_selected { |selection_event|
|
@@ -509,12 +520,12 @@ module Glimmer
|
|
509
520
|
end
|
510
521
|
end
|
511
522
|
|
523
|
+
require 'glimmer/swt/display_proxy'
|
512
524
|
require 'glimmer/swt/browser_proxy'
|
513
525
|
require 'glimmer/swt/button_proxy'
|
514
526
|
require 'glimmer/swt/combo_proxy'
|
515
527
|
require 'glimmer/swt/checkbox_proxy'
|
516
528
|
require 'glimmer/swt/composite_proxy'
|
517
|
-
require 'glimmer/swt/display_proxy'
|
518
529
|
require 'glimmer/swt/date_time_proxy'
|
519
530
|
require 'glimmer/swt/group_proxy'
|
520
531
|
require 'glimmer/swt/label_proxy'
|
data/lib/net/http.rb
CHANGED
data/lib/uri.rb
CHANGED
@@ -6,7 +6,7 @@ module URI
|
|
6
6
|
|
7
7
|
def initialize(url)
|
8
8
|
@url = url
|
9
|
-
uri_match = url.match(REGEX)
|
9
|
+
uri_match = url.match(REGEX).to_a
|
10
10
|
@scheme = uri_match[1]
|
11
11
|
@host = uri_match[2]
|
12
12
|
@path = uri_match[3]
|
@@ -16,7 +16,7 @@ module URI
|
|
16
16
|
|
17
17
|
def to_s
|
18
18
|
url
|
19
|
-
end
|
19
|
+
end
|
20
20
|
end
|
21
21
|
|
22
22
|
TBLENCWWWCOMP_ = {"\u0000"=>"%00", "\u0001"=>"%01", "\u0002"=>"%02", "\u0003"=>"%03", "\u0004"=>"%04", "\u0005"=>"%05", "\u0006"=>"%06", "\a"=>"%07", "\b"=>"%08", "\t"=>"%09", "\n"=>"%0A", "\v"=>"%0B", "\f"=>"%0C", "\r"=>"%0D", "\u000E"=>"%0E", "\u000F"=>"%0F", "\u0010"=>"%10", "\u0011"=>"%11", "\u0012"=>"%12", "\u0013"=>"%13", "\u0014"=>"%14", "\u0015"=>"%15", "\u0016"=>"%16", "\u0017"=>"%17", "\u0018"=>"%18", "\u0019"=>"%19", "\u001A"=>"%1A", "\e"=>"%1B", "\u001C"=>"%1C", "\u001D"=>"%1D", "\u001E"=>"%1E", "\u001F"=>"%1F", " "=>"+", "!"=>"%21", "\""=>"%22", "#"=>"%23", "$"=>"%24", "%"=>"%25", "&"=>"%26", "'"=>"%27", "("=>"%28", ")"=>"%29", "*"=>"%2A", "+"=>"%2B", ","=>"%2C", "-"=>"%2D", "."=>"%2E", "/"=>"%2F", "0"=>"%30", "1"=>"%31", "2"=>"%32", "3"=>"%33", "4"=>"%34", "5"=>"%35", "6"=>"%36", "7"=>"%37", "8"=>"%38", "9"=>"%39", ":"=>"%3A", ";"=>"%3B", "<"=>"%3C", "="=>"%3D", ">"=>"%3E", "?"=>"%3F", "@"=>"%40", "A"=>"%41", "B"=>"%42", "C"=>"%43", "D"=>"%44", "E"=>"%45", "F"=>"%46", "G"=>"%47", "H"=>"%48", "I"=>"%49", "J"=>"%4A", "K"=>"%4B", "L"=>"%4C", "M"=>"%4D", "N"=>"%4E", "O"=>"%4F", "P"=>"%50", "Q"=>"%51", "R"=>"%52", "S"=>"%53", "T"=>"%54", "U"=>"%55", "V"=>"%56", "W"=>"%57", "X"=>"%58", "Y"=>"%59", "Z"=>"%5A", "["=>"%5B", "\\"=>"%5C", "]"=>"%5D", "^"=>"%5E", "_"=>"%5F", "`"=>"%60", "a"=>"%61", "b"=>"%62", "c"=>"%63", "d"=>"%64", "e"=>"%65", "f"=>"%66", "g"=>"%67", "h"=>"%68", "i"=>"%69", "j"=>"%6A", "k"=>"%6B", "l"=>"%6C", "m"=>"%6D", "n"=>"%6E", "o"=>"%6F", "p"=>"%70", "q"=>"%71", "r"=>"%72", "s"=>"%73", "t"=>"%74", "u"=>"%75", "v"=>"%76", "w"=>"%77", "x"=>"%78", "y"=>"%79", "z"=>"%7A", "{"=>"%7B", "|"=>"%7C", "}"=>"%7D", "~"=>"%7E", "\u007F"=>"%7F", "\u0080"=>"%80", "\u0081"=>"%81", "\u0082"=>"%82", "\u0083"=>"%83", "\u0084"=>"%84", "\u0085"=>"%85", "\u0086"=>"%86", "\u0087"=>"%87", "\u0088"=>"%88", "\u0089"=>"%89", "\u008A"=>"%8A", "\u008B"=>"%8B", "\u008C"=>"%8C", "\u008D"=>"%8D", "\u008E"=>"%8E", "\u008F"=>"%8F", "\u0090"=>"%90", "\u0091"=>"%91", "\u0092"=>"%92", "\u0093"=>"%93", "\u0094"=>"%94", "\u0095"=>"%95", "\u0096"=>"%96", "\u0097"=>"%97", "\u0098"=>"%98", "\u0099"=>"%99", "\u009A"=>"%9A", "\u009B"=>"%9B", "\u009C"=>"%9C", "\u009D"=>"%9D", "\u009E"=>"%9E", "\u009F"=>"%9F", "\u00A0"=>"%A0", "\u00A1"=>"%A1", "\u00A2"=>"%A2", "\u00A3"=>"%A3", "\u00A4"=>"%A4", "\u00A5"=>"%A5", "\u00A6"=>"%A6", "\u00A7"=>"%A7", "\u00A8"=>"%A8", "\u00A9"=>"%A9", "\u00AA"=>"%AA", "\u00AB"=>"%AB", "\u00AC"=>"%AC", "\u00AD"=>"%AD", "\u00AE"=>"%AE", "\u00AF"=>"%AF", "\u00B0"=>"%B0", "\u00B1"=>"%B1", "\u00B2"=>"%B2", "\u00B3"=>"%B3", "\u00B4"=>"%B4", "\u00B5"=>"%B5", "\u00B6"=>"%B6", "\u00B7"=>"%B7", "\u00B8"=>"%B8", "\u00B9"=>"%B9", "\u00BA"=>"%BA", "\u00BB"=>"%BB", "\u00BC"=>"%BC", "\u00BD"=>"%BD", "\u00BE"=>"%BE", "\u00BF"=>"%BF", "\u00C0"=>"%C0", "\u00C1"=>"%C1", "\u00C2"=>"%C2", "\u00C3"=>"%C3", "\u00C4"=>"%C4", "\u00C5"=>"%C5", "\u00C6"=>"%C6", "\u00C7"=>"%C7", "\u00C8"=>"%C8", "\u00C9"=>"%C9", "\u00CA"=>"%CA", "\u00CB"=>"%CB", "\u00CC"=>"%CC", "\u00CD"=>"%CD", "\u00CE"=>"%CE", "\u00CF"=>"%CF", "\u00D0"=>"%D0", "\u00D1"=>"%D1", "\u00D2"=>"%D2", "\u00D3"=>"%D3", "\u00D4"=>"%D4", "\u00D5"=>"%D5", "\u00D6"=>"%D6", "\u00D7"=>"%D7", "\u00D8"=>"%D8", "\u00D9"=>"%D9", "\u00DA"=>"%DA", "\u00DB"=>"%DB", "\u00DC"=>"%DC", "\u00DD"=>"%DD", "\u00DE"=>"%DE", "\u00DF"=>"%DF", "\u00E0"=>"%E0", "\u00E1"=>"%E1", "\u00E2"=>"%E2", "\u00E3"=>"%E3", "\u00E4"=>"%E4", "\u00E5"=>"%E5", "\u00E6"=>"%E6", "\u00E7"=>"%E7", "\u00E8"=>"%E8", "\u00E9"=>"%E9", "\u00EA"=>"%EA", "\u00EB"=>"%EB", "\u00EC"=>"%EC", "\u00ED"=>"%ED", "\u00EE"=>"%EE", "\u00EF"=>"%EF", "\u00F0"=>"%F0", "\u00F1"=>"%F1", "\u00F2"=>"%F2", "\u00F3"=>"%F3", "\u00F4"=>"%F4", "\u00F5"=>"%F5", "\u00F6"=>"%F6", "\u00F7"=>"%F7", "\u00F8"=>"%F8", "\u00F9"=>"%F9", "\u00FA"=>"%FA", "\u00FB"=>"%FB", "\u00FC"=>"%FC", "\u00FD"=>"%FD", "\u00FE"=>"%FE", "\u00FF"=>"%FF"}
|
@@ -54,7 +54,7 @@ module URI
|
|
54
54
|
def self.decode_www_form_component(str, enc=Encoding::UTF_8)
|
55
55
|
raise ArgumentError, "invalid %-encoding (#{str})" if /%(?![0-9a-fA-F][0-9a-fA-F])/ =~ str
|
56
56
|
str.b.gsub(/\+|%[0-9a-fA-F][0-9a-fA-F]/, TBLDECWWWCOMP_).force_encoding(enc)
|
57
|
-
end
|
57
|
+
end
|
58
58
|
end
|
59
59
|
|
60
60
|
module Kernel
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-dsl-opal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AndyMaleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.0.
|
19
|
+
version: 1.0.5
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.0.
|
26
|
+
version: 1.0.5
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: glimmer-dsl-xml
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,16 +70,16 @@ dependencies:
|
|
70
70
|
name: puts_debuggerer
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -248,6 +248,7 @@ files:
|
|
248
248
|
- lib/glimmer-dsl-opal/samples/hello/hello_radio.rb
|
249
249
|
- lib/glimmer-dsl-opal/samples/hello/hello_radio_group.rb
|
250
250
|
- lib/glimmer-dsl-opal/samples/hello/hello_tab.rb
|
251
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_table.rb
|
251
252
|
- lib/glimmer-dsl-opal/samples/hello/hello_world.rb
|
252
253
|
- lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/GPL-LICENSE.txt
|
253
254
|
- lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/MIT-LICENSE.txt
|
@@ -269,12 +270,12 @@ files:
|
|
269
270
|
- lib/glimmer-dsl-opal/vendor/jquery.js
|
270
271
|
- lib/glimmer-dsl-swt.rb
|
271
272
|
- lib/glimmer/data_binding/element_binding.rb
|
272
|
-
- lib/glimmer/data_binding/ext/observable_model.rb
|
273
273
|
- lib/glimmer/data_binding/list_selection_binding.rb
|
274
274
|
- lib/glimmer/data_binding/observable_element.rb
|
275
275
|
- lib/glimmer/data_binding/table_items_binding.rb
|
276
276
|
- lib/glimmer/dsl/opal/async_exec_expression.rb
|
277
277
|
- lib/glimmer/dsl/opal/bind_expression.rb
|
278
|
+
- lib/glimmer/dsl/opal/block_property_expression.rb
|
278
279
|
- lib/glimmer/dsl/opal/checkbox_group_selection_data_binding_expression.rb
|
279
280
|
- lib/glimmer/dsl/opal/color_expression.rb
|
280
281
|
- lib/glimmer/dsl/opal/column_properties_expression.rb
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'glimmer/data_binding/observable'
|
2
|
-
require 'glimmer/data_binding/observer'
|
3
|
-
require 'glimmer/swt/display_proxy'
|
4
|
-
|
5
|
-
# This ensures all data-binding events happen async and block on modal display
|
6
|
-
|
7
|
-
module Glimmer
|
8
|
-
module DataBinding
|
9
|
-
# TODO prefix utility methods with double-underscore
|
10
|
-
module ObservableModel
|
11
|
-
include Observable
|
12
|
-
# include Glimmer
|
13
|
-
|
14
|
-
def add_property_writer_observers(property_name)
|
15
|
-
property_writer_name = "#{property_name}="
|
16
|
-
method(property_writer_name)
|
17
|
-
ensure_array_object_observer(property_name, send(property_name))
|
18
|
-
begin
|
19
|
-
method("__original_#{property_writer_name}")
|
20
|
-
rescue
|
21
|
-
old_method = self.class.instance_method(property_writer_name)
|
22
|
-
define_singleton_method("__original_#{property_writer_name}", old_method)
|
23
|
-
define_singleton_method(property_writer_name) do |value|
|
24
|
-
old_value = self.send(property_name)
|
25
|
-
unregister_dependent_observers(property_name, old_value)
|
26
|
-
self.send("__original_#{property_writer_name}", value)
|
27
|
-
# Glimmer::Opal::DisplayProxy.instance.async_exec do
|
28
|
-
notify_observers(property_name)
|
29
|
-
ensure_array_object_observer(property_name, value, old_value)
|
30
|
-
# end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
rescue => e
|
34
|
-
# ignore writing if no property writer exists
|
35
|
-
Glimmer::Config.logger&.debug "No need to observe property writer: #{property_writer_name}\n#{e.message}\n#{e.backtrace.join("\n")}"
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|