glimmer-dsl-opal 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b1e27d44e69248f9febb6c2b8ce6d58d5f6a876d451b09d293769e3296e8c1ff
4
- data.tar.gz: 30f77e89b509c325d8e609a2b6cda35425acb2b3e6f48ed8113c724208a1c0e9
3
+ metadata.gz: 6a67315f8276add7f19a24f488c635567a39fe798e7e21e49ce23de2aeb6c0d2
4
+ data.tar.gz: e667498792a2522e9271a04ccd2051396c778e528dd77fbb593c6369eee971e2
5
5
  SHA512:
6
- metadata.gz: 6ee6ca73fef3795d270cf4980fd4392beb39bc2a4f240f5a0fe10014772206aa5da1ca502559a13da2abb3191f681d5f76041003d207736c4469be2709476d73
7
- data.tar.gz: 381fde33081fca87a978babb4e3048acfacf70a56de249eb5ea44be9dd0c6f60139b278601d929110eb6f687f3dd65c31287458d8c98c0fc1e31c59c3b842d71
6
+ metadata.gz: 02db0846e7e3b430387e693aa4981c2f01636a01b5ed5ba32646cbdac15991604ccbd5efa4d8e8b837027c69861c28b8d1917f5bef792121de9be8b86584e064
7
+ data.tar.gz: 5d07f4b44c97c81bcf554b18d423e0007efe14bf8cdaa8529f0c295581518654a94989dcc1a0e921e8626a7ca3ca243f572a4d163f3e4bd450fe81684303dae2
@@ -1,5 +1,35 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.0.8
4
+
5
+ - Contact Manager sample support
6
+
7
+ ## 0.0.7
8
+
9
+ - Tic Tac Toe sample support
10
+ - Login sample support
11
+
12
+ ## 0.0.6
13
+
14
+ - Hello, Tab! sample support
15
+
16
+ ## 0.0.5
17
+
18
+ - Hello, Browser! sample support
19
+
20
+ ## 0.0.4
21
+
22
+ - Hello, List Single Selection! sample support
23
+ - Hello, List Multi Selection! sample support
24
+
25
+ ## 0.0.3
26
+
27
+ - Hello, Computed! sample support
28
+
29
+ ## 0.0.2
30
+
31
+ - Hello, Combo! sample support
32
+
3
33
  ## 0.0.1
4
34
 
5
35
  - Initial support for webifying Glimmer SWT apps
