glimmer-dsl-opal 0.15.1 → 0.17.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 +26 -0
- data/README.md +123 -7
- data/VERSION +1 -1
- data/app/controllers/glimmer/image_paths_controller.rb +7 -2
- data/lib/cgi.rb +14 -0
- data/lib/glimmer-dsl-opal.rb +2 -0
- data/lib/glimmer-dsl-opal/ext/file.rb +5 -11
- data/lib/glimmer-dsl-opal/samples/hello/hello_arrow.rb +65 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_composite.rb +69 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_layout.rb +241 -0
- data/lib/glimmer/config.rb +11 -0
- data/lib/glimmer/dsl/opal/menu_expression.rb +3 -0
- data/lib/glimmer/swt/arrow_proxy.rb +42 -0
- data/lib/glimmer/swt/button_proxy.rb +36 -1
- data/lib/glimmer/swt/fill_layout_proxy.rb +9 -3
- data/lib/glimmer/swt/grid_layout_proxy.rb +44 -28
- data/lib/glimmer/swt/label_proxy.rb +17 -4
- data/lib/glimmer/swt/layout_data_proxy.rb +1 -1
- data/lib/glimmer/swt/menu_proxy.rb +17 -1
- data/lib/glimmer/swt/row_layout_proxy.rb +33 -2
- data/lib/glimmer/swt/widget_proxy.rb +49 -12
- metadata +11 -5
@@ -33,19 +33,19 @@ module Glimmer
|
|
33
33
|
|
34
34
|
def text=(value)
|
35
35
|
@text = value
|
36
|
-
dom_element.html(html_text)
|
36
|
+
dom_element.html(html_text) # TODO deal with issue of handling lines and escaping at the same time
|
37
37
|
end
|
38
38
|
|
39
39
|
def html_text
|
40
|
-
text
|
40
|
+
text && CGI.escape_html(text).gsub("\n", '<br />')
|
41
41
|
end
|
42
42
|
|
43
|
-
|
43
|
+
# def background_image=(*image_options)
|
44
44
|
# TODO consider if there is a difference between background_image and image in label and to have one reuse the other
|
45
45
|
# TODO finish implementation
|
46
46
|
# @background_image = Glimmer::SWT::ImageProxy.create(*image_options)
|
47
47
|
# dom_element.css('background-image', @background_image.image_data.dom_element.src)
|
48
|
-
|
48
|
+
# end
|
49
49
|
|
50
50
|
def image=(*image_options)
|
51
51
|
# TODO finish implementation
|
@@ -53,6 +53,19 @@ module Glimmer
|
|
53
53
|
# dom_element.css('background-image', @image.image_data.dom_element.src)
|
54
54
|
end
|
55
55
|
|
56
|
+
# background image
|
57
|
+
def background_image
|
58
|
+
@background_image
|
59
|
+
end
|
60
|
+
|
61
|
+
# background image is stretched by default
|
62
|
+
def background_image=(value)
|
63
|
+
@background_image = value
|
64
|
+
dom_element.css('background-image', "url(#{background_image})")
|
65
|
+
dom_element.css('background-repeat', 'no-repeat')
|
66
|
+
dom_element.css('background-size', 'cover')
|
67
|
+
end
|
68
|
+
|
56
69
|
def element
|
57
70
|
'label'
|
58
71
|
end
|
@@ -92,7 +92,7 @@ module Glimmer
|
|
92
92
|
def grab_excess_horizontal_space=(grab_excess_horizontal_space)
|
93
93
|
@grab_excess_horizontal_space = grab_excess_horizontal_space
|
94
94
|
@parent.dom_element.css('justify-self', @horizontal_alignment) if @grab_excess_horizontal_space && @horizontal_alignment != 'fill' && width_hint.nil?
|
95
|
-
@parent.parent.dom_element.css('justify-content',
|
95
|
+
@parent.parent.dom_element.css('justify-content', 'stretch') if @grab_excess_horizontal_space
|
96
96
|
# reapply
|
97
97
|
end
|
98
98
|
|
@@ -218,6 +218,21 @@ module Glimmer
|
|
218
218
|
end
|
219
219
|
end
|
220
220
|
|
221
|
+
def visible=(value)
|
222
|
+
@visible = value
|
223
|
+
if @visible
|
224
|
+
parent.menu_requested = true
|
225
|
+
parent.dom_element.css('position', 'relative')
|
226
|
+
render
|
227
|
+
dom_element.css('position', 'absolute')
|
228
|
+
dom_element.css('left', parent.menu_x - parent.dom_element.offset.left)
|
229
|
+
dom_element.css('top', parent.menu_y - parent.dom_element.offset.top)
|
230
|
+
parent.menu_requested = false
|
231
|
+
else
|
232
|
+
close
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
221
236
|
def render(custom_parent_dom_element: nil, brand_new: false)
|
222
237
|
# TODO attach to top nav bar if parent is shell
|
223
238
|
# TODO attach listener to parent to display on right click
|
@@ -226,7 +241,7 @@ module Glimmer
|
|
226
241
|
if root_menu? && !bar?
|
227
242
|
`$(#{path}).menu();`
|
228
243
|
@close_event_handler = lambda do |event|
|
229
|
-
close if event.target.parents('.ui-menu').empty?
|
244
|
+
close if event.target != parent.dom_element && event.target.parents('.ui-menu').empty?
|
230
245
|
end
|
231
246
|
Element['body'].on('click', &@close_event_handler)
|
232
247
|
end
|
@@ -236,6 +251,7 @@ module Glimmer
|
|
236
251
|
def close
|
237
252
|
dom_element.remove
|
238
253
|
Element['body'].off('click', &@close_event_handler)
|
254
|
+
@visible = false
|
239
255
|
end
|
240
256
|
|
241
257
|
def root_menu?
|
@@ -24,6 +24,14 @@ module Glimmer
|
|
24
24
|
margin-left: auto;
|
25
25
|
margin-right: auto;
|
26
26
|
}
|
27
|
+
|
28
|
+
.row-layout-wrap {
|
29
|
+
flex-wrap: wrap;
|
30
|
+
}
|
31
|
+
|
32
|
+
.row-layout-justify {
|
33
|
+
justify-content: space-around;
|
34
|
+
}
|
27
35
|
|
28
36
|
.row-layout-horizontal {
|
29
37
|
flex-direction: row;
|
@@ -42,13 +50,14 @@ module Glimmer
|
|
42
50
|
}
|
43
51
|
CSS
|
44
52
|
|
45
|
-
attr_reader :type, :
|
53
|
+
attr_reader :type, :margin_width, :margin_height, :margin_top, :margin_right, :margin_bottom, :margin_left, :spacing, :pack, :center, :wrap, :justify
|
46
54
|
|
47
55
|
def initialize(parent, args)
|
48
56
|
super(parent, args)
|
49
57
|
@parent.dom_element.add_class('row-layout')
|
50
58
|
self.type = args.first || :horizontal
|
51
59
|
self.pack = true
|
60
|
+
self.wrap = true
|
52
61
|
end
|
53
62
|
|
54
63
|
def type=(value)
|
@@ -79,9 +88,13 @@ module Glimmer
|
|
79
88
|
end
|
80
89
|
end
|
81
90
|
|
91
|
+
def fill
|
92
|
+
!pack
|
93
|
+
end
|
94
|
+
|
82
95
|
def fill=(value)
|
83
96
|
# TODO verify this is a correct implementation and interpretation of RowLayout in SWT
|
84
|
-
self.pack
|
97
|
+
self.pack = !value
|
85
98
|
end
|
86
99
|
|
87
100
|
def center=(center_value)
|
@@ -94,6 +107,24 @@ module Glimmer
|
|
94
107
|
end
|
95
108
|
end
|
96
109
|
|
110
|
+
def wrap=(wrap_value)
|
111
|
+
@wrap = wrap_value
|
112
|
+
if @wrap
|
113
|
+
parent.dom_element.add_class("row-layout-wrap")
|
114
|
+
else
|
115
|
+
parent.dom_element.remove_class("row-layout-wrap")
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def justify=(justify_value)
|
120
|
+
@justify = justify_value
|
121
|
+
if @justify
|
122
|
+
parent.dom_element.add_class("row-layout-justify")
|
123
|
+
else
|
124
|
+
parent.dom_element.remove_class("row-layout-justify")
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
97
128
|
def margin_width=(pixels)
|
98
129
|
@margin_width = pixels
|
99
130
|
# Using padding for width since margin-right isn't getting respected with width 100%
|
@@ -31,8 +31,8 @@ module Glimmer
|
|
31
31
|
include Glimmer
|
32
32
|
include PropertyOwner
|
33
33
|
|
34
|
-
attr_reader :parent, :args, :path, :children, :enabled, :foreground, :background, :font, :focus, :disposed?, :rendered
|
35
|
-
attr_accessor :menu
|
34
|
+
attr_reader :parent, :args, :path, :children, :enabled, :foreground, :background, :font, :focus, :disposed?, :rendered
|
35
|
+
attr_accessor :menu, :menu_requested, :menu_x, :menu_y
|
36
36
|
alias isDisposed disposed?
|
37
37
|
alias is_disposed disposed?
|
38
38
|
alias rendered? rendered
|
@@ -133,17 +133,16 @@ module Glimmer
|
|
133
133
|
# Executes at the closing of a parent widget curly braces after all children/properties have been added/set
|
134
134
|
def post_add_content
|
135
135
|
if !menu.nil? && !is_a?(MenuProxy) && !is_a?(MenuItemProxy)
|
136
|
-
|
136
|
+
# TODO consider in the future retaining listener registrations to deregister on unsetting of the menu
|
137
|
+
on_mouse_move do |mouse_event|
|
138
|
+
self.menu_x = mouse_event.x
|
139
|
+
self.menu_y = mouse_event.y
|
140
|
+
end
|
141
|
+
on_mouse_down do |mouse_event|
|
137
142
|
if mouse_event.button == 3 # right-click
|
138
|
-
|
139
|
-
dom_element.css('position', 'relative')
|
140
|
-
menu&.render
|
141
|
-
menu.dom_element.css('position', 'absolute')
|
142
|
-
menu.dom_element.css('left', mouse_event.x - parent.get_layout&.margin_width.to_i) # TODO - parent.get_layout&.margin_left.to_i)
|
143
|
-
menu.dom_element.css('top', mouse_event.y - parent.get_layout&.margin_height.to_i - 5) # TODO - parent.get_layout&.margin_top.to_i)
|
144
|
-
@menu_requested = false
|
143
|
+
menu.visible = true
|
145
144
|
end
|
146
|
-
|
145
|
+
end
|
147
146
|
end
|
148
147
|
end
|
149
148
|
|
@@ -321,10 +320,12 @@ module Glimmer
|
|
321
320
|
end
|
322
321
|
|
323
322
|
def default_observation_request_to_event_mapping
|
323
|
+
myself = self
|
324
324
|
mouse_event_handler = -> (event_listener) {
|
325
325
|
-> (event) {
|
326
326
|
# TODO generalize this solution to all widgets that support key presses
|
327
327
|
# TODO support event.location once DOM3 is supported by opal-jquery
|
328
|
+
event.define_singleton_method(:widget) {myself}
|
328
329
|
event.define_singleton_method(:button, &event.method(:which))
|
329
330
|
event.define_singleton_method(:count) {1} # TODO support double-click count of 2 in the future by using ondblclick
|
330
331
|
event.define_singleton_method(:x, &event.method(:page_x))
|
@@ -345,6 +346,31 @@ module Glimmer
|
|
345
346
|
# event.prevent
|
346
347
|
# event.stop
|
347
348
|
# event.stop_immediate
|
349
|
+
# end
|
350
|
+
}
|
351
|
+
}
|
352
|
+
mouse_move_event_handler = -> (event_listener) {
|
353
|
+
-> (event) {
|
354
|
+
# TODO generalize this solution to all widgets that support key presses
|
355
|
+
# TODO support event.location once DOM3 is supported by opal-jquery
|
356
|
+
event.define_singleton_method(:widget) {myself}
|
357
|
+
event.define_singleton_method(:button, &event.method(:which))
|
358
|
+
event.define_singleton_method(:count) {1} # TODO support double-click count of 2 in the future by using ondblclick
|
359
|
+
event.define_singleton_method(:x, &event.method(:page_x))
|
360
|
+
event.define_singleton_method(:y, &event.method(:page_y))
|
361
|
+
doit = true
|
362
|
+
event.define_singleton_method(:doit=) do |value|
|
363
|
+
doit = value
|
364
|
+
end
|
365
|
+
event.define_singleton_method(:doit) { doit }
|
366
|
+
|
367
|
+
event_listener.call(event)
|
368
|
+
|
369
|
+
# TODO Imlement doit properly for all different kinds of events
|
370
|
+
# unless doit
|
371
|
+
# event.prevent
|
372
|
+
# event.stop
|
373
|
+
# event.stop_immediate
|
348
374
|
# end
|
349
375
|
}
|
350
376
|
}
|
@@ -352,6 +378,7 @@ module Glimmer
|
|
352
378
|
-> (event) {
|
353
379
|
# TODO generalize this solution to all widgets that support key presses
|
354
380
|
# TODO support event.location once DOM3 is supported by opal-jquery
|
381
|
+
event.define_singleton_method(:widget) {myself}
|
355
382
|
event.define_singleton_method(:button, &event.method(:which))
|
356
383
|
event.define_singleton_method(:count) {1} # TODO support double-click count of 2 in the future by using ondblclick
|
357
384
|
event.define_singleton_method(:x, &event.method(:page_x))
|
@@ -366,7 +393,6 @@ module Glimmer
|
|
366
393
|
event.prevent
|
367
394
|
event_listener.call(event)
|
368
395
|
end
|
369
|
-
|
370
396
|
# TODO Imlement doit properly for all different kinds of events
|
371
397
|
# unless doit
|
372
398
|
# event.prevent
|
@@ -382,6 +408,12 @@ module Glimmer
|
|
382
408
|
'on_focus_lost' => {
|
383
409
|
event: 'blur',
|
384
410
|
},
|
411
|
+
'on_mouse_move' => [
|
412
|
+
{
|
413
|
+
event: 'mousemove',
|
414
|
+
event_handler: mouse_move_event_handler,
|
415
|
+
},
|
416
|
+
],
|
385
417
|
'on_mouse_up' => [
|
386
418
|
{
|
387
419
|
event: 'mouseup',
|
@@ -428,6 +460,7 @@ module Glimmer
|
|
428
460
|
-> (event) {
|
429
461
|
# TODO generalize this solution to all widgets that support key presses
|
430
462
|
# TODO support event.location once DOM3 is supported by opal-jquery
|
463
|
+
event.define_singleton_method(:widget) {myself}
|
431
464
|
event.define_singleton_method(:keyCode) {event.which}
|
432
465
|
event.define_singleton_method(:key_code, &event.method(:keyCode))
|
433
466
|
event.define_singleton_method(:character) {event.which.chr}
|
@@ -464,6 +497,7 @@ module Glimmer
|
|
464
497
|
-> (event) {
|
465
498
|
# TODO generalize this solution to all widgets that support key presses
|
466
499
|
# TODO support event.location once DOM3 is supported by opal-jquery
|
500
|
+
event.define_singleton_method(:widget) {myself}
|
467
501
|
event.define_singleton_method(:keyCode) {event.which}
|
468
502
|
event.define_singleton_method(:key_code, &event.method(:keyCode))
|
469
503
|
event.define_singleton_method(:character) {event.which.chr}
|
@@ -500,6 +534,7 @@ module Glimmer
|
|
500
534
|
-> (event) {
|
501
535
|
# TODO generalize this solution to all widgets that support key presses
|
502
536
|
# TODO support event.location once DOM3 is supported by opal-jquery
|
537
|
+
event.define_singleton_method(:widget) {myself}
|
503
538
|
event.define_singleton_method(:keyCode) {event.which}
|
504
539
|
event.define_singleton_method(:key_code, &event.method(:keyCode))
|
505
540
|
event.define_singleton_method(:character) {event.which.chr}
|
@@ -536,6 +571,7 @@ module Glimmer
|
|
536
571
|
-> (event) {
|
537
572
|
# TODO generalize this solution to all widgets that support key presses
|
538
573
|
# TODO support event.location once DOM3 is supported by opal-jquery
|
574
|
+
event.define_singleton_method(:widget) {myself}
|
539
575
|
event.define_singleton_method(:keyCode) {event.which}
|
540
576
|
event.define_singleton_method(:key_code, &event.method(:keyCode))
|
541
577
|
event.define_singleton_method(:character) {event.which.chr}
|
@@ -924,6 +960,7 @@ end
|
|
924
960
|
require 'glimmer/swt/display_proxy'
|
925
961
|
require 'glimmer/swt/browser_proxy'
|
926
962
|
require 'glimmer/swt/button_proxy'
|
963
|
+
require 'glimmer/swt/arrow_proxy'
|
927
964
|
require 'glimmer/swt/combo_proxy'
|
928
965
|
require 'glimmer/swt/checkbox_proxy'
|
929
966
|
require 'glimmer/swt/composite_proxy'
|
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.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AndyMaleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-13 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: 2.0.
|
19
|
+
version: 2.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: 2.0.
|
26
|
+
version: 2.0.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: glimmer-dsl-xml
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -267,6 +267,7 @@ files:
|
|
267
267
|
- app/controllers/glimmer/image_paths_controller.rb
|
268
268
|
- app/views/glimmer/image_paths/index.html.erb
|
269
269
|
- config/routes.rb
|
270
|
+
- lib/cgi.rb
|
270
271
|
- lib/display.rb
|
271
272
|
- lib/glimmer-dsl-opal.rb
|
272
273
|
- lib/glimmer-dsl-opal/ext/class.rb
|
@@ -283,17 +284,20 @@ files:
|
|
283
284
|
- lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/board.rb
|
284
285
|
- lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/cell.rb
|
285
286
|
- lib/glimmer-dsl-opal/samples/elaborate/weather.rb
|
287
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_arrow.rb
|
286
288
|
- lib/glimmer-dsl-opal/samples/hello/hello_browser.rb
|
287
289
|
- lib/glimmer-dsl-opal/samples/hello/hello_button.rb
|
288
290
|
- lib/glimmer-dsl-opal/samples/hello/hello_checkbox.rb
|
289
291
|
- lib/glimmer-dsl-opal/samples/hello/hello_checkbox_group.rb
|
290
292
|
- lib/glimmer-dsl-opal/samples/hello/hello_combo.rb
|
293
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_composite.rb
|
291
294
|
- lib/glimmer-dsl-opal/samples/hello/hello_computed.rb
|
292
295
|
- lib/glimmer-dsl-opal/samples/hello/hello_custom_shell.rb
|
293
296
|
- lib/glimmer-dsl-opal/samples/hello/hello_custom_widget.rb
|
294
297
|
- lib/glimmer-dsl-opal/samples/hello/hello_date_time.rb
|
295
298
|
- lib/glimmer-dsl-opal/samples/hello/hello_dialog.rb
|
296
299
|
- lib/glimmer-dsl-opal/samples/hello/hello_group.rb
|
300
|
+
- lib/glimmer-dsl-opal/samples/hello/hello_layout.rb
|
297
301
|
- lib/glimmer-dsl-opal/samples/hello/hello_list_multi_selection.rb
|
298
302
|
- lib/glimmer-dsl-opal/samples/hello/hello_list_single_selection.rb
|
299
303
|
- lib/glimmer-dsl-opal/samples/hello/hello_menu_bar.rb
|
@@ -324,6 +328,7 @@ files:
|
|
324
328
|
- lib/glimmer-dsl-opal/vendor/jquery-ui/package.json
|
325
329
|
- lib/glimmer-dsl-opal/vendor/jquery.js
|
326
330
|
- lib/glimmer-dsl-swt.rb
|
331
|
+
- lib/glimmer/config.rb
|
327
332
|
- lib/glimmer/config/opal_logger.rb
|
328
333
|
- lib/glimmer/data_binding/element_binding.rb
|
329
334
|
- lib/glimmer/data_binding/list_selection_binding.rb
|
@@ -366,6 +371,7 @@ files:
|
|
366
371
|
- lib/glimmer/dsl/opal/widget_listener_expression.rb
|
367
372
|
- lib/glimmer/engine.rb
|
368
373
|
- lib/glimmer/swt.rb
|
374
|
+
- lib/glimmer/swt/arrow_proxy.rb
|
369
375
|
- lib/glimmer/swt/browser_proxy.rb
|
370
376
|
- lib/glimmer/swt/button_proxy.rb
|
371
377
|
- lib/glimmer/swt/checkbox_proxy.rb
|
@@ -436,7 +442,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
436
442
|
- !ruby/object:Gem::Version
|
437
443
|
version: '0'
|
438
444
|
requirements: []
|
439
|
-
rubygems_version: 3.2.
|
445
|
+
rubygems_version: 3.2.3
|
440
446
|
signing_key:
|
441
447
|
specification_version: 4
|
442
448
|
summary: Glimmer DSL for Opal
|