glimmer-dsl-opal 0.10.2 → 0.10.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e5d23c66c0aec896d96111427221f61325f4239f1f45f4b5115e3a99c922c2c
4
- data.tar.gz: cc9205606ad7d07b24bc8755190de7a763ae5aff5380d59a6280ff291e0d0d6f
3
+ metadata.gz: be56447c904415b875ba3b0005c9b976eb942f0104aa5b8ab38ecb9ae5c2ea3c
4
+ data.tar.gz: 7dbfaa89ea361d08fed055ff163b723a3b0b8ae8ffd298d878175f5e2b78954f
5
5
  SHA512:
6
- metadata.gz: 7c21c30a8f1c2b2601fa974bb241d1228de285429ea25df542adbb58d94100d27f953925610e21cff6629ffdd821a4084ca3fc6f1528592d0568df51d944abe7
7
- data.tar.gz: '091ec964115f9672ef746ff7c3a5689df3a5b578acce8d32754c02c8fe193368e41e8113651452b678eb5d0d7d2d688872e79b0a35477219df61ebcf18fc3fd2'
6
+ metadata.gz: 8b1917799d722e876c3fa77e8d0b93bd0fe0eafa05c1fc0a7faebc4241e91bad634b2968adc9e4ffdad0541c8a11aa2d31fd56d5c819644a877d72f6deab2201
7
+ data.tar.gz: 571cc3bd410695e8c542334968a07503ee1a492e408cceccfb0f82a6681f6cdb9674924bbf7e7f794f394439fc55fbc7eae6012c04d8fc8bee2943e391b23541
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for Opal 0.10.2 (Pure Ruby Web GUI)
1
+ # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for Opal 0.10.3 (Pure Ruby Web GUI)
2
2
  [![Gem Version](https://badge.fury.io/rb/glimmer-dsl-opal.svg)](http://badge.fury.io/rb/glimmer-dsl-opal)
3
3
  [![Join the chat at https://gitter.im/AndyObtiva/glimmer](https://badges.gitter.im/AndyObtiva/glimmer.svg)](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
4
4
 
@@ -141,7 +141,7 @@ Hello, Table! Game Booked
141
141
 
142
142
  NOTE: Glimmer DSL for Opal is an alpha project. Please help make better by contributing, adopting for small or low risk projects, and providing feedback. It is still an early alpha, so the more feedback and issues you report the better.
143
143
 
144
- **Alpha Version** 0.10.2 only supports bare-minimum capabilities for the included [samples](https://github.com/AndyObtiva/glimmer-dsl-opal#samples) (originally written for [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt))
144
+ **Alpha Version** 0.10.3 only supports bare-minimum capabilities for the included [samples](https://github.com/AndyObtiva/glimmer-dsl-opal#samples) (originally written for [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt))
145
145
 
146
146
  Other [Glimmer](https://github.com/AndyObtiva/glimmer) DSL gems:
147
147
  - [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt): Glimmer DSL for SWT (JRuby Desktop Development GUI Framework)
@@ -151,7 +151,7 @@ Other [Glimmer](https://github.com/AndyObtiva/glimmer) DSL gems:
151
151
 
152
152
  ## Table of Contents
153
153
 
154
- - [Glimmer DSL for Opal 0.10.2 (Pure Ruby Web GUI)](#-glimmer-dsl-for-opal-0101-pure-ruby-web-gui)
154
+ - [Glimmer DSL for Opal 0.10.3 (Pure Ruby Web GUI)](#-glimmer-dsl-for-opal-0101-pure-ruby-web-gui)
155
155
  - [Principles](#principles)
156
156
  - [Background](#background)
157
157
  - [Pre-requisites](#pre-requisites)
@@ -249,7 +249,7 @@ Add the following to `Gemfile`:
249
249
  gem 'opal-rails', '~> 1.1.2'
250
250
  gem 'opal-async', '~> 1.2.0'
251
251
  gem 'opal-jquery', '~> 0.4.4'
252
- gem 'glimmer-dsl-opal', '~> 0.10.2'
252
+ gem 'glimmer-dsl-opal', '~> 0.10.3'
253
253
  gem 'glimmer-dsl-xml', '~> 1.1.0', require: false
254
254
  gem 'glimmer-dsl-css', '~> 1.1.0', require: false
255
255
 
@@ -310,7 +310,7 @@ shell {
310
310
 
311
311
  ## Supported Glimmer DSL Keywords
312
312
 
313
- The following keywords from [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt) have partial support in Opal:
313
+ The following keywords from [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt) have fully functional partial support in Opal:
314
314
 
315
315
  Widgets:
316
316
  - `button`: featured in [Hello, Checkbox!](#hello-checkbox) / [Hello, Button!](#hello-button) / [Hello, Table!](#hello-table) / [Hello, Radio Group!](#hello-radio-group) / [Hello, Radio!](#hello-radio) / [Hello, Message Box!](#hello-message-box) / [Hello, List Single Selection!](#hello-list-single-selection) / [Hello, List Multi Selection!](#hello-list-multi-selection) / [Hello, Group!](#hello-group) / [Hello, Combo!](#hello-combo) / [Hello, Checkbox Group!](#hello-checkbox-group) / [Contact Manager](#contact-manager) / [Tic Tac Toe](#tic-tac-toe) / [Login](#login)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.10.2
1
+ 0.10.3
@@ -84,7 +84,7 @@ if RUBY_ENGINE == 'opal'
84
84
  Element.alias_native :select
85
85
  Element.alias_native :dialog
86
86
 
87
- Glimmer::Config.loop_max_count = 10 # TODO disable
87
+ Glimmer::Config.loop_max_count = 300 # TODO disable
88
88
 
89
89
  original_logger_level = Glimmer::Config.logger.level
90
90
  Glimmer::Config.logger = Glimmer::Config::OpalLogger.new(STDOUT)
@@ -51,7 +51,7 @@ module Glimmer
51
51
  custom_widget_class = UI::CustomWidget.for(keyword)
52
52
  # TODO clean code by extracting methods into CustomShell
53
53
  if !Glimmer::UI::CustomShell.requested? && custom_widget_class&.ancestors&.to_a.include?(Glimmer::UI::CustomShell)
54
- if Glimmer::SWT::DisplayProxy.instance.shells.empty?
54
+ if Glimmer::SWT::DisplayProxy.instance.shells.empty? || Glimmer::SWT::DisplayProxy.open_custom_shells_in_current_window?
55
55
  custom_widget_class.new(parent, *args, {}, &block)
56
56
  else
57
57
  options = args.last.is_a?(Hash) ? args.pop : {}
@@ -28,6 +28,7 @@ require 'glimmer/dsl/opal/checkbox_group_selection_data_binding_expression'
28
28
  require 'glimmer/dsl/opal/block_property_expression'
29
29
  require 'glimmer/dsl/opal/menu_expression'
30
30
  require 'glimmer/dsl/opal/dialog_expression'
31
+ require 'glimmer/dsl/opal/shape_expression'
31
32
 
32
33
  module Glimmer
33
34
  module DSL
@@ -47,6 +48,7 @@ module Glimmer
47
48
  layout
48
49
  block_property
49
50
  property
51
+ shape
50
52
  widget
51
53
  ]
52
54
  )
@@ -0,0 +1,26 @@
1
+ require 'glimmer/dsl/expression'
2
+ require 'glimmer/dsl/parent_expression'
3
+
4
+ module Glimmer
5
+ module DSL
6
+ module Opal
7
+ class ShapeExpression < Expression
8
+ include ParentExpression
9
+
10
+ INCLUDED_KEYWORDS = %w[rectangle polygon]
11
+
12
+ def can_interpret?(parent, keyword, *args, &block)
13
+ INCLUDED_KEYWORDS.include?(keyword)
14
+ end
15
+
16
+ def interpret(parent, keyword, *args, &block)
17
+ # TODO
18
+ end
19
+
20
+ def add_content(parent, &block)
21
+ # TODO
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -44,6 +44,8 @@ module Glimmer
44
44
 
45
45
  end
46
46
 
47
+ CanvasProxy = CompositeProxy # TODO implement fully eventually
48
+
47
49
  end
48
50
 
49
51
  end
@@ -7,6 +7,9 @@ module Glimmer
7
7
  def instance
8
8
  @instance ||= new
9
9
  end
10
+
11
+ attr_accessor :open_custom_shells_in_current_window
12
+ alias open_custom_shells_in_current_window? open_custom_shells_in_current_window
10
13
  end
11
14
 
12
15
  def initialize
@@ -62,6 +65,10 @@ module Glimmer
62
65
  # No rendering as body is rendered as part of ShellProxy.. this class only serves as an SWT Display utility
63
66
  end
64
67
 
68
+ def beep
69
+ # TODO (simulate beep from SWT display flashing the screen and making a noise if possible)
70
+ end
71
+
65
72
  def async_exec(proc_tracker = nil, &block)
66
73
  block = proc_tracker unless proc_tracker.nil?
67
74
  queue = nil # general queue
@@ -87,7 +94,34 @@ module Glimmer
87
94
  event.singleton_class.define_method(:character) do
88
95
  which || key_code
89
96
  end
97
+ event.define_singleton_method(:keyCode) {event.which}
98
+ event.define_singleton_method(:key_code, &event.method(:keyCode))
99
+ event.define_singleton_method(:character) {event.which.chr}
100
+ event.define_singleton_method(:stateMask) do
101
+ state_mask = 0
102
+ state_mask |= SWTProxy[:alt] if event.alt_key
103
+ state_mask |= SWTProxy[:ctrl] if event.ctrl_key
104
+ state_mask |= SWTProxy[:shift] if event.shift_key
105
+ state_mask |= SWTProxy[:command] if event.meta_key
106
+ state_mask
107
+ end
108
+ event.define_singleton_method(:state_mask, &event.method(:stateMask))
109
+ doit = true
110
+ event.define_singleton_method(:doit=) do |value|
111
+ doit = value
112
+ end
113
+ event.define_singleton_method(:doit) { doit }
90
114
  event_listener.call(event)
115
+
116
+ # TODO Fix doit false, it's not stopping input
117
+ unless doit
118
+ event.prevent
119
+ event.prevent_default
120
+ event.stop_propagation
121
+ event.stop_immediate_propagation
122
+ end
123
+
124
+ doit
91
125
  }
92
126
  }
93
127
  },
@@ -98,7 +132,34 @@ module Glimmer
98
132
  event.singleton_class.define_method(:character) do
99
133
  which || key_code
100
134
  end
135
+ event.define_singleton_method(:keyCode) {event.which}
136
+ event.define_singleton_method(:key_code, &event.method(:keyCode))
137
+ event.define_singleton_method(:character) {event.which.chr}
138
+ event.define_singleton_method(:stateMask) do
139
+ state_mask = 0
140
+ state_mask |= SWTProxy[:alt] if event.alt_key
141
+ state_mask |= SWTProxy[:ctrl] if event.ctrl_key
142
+ state_mask |= SWTProxy[:shift] if event.shift_key
143
+ state_mask |= SWTProxy[:command] if event.meta_key
144
+ state_mask
145
+ end
146
+ event.define_singleton_method(:state_mask, &event.method(:stateMask))
147
+ doit = true
148
+ event.define_singleton_method(:doit=) do |value|
149
+ doit = value
150
+ end
151
+ event.define_singleton_method(:doit) { doit }
101
152
  event_listener.call(event) if event.key_code != 13 && (event.key_code == 127 || event.key_code <= 31)
153
+
154
+ # TODO Fix doit false, it's not stopping input
155
+ unless doit
156
+ event.prevent
157
+ event.prevent_default
158
+ event.stop_propagation
159
+ event.stop_immediate_propagation
160
+ end
161
+
162
+ doit
102
163
  }
103
164
  }
104
165
  }
@@ -130,7 +191,7 @@ module Glimmer
130
191
  # TODO see if there are more intricate cases of opening a dialog from a widget listener handler
131
192
  if !message_box_open? && (!dialog_open? || queue&.dialog_ancestor == opened_dialogs.last) && ((!queue.nil? && async_exec_queues.keys.last == queue) || no_widget_handling_listener_work?)
132
193
  block = async_exec_queue(queue).pop
133
- block.call
194
+ block&.call
134
195
  Async::Task.new(delay: 1, &executer) if async_exec_queue(queue).any?
135
196
  else
136
197
  Async::Task.new(delay: 100, &executer)
@@ -19,6 +19,23 @@ module Glimmer
19
19
  # TODO do the following instead of reapply
20
20
  # @parent.add_css_class("num-columns-#{@num_columns}")
21
21
  # reinitialize # TODO reimplement without using reinitialize
22
+ layout_css = <<~CSS
23
+ grid-template-columns: #{'auto ' * @num_columns.to_i};
24
+ grid-row-gap: #{@vertical_spacing}px;
25
+ grid-column-gap: #{@horizontal_spacing}px;
26
+ CSS
27
+ if @parent.css_classes.include?('grid-layout')
28
+ layout_css.split(";").map(&:strip).map {|l| l.split(':').map(&:strip)}.each do |key, value|
29
+ @parent.dom_element.css(key, value) unless key.nil?
30
+ end
31
+ if @parent.is_a?(GroupProxy)
32
+ @parent.dom_element.find('legend').css('grid-column-start', "span #{@num_columns.to_i}")
33
+ end
34
+ else
35
+ layout_css.split(";").map(&:strip).map {|l| l.split(':').map(&:strip)}.each do |key, value|
36
+ @parent.dom_element.css(key, 'initial') unless key.nil?
37
+ end
38
+ end
22
39
  end
23
40
 
24
41
  def make_columns_equal_width=(equal_width)
@@ -63,23 +80,6 @@ module Glimmer
63
80
  self.margin_width = 15
64
81
  self.margin_height = 15
65
82
  self.num_columns = @args.first || 1
66
- layout_css = <<~CSS
67
- grid-template-columns: #{'auto ' * @num_columns.to_i};
68
- grid-row-gap: #{@vertical_spacing}px;
69
- grid-column-gap: #{@horizontal_spacing}px;
70
- CSS
71
- if @parent.css_classes.include?('grid-layout')
72
- layout_css.split(";").map(&:strip).map {|l| l.split(':').map(&:strip)}.each do |key, value|
73
- @parent.dom_element.css(key, value) unless key.nil?
74
- end
75
- if @parent.is_a?(GroupProxy)
76
- @parent.dom_element.find('legend').css('grid-column-start', "span #{@num_columns.to_i}")
77
- end
78
- else
79
- layout_css.split(";").map(&:strip).map {|l| l.split(':').map(&:strip)}.each do |key, value|
80
- @parent.dom_element.css(key, 'initial') unless key.nil?
81
- end
82
- end
83
83
  end
84
84
  end
85
85
  end
@@ -42,13 +42,17 @@ module Glimmer
42
42
  }
43
43
  CSS
44
44
 
45
- attr_reader :type, :margin_width, :margin_height, :margin_top, :margin_right, :margin_bottom, :margin_left, :spacing, :pack, :center
45
+ attr_reader :type, :fill, :margin_width, :margin_height, :margin_top, :margin_right, :margin_bottom, :margin_left, :spacing, :pack, :center
46
46
 
47
47
  def initialize(parent, args)
48
48
  super(parent, args)
49
- @type = args.first || :horizontal
50
- self.pack = true
51
49
  @parent.dom_element.add_class('row-layout')
50
+ self.type = args.first || :horizontal
51
+ self.pack = true
52
+ end
53
+
54
+ def type=(value)
55
+ @type = value
52
56
  @parent.dom_element.add_class(horizontal? ? 'row-layout-horizontal' : 'row-layout-vertical')
53
57
  end
54
58
 
@@ -75,6 +79,11 @@ module Glimmer
75
79
  end
76
80
  end
77
81
 
82
+ def fill=(value)
83
+ # TODO verify this is a correct implementation and interpretation of RowLayout in SWT
84
+ self.pack(!value)
85
+ end
86
+
78
87
  def center=(center_value)
79
88
  @center = center_value
80
89
  # Using padding for width since margin-right isn't getting respected with width 100%
@@ -28,15 +28,29 @@ module Glimmer
28
28
  module CustomShell
29
29
  include Glimmer::UI::CustomWidget
30
30
 
31
+ module ClassMethods
32
+ attr_reader :custom_shell
33
+
34
+ def launch
35
+ @custom_shell = send(self.name.underscore.gsub('::', '__'))
36
+ @custom_shell.open
37
+ end
38
+
39
+ def shutdown
40
+ @custom_shell.close
41
+ end
42
+ end
43
+
31
44
  class << self
32
45
  def included(klass)
33
46
  klass.extend(CustomWidget::ClassMethods)
47
+ klass.extend(CustomShell::ClassMethods)
34
48
  klass.include(Glimmer)
35
49
  Glimmer::UI::CustomWidget.add_custom_widget_namespaces_for(klass)
36
50
  keyword = klass.name.split(':').last.underscore
37
51
  LocalStorage[keyword] = $LOADED_FEATURES.last
38
52
  end
39
-
53
+
40
54
  def request_parameter_string
41
55
  URI.decode_www_form_component(`document.location.href`.match(/\?(.*)$/).to_a[1].to_s)
42
56
  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.10.2
4
+ version: 0.10.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-17 00:00:00.000000000 Z
11
+ date: 2021-01-25 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: 1.0.7
19
+ version: 1.0.10
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: 1.0.7
26
+ version: 1.0.10
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: glimmer-dsl-xml
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2.0
61
+ version: '1.2'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.2.0
68
+ version: '1.2'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: to_collection
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -347,6 +347,7 @@ files:
347
347
  - lib/glimmer/dsl/opal/radio_group_selection_data_binding_expression.rb
348
348
  - lib/glimmer/dsl/opal/rgb_expression.rb
349
349
  - lib/glimmer/dsl/opal/rgba_expression.rb
350
+ - lib/glimmer/dsl/opal/shape_expression.rb
350
351
  - lib/glimmer/dsl/opal/shell_expression.rb
351
352
  - lib/glimmer/dsl/opal/swt_expression.rb
352
353
  - lib/glimmer/dsl/opal/sync_exec_expression.rb