glimmer-dsl-opal 0.0.9 → 0.1.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 +6 -0
- data/README.md +57 -28
- data/VERSION +1 -1
- data/lib/glimmer-dsl-opal.rb +26 -11
- data/lib/glimmer/data_binding/element_binding.rb +1 -1
- data/lib/glimmer/data_binding/ext/observable_model.rb +4 -4
- data/lib/glimmer/data_binding/list_selection_binding.rb +1 -1
- data/lib/glimmer/data_binding/table_items_binding.rb +3 -3
- data/lib/glimmer/dsl/opal/column_properties_expression.rb +2 -2
- data/lib/glimmer/dsl/opal/combo_selection_data_binding_expression.rb +2 -2
- data/lib/glimmer/dsl/opal/dsl.rb +4 -16
- data/lib/glimmer/dsl/opal/layout_data_expression.rb +2 -2
- data/lib/glimmer/dsl/opal/{text_expression.rb → layout_expression.rb} +5 -5
- data/lib/glimmer/dsl/opal/list_selection_data_binding_expression.rb +2 -3
- data/lib/glimmer/dsl/opal/message_box_expression.rb +2 -2
- data/lib/glimmer/dsl/opal/shell_expression.rb +2 -2
- data/lib/glimmer/dsl/opal/table_expression.rb +2 -2
- data/lib/glimmer/dsl/opal/table_items_data_binding_expression.rb +2 -2
- data/lib/glimmer/dsl/opal/widget_expression.rb +23 -0
- data/lib/glimmer/opal/display_proxy.rb +3 -3
- data/lib/glimmer/opal/element_proxy.rb +11 -3
- data/lib/glimmer/swt/browser_proxy.rb +27 -0
- data/lib/glimmer/swt/button_proxy.rb +40 -0
- data/lib/glimmer/{opal/select_proxy.rb → swt/combo_proxy.rb} +14 -10
- data/lib/glimmer/{opal/div_proxy.rb → swt/composite_proxy.rb} +8 -6
- data/lib/glimmer/{opal → swt}/event_listener_proxy.rb +1 -1
- data/lib/glimmer/{opal → swt}/grid_layout_proxy.rb +5 -18
- data/lib/glimmer/swt/label_proxy.rb +30 -0
- data/lib/glimmer/{opal → swt}/layout_data_proxy.rb +3 -3
- data/lib/glimmer/swt/layout_proxy.rb +60 -0
- data/lib/glimmer/{opal → swt}/list_proxy.rb +16 -13
- data/lib/glimmer/{opal/modal.rb → swt/message_box_proxy.rb} +61 -9
- data/lib/glimmer/{opal → swt}/point.rb +1 -1
- data/lib/glimmer/{opal → swt}/property_owner.rb +1 -1
- data/lib/glimmer/swt/shell_proxy.rb +235 -0
- data/lib/glimmer/{opal/tab_folder.rb → swt/tab_folder_proxy.rb} +13 -14
- data/lib/glimmer/{opal/tab_item.rb → swt/tab_item_proxy.rb} +37 -34
- data/lib/glimmer/{opal/table_column.rb → swt/table_column_proxy.rb} +13 -7
- data/lib/glimmer/{opal/table_item.rb → swt/table_item_proxy.rb} +59 -48
- data/lib/glimmer/swt/table_proxy.rb +177 -0
- data/lib/glimmer/swt/text_proxy.rb +46 -0
- data/lib/glimmer/swt/widget_proxy.rb +389 -0
- data/lib/jquery.js +2 -0
- data/lib/samples/elaborate/contact_manager.rb +1 -1
- data/lib/samples/hello/hello_computed.rb +19 -19
- metadata +79 -55
- data/lib/glimmer/dsl/opal/browser_expression.rb +0 -17
- data/lib/glimmer/dsl/opal/button_expression.rb +0 -18
- data/lib/glimmer/dsl/opal/combo_expression.rb +0 -17
- data/lib/glimmer/dsl/opal/composite_expression.rb +0 -17
- data/lib/glimmer/dsl/opal/grid_layout_expression.rb +0 -17
- data/lib/glimmer/dsl/opal/label_expression.rb +0 -17
- data/lib/glimmer/dsl/opal/list_expression.rb +0 -17
- data/lib/glimmer/dsl/opal/tab_folder_expression.rb +0 -17
- data/lib/glimmer/dsl/opal/tab_item_expression.rb +0 -17
- data/lib/glimmer/opal/document_proxy.rb +0 -187
- data/lib/glimmer/opal/iframe_proxy.rb +0 -23
- data/lib/glimmer/opal/input_proxy.rb +0 -45
- data/lib/glimmer/opal/label_proxy.rb +0 -25
- data/lib/glimmer/opal/table_proxy.rb +0 -149
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'glimmer/dsl/static_expression'
|
2
2
|
require 'glimmer/dsl/top_level_expression'
|
3
3
|
require 'glimmer/dsl/parent_expression'
|
4
|
-
require 'glimmer/
|
4
|
+
require 'glimmer/swt/message_box_proxy'
|
5
5
|
|
6
6
|
module Glimmer
|
7
7
|
module DSL
|
@@ -12,7 +12,7 @@ module Glimmer
|
|
12
12
|
|
13
13
|
def interpret(parent, keyword, *args, &block)
|
14
14
|
parent = args.delete_at(0)
|
15
|
-
Glimmer::
|
15
|
+
Glimmer::SWT::MessageBoxProxy.new(parent, args)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'glimmer/dsl/static_expression'
|
2
2
|
require 'glimmer/dsl/top_level_expression'
|
3
3
|
require 'glimmer/dsl/parent_expression'
|
4
|
-
require 'glimmer/
|
4
|
+
require 'glimmer/swt/shell_proxy'
|
5
5
|
|
6
6
|
module Glimmer
|
7
7
|
module DSL
|
@@ -11,7 +11,7 @@ module Glimmer
|
|
11
11
|
include ParentExpression
|
12
12
|
|
13
13
|
def interpret(parent, keyword, *args, &block)
|
14
|
-
Glimmer::
|
14
|
+
Glimmer::SWT::ShellProxy.new(*args)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'glimmer/dsl/static_expression'
|
2
2
|
require 'glimmer/dsl/parent_expression'
|
3
|
-
require 'glimmer/
|
3
|
+
require 'glimmer/swt/table_proxy'
|
4
4
|
|
5
5
|
module Glimmer
|
6
6
|
module DSL
|
@@ -9,7 +9,7 @@ module Glimmer
|
|
9
9
|
include ParentExpression
|
10
10
|
|
11
11
|
def interpret(parent, keyword, *args, &block)
|
12
|
-
Glimmer::
|
12
|
+
Glimmer::SWT::TableProxy.new(parent, args)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'glimmer/dsl/expression'
|
2
2
|
require 'glimmer/data_binding/model_binding'
|
3
3
|
require 'glimmer/data_binding/table_items_binding'
|
4
|
-
require 'glimmer/
|
4
|
+
require 'glimmer/swt/table_proxy'
|
5
5
|
|
6
6
|
module Glimmer
|
7
7
|
module DSL
|
@@ -11,7 +11,7 @@ module Glimmer
|
|
11
11
|
def can_interpret?(parent, keyword, *args, &block)
|
12
12
|
keyword == "items" and
|
13
13
|
block.nil? and
|
14
|
-
parent.is_a?(Glimmer::
|
14
|
+
parent.is_a?(Glimmer::SWT::TableProxy) and
|
15
15
|
args.size == 2 and
|
16
16
|
args[0].is_a?(DataBinding::ModelBinding) and
|
17
17
|
args[0].evaluate_property.is_a?(Array) and
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'glimmer/dsl/expression'
|
2
|
+
require 'glimmer/dsl/parent_expression'
|
3
|
+
require 'glimmer/swt/widget_proxy'
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
module DSL
|
7
|
+
module Opal
|
8
|
+
class WidgetExpression < Expression
|
9
|
+
include ParentExpression
|
10
|
+
EXCLUDED_KEYWORDS = %w[shell display]
|
11
|
+
|
12
|
+
def can_interpret?(parent, keyword, *args, &block)
|
13
|
+
!EXCLUDED_KEYWORDS.include?(keyword) and
|
14
|
+
parent.is_a?(Glimmer::SWT::WidgetProxy)
|
15
|
+
end
|
16
|
+
|
17
|
+
def interpret(parent, keyword, *args, &block)
|
18
|
+
Glimmer::SWT::WidgetProxy.for(keyword, parent, args)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -9,11 +9,11 @@ module Glimmer
|
|
9
9
|
|
10
10
|
def async_exec(&block)
|
11
11
|
executer = lambda do
|
12
|
-
if
|
12
|
+
if Document.find('.modal').to_a.empty?
|
13
|
+
block.call
|
14
|
+
else
|
13
15
|
sleep(0.05)
|
14
16
|
Async::Task.new(&executer)
|
15
|
-
else
|
16
|
-
block.call
|
17
17
|
end
|
18
18
|
end
|
19
19
|
Async::Task.new(&executer)
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require 'glimmer/
|
1
|
+
require 'glimmer/swt/property_owner'
|
2
2
|
|
3
3
|
module Glimmer
|
4
4
|
module Opal
|
5
5
|
class ElementProxy
|
6
6
|
include Glimmer
|
7
|
-
include PropertyOwner
|
7
|
+
include Glimmer::SWT::PropertyOwner
|
8
8
|
attr_reader :parent, :args, :css_classes, :css, :children, :enabled
|
9
9
|
|
10
10
|
class << self
|
@@ -17,7 +17,11 @@ module Glimmer
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def max_id_numbers
|
20
|
-
@max_id_numbers ||=
|
20
|
+
@max_id_numbers ||= reset_max_id_numbers!
|
21
|
+
end
|
22
|
+
|
23
|
+
def reset_max_id_numbers!
|
24
|
+
@max_id_numbers = {}
|
21
25
|
end
|
22
26
|
end
|
23
27
|
|
@@ -30,6 +34,10 @@ module Glimmer
|
|
30
34
|
@enabled = true
|
31
35
|
@parent.add_child(self)
|
32
36
|
end
|
37
|
+
|
38
|
+
def dispose
|
39
|
+
dom.remove
|
40
|
+
end
|
33
41
|
|
34
42
|
def add_child(child)
|
35
43
|
# return if @children.include?(child) # TODO consider adding an option to enable this if needed to prevent dom repetition
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'glimmer/swt/widget_proxy'
|
2
|
+
|
3
|
+
module Glimmer
|
4
|
+
module SWT
|
5
|
+
class BrowserProxy < WidgetProxy
|
6
|
+
attr_reader :url
|
7
|
+
|
8
|
+
def url=(value)
|
9
|
+
@url = value
|
10
|
+
redraw
|
11
|
+
end
|
12
|
+
|
13
|
+
def element
|
14
|
+
'iframe'
|
15
|
+
end
|
16
|
+
|
17
|
+
def dom
|
18
|
+
iframe_id = id
|
19
|
+
iframe_url = url
|
20
|
+
@dom ||= html {
|
21
|
+
iframe(id: iframe_id, class: name, src: iframe_url, frameBorder: 0) {
|
22
|
+
}
|
23
|
+
}.to_s
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'glimmer/swt/widget_proxy'
|
2
|
+
|
3
|
+
module Glimmer
|
4
|
+
module SWT
|
5
|
+
class ButtonProxy < WidgetProxy
|
6
|
+
attr_reader :text
|
7
|
+
|
8
|
+
def text=(value)
|
9
|
+
@text = value
|
10
|
+
redraw
|
11
|
+
end
|
12
|
+
|
13
|
+
def element
|
14
|
+
'button'
|
15
|
+
end
|
16
|
+
|
17
|
+
def observation_request_to_event_mapping
|
18
|
+
{
|
19
|
+
'on_widget_selected' => {
|
20
|
+
event: 'click'
|
21
|
+
},
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def dom
|
26
|
+
input_text = @text
|
27
|
+
input_id = id
|
28
|
+
input_style = css
|
29
|
+
input_args = {}
|
30
|
+
input_disabled = @enabled ? {} : {'disabled': 'disabled'}
|
31
|
+
input_args = input_args.merge(type: 'password') if has_style?(:password)
|
32
|
+
@dom ||= html {
|
33
|
+
button(input_args.merge(id: input_id, class: name, style: input_style, style: 'min-width: 27px;').merge(input_disabled)) {
|
34
|
+
input_text.to_s == '' ? ' ' : input_text
|
35
|
+
}
|
36
|
+
}.to_s
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -1,10 +1,9 @@
|
|
1
1
|
require 'glimmer/data_binding/observable_element'
|
2
|
-
require 'glimmer/
|
3
|
-
require 'glimmer/opal/element_proxy'
|
2
|
+
require 'glimmer/swt/widget_proxy'
|
4
3
|
|
5
4
|
module Glimmer
|
6
|
-
module
|
7
|
-
class
|
5
|
+
module SWT
|
6
|
+
class ComboProxy < WidgetProxy
|
8
7
|
include Glimmer::DataBinding::ObservableElement
|
9
8
|
attr_reader :text, :items
|
10
9
|
|
@@ -13,9 +12,13 @@ module Glimmer
|
|
13
12
|
@items = []
|
14
13
|
end
|
15
14
|
|
15
|
+
def element
|
16
|
+
'select'
|
17
|
+
end
|
18
|
+
|
16
19
|
def text=(value)
|
17
20
|
@text = value
|
18
|
-
|
21
|
+
Document.find(path).value = value
|
19
22
|
end
|
20
23
|
|
21
24
|
def items=(the_items)
|
@@ -23,12 +26,12 @@ module Glimmer
|
|
23
26
|
redraw
|
24
27
|
end
|
25
28
|
|
26
|
-
def observation_request_to_event_mapping
|
29
|
+
def observation_request_to_event_mapping
|
27
30
|
{
|
28
31
|
'on_widget_selected' => {
|
29
32
|
event: 'change',
|
30
33
|
event_handler: -> (event_listener) {
|
31
|
-
-> (event) {
|
34
|
+
-> (event) {
|
32
35
|
@text = event.target.value
|
33
36
|
event_listener.call(event)
|
34
37
|
}
|
@@ -42,8 +45,9 @@ module Glimmer
|
|
42
45
|
items = @items
|
43
46
|
select_id = id
|
44
47
|
select_style = css
|
45
|
-
|
46
|
-
|
48
|
+
select_class = name
|
49
|
+
@dom ||= html {
|
50
|
+
select(id: select_id, class: select_class, style: select_style) {
|
47
51
|
items.to_a.each do |item|
|
48
52
|
option_hash = {value: item}
|
49
53
|
option_hash[:selected] = 'selected' if select_text == item
|
@@ -52,7 +56,7 @@ module Glimmer
|
|
52
56
|
}
|
53
57
|
end
|
54
58
|
}
|
55
|
-
}
|
59
|
+
}.to_s
|
56
60
|
end
|
57
61
|
end
|
58
62
|
end
|
@@ -1,8 +1,9 @@
|
|
1
|
-
require 'glimmer/
|
1
|
+
require 'glimmer/swt/grid_layout_proxy'
|
2
|
+
require 'glimmer/swt/widget_proxy'
|
2
3
|
|
3
4
|
module Glimmer
|
4
|
-
module
|
5
|
-
class
|
5
|
+
module SWT
|
6
|
+
class CompositeProxy < WidgetProxy
|
6
7
|
attr_reader :layout
|
7
8
|
|
8
9
|
def initialize(parent, args)
|
@@ -20,9 +21,10 @@ module Glimmer
|
|
20
21
|
def dom
|
21
22
|
div_id = id
|
22
23
|
div_style = css
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
div_class = "#{name} grid-layout"
|
25
|
+
@dom ||= html {
|
26
|
+
div(id: div_id, class: div_class, style: div_style)
|
27
|
+
}.to_s
|
26
28
|
end
|
27
29
|
end
|
28
30
|
end
|
@@ -1,15 +1,12 @@
|
|
1
|
-
require 'glimmer/
|
1
|
+
require 'glimmer/swt/layout_proxy'
|
2
2
|
|
3
3
|
module Glimmer
|
4
|
-
module
|
5
|
-
class GridLayoutProxy
|
6
|
-
|
7
|
-
attr_reader :parent, :args, :num_columns, :make_columns_equal_width, :horizontal_spacing, :vertical_spacing
|
4
|
+
module SWT
|
5
|
+
class GridLayoutProxy < LayoutProxy
|
6
|
+
attr_reader :num_columns, :make_columns_equal_width, :horizontal_spacing, :vertical_spacing
|
8
7
|
|
9
8
|
def initialize(parent, args)
|
10
|
-
|
11
|
-
@args = args
|
12
|
-
@parent.add_css_class('grid-layout')
|
9
|
+
super(parent, args)
|
13
10
|
@horizontal_spacing = 10
|
14
11
|
@vertical_spacing = 10
|
15
12
|
@num_columns = @args.first || 1
|
@@ -39,16 +36,6 @@ module Glimmer
|
|
39
36
|
# @parent.add_css_class("vertical-spacing-#{@vertical_spacing}")
|
40
37
|
reapply
|
41
38
|
end
|
42
|
-
|
43
|
-
def reapply
|
44
|
-
@parent.css = <<~CSS
|
45
|
-
display: grid;
|
46
|
-
grid-template-columns: #{'auto ' * @num_columns.to_i};
|
47
|
-
grid-row-gap: #{@vertical_spacing}px;
|
48
|
-
grid-column-gap: #{@horizontal_spacing}px;
|
49
|
-
justify-content: start;
|
50
|
-
CSS
|
51
|
-
end
|
52
39
|
end
|
53
40
|
end
|
54
41
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'glimmer/swt/widget_proxy'
|
2
|
+
|
3
|
+
module Glimmer
|
4
|
+
module SWT
|
5
|
+
class LabelProxy < WidgetProxy
|
6
|
+
attr_reader :text
|
7
|
+
|
8
|
+
def text=(value)
|
9
|
+
@text = value
|
10
|
+
redraw
|
11
|
+
end
|
12
|
+
|
13
|
+
def element
|
14
|
+
'label'
|
15
|
+
end
|
16
|
+
|
17
|
+
def dom
|
18
|
+
label_text = @text
|
19
|
+
label_id = id
|
20
|
+
label_style = css
|
21
|
+
label_class = name
|
22
|
+
@dom ||= html {
|
23
|
+
label(id: label_id, style: label_style, class: label_class) {
|
24
|
+
label_text
|
25
|
+
}
|
26
|
+
}.to_s
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require 'glimmer/
|
1
|
+
require 'glimmer/swt/property_owner'
|
2
2
|
|
3
3
|
module Glimmer
|
4
|
-
module
|
4
|
+
module SWT
|
5
5
|
class LayoutDataProxy
|
6
|
-
include PropertyOwner
|
6
|
+
include Glimmer::SWT::PropertyOwner
|
7
7
|
attr_reader :parent,
|
8
8
|
:args,
|
9
9
|
:horizontal_alignment,
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'glimmer/swt/property_owner'
|
2
|
+
|
3
|
+
module Glimmer
|
4
|
+
module SWT
|
5
|
+
class LayoutProxy
|
6
|
+
include Glimmer::SWT::PropertyOwner
|
7
|
+
|
8
|
+
class << self
|
9
|
+
# Factory Method that translates a Glimmer DSL keyword into a WidgetProxy object
|
10
|
+
def for(keyword, parent, args)
|
11
|
+
the_layout_class = layout_class(keyword) || Glimmer::SWT::GridLayoutProxy
|
12
|
+
the_layout_class.new(parent, args)
|
13
|
+
end
|
14
|
+
|
15
|
+
def layout_class(keyword)
|
16
|
+
class_name_alternative = keyword.camelcase(:upper)
|
17
|
+
class_name_main = "#{class_name_alternative}Proxy"
|
18
|
+
a_layout_class = Glimmer::SWT.const_get(class_name_main.to_sym) rescue Glimmer::SWT.const_get(class_name_alternative.to_sym)
|
19
|
+
a_layout_class if a_layout_class.ancestors.include?(Glimmer::SWT::LayoutProxy)
|
20
|
+
rescue => e
|
21
|
+
puts "Layout #{keyword} was not found!"
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def layout_exists?(keyword)
|
26
|
+
!!layout_class(keyword)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
attr_reader :parent, :args
|
31
|
+
|
32
|
+
def initialize(parent, args)
|
33
|
+
@parent = parent
|
34
|
+
@args = args
|
35
|
+
@parent.add_css_class(css_class)
|
36
|
+
end
|
37
|
+
|
38
|
+
def css_class
|
39
|
+
self.class.name.split('::').last.underscore.sub(/_proxy$/, '').gsub('_', '-')
|
40
|
+
end
|
41
|
+
|
42
|
+
def reapply
|
43
|
+
layout_css = <<~CSS
|
44
|
+
display: grid;
|
45
|
+
grid-template-columns: #{'auto ' * @num_columns.to_i};
|
46
|
+
grid-row-gap: #{@vertical_spacing}px;
|
47
|
+
grid-column-gap: #{@horizontal_spacing}px;
|
48
|
+
justify-content: start;
|
49
|
+
CSS
|
50
|
+
layout_css.split(";").map(&:strip).map {|l| l.split(':').map(&:strip)}.each do |key, value|
|
51
|
+
unless key.nil?
|
52
|
+
@parent.dom_element.css(key, value)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
require 'glimmer/swt/grid_layout_proxy'
|