data/README.md CHANGED
@@ -1,14 +1,12 @@
1
- # <img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=65 /> Glimmer DSL for Opal 0.0.7 (Web GUI for Desktop Apps)
1
+ # <img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=65 /> Glimmer DSL for Opal 0.0.8 (Webify Desktop Apps)
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
- [Glimmer](https://github.com/AndyObtiva/glimmer) DSL for Opal is a web GUI adaptor for desktop apps built with [Glimmer](https://github.com/AndyObtiva/glimmer) & [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt).
5
+ Glimmer DSL for Opal is a web GUI adaptor for webifying [Glimmer](https://github.com/AndyObtiva/glimmer) desktop apps (i.e. apps built with [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt)).
6
6
 
7
- It enables running [Glimmer](https://github.com/AndyObtiva/glimmer) desktop apps on the web via [Rails](https://rubyonrails.org/) 5 and [Opal](https://opalrb.com/) 1.
7
+ It enables running [Glimmer](https://github.com/AndyObtiva/glimmer) desktop apps on the web via [Rails](https://rubyonrails.org/) and [Opal](https://opalrb.com/) without changing a line of code. Apps may then be custom-styled for the web via standard CSS.
8
8
 
9
- NOTE: Alpha Version 0.0.7 only supports capabilities for the following [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt) [samples](https://github.com/AndyObtiva/glimmer#samples):
10
-
11
- Hello Samples:
9
+ NOTE: Alpha Version 0.0.8 only supports bare-minimum capabilities for the following [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt) [samples](https://github.com/AndyObtiva/glimmer#samples):
12
10
  - [Hello, World!](#hello-world)
13
11
  - [Hello, Combo!](#hello-combo)
14
12
  - [Hello, Computed!](#hello-computed)
@@ -16,10 +14,9 @@ Hello Samples:
16
14
  - [Hello, List Multi Selection!](#hello-list-multi-selection)
17
15
  - [Hello, Browser!](#hello-browser)
18
16
  - [Hello, Tab!](#hello-tab)
19
-
20
- Elaborate Samples:
21
17
  - [Login](#login)
22
18
  - [Tic Tac Toe](#tic-tac-toe)
19
+ - [Contact Manager](#contact-manager)
23
20
 
24
21
  Other Glimmer DSL gems:
25
22
  - [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt): Glimmer DSL for SWT (Desktop GUI)
@@ -39,8 +36,14 @@ The following keywords from [glimmer-dsl-swt](https://github.com/AndyObtiva/glim
39
36
  - `list` & `list(:multi)`
40
37
  - `tab_folder`
41
38
  - `tab_item`
39
+ - `table`
40
+ - `table_column`
41
+ - `message_box`
42
42
  - `on_widget_selected`
43
43
  - `on_modify_text`
44
+ - `observe`
45
+ - `bind`
46
+ - `async_exec`
44
47
  - `grid_layout`
45
48
  - `layout_data`
46
49
 
@@ -51,42 +54,47 @@ The following keywords from [glimmer-dsl-swt](https://github.com/AndyObtiva/glim
51
54
 
52
55
  ## Setup
53
56
 
54
- Please follow these instructions to make Glimmer desktop apps work in Opal inside Rails 5
57
+ (NOTE: if you run into issues, they are probably fixed in master or development/wip branch, you may check out instead)
58
+
59
+ Please install a Rails 5 gem (e.g. `gem install rails -v5.2.4.3` )
55
60
 
56
61
  Start a new Rails 5 app:
57
62
 
58
63
  ```
59
- rails new hello_world
64
+ rails new glimmer_app
60
65
  ```
61
66
 
62
- Follow instructions to setup opal with a rails application: config/initializers/assets.rb
67
+ Add the following to `Gemfile`:
63
68
 
64
- Add the following to `Gemfile` (NOTE: if you run into issues, they are probably fixed in master or development/wip branch, you may check out instead):
65
69
  ```
66
70
  gem 'opal-rails', '~> 1.1.2'
67
71
  gem 'opal-async', '~> 1.1.0'
68
72
  gem 'opal-browser', '~> 0.2.0'
69
- gem 'glimmer-dsl-opal', '~> 0.0.7', require: false
73
+ gem 'glimmer-dsl-opal', '~> 0.0.8', require: false
70
74
  ```
71
75
 
72
- Edit `config/initializers/assets.rb` and add:
76
+ Follow (opal-rails)[https://github.com/opal/opal-rails] instructions, basically the configuration of: config/initializers/assets.rb
77
+
78
+ Edit `config/initializers/assets.rb` and add the following at the bottom:
73
79
  ```
74
80
  Opal.use_gem 'glimmer-dsl-opal'
75
81
  ```
76
82
 
77
- Add the following line to the top of an empty `app/assets/javascripts/application.js.rb`
83
+ Add the following line to the top of an empty `app/assets/javascripts/application.rb` (replacing `application.js`)
78
84
 
79
85
  ```ruby
80
86
  require 'glimmer-dsl-opal' # brings opal and opal browser too
81
87
  ```
82
88
 
89
+ Add more code to `app/assets/javascripts/application.rb` from one of the samples below or require a [Glimmer](https://github.com/AndyObtiva/glimmer) app/[custom-shell](https://github.com/AndyObtiva/glimmer#custom-shell-gem) gem.
90
+
83
91
  ## Samples
84
92
 
85
93
  ### Hello Samples
86
94
 
87
95
  #### Hello, World!
88
96
 
89
- Add the following Glimmer code to `app/assets/javascripts/application.js.rb`
97
+ Add the following Glimmer code to `app/assets/javascripts/application.rb`
90
98
 
91
99
  ```ruby
92
100
  include Glimmer
@@ -96,7 +104,7 @@ shell {
96
104
  label {
97
105
  text 'Hello, World!'
98
106
  }
99
- }
107
+ }.open
100
108
  ```
101
109
 
102
110
  Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
@@ -118,7 +126,7 @@ You should see "Hello, World!"
118
126
 
119
127
  #### Hello, Combo!
120
128
 
121
- Add the following Glimmer code to `app/assets/javascripts/application.js.rb`
129
+ Add the following Glimmer code to `app/assets/javascripts/application.rb`
122
130
 
123
131
  ```ruby
124
132
  class Person
@@ -175,7 +183,7 @@ You should see "Hello, Combo!"
175
183
 
176
184
  #### Hello, Computed!
177
185
 
178
- Add the following Glimmer code to `app/assets/javascripts/application.js.rb`
186
+ Add the following Glimmer code to `app/assets/javascripts/application.rb`
179
187
 
180
188
  ```ruby
181
189
  class HelloComputed
@@ -287,7 +295,7 @@ You should see "Hello, Computed!"
287
295
 
288
296
  #### Hello, List Single Selection!
289
297
 
290
- Add the following Glimmer code to `app/assets/javascripts/application.js.rb`
298
+ Add the following Glimmer code to `app/assets/javascripts/application.rb`
291
299
 
292
300
  ```ruby
293
301
  class Person
@@ -344,7 +352,7 @@ You should see "Hello, List Single Selection!"
344
352
 
345
353
  #### Hello, List Multi Selection!
346
354
 
347
- Add the following Glimmer code to `app/assets/javascripts/application.js.rb`
355
+ Add the following Glimmer code to `app/assets/javascripts/application.rb`
348
356
 
349
357
  ```ruby
350
358
  class Person
@@ -411,7 +419,7 @@ You should see "Hello, List Multi Selection!"
411
419
 
412
420
  #### Hello, Browser!
413
421
 
414
- Add the following Glimmer code to `app/assets/javascripts/application.js.rb`
422
+ Add the following Glimmer code to `app/assets/javascripts/application.rb`
415
423
 
416
424
  ```ruby
417
425
  include Glimmer
@@ -442,7 +450,7 @@ You should see "Hello, Browser!"
442
450
 
443
451
  #### Hello, Tab!
444
452
 
445
- Add the following Glimmer code to `app/assets/javascripts/application.js.rb`
453
+ Add the following Glimmer code to `app/assets/javascripts/application.rb`
446
454
 
447
455
  ```ruby
448
456
  class HelloTab
@@ -493,7 +501,7 @@ You should see "Hello, Tab!"
493
501
 
494
502
  #### Login
495
503
 
496
- Add the following Glimmer code to `app/assets/javascripts/application.js.rb`
504
+ Add the following Glimmer code to `app/assets/javascripts/application.rb`
497
505
 
498
506
  ```ruby
499
507
  require "observer"
@@ -607,7 +615,7 @@ You should see "Login" dialog
607
615
 
608
616
  #### Tic Tac Toe
609
617
 
610
- Add the following Glimmer code to `app/assets/javascripts/application.js.rb`
618
+ Add the following Glimmer code to `app/assets/javascripts/application.rb`
611
619
 
612
620
  ```ruby
613
621
  class TicTacToe
@@ -834,6 +842,448 @@ You should see "Tic Tac Toe"
834
842
  ![Glimmer DSL for Opal Tic Tac Toe In Progress](images/glimmer-dsl-opal-tic-tac-toe-in-progress.png)
835
843
  ![Glimmer DSL for Opal Tic Tac Toe Game Over](images/glimmer-dsl-opal-tic-tac-toe-game-over.png)
836
844
 
845
+ #### Contact Manager
846
+
847
+ Add the following Glimmer code to `app/assets/javascripts/application.rb`
848
+
849
+ ```ruby
850
+ class ContactManager
851
+ class Contact
852
+ attr_accessor :first_name, :last_name, :email
853
+
854
+ def initialize(attribute_map)
855
+ @first_name = attribute_map[:first_name]
856
+ @last_name = attribute_map[:last_name]
857
+ @email = attribute_map[:email]
858
+ end
859
+ end
860
+ end
861
+
862
+ class ContactManager
863
+ class ContactRepository
864
+ NAMES_FIRST = %w[
865
+ Liam
866
+ Noah
867
+ William
868
+ James
869
+ Oliver
870
+ Benjamin
871
+ Elijah
872
+ Lucas
873
+ Mason
874
+ Logan
875
+ Alexander
876
+ Ethan
877
+ Jacob
878
+ Michael
879
+ Daniel
880
+ Henry
881
+ Jackson
882
+ Sebastian
883
+ Aiden
884
+ Matthew
885
+ Samuel
886
+ David
887
+ Joseph
888
+ Carter
889
+ Owen
890
+ Wyatt
891
+ John
892
+ Jack
893
+ Luke
894
+ Jayden
895
+ Dylan
896
+ Grayson
897
+ Levi
898
+ Isaac
899
+ Gabriel
900
+ Julian
901
+ Mateo
902
+ Anthony
903
+ Jaxon
904
+ Lincoln
905
+ Joshua
906
+ Christopher
907
+ Andrew
908
+ Theodore
909
+ Caleb
910
+ Ryan
911
+ Asher
912
+ Nathan
913
+ Thomas
914
+ Leo
915
+ Isaiah
916
+ Charles
917
+ Josiah
918
+ Hudson
919
+ Christian
920
+ Hunter
921
+ Connor
922
+ Eli
923
+ Ezra
924
+ Aaron
925
+ Landon
926
+ Adrian
927
+ Jonathan
928
+ Nolan
929
+ Jeremiah
930
+ Easton
931
+ Elias
932
+ Colton
933
+ Cameron
934
+ Carson
935
+ Robert
936
+ Angel
937
+ Maverick
938
+ Nicholas
939
+ Dominic
940
+ Jaxson
941
+ Greyson
942
+ Adam
943
+ Ian
944
+ Austin
945
+ Santiago
946
+ Jordan
947
+ Cooper
948
+ Brayden
949
+ Roman
950
+ Evan
951
+ Ezekiel
952
+ Xaviar
953
+ Jose
954
+ Jace
955
+ Jameson
956
+ Leonardo
957
+ Axel
958
+ Everett
959
+ Kayden
960
+ Miles
961
+ Sawyer
962
+ Jason
963
+ Emma
964
+ Olivia
965
+ Ava
966
+ Isabella
967
+ Sophia
968
+ Charlotte
969
+ Mia
970
+ Amelia
971
+ Harper
972
+ Evelyn
973
+ Abigail
974
+ Emily
975
+ Elizabeth
976
+ Mila
977
+ Ella
978
+ Avery
979
+ Sofia
980
+ Camila
981
+ Aria
982
+ Scarlett
983
+ Victoria
984
+ Madison
985
+ Luna
986
+ Grace
987
+ Chloe
988
+ Penelope
989
+ Layla
990
+ Riley
991
+ Zoey
992
+ Nora
993
+ Lily
994
+ Eleanor
995
+ Hannah
996
+ Lillian
997
+ Addison
998
+ Aubrey
999
+ Ellie
1000
+ Stella
1001
+ Natalie
1002
+ Zoe
1003
+ Leah
1004
+ Hazel
1005
+ Violet
1006
+ Aurora
1007
+ Savannah
1008
+ Audrey
1009
+ Brooklyn
1010
+ Bella
1011
+ Claire
1012
+ Skylar
1013
+ Lucy
1014
+ Paisley
1015
+ Everly
1016
+ Anna
1017
+ Caroline
1018
+ Nova
1019
+ Genesis
1020
+ Emilia
1021
+ Kennedy
1022
+ Samantha
1023
+ Maya
1024
+ Willow
1025
+ Kinsley
1026
+ Naomi
1027
+ Aaliyah
1028
+ Elena
1029
+ Sarah
1030
+ Ariana
1031
+ Allison
1032
+ Gabriella
1033
+ Alice
1034
+ Madelyn
1035
+ Cora
1036
+ Ruby
1037
+ Eva
1038
+ Serenity
1039
+ Autumn
1040
+ Adeline
1041
+ Hailey
1042
+ Gianna
1043
+ Valentina
1044
+ Isla
1045
+ Eliana
1046
+ Quinn
1047
+ Nevaeh
1048
+ Ivy
1049
+ Sadie
1050
+ Piper
1051
+ Lydia
1052
+ Alexa
1053
+ Josephine
1054
+ Emery
1055
+ Julia
1056
+ Delilah
1057
+ Arianna
1058
+ Vivian
1059
+ Kaylee
1060
+ Sophie
1061
+ Brielle
1062
+ Madeline
1063
+ ]
1064
+ NAMES_LAST = %w[
1065
+ Smith
1066
+ Johnson
1067
+ Williams
1068
+ Brown
1069
+ Jones
1070
+ Miller
1071
+ Davis
1072
+ Wilson
1073
+ Anderson
1074
+ Taylor
1075
+ ]
1076
+ def initialize(contacts = nil)
1077
+ @contacts = contacts || 1000.times.map do |n|
1078
+ random_first_name_index = (rand*NAMES_FIRST.size).to_i
1079
+ random_last_name_index = (rand*NAMES_LAST.size).to_i
1080
+ first_name = NAMES_FIRST[random_first_name_index]
1081
+ last_name = NAMES_LAST[random_last_name_index]
1082
+ email = "#{first_name}@#{last_name}.com".downcase
1083
+ Contact.new(
1084
+ first_name: first_name,
1085
+ last_name: last_name,
1086
+ email: email
1087
+ )
1088
+ end
1089
+ end
1090
+
1091
+ def find(attribute_filter_map)
1092
+ @contacts.find_all do |contact|
1093
+ match = true
1094
+ attribute_filter_map.keys.each do |attribute_name|
1095
+ contact_value = contact.send(attribute_name).downcase
1096
+ filter_value = attribute_filter_map[attribute_name].downcase
1097
+ match = false unless contact_value.match(filter_value)
1098
+ end
1099
+ match
1100
+ end
1101
+ end
1102
+ end
1103
+ end
1104
+
1105
+ class ContactManager
1106
+ class ContactManagerPresenter
1107
+ attr_accessor :results
1108
+ @@contact_attributes = [:first_name, :last_name, :email]
1109
+ @@contact_attributes.each {|attribute_name| attr_accessor attribute_name}
1110
+
1111
+ def initialize(contact_repository = nil)
1112
+ @contact_repository = contact_repository || ContactRepository.new
1113
+ @results = []
1114
+ end
1115
+
1116
+ def list
1117
+ self.results = @contact_repository.find({})
1118
+ end
1119
+
1120
+ def find
1121
+ filter_map = {}
1122
+ @@contact_attributes.each do |attribute_name|
1123
+ filter_map[attribute_name] = self.send(attribute_name) if self.send(attribute_name)
1124
+ end
1125
+ self.results = @contact_repository.find(filter_map)
1126
+ @sort_attribute_name = nil
1127
+ @sort_direction_ascending = nil
1128
+ end
1129
+
1130
+ def toggle_sort(attribute_name)
1131
+ @sort_attribute_name = attribute_name
1132
+ @sort_direction_ascending = !@sort_direction_ascending
1133
+ sorted_results = self.results.sort_by {|contact| contact.send(attribute_name).downcase}
1134
+ sorted_results = sorted_results.reverse unless @sort_direction_ascending
1135
+ self.results = sorted_results
1136
+ end
1137
+ end
1138
+ end
1139
+
1140
+ class ContactManager
1141
+ include Glimmer
1142
+
1143
+ def initialize
1144
+ @contact_manager_presenter = ContactManagerPresenter.new
1145
+ @contact_manager_presenter.list
1146
+ end
1147
+
1148
+ def launch
1149
+ shell {
1150
+ text "Contact Manager"
1151
+ composite {
1152
+ composite {
1153
+ grid_layout 2, false
1154
+ label {text "First &Name: "}
1155
+ text {
1156
+ text bind(@contact_manager_presenter, :first_name)
1157
+ on_key_pressed {|key_event|
1158
+ @contact_manager_presenter.find if key_event.keyCode == Glimmer::SWT::SWTProxy[:cr]
1159
+ }
1160
+ }
1161
+ label {text "&Last Name: "}
1162
+ text {
1163
+ text bind(@contact_manager_presenter, :last_name)
1164
+ on_key_pressed {|key_event|
1165
+ @contact_manager_presenter.find if key_event.keyCode == Glimmer::SWT::SWTProxy[:cr]
1166
+ }
1167
+ }
1168
+ label {text "&Email: "}
1169
+ text {
1170
+ text bind(@contact_manager_presenter, :email)
1171
+ on_key_pressed {|key_event|
1172
+ @contact_manager_presenter.find if key_event.keyCode == Glimmer::SWT::SWTProxy[:cr]
1173
+ }
1174
+ }
1175
+ composite {
1176
+ grid_layout 2, false
1177
+ button {
1178
+ text "&Find"
1179
+ on_widget_selected {
1180
+ @contact_manager_presenter.find
1181
+ }
1182
+ }
1183
+ button {
1184
+ text "&List All"
1185
+ on_widget_selected {
1186
+ @contact_manager_presenter.list
1187
+ }
1188
+ }
1189
+ }
1190
+ }
1191
+
1192
+ table(:multi) { |table_proxy|
1193
+ layout_data {
1194
+ horizontal_alignment :fill
1195
+ vertical_alignment :fill
1196
+ grab_excess_horizontal_space true
1197
+ grab_excess_vertical_space true
1198
+ height_hint 200
1199
+ }
1200
+ table_column {
1201
+ text "First Name"
1202
+ width 80
1203
+ on_widget_selected {
1204
+ @contact_manager_presenter.toggle_sort(:first_name)
1205
+ }
1206
+ }
1207
+ table_column {
1208
+ text "Last Name"
1209
+ width 80
1210
+ on_widget_selected {
1211
+ @contact_manager_presenter.toggle_sort(:last_name)
1212
+ }
1213
+ }
1214
+ table_column {
1215
+ text "Email"
1216
+ width 200
1217
+ on_widget_selected {
1218
+ @contact_manager_presenter.toggle_sort(:email)
1219
+ }
1220
+ }
1221
+ items bind(@contact_manager_presenter, :results), column_properties(:first_name, :last_name, :email)
1222
+ on_mouse_down { |event|
1223
+ table_proxy.edit_table_item(event.table_item, event.column_index)
1224
+ }
1225
+ }
1226
+ }
1227
+ }.open
1228
+ end
1229
+ end
1230
+
1231
+ ContactManager.new.launch
1232
+
1233
+ ```
1234
+ Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
1235
+
1236
+ Glimmer DSL for SWT Contact Manager
1237
+
1238
+ ![Glimmer DSL for SWT Contact Manager](https://github.com/AndyObtiva/glimmer/raw/master/images/glimmer-contact-manager.png)
1239
+
1240
+ Glimmer DSL for SWT Contact Manager Find
1241
+
1242
+ ![Glimmer DSL for SWT Contact Manager Find](https://github.com/AndyObtiva/glimmer/raw/master/images/glimmer-contact-manager-find.png)
1243
+
1244
+ Glimmer DSL for SWT Contact Manager Edit Started
1245
+
1246
+ ![Glimmer DSL for SWT Contact Manager Edit Started](https://github.com/AndyObtiva/glimmer/raw/master/images/glimmer-contact-manager-edit-started.png)
1247
+
1248
+ Glimmer DSL for SWT Contact Manager Edit In Progress
1249
+
1250
+ ![Glimmer DSL for SWT Contact Manager Edit In Progress](https://github.com/AndyObtiva/glimmer/raw/master/images/glimmer-contact-manager-edit-in-progress.png)
1251
+
1252
+ Glimmer DSL for SWT Contact Manager Edit Done
1253
+
1254
+ ![Glimmer DSL for SWT Contact Manager Edit Done](https://github.com/AndyObtiva/glimmer/raw/master/images/glimmer-contact-manager-edit-done.png)
1255
+
1256
+ Glimmer app on the web (using `glimmer-dsl-opal` gem):
1257
+
1258
+ Start the Rails server:
1259
+ ```
1260
+ rails s
1261
+ ```
1262
+
1263
+ Visit `http://localhost:3000`
1264
+
1265
+ You should see "Tic Tac Toe"
1266
+
1267
+ Glimmer DSL for Opal Contact Manager
1268
+
1269
+ ![Glimmer DSL for Opal Contact Manager](images/glimmer-dsl-opal-contact-manager.png)
1270
+
1271
+ Glimmer DSL for Opal Contact Manager Find
1272
+
1273
+ ![Glimmer DSL for Opal Contact Manager Find](images/glimmer-dsl-opal-contact-manager-find.png)
1274
+
1275
+ Glimmer DSL for Opal Contact Manager Edit Started
1276
+
1277
+ ![Glimmer DSL for Opal Contact Manager Edit Started](images/glimmer-dsl-opal-contact-manager-edit-started.png)
1278
+
1279
+ Glimmer DSL for Opal Contact Manager Edit In Progress
1280
+
1281
+ ![Glimmer DSL for Opal Contact Manager Edit In Progress](images/glimmer-dsl-opal-contact-manager-edit-in-progress.png)
1282
+
1283
+ Glimmer DSL for Opal Contact Manager Edit Done
1284
+
1285
+ ![Glimmer DSL for Opal Contact Manager Edit Done](images/glimmer-dsl-opal-contact-manager-edit-done.png)
1286
+
837
1287
  ## Help
838
1288
 
839
1289
  ### Issues