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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +233 -0
- data/README.md +10 -7
- data/VERSION +1 -1
- data/lib/glimmer-dsl-opal/ext/glimmer/dsl/engine.rb +1 -1
- data/lib/glimmer-dsl-opal/samples/elaborate/login.rb +7 -7
- data/lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb +2 -2
- data/lib/glimmer-dsl-opal/samples/hello/hello_button.rb +1 -1
- data/lib/glimmer-dsl-opal/samples/hello/hello_checkbox.rb +4 -4
- data/lib/glimmer-dsl-opal/samples/hello/hello_combo.rb +1 -1
- data/lib/glimmer-dsl-opal/samples/hello/hello_computed.rb +5 -5
- data/lib/glimmer-dsl-opal/samples/hello/hello_date_time.rb +4 -4
- data/lib/glimmer-dsl-opal/samples/hello/hello_group.rb +6 -6
- data/lib/glimmer-dsl-opal/samples/hello/hello_list_multi_selection.rb +1 -1
- data/lib/glimmer-dsl-opal/samples/hello/hello_list_single_selection.rb +1 -1
- data/lib/glimmer-dsl-opal/samples/hello/hello_radio.rb +6 -6
- data/lib/glimmer/data_binding/table_items_binding.rb +2 -1
- data/lib/glimmer/dsl/opal/bind_expression.rb +24 -25
- data/lib/glimmer/dsl/opal/custom_widget_expression.rb +5 -5
- data/lib/glimmer/dsl/opal/dsl.rb +2 -0
- data/lib/glimmer/dsl/opal/menu_expression.rb +1 -1
- data/lib/glimmer/dsl/opal/property_expression.rb +2 -1
- data/lib/glimmer/dsl/opal/shape_expression.rb +1 -1
- data/lib/glimmer/dsl/opal/shell_expression.rb +1 -1
- data/lib/glimmer/dsl/opal/shine_data_binding_expression.rb +49 -0
- data/lib/glimmer/dsl/opal/widget_expression.rb +1 -1
- data/lib/glimmer/swt/combo_proxy.rb +1 -0
- data/lib/glimmer/swt/dialog_proxy.rb +1 -1
- data/lib/glimmer/swt/display_proxy.rb +1 -0
- data/lib/glimmer/swt/message_box_proxy.rb +1 -1
- data/lib/glimmer/swt/widget_proxy.rb +3 -4
- metadata +14 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9eec417d33069c8ecf49c9450b46f7552702d2e83993334f7289739c4b61440
|
4
|
+
data.tar.gz: 2d3a8606327d4686ef21d18e605a29679a8f47663959b6e971777fca928b2fe4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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
|
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
|
-
- **
|
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.
|
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
|
60
|
-
enabled
|
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
|
69
|
-
enabled
|
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
|
76
|
+
label { text <= [presenter, :status] }
|
77
77
|
|
78
78
|
button {
|
79
79
|
text "Login"
|
80
|
-
enabled
|
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
|
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
|
39
|
-
enabled
|
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)
|
@@ -52,22 +52,22 @@ class HelloCheckbox
|
|
52
52
|
composite {
|
53
53
|
checkbox {
|
54
54
|
text 'Skiing'
|
55
|
-
selection
|
55
|
+
selection <=> [person, :skiing]
|
56
56
|
}
|
57
57
|
|
58
58
|
checkbox {
|
59
59
|
text 'Snowboarding'
|
60
|
-
selection
|
60
|
+
selection <=> [person, :snowboarding]
|
61
61
|
}
|
62
62
|
|
63
63
|
checkbox {
|
64
64
|
text 'Snowmobiling'
|
65
|
-
selection
|
65
|
+
selection <=> [person, :snowmobiling]
|
66
66
|
}
|
67
67
|
|
68
68
|
checkbox {
|
69
69
|
text 'Snowshoeing'
|
70
|
-
selection
|
70
|
+
selection <=> [person, :snowshoeing]
|
71
71
|
}
|
72
72
|
}
|
73
73
|
|
@@ -46,7 +46,7 @@ class HelloComputed
|
|
46
46
|
|
47
47
|
label {text 'First &Name: '}
|
48
48
|
text {
|
49
|
-
text
|
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
|
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
|
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
|
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
|
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
|
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
|
49
|
+
date_time <=> [person, :date_of_birth]
|
50
50
|
}
|
51
51
|
|
52
52
|
time { # alias for date_time(:time)
|
53
|
-
date_time
|
53
|
+
date_time <=> [person, :date_of_birth]
|
54
54
|
}
|
55
55
|
|
56
56
|
calendar { # alias for date_time(:calendar)
|
57
|
-
date_time
|
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
|
57
|
+
selection <=> [person, :male]
|
58
58
|
}
|
59
59
|
|
60
60
|
radio {
|
61
61
|
text 'Female'
|
62
|
-
selection
|
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
|
74
|
+
selection <=> [person, :child]
|
75
75
|
}
|
76
76
|
|
77
77
|
radio {
|
78
78
|
text 'Teen'
|
79
|
-
selection
|
79
|
+
selection <=> [person, :teen]
|
80
80
|
}
|
81
81
|
|
82
82
|
radio {
|
83
83
|
text 'Adult'
|
84
|
-
selection
|
84
|
+
selection <=> [person, :adult]
|
85
85
|
}
|
86
86
|
|
87
87
|
radio {
|
88
88
|
text 'Senior'
|
89
|
-
selection
|
89
|
+
selection <=> [person, :senior]
|
90
90
|
}
|
91
91
|
}
|
92
92
|
|
@@ -56,12 +56,12 @@ class HelloRadio
|
|
56
56
|
|
57
57
|
radio {
|
58
58
|
text 'Male'
|
59
|
-
selection
|
59
|
+
selection <=> [person, :male]
|
60
60
|
}
|
61
61
|
|
62
62
|
radio {
|
63
63
|
text 'Female'
|
64
|
-
selection
|
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
|
78
|
+
selection <=> [person, :child]
|
79
79
|
}
|
80
80
|
|
81
81
|
radio {
|
82
82
|
text 'Teen'
|
83
|
-
selection
|
83
|
+
selection <=> [person, :teen]
|
84
84
|
}
|
85
85
|
|
86
86
|
radio {
|
87
87
|
text 'Adult'
|
88
|
-
selection
|
88
|
+
selection <=> [person, :adult]
|
89
89
|
}
|
90
90
|
|
91
91
|
radio {
|
92
92
|
text 'Senior'
|
93
|
-
selection
|
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
|
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
|
-
|
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
|
-
|
84
|
-
|
85
|
-
|
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
|
data/lib/glimmer/dsl/opal/dsl.rb
CHANGED
@@ -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
|
]
|
@@ -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
|
@@ -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
|
@@ -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
|
-
|
50
|
-
class_name_main
|
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.
|
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-
|
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:
|
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:
|
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.
|
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.
|
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.
|
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.
|
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:
|
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:
|
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.
|
434
|
+
rubygems_version: 3.2.22
|
432
435
|
signing_key:
|
433
436
|
specification_version: 4
|
434
437
|
summary: Glimmer DSL for Opal
|