glimmer-dsl-opal 0.10.3 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +233 -0
  3. data/README.md +10 -7
  4. data/VERSION +1 -1
  5. data/lib/glimmer-dsl-opal/ext/glimmer/dsl/engine.rb +1 -1
  6. data/lib/glimmer-dsl-opal/samples/elaborate/login.rb +7 -7
  7. data/lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb +2 -2
  8. data/lib/glimmer-dsl-opal/samples/hello/hello_button.rb +1 -1
  9. data/lib/glimmer-dsl-opal/samples/hello/hello_checkbox.rb +4 -4
  10. data/lib/glimmer-dsl-opal/samples/hello/hello_combo.rb +1 -1
  11. data/lib/glimmer-dsl-opal/samples/hello/hello_computed.rb +5 -5
  12. data/lib/glimmer-dsl-opal/samples/hello/hello_date_time.rb +4 -4
  13. data/lib/glimmer-dsl-opal/samples/hello/hello_group.rb +6 -6
  14. data/lib/glimmer-dsl-opal/samples/hello/hello_list_multi_selection.rb +1 -1
  15. data/lib/glimmer-dsl-opal/samples/hello/hello_list_single_selection.rb +1 -1
  16. data/lib/glimmer-dsl-opal/samples/hello/hello_radio.rb +6 -6
  17. data/lib/glimmer/data_binding/table_items_binding.rb +2 -1
  18. data/lib/glimmer/dsl/opal/bind_expression.rb +24 -25
  19. data/lib/glimmer/dsl/opal/custom_widget_expression.rb +5 -5
  20. data/lib/glimmer/dsl/opal/dsl.rb +2 -0
  21. data/lib/glimmer/dsl/opal/menu_expression.rb +1 -1
  22. data/lib/glimmer/dsl/opal/property_expression.rb +2 -1
  23. data/lib/glimmer/dsl/opal/shape_expression.rb +1 -1
  24. data/lib/glimmer/dsl/opal/shell_expression.rb +1 -1
  25. data/lib/glimmer/dsl/opal/shine_data_binding_expression.rb +49 -0
  26. data/lib/glimmer/dsl/opal/widget_expression.rb +1 -1
  27. data/lib/glimmer/swt/combo_proxy.rb +1 -0
  28. data/lib/glimmer/swt/dialog_proxy.rb +1 -1
  29. data/lib/glimmer/swt/display_proxy.rb +1 -0
  30. data/lib/glimmer/swt/message_box_proxy.rb +1 -1
  31. data/lib/glimmer/swt/widget_proxy.rb +3 -4
  32. metadata +14 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be56447c904415b875ba3b0005c9b976eb942f0104aa5b8ab38ecb9ae5c2ea3c
4
- data.tar.gz: 7dbfaa89ea361d08fed055ff163b723a3b0b8ae8ffd298d878175f5e2b78954f
3
+ metadata.gz: c9eec417d33069c8ecf49c9450b46f7552702d2e83993334f7289739c4b61440
4
+ data.tar.gz: 2d3a8606327d4686ef21d18e605a29679a8f47663959b6e971777fca928b2fe4
5
5
  SHA512:
