glimmer-dsl-opal 0.15.1 → 0.17.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 +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
|