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.
@@ -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&.gsub("\n", '<br />')
40
+ text && CGI.escape_html(text).gsub("\n", '<br />')
41
41
  end
42
42
 
43
- def background_image=(*image_options)
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
- end
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', "normal") if @grab_excess_horizontal_space
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, :fill, :margin_width, :margin_height, :margin_top, :margin_right, :margin_bottom, :margin_left, :spacing, :pack, :center
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(!value)
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, :menu_requested
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
- on_mouse_down { |mouse_event|
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
- @menu_requested = true
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.15.1
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-07-12 00:00:00.000000000 Z
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.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.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.22
445
+ rubygems_version: 3.2.3
440
446
  signing_key:
441
447
  specification_version: 4
442
448
  summary: Glimmer DSL for Opal