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.
@@ -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