glimmer-dsl-opal 0.1.0 → 0.2.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 +9 -0
- data/README.md +195 -167
- data/VERSION +1 -1
- data/lib/glimmer-dsl-opal.rb +24 -7
- data/lib/glimmer-dsl-opal/ext/exception.rb +5 -0
- data/lib/glimmer-dsl-opal/missing/net/http.rb +17 -0
- data/lib/glimmer-dsl-opal/missing/uri.rb +26 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager.rb +0 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager/contact.rb +0 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager/contact_manager_presenter.rb +0 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager/contact_repository.rb +24 -99
- data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/login.rb +0 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/tic_tac_toe.rb +0 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/tic_tac_toe/board.rb +0 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/tic_tac_toe/cell.rb +0 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_browser.rb +0 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_combo.rb +63 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_computed.rb +0 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_computed/contact.rb +0 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_custom_shell.rb +155 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_custom_widget.rb +86 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_list_multi_selection.rb +0 -0
- data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_list_single_selection.rb +0 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_tab.rb +50 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_world.rb +29 -0
- data/lib/{jquery.js → glimmer-dsl-opal/vendor/jquery.js} +0 -0
- data/lib/glimmer/data_binding/ext/observable_model.rb +1 -1
- data/lib/glimmer/dsl/opal/async_exec_expression.rb +2 -2
- data/lib/glimmer/dsl/opal/color_expression.rb +38 -0
- data/lib/glimmer/dsl/opal/custom_widget_expression.rb +57 -0
- data/lib/glimmer/dsl/opal/dsl.rb +7 -0
- data/lib/glimmer/dsl/opal/font_expression.rb +47 -0
- data/lib/glimmer/dsl/opal/property_expression.rb +5 -2
- data/lib/glimmer/dsl/opal/rgb_expression.rb +32 -0
- data/lib/glimmer/dsl/opal/rgba_expression.rb +32 -0
- data/lib/glimmer/dsl/opal/swt_expression.rb +46 -0
- data/lib/glimmer/dsl/opal/widget_expression.rb +2 -1
- data/lib/glimmer/dsl/opal/widget_listener_expression.rb +16 -3
- data/lib/glimmer/swt.rb +499 -0
- data/lib/glimmer/swt/browser_proxy.rb +1 -1
- data/lib/glimmer/swt/button_proxy.rb +2 -2
- data/lib/glimmer/swt/color_proxy.rb +119 -0
- data/lib/glimmer/swt/combo_proxy.rb +10 -9
- data/lib/glimmer/swt/composite_proxy.rb +8 -8
- data/lib/glimmer/{opal → swt}/display_proxy.rb +3 -1
- data/lib/glimmer/swt/fill_layout_proxy.rb +84 -0
- data/lib/glimmer/swt/font_proxy.rb +79 -0
- data/lib/glimmer/swt/grid_layout_proxy.rb +34 -4
- data/lib/glimmer/swt/label_proxy.rb +7 -3
- data/lib/glimmer/swt/layout_proxy.rb +15 -13
- data/lib/glimmer/swt/list_proxy.rb +17 -12
- data/lib/glimmer/swt/message_box_proxy.rb +4 -7
- data/lib/glimmer/swt/row_layout_proxy.rb +105 -0
- data/lib/glimmer/swt/shell_proxy.rb +32 -22
- data/lib/glimmer/swt/style_constantizable.rb +154 -0
- data/lib/glimmer/swt/swt_proxy.rb +53 -0
- data/lib/glimmer/swt/tab_folder_proxy.rb +8 -8
- data/lib/glimmer/swt/tab_item_proxy.rb +15 -32
- data/lib/glimmer/swt/table_proxy.rb +0 -18
- data/lib/glimmer/swt/widget_proxy.rb +140 -39
- data/lib/glimmer/ui/custom_shell.rb +73 -0
- data/lib/glimmer/ui/custom_widget.rb +290 -0
- data/lib/glimmer/util/proc_tracker.rb +39 -0
- metadata +88 -57
- data/lib/glimmer/opal/element_proxy.rb +0 -312
- data/lib/samples/elaborate/launch +0 -6
- data/lib/samples/hello/hello_combo.rb +0 -34
- data/lib/samples/hello/hello_tab.rb +0 -24
- data/lib/samples/hello/hello_world.rb +0 -8
- data/lib/samples/hello/launch +0 -10
- data/lib/samples/launch +0 -4
@@ -0,0 +1,73 @@
|
|
1
|
+
# Copyright (c) 2020 Andy Maleh
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
require 'glimmer/error'
|
23
|
+
|
24
|
+
module Glimmer
|
25
|
+
module UI
|
26
|
+
module CustomShell
|
27
|
+
include Glimmer::UI::CustomWidget
|
28
|
+
|
29
|
+
class << self
|
30
|
+
def included(klass)
|
31
|
+
klass.extend(CustomWidget::ClassMethods)
|
32
|
+
klass.include(Glimmer)
|
33
|
+
Glimmer::UI::CustomWidget.add_custom_widget_namespaces_for(klass)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize(parent, args, options, &content)
|
38
|
+
super
|
39
|
+
raise Error, 'Invalid custom shell body root! Must be a shell or another custom shell.' unless body_root.is_a?(Glimmer::SWT::ShellProxy)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Classes may override
|
43
|
+
def open
|
44
|
+
body_root.open
|
45
|
+
end
|
46
|
+
|
47
|
+
# DO NOT OVERRIDE. JUST AN ALIAS FOR `#open`. OVERRIDE `#open` INSTEAD.
|
48
|
+
def show
|
49
|
+
open
|
50
|
+
end
|
51
|
+
|
52
|
+
def close
|
53
|
+
body_root.close
|
54
|
+
end
|
55
|
+
|
56
|
+
def hide
|
57
|
+
body_root.hide
|
58
|
+
end
|
59
|
+
|
60
|
+
def visible?
|
61
|
+
body_root.visible?
|
62
|
+
end
|
63
|
+
|
64
|
+
def center
|
65
|
+
body_root.center
|
66
|
+
end
|
67
|
+
|
68
|
+
def start_event_loop
|
69
|
+
body_root.start_event_loop
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,290 @@
|
|
1
|
+
# Copyright (c) 2020 Andy Maleh
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
require 'glimmer'
|
23
|
+
require 'glimmer/error'
|
24
|
+
require 'glimmer/swt/display_proxy'
|
25
|
+
require 'glimmer/util/proc_tracker'
|
26
|
+
require 'glimmer/data_binding/observer'
|
27
|
+
require 'glimmer/data_binding/observable_model'
|
28
|
+
|
29
|
+
module Glimmer
|
30
|
+
module UI
|
31
|
+
module CustomWidget
|
32
|
+
include DataBinding::ObservableModel
|
33
|
+
|
34
|
+
module ClassMethods
|
35
|
+
# Allows defining convenience option accessors for an array of option names
|
36
|
+
# Example: `options :color1, :color2` defines `#color1` and `#color2`
|
37
|
+
# where they return the instance values `options[:color1]` and `options[:color2]`
|
38
|
+
# respectively.
|
39
|
+
# Can be called multiple times to set more options additively.
|
40
|
+
# When passed no arguments, it returns list of all option names captured so far
|
41
|
+
def options(*new_options)
|
42
|
+
new_options = new_options.compact.map(&:to_s).map(&:to_sym)
|
43
|
+
if new_options.empty?
|
44
|
+
@options ||= {} # maps options to defaults
|
45
|
+
else
|
46
|
+
new_options = new_options.reduce({}) {|new_options_hash, new_option| new_options_hash.merge(new_option => nil)}
|
47
|
+
@options = options.merge(new_options)
|
48
|
+
def_option_attr_accessors(new_options)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def option(new_option, default: nil)
|
53
|
+
new_option = new_option.to_s.to_sym
|
54
|
+
new_options = {new_option => default}
|
55
|
+
'@options = options.merge(new_options)'
|
56
|
+
@options = options.merge(new_options)
|
57
|
+
'def_option_attr_accessors(new_options)'
|
58
|
+
def_option_attr_accessors(new_options)
|
59
|
+
end
|
60
|
+
|
61
|
+
def def_option_attr_accessors(new_options)
|
62
|
+
new_options.each do |option, default|
|
63
|
+
# TODO fix this in Opal by switching to define_method
|
64
|
+
define_method(option) do
|
65
|
+
options[:"#{option}"]
|
66
|
+
end
|
67
|
+
define_method("#{option}=") do |option_value|
|
68
|
+
self.options[:"#{option}"] = option_value
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def before_body(&block)
|
74
|
+
@before_body_blocks ||= []
|
75
|
+
@before_body_blocks << block
|
76
|
+
end
|
77
|
+
|
78
|
+
def body(&block)
|
79
|
+
@body_block = block
|
80
|
+
end
|
81
|
+
|
82
|
+
def after_body(&block)
|
83
|
+
@after_body_blocks ||= []
|
84
|
+
@after_body_blocks << block
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class << self
|
89
|
+
def included(klass)
|
90
|
+
klass.extend(ClassMethods)
|
91
|
+
unless klass.name.include?('Glimmer::UI::CustomShell')
|
92
|
+
klass.include(Glimmer)
|
93
|
+
Glimmer::UI::CustomWidget.add_custom_widget_namespaces_for(klass)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def for(underscored_custom_widget_name)
|
98
|
+
extracted_namespaces = underscored_custom_widget_name.
|
99
|
+
to_s.
|
100
|
+
split(/__/).map do |namespace|
|
101
|
+
namespace.camelcase(:upper)
|
102
|
+
end
|
103
|
+
custom_widget_namespaces.each do |base|
|
104
|
+
extracted_namespaces.reduce(base) do |result, namespace|
|
105
|
+
if !result.constants.include?(namespace)
|
106
|
+
namespace = result.constants.detect {|c| c.to_s.upcase == namespace.to_s.upcase } || namespace
|
107
|
+
end
|
108
|
+
begin
|
109
|
+
constant = result.const_get(namespace)
|
110
|
+
return constant if constant.ancestors.include?(Glimmer::UI::CustomWidget)
|
111
|
+
constant
|
112
|
+
rescue => e
|
113
|
+
# Glimmer::Config.logger.debug {"#{e.message}\n#{e.backtrace.join("\n")}"}
|
114
|
+
result
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
raise "#{underscored_custom_widget_name} has no custom widget class!"
|
119
|
+
rescue => e
|
120
|
+
Glimmer::Config.logger.debug {e.message}
|
121
|
+
Glimmer::Config.logger.debug {"#{e.message}\n#{e.backtrace.join("\n")}"}
|
122
|
+
nil
|
123
|
+
end
|
124
|
+
|
125
|
+
def add_custom_widget_namespaces_for(klass)
|
126
|
+
Glimmer::UI::CustomWidget.namespaces_for_class(klass).drop(1).each do |namespace|
|
127
|
+
Glimmer::UI::CustomWidget.custom_widget_namespaces << namespace
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def namespaces_for_class(m)
|
132
|
+
return [m] if m.name.nil?
|
133
|
+
namespace_constants = m.name.split(/::/).map(&:to_sym)
|
134
|
+
namespace_constants.reduce([Object]) do |output, namespace_constant|
|
135
|
+
output += [output.last.const_get(namespace_constant)]
|
136
|
+
end[1..-1].uniq.reverse
|
137
|
+
end
|
138
|
+
|
139
|
+
def custom_widget_namespaces
|
140
|
+
@custom_widget_namespaces ||= reset_custom_widget_namespaces
|
141
|
+
end
|
142
|
+
|
143
|
+
def reset_custom_widget_namespaces
|
144
|
+
@custom_widget_namespaces = Set[Object, Glimmer::UI]
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
# <- end of class methods
|
149
|
+
|
150
|
+
|
151
|
+
attr_reader :body_root, :parent, :options, :swt_style
|
152
|
+
|
153
|
+
def initialize(parent, args, options, &content)
|
154
|
+
@parent = parent
|
155
|
+
options = args.delete_at(-1) if args.is_a?(Array) && args.last.is_a?(Hash)
|
156
|
+
if args.is_a?(Hash)
|
157
|
+
options = args
|
158
|
+
args = []
|
159
|
+
end
|
160
|
+
@args = args
|
161
|
+
@swt_style = SWT::SWTProxy[*args]
|
162
|
+
options ||= {}
|
163
|
+
@options = self.class.options.merge(options)
|
164
|
+
@content = Util::ProcTracker.new(content) if content
|
165
|
+
execute_hooks('before_body')
|
166
|
+
body_block = self.class.instance_variable_get("@body_block")
|
167
|
+
raise Glimmer::Error, 'Invalid custom widget for having no body! Please define body block!' if body_block.nil?
|
168
|
+
@body_root = instance_exec(&body_block)
|
169
|
+
raise Glimmer::Error, 'Invalid custom widget for having an empty body! Please fill body block!' if @body_root.nil?
|
170
|
+
execute_hooks('after_body')
|
171
|
+
end
|
172
|
+
|
173
|
+
# Subclasses may override to perform post initialization work on an added child
|
174
|
+
def post_initialize_child(child)
|
175
|
+
# No Op by default
|
176
|
+
end
|
177
|
+
|
178
|
+
def can_handle_observation_request?(observation_request)
|
179
|
+
observation_request = observation_request.to_s
|
180
|
+
result = false
|
181
|
+
if observation_request.start_with?('on_updated_')
|
182
|
+
property = observation_request.sub(/^on_updated_/, '')
|
183
|
+
result = can_add_observer?(property)
|
184
|
+
end
|
185
|
+
result || body_root&.can_handle_observation_request?(observation_request)
|
186
|
+
end
|
187
|
+
|
188
|
+
def handle_observation_request(observation_request, &block)
|
189
|
+
observation_request = observation_request.to_s
|
190
|
+
if observation_request.start_with?('on_updated_')
|
191
|
+
property = observation_request.sub(/^on_updated_/, '') # TODO look into eliminating duplication from above
|
192
|
+
add_observer(DataBinding::Observer.proc(&block), property) if can_add_observer?(property)
|
193
|
+
else
|
194
|
+
body_root.handle_observation_request(observation_request, &block)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def can_add_observer?(attribute_name)
|
199
|
+
has_instance_method?(attribute_name) || has_instance_method?("#{attribute_name}?") || @body_root.can_add_observer?(attribute_name)
|
200
|
+
end
|
201
|
+
|
202
|
+
def add_observer(observer, attribute_name)
|
203
|
+
if has_instance_method?(attribute_name)
|
204
|
+
super
|
205
|
+
else
|
206
|
+
@body_root.add_observer(observer, attribute_name)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def has_attribute?(attribute_name, *args)
|
211
|
+
has_instance_method?(attribute_setter(attribute_name)) ||
|
212
|
+
@body_root.has_attribute?(attribute_name, *args)
|
213
|
+
end
|
214
|
+
|
215
|
+
def set_attribute(attribute_name, *args)
|
216
|
+
if has_instance_method?(attribute_setter(attribute_name))
|
217
|
+
send(attribute_setter(attribute_name), *args)
|
218
|
+
else
|
219
|
+
@body_root.set_attribute(attribute_name, *args)
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
# This method ensures it has an instance method not coming from Glimmer DSL
|
224
|
+
def has_instance_method?(method_name)
|
225
|
+
respond_to?(method_name) and
|
226
|
+
!body_root&.respond_to?(method_name) and
|
227
|
+
!method(method_name)&.source_location&.first&.include?('glimmer/dsl/engine.rb') and
|
228
|
+
!method(method_name)&.source_location&.first&.include?('glimmer/swt/widget_proxy.rb')
|
229
|
+
end
|
230
|
+
|
231
|
+
def get_attribute(attribute_name)
|
232
|
+
if has_instance_method?(attribute_name)
|
233
|
+
send(attribute_name)
|
234
|
+
else
|
235
|
+
@body_root.get_attribute(attribute_name)
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
def attribute_setter(attribute_name)
|
240
|
+
"#{attribute_name}="
|
241
|
+
end
|
242
|
+
|
243
|
+
def has_style?(symbol)
|
244
|
+
@args.include?(symbol) # not a very solid implementation. Bring SWT constants eventually
|
245
|
+
end
|
246
|
+
|
247
|
+
def async_exec(&block)
|
248
|
+
SWT::DisplayProxy.instance.async_exec(&block)
|
249
|
+
end
|
250
|
+
|
251
|
+
# sync_exec kept for API compatibility reasons
|
252
|
+
def sync_exec(&block)
|
253
|
+
SWT::DisplayProxy.instance.async_exec(&block)
|
254
|
+
end
|
255
|
+
|
256
|
+
# Returns content block if used as an attribute reader (no args)
|
257
|
+
# Otherwise, if a block is passed, it adds it as content to this custom widget
|
258
|
+
def content(&block)
|
259
|
+
if block_given?
|
260
|
+
body_root.content(&block)
|
261
|
+
else
|
262
|
+
@content
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
def method_missing(method, *args, &block)
|
267
|
+
if can_handle_observation_request?(method)
|
268
|
+
handle_observation_request(method, &block)
|
269
|
+
else
|
270
|
+
body_root.send(method, *args, &block)
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
alias local_respond_to? respond_to?
|
275
|
+
def respond_to?(method, *args, &block)
|
276
|
+
super or
|
277
|
+
can_handle_observation_request?(method) or
|
278
|
+
body_root.respond_to?(method, *args, &block)
|
279
|
+
end
|
280
|
+
|
281
|
+
private
|
282
|
+
|
283
|
+
def execute_hooks(hook_name)
|
284
|
+
self.class.instance_variable_get("@#{hook_name}_blocks")&.each do |hook_block|
|
285
|
+
instance_exec(&hook_block)
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
290
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Copyright (c) 2020 Andy Maleh
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
require 'delegate'
|
23
|
+
|
24
|
+
module Glimmer
|
25
|
+
module Util
|
26
|
+
class ProcTracker < DelegateClass(Proc)
|
27
|
+
def initialize(proc)
|
28
|
+
super(proc)
|
29
|
+
end
|
30
|
+
def call(*args)
|
31
|
+
__getobj__.call(*args)
|
32
|
+
@called = true
|
33
|
+
end
|
34
|
+
def called?
|
35
|
+
!!@called
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
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.2.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-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|
@@ -16,28 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 1.0.1
|
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: 0.
|
26
|
+
version: 1.0.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: glimmer-dsl-xml
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.1.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: glimmer-dsl-css
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.1.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.1.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: opal-async
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.2.0
|
34
62
|
type: :runtime
|
35
63
|
prerelease: false
|
36
64
|
version_requirements: !ruby/object:Gem::Requirement
|
37
65
|
requirements:
|
38
66
|
- - "~>"
|
39
67
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
68
|
+
version: 1.2.0
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: puts_debuggerer
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,6 +100,20 @@ dependencies:
|
|
72
100
|
- - "<"
|
73
101
|
- !ruby/object:Gem::Version
|
74
102
|
version: 14.0.0
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rake-tui
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
75
117
|
- !ruby/object:Gem::Dependency
|
76
118
|
name: jeweler
|
77
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,20 +182,6 @@ dependencies:
|
|
140
182
|
- - "~>"
|
141
183
|
- !ruby/object:Gem::Version
|
142
184
|
version: 1.1.2
|
143
|
-
- !ruby/object:Gem::Dependency
|
144
|
-
name: opal-async
|
145
|
-
requirement: !ruby/object:Gem::Requirement
|
146
|
-
requirements:
|
147
|
-
- - "~>"
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
version: 1.1.0
|
150
|
-
type: :development
|
151
|
-
prerelease: false
|
152
|
-
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
requirements:
|
154
|
-
- - "~>"
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
version: 1.1.0
|
157
185
|
- !ruby/object:Gem::Dependency
|
158
186
|
name: opal-jquery
|
159
187
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,20 +196,6 @@ dependencies:
|
|
168
196
|
- - "~>"
|
169
197
|
- !ruby/object:Gem::Version
|
170
198
|
version: 0.4.4
|
171
|
-
- !ruby/object:Gem::Dependency
|
172
|
-
name: glimmer-dsl-opal
|
173
|
-
requirement: !ruby/object:Gem::Requirement
|
174
|
-
requirements:
|
175
|
-
- - ">="
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
version: '0'
|
178
|
-
type: :development
|
179
|
-
prerelease: false
|
180
|
-
version_requirements: !ruby/object:Gem::Requirement
|
181
|
-
requirements:
|
182
|
-
- - ">="
|
183
|
-
- !ruby/object:Gem::Version
|
184
|
-
version: '0'
|
185
199
|
description: Glimmer DSL for Opal (Web GUI Adapter for Desktop Apps)
|
186
200
|
email: andy.am@gmail.com
|
187
201
|
executables: []
|
@@ -196,6 +210,28 @@ files:
|
|
196
210
|
- README.md
|
197
211
|
- VERSION
|
198
212
|
- lib/glimmer-dsl-opal.rb
|
213
|
+
- lib/glimmer-dsl-opal/ext/exception.rb
|
214
|
+
- lib/glimmer-dsl-opal/missing/net/http.rb
|
215
|
+
- lib/glimmer-dsl-opal/missing/uri.rb
|
216
|
+
- lib/glimmer-dsl-opal/samples/elaborate/contact_manager.rb
|
217
|
+
- lib/glimmer-dsl-opal/samples/elaborate/contact_manager/contact.rb
|
218
|
+
- lib/glimmer-dsl-opal/samples/elaborate/contact_manager/contact_manager_presenter.rb
|
219
|
+
- lib/glimmer-dsl-opal/samples/elaborate/contact_manager/contact_repository.rb
|
220
|
+
- lib/glimmer-dsl-opal/samples/elaborate/login.rb
|
221
|
+
- lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb
|
222
|
+
- lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/board.rb
|
223
|
+
- lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/cell.rb
|
224
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_browser.rb
|
225
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_combo.rb
|
226
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_computed.rb
|
227
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_computed/contact.rb
|
228
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_custom_shell.rb
|
229
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_custom_widget.rb
|
230
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_list_multi_selection.rb
|
231
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_list_single_selection.rb
|
232
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_tab.rb
|
233
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_world.rb
|
234
|
+
- lib/glimmer-dsl-opal/vendor/jquery.js
|
199
235
|
- lib/glimmer/data_binding/element_binding.rb
|
200
236
|
- lib/glimmer/data_binding/ext/observable_model.rb
|
201
237
|
- lib/glimmer/data_binding/list_selection_binding.rb
|
@@ -203,29 +239,38 @@ files:
|
|
203
239
|
- lib/glimmer/data_binding/table_items_binding.rb
|
204
240
|
- lib/glimmer/dsl/opal/async_exec_expression.rb
|
205
241
|
- lib/glimmer/dsl/opal/bind_expression.rb
|
242
|
+
- lib/glimmer/dsl/opal/color_expression.rb
|
206
243
|
- lib/glimmer/dsl/opal/column_properties_expression.rb
|
207
244
|
- lib/glimmer/dsl/opal/combo_selection_data_binding_expression.rb
|
245
|
+
- lib/glimmer/dsl/opal/custom_widget_expression.rb
|
208
246
|
- lib/glimmer/dsl/opal/data_binding_expression.rb
|
209
247
|
- lib/glimmer/dsl/opal/dsl.rb
|
248
|
+
- lib/glimmer/dsl/opal/font_expression.rb
|
210
249
|
- lib/glimmer/dsl/opal/layout_data_expression.rb
|
211
250
|
- lib/glimmer/dsl/opal/layout_expression.rb
|
212
251
|
- lib/glimmer/dsl/opal/list_selection_data_binding_expression.rb
|
213
252
|
- lib/glimmer/dsl/opal/message_box_expression.rb
|
214
253
|
- lib/glimmer/dsl/opal/observe_expression.rb
|
215
254
|
- lib/glimmer/dsl/opal/property_expression.rb
|
255
|
+
- lib/glimmer/dsl/opal/rgb_expression.rb
|
256
|
+
- lib/glimmer/dsl/opal/rgba_expression.rb
|
216
257
|
- lib/glimmer/dsl/opal/shell_expression.rb
|
258
|
+
- lib/glimmer/dsl/opal/swt_expression.rb
|
217
259
|
- lib/glimmer/dsl/opal/table_column_expression.rb
|
218
260
|
- lib/glimmer/dsl/opal/table_expression.rb
|
219
261
|
- lib/glimmer/dsl/opal/table_items_data_binding_expression.rb
|
220
262
|
- lib/glimmer/dsl/opal/widget_expression.rb
|
221
263
|
- lib/glimmer/dsl/opal/widget_listener_expression.rb
|
222
|
-
- lib/glimmer/
|
223
|
-
- lib/glimmer/opal/element_proxy.rb
|
264
|
+
- lib/glimmer/swt.rb
|
224
265
|
- lib/glimmer/swt/browser_proxy.rb
|
225
266
|
- lib/glimmer/swt/button_proxy.rb
|
267
|
+
- lib/glimmer/swt/color_proxy.rb
|
226
268
|
- lib/glimmer/swt/combo_proxy.rb
|
227
269
|
- lib/glimmer/swt/composite_proxy.rb
|
270
|
+
- lib/glimmer/swt/display_proxy.rb
|
228
271
|
- lib/glimmer/swt/event_listener_proxy.rb
|
272
|
+
- lib/glimmer/swt/fill_layout_proxy.rb
|
273
|
+
- lib/glimmer/swt/font_proxy.rb
|
229
274
|
- lib/glimmer/swt/grid_layout_proxy.rb
|
230
275
|
- lib/glimmer/swt/label_proxy.rb
|
231
276
|
- lib/glimmer/swt/layout_data_proxy.rb
|
@@ -234,7 +279,10 @@ files:
|
|
234
279
|
- lib/glimmer/swt/message_box_proxy.rb
|
235
280
|
- lib/glimmer/swt/point.rb
|
236
281
|
- lib/glimmer/swt/property_owner.rb
|
282
|
+
- lib/glimmer/swt/row_layout_proxy.rb
|
237
283
|
- lib/glimmer/swt/shell_proxy.rb
|
284
|
+
- lib/glimmer/swt/style_constantizable.rb
|
285
|
+
- lib/glimmer/swt/swt_proxy.rb
|
238
286
|
- lib/glimmer/swt/tab_folder_proxy.rb
|
239
287
|
- lib/glimmer/swt/tab_item_proxy.rb
|
240
288
|
- lib/glimmer/swt/table_column_proxy.rb
|
@@ -242,26 +290,9 @@ files:
|
|
242
290
|
- lib/glimmer/swt/table_proxy.rb
|
243
291
|
- lib/glimmer/swt/text_proxy.rb
|
244
292
|
- lib/glimmer/swt/widget_proxy.rb
|
245
|
-
- lib/
|
246
|
-
- lib/
|
247
|
-
- lib/
|
248
|
-
- lib/samples/elaborate/contact_manager/contact_manager_presenter.rb
|
249
|
-
- lib/samples/elaborate/contact_manager/contact_repository.rb
|
250
|
-
- lib/samples/elaborate/launch
|
251
|
-
- lib/samples/elaborate/login.rb
|
252
|
-
- lib/samples/elaborate/tic_tac_toe.rb
|
253
|
-
- lib/samples/elaborate/tic_tac_toe/board.rb
|
254
|
-
- lib/samples/elaborate/tic_tac_toe/cell.rb
|
255
|
-
- lib/samples/hello/hello_browser.rb
|
256
|
-
- lib/samples/hello/hello_combo.rb
|
257
|
-
- lib/samples/hello/hello_computed.rb
|
258
|
-
- lib/samples/hello/hello_computed/contact.rb
|
259
|
-
- lib/samples/hello/hello_list_multi_selection.rb
|
260
|
-
- lib/samples/hello/hello_list_single_selection.rb
|
261
|
-
- lib/samples/hello/hello_tab.rb
|
262
|
-
- lib/samples/hello/hello_world.rb
|
263
|
-
- lib/samples/hello/launch
|
264
|
-
- lib/samples/launch
|
293
|
+
- lib/glimmer/ui/custom_shell.rb
|
294
|
+
- lib/glimmer/ui/custom_widget.rb
|
295
|
+
- lib/glimmer/util/proc_tracker.rb
|
265
296
|
homepage: http://github.com/AndyObtiva/glimmer-dsl-opal
|
266
297
|
licenses:
|
267
298
|
- MIT
|
@@ -281,7 +312,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
281
312
|
- !ruby/object:Gem::Version
|
282
313
|
version: '0'
|
283
314
|
requirements: []
|
284
|
-
rubygems_version: 3.1.
|
315
|
+
rubygems_version: 3.1.4
|
285
316
|
signing_key:
|
286
317
|
specification_version: 4
|
287
318
|
summary: Glimmer DSL for Opal
|