glimmer-dsl-opal 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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'
|