6
- metadata.gz: 8b1917799d722e876c3fa77e8d0b93bd0fe0eafa05c1fc0a7faebc4241e91bad634b2968adc9e4ffdad0541c8a11aa2d31fd56d5c819644a877d72f6deab2201
7
- data.tar.gz: 571cc3bd410695e8c542334968a07503ee1a492e408cceccfb0f82a6681f6cdb9674924bbf7e7f794f394439fc55fbc7eae6012c04d8fc8bee2943e391b23541
6
+ metadata.gz: d5b668bd3ddf0629e4c335de3c530622d30a4aeb472ac6e615bc5aca62798552b652ca8f6b4a6a4e90421f06231364a1ffa88ab9b339805f053e387de7ffefec
7
+ data.tar.gz: 397097b8640b63d2ef8e9b72c4be169c79fa276c46f0aad3cb8d0f69b0fec3716d710498b35309dcd58c3f951711a1bb3d011a27533e452107958189333932f0
data/CHANGELOG.md ADDED
@@ -0,0 +1,233 @@
1
+ # Change Log
2
+
3
+ ## 0.11.0
4
+
5
+ - Upgrade to glimmer 2.0.0
6
+ - Support Shine syntax for basic widgets (no support for table, tree, shapes, custom widgets, or custom shells)
7
+ - Update samples to use Shine syntax
8
+
9
+ ## 0.10.3
10
+
11
+ - Upgrade to glimmer 1.0.10
12
+ - Improvements to row_layout and grid_layout
13
+ - Adding launch/shutdown class methods to Custom Shells
14
+
15
+ ## 0.10.2
16
+
17
+ - Support multiple dialogs/message_box'es opened from a listener, handling correct ordering of display with a queue scheduler
18
+
19
+ ## 0.10.1
20
+
21
+ - Delaying shell rendering till `#open` method is called as per the right expectation
22
+ - When nesting dialogs on top of each other, disable all previously opened ones leaving only the top-most dialog active
23
+
24
+ ## 0.10.0
25
+
26
+ - Hello, Dialog! Sample
27
+ - Support `dialog` widget
28
+ - Support `width` and `height` on `layout_data` for `row_layout`
29
+ - Support `center` for `row_layout`
30
+
31
+ ## 0.9.3
32
+
33
+ - Extracted pure Ruby Struct to pure-struct gem (since it's also used by YASL)
34
+ - Alpha experimental incomplete implementation of Net::HTTP.post_form
35
+ - Fixed issue with not being able to interact with a shell proxy (LatestShellProxy) after opening (made class autoupgradable to attached ShellProxy after document ready)
36
+
37
+ ## 0.9.2
38
+
39
+ - Fixed issue with opening message_box after internalizing the Document.ready? block
40
+ - Fixed issue with replacing newlines with HTML newlines in `label` and `message_box` text
41
+
42
+ ## 0.9.1
43
+
44
+ - Log errors to error stream ($stderr) instead of standard out (STDOUT)
45
+ - Fixed issue with opening shell caused by internalizing the Document.ready? block
46
+
47
+ ## 0.9.0
48
+
49
+ - Support `menu_bar`
50
+ - Hello, Menu Bar! Sample
51
+ - Remove the need to call Document.ready? before opening a Glimmer shell
52
+ - Support opening a message_box before creating a shell
53
+
54
+ ## 0.8.0
55
+
56
+ - Hello, Pop Up Context Menu! Sample
57
+ - Hello Message Box!
58
+ - Update hello list samples
59
+ - Support context menus `menu`/`menu_item` directly under a widget (using jQuery UI)
60
+ - Support generating new lines when entering `label` `text` with \n (auto-converting to <br />)
61
+ - Support generating new lines when entering `message_box` `message` with \n (auto-converting to <br />)
62
+ - Support having any widget contribute static CSS to ShellProxy
63
+ - Add Kernel#include_package shim to allow running JRuby include_package from Glimmer DSL for SWT without failing
64
+ - Add WidgetProxy#swt_widget to allow running include_package from Glimmer DSL for SWT without failing
65
+
66
+ ## 0.7.5
67
+
68
+ - Update login sample from Glimmer DSL for SWT's latest changes
69
+ - Update contact_manager sample from Glimmer DSL for SWT's latest changes
70
+ - Fixed issue regarding unavailable localStorage data when accessed by custom_widget_expression in hello_checkbox_group, hello_radio_group, and hello_custom_widget
71
+
72
+ ## 0.7.4
73
+
74
+ - Hello, Button! Sample
75
+ - Fix issue with aligning label as :left, :center, or :right via style style when fill_layout is used
76
+ - Fix Hello, Browser sample by accessing https ssl website
77
+ - Fix issue with filling space horizontally when using grid layout
78
+ - Fix broken embedded `calendar` widget data-binding for hello_date_time.rb sample
79
+ - Fix broken message_box after opening multiple shells
80
+ - Fix issue with opening custom shells in new tabs/windows when CustomShell subclass is required conditionally
81
+
82
+ ## 0.7.3
83
+
84
+ - Refactor to use to_collection gem
85
+ - Fix issue with breaking `date`/`date_drop_down` data-binding as table editor on focus lost
86
+ - Fix issue with requiring OS, File, and Display class after they've been extracted out
87
+
88
+ ## 0.7.2
89
+
90
+ - `date_drop_down` `table_column` `editor`
91
+ - `date` `table_column` `editor`
92
+ - `time` `table_column` `editor`
93
+ - Implement `on_focus_gained`, `on_focus_lost` universally on all widgets
94
+ - Add support for Struct keyword_init to Opal
95
+ - Fix issue with hello_table button/combo not being centered (yet stretched)
96
+ - Fix issue with table item selection for booking not working after editing has been added
97
+ - Fix escape keyboard event handling for combo table editor
98
+
99
+ ## 0.7.1
100
+
101
+ - Combo table editor (enabled in Hello, Table! sample)
102
+ - Fix issue with table cell selection for editing not working
103
+ - Remove widget from parent upon dispose
104
+ - Remove listeners upon widget dispose
105
+
106
+ ## 0.7.0
107
+
108
+ - Hello, Table! Sample
109
+ - `table` :editable style to enable auto-editing
110
+ - `table` `header_visible` property to hide header when false
111
+ - `table` `item_count` property to set minimum item count (fill empty rows when below in table items)
112
+ - `table` selection data-binding
113
+ - `table` built-in sorting support
114
+ - `table_column` left text alignment and padding of 5px by default
115
+ - `table` sort property and direction in GUI
116
+ - `table_column` sort_property
117
+ - `table_column` sort_by block
118
+ - `table_column` sort block
119
+ - `table` default sort via property, compare block, and property block
120
+ - `table` additional sort properties
121
+ - Prevent `table` unnecessary updates by comparing data to previous data and not updating when it's the same
122
+ - Contact Manager sample support for on_key_pressed in text widgets upon hitting ENTER
123
+ - Fix issue with edit table item error on sorting table
124
+
125
+ ## 0.6.1
126
+
127
+ - Fix issue with rendering date_time without a block
128
+ - Made listener event handling async to improve performance when triggering multiple events
129
+ - Brought Tic Tac Toe sample up-to-date with changes in Glimmer DSL for SWT
130
+ - Fixed silent error encountered in rendering custom widgets
131
+
132
+ ## 0.6.0
133
+
134
+ - Hello, Date Time! Sample
135
+ - Support `date_time`, `date`, `date_drop_down`, `time`, `calendar` keywords
136
+ - Format Date/Time correctly as per SWT implementation by default
137
+ - Make glimmer-dsl-opal gem into a Rails engine to support importing default static assets like CSS styles and images
138
+ - Show drop down icon next to `date_drop_down` and `time`
139
+
140
+ ## 0.5.1
141
+
142
+ - Fixed issue with Hello, Combo!, Hello, List...! samples
143
+
144
+ ## 0.5.0
145
+
146
+ - Add `margin_top`, `margin_right`, `margin_bottom`, and `margin_left` to RowLayoutProxy
147
+ - `radio`
148
+ - Hello, Radio! Sample
149
+ - `radio_group`
150
+ - Hello, Radio Group! Sample
151
+ - `checkbox`
152
+ - Hello, Checkbox! Sample
153
+ - `checkbox_group`
154
+ - Fix issue with `label` `alignment` property
155
+ - Fix issues with default `composite` `grid_layout` not getting its styles removed when setting `row_layout`
156
+ - `button(:radio)` alias for `radio`
157
+ - `check` alias for `checkbox`
158
+ - `button(:check)` alias for `checkbox`
159
+ - Hello, Group! Sample
160
+ - Group widget
161
+
162
+ ## 0.4.0
163
+
164
+ - Support `display` keyword representing an SWT Display
165
+ - Support display `on_swt_keydown` event listener (display-wide widget observer)
166
+ - Support `DisplayProxy#shells` method keeping track of open shell
167
+ - Make a custom shell open in the same window if there is no shell open already
168
+ - Support `sync_exec` keyword as just an alias to `async_exec`
169
+ - Provide a makeshift require for 'glimmer-dsl-swt' that requires 'glimmer-dsl-opal' instead
170
+ - Fake APIs on the web for OS.os?, File.read, Display.setAppName, Display.setAppVersion
171
+ - Provide a minimal URI class that supports URI::encode_www_form_component and URI::decode_www_form_component from Ruby
172
+
173
+ ## 0.3.0
174
+
175
+ - Support opening a custom shell in a browser tab/window by passing in query parameters to URL (e.g. ?custom_shell=keyword+option1=value1 etc...)
176
+ - Make custom shells automatically open in a new tab/window (while standard shells continue to open in the same window by replacing its content)
177
+ - Hello, Custom Shell! Sample
178
+
179
+ ## 0.2.0
180
+
181
+ - Color support
182
+ - Font support
183
+ - Custom Widget Support
184
+ - Hello, Custom Widget! sample
185
+ - Updated Hello, Combo! sample to match the latest changes in Glimmer DSL for SWT
186
+ - `SWT` full re-implementation in Opal as `Glimmer::SWT` with all the `SWT` style constants
187
+
188
+ ## 0.1.0
189
+
190
+ - Code redesign to better match the glimmer-dsl-swt APIs
191
+ - opal-jquery refactoring
192
+ - opal-rspec test coverage
193
+
194
+ ## 0.0.9
195
+
196
+ - Upgraded to glimmer gem v0.9.3
197
+ - Fixed issue with missing Glimmer::Opal::ElementProxy#id=(value) method breaking Contact Manager sample Find feature
198
+
199
+ ## 0.0.8
200
+
201
+ - Contact Manager sample support
202
+
203
+ ## 0.0.7
204
+
205
+ - Tic Tac Toe sample support
206
+ - Login sample support
207
+
208
+ ## 0.0.6
209
+
210
+ - Hello, Tab! sample support
211
+
212
+ ## 0.0.5
213
+
214
+ - Hello, Browser! sample support
215
+
216
+ ## 0.0.4
217
+
218
+ - Hello, List Single Selection! sample support
219
+ - Hello, List Multi Selection! sample support
220
+
221
+ ## 0.0.3
222
+
223
+ - Hello, Computed! sample support
224
+
225
+ ## 0.0.2
226
+
227
+ - Hello, Combo! sample support
228
+
229
+ ## 0.0.1
230
+
231
+ - Initial support for webifying Glimmer SWT apps
232
+ - Support for Shell and Label widgets (text property only).
233
+ - Hello, World! sample support
data/README.md CHANGED
@@ -2,15 +2,15 @@
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
 
5
- ### You can finally live in pure Ruby land on the web!
5
+ ### You can finally live in pure Rubyland on the web!
6
6
 
7
- [Glimmer](https://github.com/AndyObtiva/glimmer) DSL for [Opal](https://opalrb.com/) is an **alpha** [gem](https://rubygems.org/gems/glimmer-dsl-opal) that enables building web GUI in pure Ruby via [Opal](https://opalrb.com/) on [Rails](https://rubyonrails.org/).
7
+ [Glimmer](https://github.com/AndyObtiva/glimmer) DSL for [Opal](https://opalrb.com/) is an **alpha** [gem](https://rubygems.org/gems/glimmer-dsl-opal) that enables building web GUI in pure Ruby via [Opal](https://opalrb.com/) on [Rails](https://rubyonrails.org/) **(now comes with the new Shine data-binding syntax)**.
8
8
 
9
9
  Use in one of two ways:
10
10
  - **Direct:** build the GUI of web apps with the same friendly desktop GUI Ruby syntax as [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt), thus requiring a lot less code than web technologies that is in pure Ruby and avoiding opaque web concepts like 'render' and 'reactive'. No HTML/JS/CSS skills are even required. Web designers may be involved with CSS styling only if needed.
11
11
  - **Adapter:** auto-webify [Glimmer](https://github.com/AndyObtiva/glimmer) desktop apps (i.e. apps built with [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt)) via [Opal](https://opalrb.com/) on [Rails](https://rubyonrails.org/) without changing a line of code. Just insert them as a single require statement in a Rails app, and BOOM! They're running on the web! Apps may then optionally be custom-styled for the web by web designers with standard CSS if needed.
12
12
 
13
- Glimmer DSL for Opal successfully reuses the entire [Glimmer](https://github.com/AndyObtiva/glimmer) core DSL engine in [Opal Ruby](https://opalrb.com/) inside a web browser, and as such inherits the full range of powerful Glimmer desktop [data-binding](https://github.com/AndyObtiva/glimmer#data-binding) capabilities for the web.
13
+ Glimmer DSL for Opal successfully reuses the entire [Glimmer](https://github.com/AndyObtiva/glimmer) core DSL engine in [Opal Ruby](https://opalrb.com/) inside a web browser, and as such inherits the full range of Glimmer desktop [data-binding](https://github.com/AndyObtiva/glimmer#data-binding) capabilities for the web (including Shine syntax using `<=>` and `<=` for bidirectional [two-way] and unidirectional [one-way] data-binding respectively).
14
14
 
15
15
  #### Hello, Table! Sample
16
16
 
@@ -147,7 +147,7 @@ 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)
148
148
  - [glimmer-dsl-xml](https://github.com/AndyObtiva/glimmer-dsl-xml): Glimmer DSL for XML (& HTML)
149
149
  - [glimmer-dsl-css](https://github.com/AndyObtiva/glimmer-dsl-css): Glimmer DSL for CSS (Cascading Style Sheets)
150
- - [glimmer-dsl-tk](https://github.com/AndyObtiva/glimmer-dsl-tk): Glimmer DSL for Tk (Ruby Desktop Development GUI Library)
150
+ - [glimmer-dsl-tk](https://github.com/AndyObtiva/glimmer-dsl-tk): Glimmer DSL for Tk (MRI Ruby Desktop Development GUI Library)
151
151
 
152
152
  ## Table of Contents
153
153
 
@@ -199,15 +199,18 @@ Other [Glimmer](https://github.com/AndyObtiva/glimmer) DSL gems:
199
199
 
200
200
  ## Principles
201
201
 
202
+ Please keep in mind this is a live list of innovative ideas, some of which have not been implemented yet. Watch the project on GitHub to stay up to date with its development.
203
+
202
204
  - **Live purely in Rubyland via the Glimmer GUI DSL**, completely oblivious to web browser technologies, thanks to [Opal](https://opalrb.com/).
203
- - **Forget Routers!** Glimmer DSL for Opal supports auto-routing of custom shells (windows), which are opened as separate tabs in a web browser with automatically generated routes and bookmarkable URLs.
204
- - **HTML is strictly made for creating documents not interactive applications**. As such, software engineers can avoid it and focus on creating web applications more productively with Glimmer DSL for Opal in pure Ruby instead (just like they do in desktop development) while content creators and web designers can be the ones responsible for creating HTML documents for web content purposes only as HTML was originally intended. That way, Glimmer web GUI is used and embedded in web pages when providing users with applications while the rest of the web pages are maintained by non-engineers as pure HTML. This achieves a correct separation of responsibilities and better productivity and maintainability.
205
+ - **HTML is for creating documents not interactive applications**. As such, software engineers can avoid it and focus on creating web applications more productively with Glimmer DSL for Opal in pure Ruby instead (just like they do in desktop development) while content creators and web designers can be the ones responsible for creating HTML documents for web content purposes only as HTML was originally intended. That way, Glimmer web GUI is used and embedded in web pages when providing users with applications while the rest of the web pages are maintained by non-engineers as pure HTML. This achieves a correct separation of responsibilities and better productivity and maintainability.
205
206
  - **Approximate styles by developers via the Glimmer GUI DSL. Perfect styles by designers via pure CSS**. Developers can simply build GUI with approximate styling similar to desktop GUI and mockups without worrying about pixel-perfect aesthetics. Web designers can take styling further with pure CSS since every HTML element auto-generated by Glimmer DSL for Opal has a predictable ID and CSS class. This achieves a proper separation of responsibilities between developers and designers.
206
207
  - **Web servers are used just like servers in traditional client/server architecture**, meaning they simply provide RMI services to enable centralizing some of the application logic and data in the cloud to make available everywhere and enable data-sharing with others.
208
+ - **Everybody In!** All JS frameworks sadly suffer from very major software design handicaps because of trying to ensure data security, so you end up with a very strict separation between server data and client data, making your head spin and worrying more about hackers and attackers than serving users. Try again! Thanks to the principle of Everybody In, Glimmer DSL for Opal apps have a very unique software architecture that revolves around the idea of multi-tenancy. Basically, every user gets their own server-side real-estate, that is a fully-secure-and-independent server-side instance that has its own user database, so hackers are not only intentionally allowed in, they are WELCOMED! As such, instead of protecting all users' data with an iron fist over a shared server/database (a terribly insecure architecture no matter how profilerate), you simply provide each user their own fully-independent server/client real-estate, thus be able to focus on serving them in the best way possible by writing code that is so simple it is just like desktop application code, but living in the Cloud on the Web. In summary, just code web as if you're on the desktop and be happy!
209
+ - **Forget Routers!** Glimmer DSL for Opal supports auto-routing of custom shells (windows), which are opened as separate tabs in a web browser with automatically generated routes and bookmarkable URLs.
207
210
 
208
211
  ## Background
209
212
 
210
- The original idea behind Glimmer DSL for Opal (which later evolved) was that you start by having a [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) desktop app that communicates with a Rails API for any web/cloud concerns. The pure Ruby [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) is very simple, so it is more productive to build GUI in it since it does not go through a server/client request/response cycle and can be iterated on locally with a much shorter feedback cycle. Once the GUI and the rest of the app is built. You simply embed it in a Rails app as a one line require statement, and BOOM, it just works on the web inside a web browser with the same server/client communication you had in the desktop app (I am working on adding minimal support for net/http in Opal so that desktop apps that use it continue to work in a web browser. Until then, just use [Opal-jQuery](https://github.com/opal/opal-jquery) http support). That way, you get two apps for one: desktop and web.
213
+ The original idea behind Glimmer DSL for Opal (which [later evolved](#principles)) was that you start by having a [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) desktop app that communicates with a Rails API for any web/cloud concerns. The pure Ruby [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) is very simple, so it is more productive to build GUI in it since it does not go through a server/client request/response cycle and can be iterated on locally with a much shorter feedback cycle. Once the GUI and the rest of the app is built. You simply embed it in a Rails app as a one line require statement, and BOOM, it just works on the web inside a web browser with the same server/client communication you had in the desktop app (I am working on adding minimal support for net/http in Opal so that desktop apps that use it continue to work in a web browser. Until then, just use [Opal-jQuery](https://github.com/opal/opal-jquery) http support). That way, you get two apps for one: desktop and web.
211
214
 
212
215
  Part of the idea is that web browsers just render GUI widgets similar to those of a desktop app (after all a web browser is a desktop app), so whether you run your GUI on the desktop or on the web should just be a low-level concern, hopefully automated completely with Glimmer DSL for Opal.
213
216
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.10.3
1
+ 0.11.0
@@ -31,7 +31,7 @@ module Glimmer
31
31
  def interpret_expression(expression, keyword, *args, &block)
32
32
  work = lambda do
33
33
  expression.interpret(parent, keyword, *args, &block).tap do |ui_object|
34
- add_content(ui_object, expression, &block)
34
+ add_content(ui_object, expression, keyword, *args, &block)
35
35
  dsl_stack.pop
36
36
  end
37
37
  end
@@ -56,8 +56,8 @@ class Login
56
56
 
57
57
  label { text "Username:" } # goes in column 1
58
58
  @user_name_text = text { # goes in column 2
59
- text bind(presenter, :user_name)
60
- enabled bind(presenter, :logged_out)
59
+ text <=> [presenter, :user_name]
60
+ enabled <= [presenter, :logged_out]
61
61
  on_key_pressed { |event|
62
62
  @password_text.set_focus if event.keyCode == swt(:cr)
63
63
  }
@@ -65,19 +65,19 @@ class Login
65
65
 
66
66
  label { text "Password:" }
67
67
  @password_text = text(:password, :border) {
68
- text bind(presenter, :password)
69
- enabled bind(presenter, :logged_out)
68
+ text <=> [presenter, :password]
69
+ enabled <= [presenter, :logged_out]
70
70
  on_key_pressed { |event|
71
71
  presenter.login if event.keyCode == swt(:cr)
72
72
  }
73
73
  }
74
74
 
75
75
  label { text "Status:" }
76
- label { text bind(presenter, :status) }
76
+ label { text <= [presenter, :status] }
77
77
 
78
78
  button {
79
79
  text "Login"
80
- enabled bind(presenter, :logged_out)
80
+ enabled <= [presenter, :logged_out]
81
81
  on_widget_selected { presenter.login }
82
82
  on_key_pressed { |event|
83
83
  presenter.login if event.keyCode == swt(:cr)
@@ -86,7 +86,7 @@ class Login
86
86
 
87
87
  button {
88
88
  text "Logout"
89
- enabled bind(presenter, :logged_in)
89
+ enabled <= [presenter, :logged_in]
90
90
  on_widget_selected { presenter.logout }
91
91
  on_key_pressed { |event|
92
92
  if event.keyCode == swt(:cr)
@@ -35,8 +35,8 @@ class TicTacToe
35
35
  (1..3).each { |column|
36
36
  button {
37
37
  layout_data :fill, :fill, true, true
38
- text bind(@tic_tac_toe_board[row, column], :sign)
39
- enabled bind(@tic_tac_toe_board[row, column], :empty)
38
+ text <= [@tic_tac_toe_board[row, column], :sign]
39
+ enabled <= [@tic_tac_toe_board[row, column], :empty]
40
40
  font style: :bold, height: 20
41
41
  on_widget_selected {
42
42
  @tic_tac_toe_board.mark(row, column)
@@ -33,7 +33,7 @@ class HelloButton
33
33
  text 'Hello, Button!'
34
34
 
35
35
  button {
36
- text bind(self, :count) {|value| "Click To Increment: #{value} "}
36
+ text <= [self, :count, on_read: ->(value) { "Click To Increment: #{value} " }]
37
37
 
38
38
  on_widget_selected {
39
39
  self.count += 1
@@ -52,22 +52,22 @@ class HelloCheckbox
52
52
  composite {
53
53
  checkbox {
54
54
  text 'Skiing'
55
- selection bind(person, :skiing)
55
+ selection <=> [person, :skiing]
56
56
  }
57
57
 
58
58
  checkbox {
59
59
  text 'Snowboarding'
60
- selection bind(person, :snowboarding)
60
+ selection <=> [person, :snowboarding]
61
61
  }
62
62
 
63
63
  checkbox {
64
64
  text 'Snowmobiling'
65
- selection bind(person, :snowmobiling)
65
+ selection <=> [person, :snowmobiling]
66
66
  }
67
67
 
68
68
  checkbox {
69
69
  text 'Snowshoeing'
70
- selection bind(person, :snowshoeing)
70
+ selection <=> [person, :snowshoeing]
71
71
  }
72
72
  }
73
73
 
@@ -46,7 +46,7 @@ class HelloCombo
46
46
  text 'Hello, Combo!'
47
47
 
48
48
  combo(:read_only) {
49
- selection bind(person, :country)
49
+ selection <=> [person, :country]
50
50
  }
51
51
 
52
52
  button {
@@ -46,7 +46,7 @@ class HelloComputed
46
46
 
47
47
  label {text 'First &Name: '}
48
48
  text {
49
- text bind(@contact, :first_name)
49
+ text <=> [@contact, :first_name]
50
50
  layout_data {
51
51
  horizontal_alignment :fill
52
52
  grab_excess_horizontal_space true
@@ -55,7 +55,7 @@ class HelloComputed
55
55
 
56
56
  label {text '&Last Name: '}
57
57
  text {
58
- text bind(@contact, :last_name)
58
+ text <=> [@contact, :last_name]
59
59
  layout_data {
60
60
  horizontal_alignment :fill
61
61
  grab_excess_horizontal_space true
@@ -64,7 +64,7 @@ class HelloComputed
64
64
 
65
65
  label {text '&Year of Birth: '}
66
66
  text {
67
- text bind(@contact, :year_of_birth)
67
+ text <=> [@contact, :year_of_birth]
68
68
  layout_data {
69
69
  horizontal_alignment :fill
70
70
  grab_excess_horizontal_space true
@@ -73,7 +73,7 @@ class HelloComputed
73
73
 
74
74
  label {text 'Name: '}
75
75
  label {
76
- text bind(@contact, :name, computed_by: [:first_name, :last_name])
76
+ text <= [@contact, :name, computed_by: [:first_name, :last_name]]
77
77
  layout_data {
78
78
  horizontal_alignment :fill
79
79
  grab_excess_horizontal_space true
@@ -82,7 +82,7 @@ class HelloComputed
82
82
 
83
83
  label {text 'Age: '}
84
84
  label {
85
- text bind(@contact, :age, on_write: :to_i, computed_by: [:year_of_birth])
85
+ text <= [@contact, :age, on_write: :to_i, computed_by: [:year_of_birth]]
86
86
  layout_data {
87
87
  horizontal_alignment :fill
88
88
  grab_excess_horizontal_space true
@@ -42,19 +42,19 @@ class HelloDateTime
42
42
  }
43
43
 
44
44
  date { # alias for date_time(:date)
45
- date_time bind(person, :date_of_birth)
45
+ date_time <=> [person, :date_of_birth]
46
46
  }
47
47
 
48
48
  date_drop_down { # alias for date_time(:date, :drop_down)
49
- date_time bind(person, :date_of_birth)
49
+ date_time <=> [person, :date_of_birth]
50
50
  }
51
51
 
52
52
  time { # alias for date_time(:time)
53
- date_time bind(person, :date_of_birth)
53
+ date_time <=> [person, :date_of_birth]
54
54
  }
55
55
 
56
56
  calendar { # alias for date_time(:calendar)
57
- date_time bind(person, :date_of_birth)
57
+ date_time <=> [person, :date_of_birth]
58
58
  }
59
59
  }.open
60
60
  end
@@ -54,12 +54,12 @@ class HelloGroup
54
54
 
55
55
  radio {
56
56
  text 'Male'
57
- selection bind(person, :male)
57
+ selection <=> [person, :male]
58
58
  }
59
59
 
60
60
  radio {
61
61
  text 'Female'
62
- selection bind(person, :female)
62
+ selection <=> [person, :female]
63
63
  }
64
64
  }
65
65
 
@@ -71,22 +71,22 @@ class HelloGroup
71
71
 
72
72
  radio {
73
73
  text 'Child'
74
- selection bind(person, :child)
74
+ selection <=> [person, :child]
75
75
  }
76
76
 
77
77
  radio {
78
78
  text 'Teen'
79
- selection bind(person, :teen)
79
+ selection <=> [person, :teen]
80
80
  }
81
81
 
82
82
  radio {
83
83
  text 'Adult'
84
- selection bind(person, :adult)
84
+ selection <=> [person, :adult]
85
85
  }
86
86
 
87
87
  radio {
88
88
  text 'Senior'
89
- selection bind(person, :senior)
89
+ selection <=> [person, :senior]
90
90
  }
91
91
  }
92
92
 
@@ -59,7 +59,7 @@ class HelloListMultiSelection
59
59
  text 'Hello, List Multi Selection!'
60
60
 
61
61
  list(:multi) {
62
- selection bind(person, :provinces)
62
+ selection <=> [person, :provinces]
63
63
  }
64
64
 
65
65
  button {
@@ -44,7 +44,7 @@ class HelloListSingleSelection
44
44
  text 'Hello, List Single Selection!'
45
45
 
46
46
  list {
47
- selection bind(person, :country)
47
+ selection <=> [person, :country]
48
48
  }
49
49
 
50
50
  button {
@@ -56,12 +56,12 @@ class HelloRadio
56
56
 
57
57
  radio {
58
58
  text 'Male'
59
- selection bind(person, :male)
59
+ selection <=> [person, :male]
60
60
  }
61
61
 
62
62
  radio {
63
63
  text 'Female'
64
- selection bind(person, :female)
64
+ selection <=> [person, :female]
65
65
  }
66
66
  }
67
67
 
@@ -75,22 +75,22 @@ class HelloRadio
75
75
 
76
76
  radio {
77
77
  text 'Child'
78
- selection bind(person, :child)
78
+ selection <=> [person, :child]
79
79
  }
80
80
 
81
81
  radio {
82
82
  text 'Teen'
83
- selection bind(person, :teen)
83
+ selection <=> [person, :teen]
84
84
  }
85
85
 
86
86
  radio {
87
87
  text 'Adult'
88
- selection bind(person, :adult)
88
+ selection <=> [person, :adult]
89
89
  }
90
90
 
91
91
  radio {
92
92
  text 'Senior'
93
- selection bind(person, :senior)
93
+ selection <=> [person, :senior]
94
94
  }
95
95
  }
96
96
 
@@ -11,10 +11,11 @@ module Glimmer
11
11
  include DataBinding::Observable
12
12
  include DataBinding::Observer
13
13
 
14
- def initialize(parent, model_binding, column_properties)
14
+ def initialize(parent, model_binding, column_properties = nil)
15
15
  @last_populated_model_collection = nil
16
16
  @table = parent
17
17
  @model_binding = model_binding
18
+ # @column_properties = model_binding.binding_options[:column_attributes] || model_binding.binding_options[:column_properties] || column_properties # TODO
18
19
  @column_properties = column_properties
19
20
  @table.data = @model_binding
20
21
  ##@table.on_widget_disposed do |dispose_event| # doesn't seem needed within Opal
@@ -1,36 +1,35 @@
1
+ # Copyright (c) 2020-2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
1
22
  require 'glimmer/dsl/static_expression'
23
+ require 'glimmer/dsl/bind_expression'
2
24
  require 'glimmer/data_binding/model_binding'
3
25
 
4
26
  module Glimmer
5
27
  module DSL
6
28
  module Opal
7
29
  # Responsible for setting up the return value of the bind keyword (command symbol)
8
- # as a ModelBinding. It is then used by another command handler like
9
- # DataBindingCommandHandler for text and selection properties on Text and Spinner
10
- # or TableItemsDataBindingCommandHandler for items in a Table
30
+ # as a ModelBinding. It is then used by other data-binding expressions
11
31
  class BindExpression < StaticExpression
12
- def can_interpret?(parent, keyword, *args, &block)
13
- (
14
- keyword == 'bind' and
15
- (
16
- (
17
- (args.size == 2) and
18
- textual?(args[1])
19
- ) ||
20
- (
21
- (args.size == 3) and
22
- textual?(args[1]) and
23
- (args[2].is_a?(Hash))
24
- )
25
- )
26
- )
27
- end
28
-
29
- def interpret(parent, keyword, *args, &block)
30
- binding_options = args[2] || {}
31
- binding_options[:on_read] = binding_options.delete(:on_read) || binding_options.delete('on_read') || block
32
- DataBinding::ModelBinding.new(args[0], args[1].to_s, binding_options)
33
- end
32
+ include Glimmer::DSL::BindExpression
34
33
  end
35
34
  end
36
35
  end
@@ -80,12 +80,12 @@ module Glimmer
80
80
  end
81
81
  end
82
82
 
83
- def add_content(parent, &content)
84
- content.call(parent) if parent.is_a?(Glimmer::SWT::ShellProxy) || parent.is_a?(Glimmer::UI::CustomShell)
85
- end
86
-
83
+ # TODO delete if no longer needed
84
+ # def add_content(parent, &content)
85
+ # content.call(parent) if parent.is_a?(Glimmer::SWT::ShellProxy) || parent.is_a?(Glimmer::UI::CustomShell)
86
+ # end
87
87
 
88
- def add_content(parent, &block)
88
+ def add_content(parent, keyword, *args, &block)
89
89
  return unless parent.is_a?(Glimmer::UI::CustomWidget)
90
90
  # TODO consider avoiding source_location
91
91
  if block.source_location == parent.content&.__getobj__.source_location
@@ -29,6 +29,7 @@ require 'glimmer/dsl/opal/block_property_expression'
29
29
  require 'glimmer/dsl/opal/menu_expression'
30
30
  require 'glimmer/dsl/opal/dialog_expression'
31
31
  require 'glimmer/dsl/opal/shape_expression'
32
+ require 'glimmer/dsl/opal/shine_data_binding_expression'
32
33
 
33
34
  module Glimmer
34
35
  module DSL
@@ -48,6 +49,7 @@ module Glimmer
48
49
  layout
49
50
  block_property
50
51
  property
52
+ shine_data_binding
51
53
  shape
52
54
  widget
53
55
  ]
@@ -47,7 +47,7 @@ module Glimmer
47
47
  Glimmer::SWT::MenuProxy.new(parent, args)
48
48
  end
49
49
 
50
- def add_content(parent, &block)
50
+ def add_content(parent, keyword, *args, &block)
51
51
  super(parent, &block)
52
52
  parent.post_add_content
53
53
  end
@@ -6,8 +6,9 @@ module Glimmer
6
6
  class PropertyExpression < StaticExpression
7
7
  include TopLevelExpression
8
8
 
9
- def can_interpret?(parent, keyword, *args, &block)
9
+ def can_interpret?(parent, keyword, *args, &block)
10
10
  parent and
11
+ (!args.empty?) and
11
12
  parent.respond_to?(:set_attribute) and
12
13
  parent.respond_to?(keyword, *args) and
13
14
  keyword and
@@ -17,7 +17,7 @@ module Glimmer
17
17
  # TODO
18
18
  end
19
19
 
20
- def add_content(parent, &block)
20
+ def add_content(parent, keyword, *args, &block)
21
21
  # TODO
22
22
  end
23
23
  end
@@ -27,7 +27,7 @@ module Glimmer
27
27
  end
28
28
  end
29
29
 
30
- def add_content(parent, &block)
30
+ def add_content(parent, keyword, *args, &block)
31
31
  super(parent, &block)
32
32
  parent.post_add_content
33
33
  end
@@ -0,0 +1,49 @@
1
+ # Copyright (c) 2020-2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer/dsl/expression'
23
+ require 'glimmer/data_binding/model_binding'
24
+ require 'glimmer/swt/table_proxy'
25
+ require 'glimmer/data_binding/shine'
26
+
27
+ module Glimmer
28
+ module DSL
29
+ module Opal
30
+ class ShineDataBindingExpression < Expression
31
+ def can_interpret?(parent, keyword, *args, &block)
32
+ args.size == 0 and
33
+ block.nil? and
34
+ (
35
+ (parent.respond_to?(:set_attribute) and parent.respond_to?(keyword)) or
36
+ (parent.is_a?(Glimmer::SWT::TableProxy)) # TODO support tree element
37
+ )
38
+ # TODO support canvas elements
39
+ # and
40
+ # !(parent.respond_to?(:swt_widget) && parent.swt_widget.class == org.eclipse.swt.widgets.Canvas && keyword == 'image')
41
+ end
42
+
43
+ def interpret(parent, keyword, *args, &block)
44
+ Glimmer::DataBinding::Shine.new(parent, keyword)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -20,7 +20,7 @@ module Glimmer
20
20
  Glimmer::SWT::WidgetProxy.for(keyword, parent, args, block)
21
21
  end
22
22
 
23
- def add_content(parent, &block)
23
+ def add_content(parent, keyword, *args, &block)
24
24
  if parent.rendered? || parent.skip_content_on_render_blocks?
25
25
  super(parent, &block)
26
26
  parent.post_add_content
@@ -6,6 +6,7 @@ module Glimmer
6
6
  class ComboProxy < WidgetProxy
7
7
  include Glimmer::DataBinding::ObservableElement
8
8
  attr_reader :text, :items
9
+ attr_accessor :selection # virtual attribute just to pass the shine data-binding test (TODO THINK OF A BETTER WAY OF HANDLING THIS)
9
10
 
10
11
  def initialize(parent, args, block)
11
12
  super(parent, args, block)
@@ -138,7 +138,7 @@ module Glimmer
138
138
 
139
139
 
140
140
  def content(&block)
141
- Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::Opal::DialogExpression.new, &block)
141
+ Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::Opal::DialogExpression.new, 'dialog', &block)
142
142
  end
143
143
 
144
144
  def path
@@ -79,6 +79,7 @@ module Glimmer
79
79
  )
80
80
  queue = WidgetProxy.widget_handling_listener
81
81
  end
82
+ return block.call if !modal_open?
82
83
  schedule_async_exec(block, queue)
83
84
  end
84
85
  # sync_exec kept for API compatibility reasons
@@ -118,7 +118,7 @@ module Glimmer
118
118
  end
119
119
 
120
120
  def content(&block)
121
- Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::Opal::MessageBoxExpression.new, &block)
121
+ Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::Opal::MessageBoxExpression.new, 'message_box', *@args, &block)
122
122
  end
123
123
 
124
124
  def selector
@@ -46,9 +46,8 @@ module Glimmer
46
46
  end
47
47
 
48
48
  def widget_class(keyword)
49
- class_name_alternative = keyword.camelcase(:upper)
50
- class_name_main = "#{class_name_alternative}Proxy"
51
- Glimmer::SWT.const_get(class_name_main.to_sym) rescue Glimmer::SWT.const_get(class_name_alternative.to_sym)
49
+ class_name_main = "#{keyword.camelcase(:upper)}Proxy"
50
+ Glimmer::SWT.const_get(class_name_main.to_sym)
52
51
  rescue => e
53
52
  puts "Widget #{keyword} was not found!"
54
53
  nil
@@ -309,7 +308,7 @@ module Glimmer
309
308
  end
310
309
 
311
310
  def content(&block)
312
- Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::Opal::WidgetExpression.new, &block)
311
+ Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::Opal::WidgetExpression.new, self.class.underscored_widget_name(self), &block)
313
312
  end
314
313
 
315
314
  # Subclasses must override with their own mappings
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.3
4
+ version: 0.11.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-01-25 00:00:00.000000000 Z
11
+ date: 2021-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -16,56 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.10
19
+ version: 2.0.0
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.10
26
+ version: 2.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: glimmer-dsl-xml
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.0
33
+ version: 1.2.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.0
40
+ version: 1.2.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: glimmer-dsl-css
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.1.0
47
+ version: 1.2.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.1.0
54
+ version: 1.2.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: opal-async
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.2'
61
+ version: 1.2.0
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'
68
+ version: 1.2.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: to_collection
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -242,9 +242,11 @@ email: andy.am@gmail.com
242
242
  executables: []
243
243
  extensions: []
244
244
  extra_rdoc_files:
245
+ - CHANGELOG.md
245
246
  - LICENSE.txt
246
247
  - README.md
247
248
  files:
249
+ - CHANGELOG.md
248
250
  - LICENSE.txt
249
251
  - README.md
250
252
  - VERSION
@@ -349,6 +351,7 @@ files:
349
351
  - lib/glimmer/dsl/opal/rgba_expression.rb
350
352
  - lib/glimmer/dsl/opal/shape_expression.rb
351
353
  - lib/glimmer/dsl/opal/shell_expression.rb
354
+ - lib/glimmer/dsl/opal/shine_data_binding_expression.rb
352
355
  - lib/glimmer/dsl/opal/swt_expression.rb
353
356
  - lib/glimmer/dsl/opal/sync_exec_expression.rb
354
357
  - lib/glimmer/dsl/opal/table_column_expression.rb
@@ -428,7 +431,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
428
431
  - !ruby/object:Gem::Version
429
432
  version: '0'
430
433
  requirements: []
431
- rubygems_version: 3.1.4
434
+ rubygems_version: 3.2.22
432
435
  signing_key:
433
436
  specification_version: 4
434
437
  summary: Glimmer DSL for Opal