glimmer-dsl-opal 0.0.1 → 0.0.2
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/README.md +95 -20
- data/VERSION +1 -1
- data/lib/glimmer-dsl-opal.rb +10 -8
- data/lib/glimmer/data_binding/element_binding.rb +35 -0
- data/lib/glimmer/data_binding/observable_element.rb +14 -0
- data/lib/glimmer/dsl/opal/bind_expression.rb +37 -0
- data/lib/glimmer/dsl/opal/button_expression.rb +17 -0
- data/lib/glimmer/dsl/opal/combo_expression.rb +17 -0
- data/lib/glimmer/dsl/opal/combo_selection_data_binding_expression.rb +40 -0
- data/lib/glimmer/dsl/opal/composite_expression.rb +17 -0
- data/lib/glimmer/dsl/opal/data_binding_expression.rb +34 -0
- data/lib/glimmer/dsl/opal/dsl.rb +9 -0
- data/lib/glimmer/dsl/opal/label_expression.rb +2 -2
- data/lib/glimmer/dsl/opal/property_expression.rb +1 -1
- data/lib/glimmer/dsl/opal/shell_expression.rb +2 -2
- data/lib/glimmer/dsl/opal/widget_listener_expression.rb +18 -0
- data/lib/glimmer/opal/div_proxy.rb +14 -0
- data/lib/glimmer/opal/{shell.rb → document_proxy.rb} +19 -5
- data/lib/glimmer/opal/element_proxy.rb +52 -0
- data/lib/glimmer/opal/event_listener_proxy.rb +18 -0
- data/lib/glimmer/opal/input_proxy.rb +30 -0
- data/lib/glimmer/opal/label_proxy.rb +24 -0
- data/lib/glimmer/opal/select_proxy.rb +58 -0
- data/lib/samples/elaborate/contact_manager.rb +95 -0
- data/lib/samples/elaborate/contact_manager/contact.rb +11 -0
- data/lib/samples/elaborate/contact_manager/contact_manager_presenter.rb +36 -0
- data/lib/samples/elaborate/contact_manager/contact_repository.rb +244 -0
- data/lib/samples/elaborate/launch +6 -0
- data/lib/samples/elaborate/login.rb +88 -0
- data/lib/samples/elaborate/tic_tac_toe.rb +53 -0
- data/lib/samples/elaborate/tic_tac_toe/board.rb +124 -0
- data/lib/samples/elaborate/tic_tac_toe/cell.rb +27 -0
- data/lib/samples/hello/hello_browser.rb +8 -0
- data/lib/samples/hello/hello_combo.rb +34 -0
- data/lib/samples/hello/hello_computed.rb +69 -0
- data/lib/samples/hello/hello_computed/contact.rb +21 -0
- data/lib/samples/hello/hello_list_multi_selection.rb +44 -0
- data/lib/samples/hello/hello_list_single_selection.rb +34 -0
- data/lib/samples/hello/hello_tab.rb +24 -0
- data/lib/samples/hello/hello_world.rb +8 -0
- data/lib/samples/hello/launch +10 -0
- data/lib/samples/launch +4 -0
- metadata +39 -6
- data/lib/glimmer/opal/label.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43ffbba379c5bade234cf2a2263be49565bff77120e7449e17ea7095461520c5
|
4
|
+
data.tar.gz: 990340e899f8bf37a98ea0ea4e78941ccb48e4e55e0faddbb2b4ea7d010c8c0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49e2e4d81cf84643f7e645ce30c474a0262c11bebd7f708db25068fc4fd6acb53d7e98779c028b2d459165749523444ecf7a0fb4de653bc2a6c6409b05f606d9
|
7
|
+
data.tar.gz: 68179f29cc621c861c6243ef2dc54dff6558be4f394c0ab7bb47c0cffe683fe77cf1e3fdbc5f00b7c8646bdfb6cd7580bed4162e88353149be003bad32ce34ea
|
data/README.md
CHANGED
@@ -1,20 +1,23 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
# Glimmer DSL for Opal 0.0.2 Alpha (Web GUI for Desktop Apps)
|
2
3
|
[](http://badge.fury.io/rb/glimmer-dsl-opal)
|
4
|
+
[](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
3
5
|
|
4
|
-
[Glimmer](https://github.com/AndyObtiva/glimmer) DSL for Opal is a web GUI adaptor for desktop apps built with [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt).
|
6
|
+
[Glimmer](https://github.com/AndyObtiva/glimmer) DSL for Opal is a web GUI adaptor for desktop apps built with [Glimmer](https://github.com/AndyObtiva/glimmer) & [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt).
|
5
7
|
|
6
8
|
It enables running [Glimmer](https://github.com/AndyObtiva/glimmer) desktop apps on the web via [Rails](https://rubyonrails.org/) 5 and [Opal](https://opalrb.com/) 1.
|
7
9
|
|
8
|
-
NOTE: Version 0.0.
|
10
|
+
NOTE: Alpha Version 0.0.2 only supports Hello, World! and Hello, Combo! capabilities.
|
9
11
|
|
10
|
-
|
12
|
+
Other Glimmer DSL gems:
|
13
|
+
- [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt): Glimmer DSL for SWT (Desktop GUI)
|
14
|
+
- [glimmer-dsl-xml](https://github.com/AndyObtiva/glimmer-dsl-xml): Glimmer DSL for XML (& HTML)
|
15
|
+
- [glimmer-dsl-css](https://github.com/AndyObtiva/glimmer-dsl-css): Glimmer DSL for CSS (Cascading Style Sheets)
|
11
16
|
|
12
|
-
|
17
|
+
## Hello, World!
|
13
18
|
|
14
|
-
Glimmer code (from `samples/hello/hello_world.rb`):
|
19
|
+
Glimmer code (from SWT desktop app sample [`samples/hello/hello_world.rb`](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_world.rb)):
|
15
20
|
```ruby
|
16
|
-
require 'glimmer-dsl-opal'
|
17
|
-
|
18
21
|
include Glimmer
|
19
22
|
|
20
23
|
shell {
|
@@ -25,18 +28,23 @@ shell {
|
|
25
28
|
}.open
|
26
29
|
```
|
27
30
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
```
|
31
|
+
Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
|
32
|
+
|
33
|
+

|
32
34
|
|
33
|
-
Glimmer app:
|
35
|
+
Glimmer app on the web (using `glimmer-dsl-opal` gem):
|
34
36
|
|
35
37
|

|
36
38
|
|
37
|
-
##
|
39
|
+
## Supported Widgets
|
38
40
|
|
39
|
-
|
41
|
+
The following keywords from [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt) have partial support in Opal:
|
42
|
+
|
43
|
+
- `shell`
|
44
|
+
- `label`
|
45
|
+
- `combo`
|
46
|
+
- `button`
|
47
|
+
- `composite` (single-column `grid_layout` only)
|
40
48
|
|
41
49
|
## Pre-requisites
|
42
50
|
|
@@ -59,7 +67,7 @@ Add the following to `Gemfile`:
|
|
59
67
|
```
|
60
68
|
gem 'opal-rails'
|
61
69
|
gem 'opal-browser'
|
62
|
-
gem 'glimmer-dsl-opal', '~> 0.0.
|
70
|
+
gem 'glimmer-dsl-opal', '~> 0.0.2', require: false
|
63
71
|
```
|
64
72
|
|
65
73
|
Edit `config/initializers/assets.rb` and add:
|
@@ -67,6 +75,10 @@ Edit `config/initializers/assets.rb` and add:
|
|
67
75
|
Opal.use_gem 'glimmer-dsl-opal'
|
68
76
|
```
|
69
77
|
|
78
|
+
## Examples
|
79
|
+
|
80
|
+
### Hello, World!
|
81
|
+
|
70
82
|
Add the following Glimmer code to `app/assets/javascripts/application.js.rb`
|
71
83
|
|
72
84
|
```ruby
|
@@ -82,6 +94,12 @@ shell {
|
|
82
94
|
}
|
83
95
|
```
|
84
96
|
|
97
|
+
Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
|
98
|
+
|
99
|
+

|
100
|
+
|
101
|
+
Glimmer app on the web (using `glimmer-dsl-opal` gem):
|
102
|
+
|
85
103
|
Start the Rails server:
|
86
104
|
```
|
87
105
|
rails s
|
@@ -93,6 +111,65 @@ You should see "Hello, World!"
|
|
93
111
|
|
94
112
|

|
95
113
|
|
114
|
+
### Hello, Combo!
|
115
|
+
|
116
|
+
Add the following Glimmer code to `app/assets/javascripts/application.js.rb`
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
require 'glimmer-dsl-opal' # brings opal and opal browser too
|
120
|
+
|
121
|
+
class Person
|
122
|
+
attr_accessor :country, :country_options
|
123
|
+
|
124
|
+
def initialize
|
125
|
+
self.country_options=["", "Canada", "US", "Mexico"]
|
126
|
+
self.country = "Canada"
|
127
|
+
end
|
128
|
+
|
129
|
+
def reset_country
|
130
|
+
self.country = "Canada"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
class HelloCombo
|
135
|
+
include Glimmer
|
136
|
+
def launch
|
137
|
+
person = Person.new
|
138
|
+
shell {
|
139
|
+
composite {
|
140
|
+
combo(:read_only) {
|
141
|
+
selection bind(person, :country)
|
142
|
+
}
|
143
|
+
button {
|
144
|
+
text "Reset"
|
145
|
+
on_widget_selected do
|
146
|
+
person.reset_country
|
147
|
+
end
|
148
|
+
}
|
149
|
+
}
|
150
|
+
}.open
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
HelloCombo.new.launch
|
155
|
+
```
|
156
|
+
Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
|
157
|
+
|
158
|
+

|
159
|
+
|
160
|
+
Glimmer app on the web (using `glimmer-dsl-opal` gem):
|
161
|
+
|
162
|
+
Start the Rails server:
|
163
|
+
```
|
164
|
+
rails s
|
165
|
+
```
|
166
|
+
|
167
|
+
Visit `http://localhost:3000`
|
168
|
+
|
169
|
+
You should see "Hello, Combo!"
|
170
|
+
|
171
|
+

|
172
|
+
|
96
173
|
## Help
|
97
174
|
|
98
175
|
### Issues
|
@@ -101,11 +178,9 @@ You may submit [issues](https://github.com/AndyObtiva/glimmer/issues) on [GitHub
|
|
101
178
|
|
102
179
|
[Click here to submit an issue.](https://github.com/AndyObtiva/glimmer/issues)
|
103
180
|
|
104
|
-
###
|
105
|
-
|
106
|
-
If you need live help, try the [#glimmer](http://widget.mibbit.com/?settings=7514b8a196f8f1de939a351245db7aa8&server=irc.mibbit.net&channel=%23glimmer) IRC channel on [irc.mibbit.net](http://widget.mibbit.com/?settings=7514b8a196f8f1de939a351245db7aa8&server=irc.mibbit.net&channel=%23glimmer). If no one was available, you may [leave a GitHub issue](https://github.com/AndyObtiva/glimmer/issues) to schedule a meetup on IRC.
|
181
|
+
### Chat
|
107
182
|
|
108
|
-
|
183
|
+
If you need live help, try to [](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
109
184
|
|
110
185
|
## Feature Suggestions
|
111
186
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/lib/glimmer-dsl-opal.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
require 'opal'
|
2
|
+
require 'opal-parser'
|
3
|
+
require 'glimmer'
|
4
|
+
|
5
|
+
GLIMMER_DSL_OPAL_ROOT = File.expand_path('../..', __FILE__)
|
6
|
+
GLIMMER_DSL_OPAL_LIB = File.join(GLIMMER_DSL_OPAL_ROOT, 'lib')
|
7
|
+
|
8
|
+
$LOAD_PATH.unshift(GLIMMER_DSL_OPAL_LIB)
|
9
|
+
|
10
|
+
require 'glimmer/dsl/opal/dsl'
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'glimmer/data_binding/observable'
|
2
|
+
require 'glimmer/data_binding/observer'
|
3
|
+
|
4
|
+
module Glimmer
|
5
|
+
module DataBinding
|
6
|
+
class ElementBinding
|
7
|
+
include Glimmer
|
8
|
+
include Observable
|
9
|
+
include Observer
|
10
|
+
|
11
|
+
attr_reader :element, :property
|
12
|
+
def initialize(element, property, translator = nil)
|
13
|
+
@element = element
|
14
|
+
@property = property
|
15
|
+
@translator = translator || proc {|value| value}
|
16
|
+
|
17
|
+
# TODO see if this is needed in Opal
|
18
|
+
# if @element.respond_to?(:dispose)
|
19
|
+
# @element.on_widget_disposed do |dispose_event|
|
20
|
+
# unregister_all_observables
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
end
|
24
|
+
|
25
|
+
def call(value)
|
26
|
+
converted_value = translated_value = @translator.call(value)
|
27
|
+
@element.send(@property + '=', converted_value) unless evaluate_property == converted_value
|
28
|
+
end
|
29
|
+
|
30
|
+
def evaluate_property
|
31
|
+
@element.send(@property)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Glimmer
|
2
|
+
module DataBinding
|
3
|
+
module ObservableElement
|
4
|
+
def method_missing(method, *args, &block)
|
5
|
+
method_name = method.to_s
|
6
|
+
if method_name.start_with?('on_')
|
7
|
+
handle_observation_request(method_name, &block)
|
8
|
+
else
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'glimmer/dsl/static_expression'
|
2
|
+
require 'glimmer/data_binding/model_binding'
|
3
|
+
|
4
|
+
module Glimmer
|
5
|
+
module DSL
|
6
|
+
module Opal
|
7
|
+
# Responsible for setting up the return value of the bind keyword (command symbol)
|
8
|
+
# as a ModelBinding. It is then used by another command handler like
|
9
|
+
# DataBindingCommandHandler for text and selection properties on Text and Spinner
|
10
|
+
# or TableItemsDataBindingCommandHandler for items in a Table
|
11
|
+
class BindExpression < StaticExpression
|
12
|
+
def can_interpret?(parent, keyword, *args, &block)
|
13
|
+
(
|
14
|
+
keyword == 'bind' and
|
15
|
+
(
|
16
|
+
(
|
17
|
+
(args.size == 2) and
|
18
|
+
textual?(args[1])
|
19
|
+
) ||
|
20
|
+
(
|
21
|
+
(args.size == 3) and
|
22
|
+
textual?(args[1]) and
|
23
|
+
(args[2].is_a?(Hash))
|
24
|
+
)
|
25
|
+
)
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def interpret(parent, keyword, *args, &block)
|
30
|
+
binding_options = args[2] || {}
|
31
|
+
binding_options[:on_read] = binding_options.delete(:on_read) || binding_options.delete('on_read') || block
|
32
|
+
DataBinding::ModelBinding.new(args[0], args[1].to_s, binding_options)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'glimmer/dsl/static_expression'
|
2
|
+
require 'glimmer/dsl/parent_expression'
|
3
|
+
require 'glimmer/opal/input_proxy'
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
module DSL
|
7
|
+
module Opal
|
8
|
+
class ButtonExpression < StaticExpression
|
9
|
+
include ParentExpression
|
10
|
+
|
11
|
+
def interpret(parent, keyword, *args, &block)
|
12
|
+
Glimmer::Opal::InputProxy.new(parent, args)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'glimmer/dsl/static_expression'
|
2
|
+
require 'glimmer/dsl/parent_expression'
|
3
|
+
require 'glimmer/opal/select_proxy'
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
module DSL
|
7
|
+
module Opal
|
8
|
+
class ComboExpression < StaticExpression
|
9
|
+
include ParentExpression
|
10
|
+
|
11
|
+
def interpret(parent, keyword, *args, &block)
|
12
|
+
Glimmer::Opal::SelectProxy.new(parent, args)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'glimmer/dsl/expression'
|
2
|
+
require 'glimmer/data_binding/model_binding'
|
3
|
+
require 'glimmer/data_binding/element_binding'
|
4
|
+
require 'glimmer/opal/select_proxy'
|
5
|
+
|
6
|
+
module Glimmer
|
7
|
+
module DSL
|
8
|
+
module Opal
|
9
|
+
class ComboSelectionDataBindingExpression < Expression
|
10
|
+
def can_interpret?(parent, keyword, *args, &block)
|
11
|
+
keyword == 'selection' and
|
12
|
+
block.nil? and
|
13
|
+
parent.is_a?(Glimmer::Opal::SelectProxy) and
|
14
|
+
args.size == 1 and
|
15
|
+
args[0].is_a?(DataBinding::ModelBinding) and
|
16
|
+
args[0].evaluate_options_property.is_a?(Array)
|
17
|
+
end
|
18
|
+
|
19
|
+
def interpret(parent, keyword, *args, &block)
|
20
|
+
model_binding = args[0]
|
21
|
+
|
22
|
+
#TODO make this options observer dependent and all similar observers in element specific data binding handlers
|
23
|
+
# TODO consider delegating some of this work
|
24
|
+
element_binding = DataBinding::ElementBinding.new(parent, 'items')
|
25
|
+
element_binding.call(model_binding.evaluate_options_property)
|
26
|
+
model = model_binding.base_model
|
27
|
+
element_binding.observe(model, model_binding.options_property_name)
|
28
|
+
|
29
|
+
element_binding = DataBinding::ElementBinding.new(parent, 'text')
|
30
|
+
element_binding.call(model_binding.evaluate_property)
|
31
|
+
element_binding.observe(model, model_binding.property_name_expression)
|
32
|
+
|
33
|
+
parent.on_widget_selected do
|
34
|
+
model_binding.call(element_binding.evaluate_property)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'glimmer/dsl/static_expression'
|
2
|
+
require 'glimmer/dsl/parent_expression'
|
3
|
+
require 'glimmer/opal/div_proxy'
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
module DSL
|
7
|
+
module Opal
|
8
|
+
class CompositeExpression < StaticExpression
|
9
|
+
include ParentExpression
|
10
|
+
|
11
|
+
def interpret(parent, keyword, *args, &block)
|
12
|
+
Glimmer::Opal::DivProxy.new(parent, args)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'glimmer/dsl/expression'
|
2
|
+
require 'glimmer/data_binding/model_binding'
|
3
|
+
require 'glimmer/data_binding/element_binding'
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
module DSL
|
7
|
+
module Opal
|
8
|
+
# Responsible for wiring two-way data-binding for text and selection properties
|
9
|
+
# on Text, Button, and Spinner elements.
|
10
|
+
# Does so by using the output of the bind(model, property) command in the form
|
11
|
+
# of a ModelBinding, which is then connected to an anonymous element observer
|
12
|
+
# (aka element_data_binder as per element_data_binders array)
|
13
|
+
#
|
14
|
+
# Depends on BindCommandHandler
|
15
|
+
class DataBindingExpression < Expression
|
16
|
+
def can_interpret?(parent, keyword, *args, &block)
|
17
|
+
args.size == 1 and
|
18
|
+
args[0].is_a?(DataBinding::ModelBinding)
|
19
|
+
end
|
20
|
+
|
21
|
+
def interpret(parent, keyword, *args, &block)
|
22
|
+
model_binding = args[0]
|
23
|
+
element_binding_parameters = [parent, keyword]
|
24
|
+
element_binding = DataBinding::ElementBinding.new(*element_binding_parameters)
|
25
|
+
element_binding.call(model_binding.evaluate_property)
|
26
|
+
#TODO make this options observer dependent and all similar observers in element specific data binding handlers
|
27
|
+
element_binding.observe(model_binding)
|
28
|
+
# TODO simplify this logic and put it where it belongs
|
29
|
+
parent.add_observer(model_binding, keyword) if parent.respond_to?(:add_observer, [model_binding, keyword])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/glimmer/dsl/opal/dsl.rb
CHANGED
@@ -6,6 +6,13 @@ require 'glimmer/dsl/engine'
|
|
6
6
|
require 'glimmer/dsl/opal/shell_expression'
|
7
7
|
require 'glimmer/dsl/opal/label_expression'
|
8
8
|
require 'glimmer/dsl/opal/property_expression'
|
9
|
+
require 'glimmer/dsl/opal/combo_expression'
|
10
|
+
require 'glimmer/dsl/opal/composite_expression'
|
11
|
+
require 'glimmer/dsl/opal/button_expression'
|
12
|
+
require 'glimmer/dsl/opal/bind_expression'
|
13
|
+
# require 'glimmer/dsl/opal/data_binding_expression'
|
14
|
+
require 'glimmer/dsl/opal/combo_selection_data_binding_expression'
|
15
|
+
require 'glimmer/dsl/opal/widget_listener_expression'
|
9
16
|
|
10
17
|
module Glimmer
|
11
18
|
module DSL
|
@@ -13,6 +20,8 @@ module Glimmer
|
|
13
20
|
Engine.add_dynamic_expressions(
|
14
21
|
Opal,
|
15
22
|
%w[
|
23
|
+
widget_listener
|
24
|
+
combo_selection_data_binding
|
16
25
|
property
|
17
26
|
]
|
18
27
|
)
|