glimmer-dsl-opal 0.4.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +56 -0
  3. data/README.md +892 -16
  4. data/VERSION +1 -1
  5. data/app/assets/images/glimmer/images/calendar.gif +0 -0
  6. data/app/assets/images/glimmer/images/ui-icons_222222_256x240.png +0 -0
  7. data/app/assets/images/glimmer/images/ui-icons_444444_256x240.png +0 -0
  8. data/app/assets/images/glimmer/images/ui-icons_555555_256x240.png +0 -0
  9. data/app/assets/images/glimmer/images/ui-icons_777620_256x240.png +0 -0
  10. data/app/assets/images/glimmer/images/ui-icons_777777_256x240.png +0 -0
  11. data/app/assets/images/glimmer/images/ui-icons_cc0000_256x240.png +0 -0
  12. data/app/assets/images/glimmer/images/ui-icons_ffffff_256x240.png +0 -0
  13. data/app/assets/stylesheets/glimmer/glimmer.css +15 -0
  14. data/app/assets/stylesheets/glimmer/jquery-ui.css +1312 -0
  15. data/app/assets/stylesheets/glimmer/jquery-ui.structure.css +886 -0
  16. data/app/assets/stylesheets/glimmer/jquery-ui.theme.css +443 -0
  17. data/app/assets/stylesheets/glimmer/jquery.ui.timepicker.css +57 -0
  18. data/lib/glimmer-dsl-opal.rb +16 -9
  19. data/lib/glimmer-dsl-opal/ext/date.rb +49 -3
  20. data/lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb +23 -0
  21. data/lib/glimmer-dsl-opal/samples/hello/hello_checkbox.rb +85 -0
  22. data/lib/glimmer-dsl-opal/samples/hello/hello_checkbox_group.rb +68 -0
  23. data/lib/glimmer-dsl-opal/samples/hello/hello_combo.rb +5 -5
  24. data/lib/glimmer-dsl-opal/samples/hello/hello_custom_widget.rb +3 -3
  25. data/lib/glimmer-dsl-opal/samples/hello/hello_date_time.rb +63 -0
  26. data/lib/glimmer-dsl-opal/samples/hello/hello_group.rb +104 -0
  27. data/lib/glimmer-dsl-opal/samples/hello/hello_list_single_selection.rb +1 -1
  28. data/lib/glimmer-dsl-opal/samples/hello/hello_radio.rb +108 -0
  29. data/lib/glimmer-dsl-opal/samples/hello/hello_radio_group.rb +84 -0
  30. data/lib/glimmer-dsl-opal/samples/hello/hello_table.rb +283 -0
  31. data/lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/GPL-LICENSE.txt +278 -0
  32. data/lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/MIT-LICENSE.txt +20 -0
  33. data/lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/jquery.ui.timepicker.css +57 -0
  34. data/lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/jquery.ui.timepicker.js +1496 -0
  35. data/lib/glimmer-dsl-opal/vendor/jquery-ui/AUTHORS.txt +333 -0
  36. data/lib/glimmer-dsl-opal/vendor/jquery-ui/LICENSE.txt +43 -0
  37. data/lib/glimmer-dsl-opal/vendor/jquery-ui/images/ui-icons_444444_256x240.png +0 -0
  38. data/lib/glimmer-dsl-opal/vendor/jquery-ui/images/ui-icons_555555_256x240.png +0 -0
  39. data/lib/glimmer-dsl-opal/vendor/jquery-ui/images/ui-icons_777620_256x240.png +0 -0
  40. data/lib/glimmer-dsl-opal/vendor/jquery-ui/images/ui-icons_777777_256x240.png +0 -0
  41. data/lib/glimmer-dsl-opal/vendor/jquery-ui/images/ui-icons_cc0000_256x240.png +0 -0
  42. data/lib/glimmer-dsl-opal/vendor/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  43. data/lib/glimmer-dsl-opal/vendor/jquery-ui/jquery-ui.min.css +7 -0
  44. data/lib/glimmer-dsl-opal/vendor/jquery-ui/jquery-ui.min.js +13 -0
  45. data/lib/glimmer-dsl-opal/vendor/jquery-ui/jquery-ui.structure.min.css +5 -0
  46. data/lib/glimmer-dsl-opal/vendor/jquery-ui/jquery-ui.theme.min.css +5 -0
  47. data/lib/glimmer-dsl-opal/vendor/jquery-ui/package.json +74 -0
  48. data/lib/glimmer-dsl-swt.rb +1 -0
  49. data/lib/glimmer/data_binding/element_binding.rb +2 -1
  50. data/lib/glimmer/data_binding/table_items_binding.rb +29 -18
  51. data/lib/glimmer/dsl/opal/block_property_expression.rb +41 -0
  52. data/lib/glimmer/dsl/opal/checkbox_group_selection_data_binding_expression.rb +61 -0
  53. data/lib/glimmer/dsl/opal/custom_widget_expression.rb +8 -6
  54. data/lib/glimmer/dsl/opal/dsl.rb +6 -0
  55. data/lib/glimmer/dsl/opal/property_expression.rb +4 -3
  56. data/lib/glimmer/dsl/opal/radio_group_selection_data_binding_expression.rb +61 -0
  57. data/lib/glimmer/dsl/opal/shell_expression.rb +7 -2
  58. data/lib/glimmer/dsl/opal/widget_expression.rb +6 -1
  59. data/lib/glimmer/engine.rb +9 -0
  60. data/lib/glimmer/swt.rb +3 -3
  61. data/lib/glimmer/swt/button_proxy.rb +16 -2
  62. data/lib/glimmer/swt/checkbox_proxy.rb +81 -0
  63. data/lib/glimmer/swt/color_proxy.rb +45 -45
  64. data/lib/glimmer/swt/combo_proxy.rb +6 -6
  65. data/lib/glimmer/swt/composite_proxy.rb +2 -2
  66. data/lib/glimmer/swt/custom/checkbox_group.rb +142 -0
  67. data/lib/glimmer/swt/custom/radio_group.rb +143 -0
  68. data/lib/glimmer/swt/date_time_proxy.rb +145 -0
  69. data/lib/glimmer/swt/display_proxy.rb +6 -2
  70. data/lib/glimmer/swt/fill_layout_proxy.rb +1 -1
  71. data/lib/glimmer/swt/grid_layout_proxy.rb +19 -8
  72. data/lib/glimmer/swt/group_proxy.rb +38 -0
  73. data/lib/glimmer/swt/label_proxy.rb +27 -7
  74. data/lib/glimmer/swt/layout_data_proxy.rb +39 -21
  75. data/lib/glimmer/swt/layout_proxy.rb +4 -4
  76. data/lib/glimmer/swt/list_proxy.rb +3 -3
  77. data/lib/glimmer/swt/make_shift_shell_proxy.rb +4 -4
  78. data/lib/glimmer/swt/message_box_proxy.rb +10 -8
  79. data/lib/glimmer/swt/property_owner.rb +2 -2
  80. data/lib/glimmer/swt/radio_proxy.rb +82 -0
  81. data/lib/glimmer/swt/row_layout_proxy.rb +33 -10
  82. data/lib/glimmer/swt/scrolled_composite_proxy.rb +20 -0
  83. data/lib/glimmer/swt/shell_proxy.rb +29 -9
  84. data/lib/glimmer/swt/tab_folder_proxy.rb +5 -5
  85. data/lib/glimmer/swt/tab_item_proxy.rb +7 -7
  86. data/lib/glimmer/swt/table_column_proxy.rb +62 -12
  87. data/lib/glimmer/swt/table_item_proxy.rb +14 -7
  88. data/lib/glimmer/swt/table_proxy.rb +225 -16
  89. data/lib/glimmer/swt/text_proxy.rb +50 -2
  90. data/lib/glimmer/swt/widget_proxy.rb +88 -39
  91. data/lib/glimmer/ui/custom_widget.rb +8 -8
  92. data/lib/net/http.rb +1 -5
  93. data/lib/uri.rb +3 -3
  94. metadata +56 -9
  95. data/lib/glimmer/data_binding/ext/observable_model.rb +0 -40
@@ -20,13 +20,61 @@ module Glimmer
20
20
  event: 'keyup',
21
21
  event_handler: -> (event_listener) {
22
22
  -> (event) {
23
+ # TODO consider unifying this event handler with on_key_pressed by relying on its result instead of hooking another keyup event
24
+ if @last_key_pressed_event.nil? || @last_key_pressed_event.doit
25
+ @text = event.target.value
26
+ event_listener.call(event)
27
+ else
28
+ # TODO Fix doit false, it's not stopping input
29
+ event.prevent
30
+ event.prevent_default
31
+ event.stop_propagation
32
+ event.stop_immediate_propagation
33
+ end
34
+ }
35
+ }
36
+ },
37
+ 'on_key_pressed' => {
38
+ event: 'keydown',
39
+ event_handler: -> (event_listener) {
40
+ -> (event) {
41
+ @last_key_pressed_event = event
23
42
  @text = event.target.value
24
- event_listener.call(event)
43
+ # TODO generalize this solution to all widgets that support key presses
44
+ # TODO support event.location once DOM3 is supported by opal-jquery
45
+ event.define_singleton_method(:keyCode) {event.which}
46
+ event.define_singleton_method(:key_code, &event.method(:keyCode))
47
+ event.define_singleton_method(:character) {event.which.chr}
48
+ event.define_singleton_method(:stateMask) do
49
+ state_mask = 0
50
+ state_mask |= SWTProxy[:alt] if event.alt_key
51
+ state_mask |= SWTProxy[:ctrl] if event.ctrl_key
52
+ state_mask |= SWTProxy[:shift] if event.shift_key
53
+ state_mask |= SWTProxy[:command] if event.meta_key
54
+ state_mask
55
+ end
56
+ event.define_singleton_method(:state_mask, &event.method(:stateMask))
57
+ doit = true
58
+ event.define_singleton_method(:doit=) do |value|
59
+ doit = value
60
+ end
61
+ event.define_singleton_method(:doit) { doit }
62
+ event_listener.call(event)
63
+
64
+ # TODO Fix doit false, it's not stopping input
65
+ unless doit
66
+ event.prevent
67
+ event.prevent_default
68
+ event.stop_propagation
69
+ event.stop_immediate_propagation
70
+ end
71
+
72
+ doit
25
73
  }
26
74
  }
27
75
  }
28
76
  }
29
- end
77
+ end
30
78
 
31
79
  def dom
32
80
  text_text = @text
@@ -1,5 +1,5 @@
1
1
  # Copyright (c) 2020 Andy Maleh
2
- #
2
+ #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
5
5
  # "Software"), to deal in the Software without restriction, including
@@ -7,10 +7,10 @@
7
7
  # distribute, sublicense, and/or sell copies of the Software, and to
8
8
  # permit persons to whom the Software is furnished to do so, subject to
9
9
  # the following conditions:
10
- #
10
+ #
11
11
  # The above copyright notice and this permission notice shall be
12
12
  # included in all copies or substantial portions of the Software.
13
- #
13
+ #
14
14
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
15
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
16
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -29,13 +29,13 @@ module Glimmer
29
29
  include Glimmer
30
30
  include PropertyOwner
31
31
 
32
- attr_reader :parent, :args, :path, :children, :enabled, :foreground, :background, :font
32
+ attr_reader :parent, :args, :path, :children, :enabled, :foreground, :background, :font, :focus
33
33
 
34
34
  class << self
35
35
  # Factory Method that translates a Glimmer DSL keyword into a WidgetProxy object
36
- def for(keyword, parent, args)
36
+ def for(keyword, parent, args, block)
37
37
  the_widget_class = widget_class(keyword)
38
- the_widget_class.new(parent, args)
38
+ the_widget_class.respond_to?(:create) ? the_widget_class.create(keyword, parent, args, block) : the_widget_class.new(parent, args, block)
39
39
  end
40
40
 
41
41
  def widget_class(keyword)
@@ -69,7 +69,7 @@ module Glimmer
69
69
 
70
70
  def underscored_widget_name(widget_proxy)
71
71
  widget_proxy.class.name.split(/::|\./).last.sub(/Proxy$/, '').underscore
72
- end
72
+ end
73
73
  end
74
74
 
75
75
  DEFAULT_INITIALIZERS = {
@@ -95,27 +95,39 @@ module Glimmer
95
95
  # "group" => lambda do |group_proxy|
96
96
  # group_proxy.layout = GridLayoutProxy.new(group_proxy, []) if group.layout.nil?
97
97
  # end,
98
- }
98
+ }
99
99
 
100
- def initialize(parent, args)
101
- @parent = parent
100
+ def initialize(parent, args, block)
101
+ @parent = parent
102
102
  @args = args
103
+ @block = block
103
104
  @children = Set.new # TODO consider moving to composite
104
105
  @enabled = true
105
106
  DEFAULT_INITIALIZERS[self.class.underscored_widget_name(self)]&.call(self)
106
- @parent.add_child(self) # TODO rename to post_initialize_child to be closer to glimmer-dsl-swt terminology
107
+ @parent.post_initialize_child(self) # TODO rename to post_initialize_child to be closer to glimmer-dsl-swt terminology
108
+ end
109
+
110
+ # Executes for the parent of a child that just got added
111
+ def post_initialize_child(child)
112
+ @children << child
113
+ child.render
114
+ end
115
+
116
+ # Executes at the closing of a parent widget curly braces after all children/properties have been added/set
117
+ def post_add_content
118
+ # No Op by default
107
119
  end
108
120
 
109
121
  def css_classes
110
122
  dom_element.attr('class').to_s.split
111
- end
123
+ end
112
124
 
113
125
  def dispose
114
126
  Document.find(path).remove
115
127
  end
116
128
 
117
129
  def path
118
- "#{parent_path} > #{element}##{id}.#{name}"
130
+ "#{parent_path} #{element}##{id}.#{name}"
119
131
  end
120
132
 
121
133
  # Root element representing widget. Must be overridden by subclasses if different from div
@@ -123,11 +135,6 @@ module Glimmer
123
135
  'div'
124
136
  end
125
137
 
126
- def add_child(child)
127
- @children << child
128
- child.render
129
- end
130
-
131
138
  def enabled=(value)
132
139
  @enabled = value
133
140
  dom_element.prop('disabled', !@enabled)
@@ -151,6 +158,16 @@ module Glimmer
151
158
  dom_element.css('font-size', "#{@font.height}px") unless @font.nil?
152
159
  end
153
160
 
161
+ def focus=(value)
162
+ @focus = value
163
+ dom_element.focus # TODO consider if a delay or async_exec is needed here
164
+ end
165
+
166
+ def set_focus
167
+ self.focus = true
168
+ end
169
+ alias setFocus set_focus
170
+
154
171
  def parent_path
155
172
  @parent.path
156
173
  end
@@ -172,14 +189,14 @@ module Glimmer
172
189
  end
173
190
  children.each do |child|
174
191
  child.render
175
- end
192
+ end
176
193
  end
177
194
  alias redraw render
178
195
 
179
196
  def build_dom
180
197
  @dom = nil
181
198
  @dom = dom
182
- @dom = @parent.layout.dom(@dom) if @parent.respond_to?(:layout) && @parent.layout
199
+ @dom = @parent.layout.dom(@dom) if @parent.respond_to?(:layout) && @parent.layout
183
200
  end
184
201
 
185
202
  def content(&block)
@@ -234,9 +251,12 @@ module Glimmer
234
251
  end
235
252
 
236
253
  def dom_element
254
+ # TODO consider making this pick an element in relation to its parent, allowing unhooked dom elements to be built if needed (unhooked to the visible page dom)
237
255
  Document.find(path)
238
256
  end
239
257
 
258
+ # TODO consider adding a default #dom method implementation for the common case, automatically relying on #element and other methods to build the dom html
259
+
240
260
  def style_element
241
261
  style_element_id = "#{id}-style"
242
262
  style_element_selector = "style##{style_element_id}"
@@ -260,10 +280,10 @@ module Glimmer
260
280
  end
261
281
 
262
282
  def listener_dom_element
263
- Document.find(listener_path)
283
+ Document.find(listener_path)
264
284
  end
265
285
 
266
- def can_handle_observation_request?(observation_request)
286
+ def can_handle_observation_request?(observation_request)
267
287
  # TODO sort this out for Opal
268
288
  observation_request = observation_request.to_s
269
289
  if observation_request.start_with?('on_swt_')
@@ -274,28 +294,35 @@ module Glimmer
274
294
  # can_add_listener?(event) || can_handle_drag_observation_request?(observation_request) || can_handle_drop_observation_request?(observation_request)
275
295
  true # TODO filter by valid listeners only in the future
276
296
  end
277
- end
297
+ end
278
298
 
279
- def handle_observation_request(keyword, &event_listener)
299
+ def handle_observation_request(keyword, &event_listener)
280
300
  return unless observation_request_to_event_mapping.keys.include?(keyword)
281
301
  @observation_requests ||= {}
282
302
  @observation_requests[keyword] ||= Set.new
283
303
  event = nil
284
304
  delegate = nil
285
- [observation_request_to_event_mapping[keyword]].flatten.each do |mapping|
305
+ [observation_request_to_event_mapping[keyword]].flatten.each do |mapping|
286
306
  @observation_requests[keyword] << event_listener
287
307
  event = mapping[:event]
288
308
  event_handler = mapping[:event_handler]
309
+ event_element_css_selector = mapping[:event_element_css_selector]
289
310
  potential_event_listener = event_handler&.call(event_listener)
290
311
  event_listener = potential_event_listener || event_listener
291
- delegate = listener_dom_element.on(event, &event_listener)
312
+ async_event_listener = lambda do |event|
313
+ Async::Task.new do
314
+ event_listener.call(event)
315
+ end
316
+ end
317
+ the_listener_dom_element = event_element_css_selector ? Element[event_element_css_selector] : listener_dom_element
318
+ delegate = the_listener_dom_element.on(event, &async_event_listener)
292
319
  end
293
320
  # TODO update code below for new WidgetProxy API
294
321
  EventListenerProxy.new(element_proxy: self, event: event, selector: selector, delegate: delegate)
295
322
  end
296
323
 
297
324
  def add_observer(observer, property_name)
298
- property_listener_installers = self.class.ancestors.map {|ancestor| widget_property_listener_installers[ancestor]}.compact
325
+ property_listener_installers = self.class&.ancestors&.to_a.map {|ancestor| widget_property_listener_installers[ancestor]}.compact
299
326
  widget_listener_installers = property_listener_installers.map{|installer| installer[property_name.to_s.to_sym]}.compact if !property_listener_installers.empty?
300
327
  widget_listener_installers.to_a.each do |widget_listener_installer|
301
328
  widget_listener_installer.call(observer)
@@ -356,9 +383,6 @@ module Glimmer
356
383
  # else
357
384
  # value
358
385
  # end
359
- # end,
360
- # :items => lambda do |value|
361
- # value.to_java :string
362
386
  # end,
363
387
  :text => lambda do |value|
364
388
  # if swt_widget.is_a?(Browser)
@@ -370,8 +394,8 @@ module Glimmer
370
394
  # :visible => lambda do |value|
371
395
  # !!value
372
396
  # end,
373
- }
374
- end
397
+ }
398
+ end
375
399
 
376
400
  def widget_property_listener_installers
377
401
  @swt_widget_property_listener_installers ||= {
@@ -450,13 +474,31 @@ module Glimmer
450
474
  # }
451
475
  # end,
452
476
  # },
453
- # Button => { #radio?
454
- # :selection => lambda do |observer|
455
- # on_widget_selected { |selection_event|
456
- # observer.call(getSelection)
457
- # }
458
- # end
459
- # },
477
+ DateTimeProxy => {
478
+ :date_time => lambda do |observer|
479
+ on_widget_selected { |selection_event|
480
+ observer.call(date_time)
481
+ }
482
+ end
483
+ },
484
+ RadioProxy => { #radio?
485
+ :selection => lambda do |observer|
486
+ on_widget_selected { |selection_event|
487
+ observer.call(selection)
488
+ }
489
+ end
490
+ },
491
+ TableProxy => {
492
+ :selection => lambda do |observer|
493
+ on_widget_selected { |selection_event|
494
+ if has_style?(:multi)
495
+ observer.call(selection.map(&:get_data))
496
+ else
497
+ observer.call(selection.first&.get_data)
498
+ end
499
+ }
500
+ end,
501
+ },
460
502
  # Java::OrgEclipseSwtWidgets::MenuItem => {
461
503
  # :selection => lambda do |observer|
462
504
  # on_widget_selected { |selection_event|
@@ -478,18 +520,25 @@ module Glimmer
478
520
  end
479
521
  end
480
522
 
523
+ require 'glimmer/swt/display_proxy'
481
524
  require 'glimmer/swt/browser_proxy'
482
525
  require 'glimmer/swt/button_proxy'
483
526
  require 'glimmer/swt/combo_proxy'
527
+ require 'glimmer/swt/checkbox_proxy'
484
528
  require 'glimmer/swt/composite_proxy'
529
+ require 'glimmer/swt/date_time_proxy'
530
+ require 'glimmer/swt/group_proxy'
485
531
  require 'glimmer/swt/label_proxy'
486
532
  require 'glimmer/swt/list_proxy'
533
+ require 'glimmer/swt/radio_proxy'
487
534
  require 'glimmer/swt/tab_folder_proxy'
488
535
  require 'glimmer/swt/tab_item_proxy'
489
536
  require 'glimmer/swt/table_column_proxy'
490
537
  require 'glimmer/swt/table_item_proxy'
491
538
  require 'glimmer/swt/table_proxy'
492
539
  require 'glimmer/swt/text_proxy'
540
+ require 'glimmer/swt/radio_proxy'
541
+ require 'glimmer/swt/scrolled_composite_proxy'
493
542
  require 'glimmer/swt/styled_text_proxy'
494
543
 
495
544
  require 'glimmer/dsl/opal/widget_expression'
@@ -1,5 +1,5 @@
1
1
  # Copyright (c) 2020 Andy Maleh
2
- #
2
+ #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
5
5
  # "Software"), to deal in the Software without restriction, including
@@ -7,10 +7,10 @@
7
7
  # distribute, sublicense, and/or sell copies of the Software, and to
8
8
  # permit persons to whom the Software is furnished to do so, subject to
9
9
  # the following conditions:
10
- #
10
+ #
11
11
  # The above copyright notice and this permission notice shall be
12
12
  # included in all copies or substantial portions of the Software.
13
- #
13
+ #
14
14
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
15
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
16
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -89,7 +89,7 @@ module Glimmer
89
89
  def included(klass)
90
90
  klass.extend(ClassMethods)
91
91
  unless klass.name.include?('Glimmer::UI::CustomShell')
92
- klass.include(Glimmer)
92
+ klass.include(Glimmer)
93
93
  Glimmer::UI::CustomWidget.add_custom_widget_namespaces_for(klass)
94
94
  end
95
95
  end
@@ -107,7 +107,7 @@ module Glimmer
107
107
  end
108
108
  begin
109
109
  constant = result.const_get(namespace)
110
- return constant if constant.ancestors.include?(Glimmer::UI::CustomWidget)
110
+ return constant if constant&.respond_to?(:ancestors) && constant&.ancestors&.to_a.include?(Glimmer::UI::CustomWidget)
111
111
  constant
112
112
  rescue => e
113
113
  # Glimmer::Config.logger.debug {"#{e.message}\n#{e.backtrace.join("\n")}"}
@@ -158,7 +158,7 @@ module Glimmer
158
158
  args = []
159
159
  end
160
160
  options ||= {}
161
- args = options.delete('swt_style').split(',').map(&:to_sym) if options['swt_style']
161
+ args = options.delete('swt_style').split(',').map(&:to_sym) if options['swt_style']
162
162
  @args = args
163
163
  @swt_style = SWT::SWTProxy[*@args]
164
164
  options ||= {}
@@ -244,7 +244,7 @@ module Glimmer
244
244
 
245
245
  def has_style?(symbol)
246
246
  @args.include?(symbol) # not a very solid implementation. Bring SWT constants eventually
247
- end
247
+ end
248
248
 
249
249
  def async_exec(&block)
250
250
  SWT::DisplayProxy.instance.async_exec(&block)
@@ -273,7 +273,7 @@ module Glimmer
273
273
  end
274
274
  end
275
275
 
276
- alias local_respond_to? respond_to?
276
+ alias local_respond_to? respond_to?
277
277
  def respond_to?(method, *args, &block)
278
278
  super or
279
279
  can_handle_observation_request?(method) or
@@ -7,11 +7,7 @@ module Net
7
7
  # Note: ignore Protocol superclass for now
8
8
  class HTTP
9
9
  def post_form(uri, params)
10
- # pd uri.scheme
11
- # pd uri.host
12
- # pd uri.path
13
- # pd uri.query
14
- # pd params
10
+ # TODO
15
11
  end
16
12
  end
17
13
  end
data/lib/uri.rb CHANGED
@@ -6,7 +6,7 @@ module URI
6
6
 
7
7
  def initialize(url)
8
8
  @url = url
9
- uri_match = url.match(REGEX)
9
+ uri_match = url.match(REGEX).to_a
10
10
  @scheme = uri_match[1]
11
11
  @host = uri_match[2]
12
12
  @path = uri_match[3]
@@ -16,7 +16,7 @@ module URI
16
16
 
17
17
  def to_s
18
18
  url
19
- end
19
+ end
20
20
  end
21
21
 
22
22
  TBLENCWWWCOMP_ = {"\u0000"=>"%00", "\u0001"=>"%01", "\u0002"=>"%02", "\u0003"=>"%03", "\u0004"=>"%04", "\u0005"=>"%05", "\u0006"=>"%06", "\a"=>"%07", "\b"=>"%08", "\t"=>"%09", "\n"=>"%0A", "\v"=>"%0B", "\f"=>"%0C", "\r"=>"%0D", "\u000E"=>"%0E", "\u000F"=>"%0F", "\u0010"=>"%10", "\u0011"=>"%11", "\u0012"=>"%12", "\u0013"=>"%13", "\u0014"=>"%14", "\u0015"=>"%15", "\u0016"=>"%16", "\u0017"=>"%17", "\u0018"=>"%18", "\u0019"=>"%19", "\u001A"=>"%1A", "\e"=>"%1B", "\u001C"=>"%1C", "\u001D"=>"%1D", "\u001E"=>"%1E", "\u001F"=>"%1F", " "=>"+", "!"=>"%21", "\""=>"%22", "#"=>"%23", "$"=>"%24", "%"=>"%25", "&"=>"%26", "'"=>"%27", "("=>"%28", ")"=>"%29", "*"=>"%2A", "+"=>"%2B", ","=>"%2C", "-"=>"%2D", "."=>"%2E", "/"=>"%2F", "0"=>"%30", "1"=>"%31", "2"=>"%32", "3"=>"%33", "4"=>"%34", "5"=>"%35", "6"=>"%36", "7"=>"%37", "8"=>"%38", "9"=>"%39", ":"=>"%3A", ";"=>"%3B", "<"=>"%3C", "="=>"%3D", ">"=>"%3E", "?"=>"%3F", "@"=>"%40", "A"=>"%41", "B"=>"%42", "C"=>"%43", "D"=>"%44", "E"=>"%45", "F"=>"%46", "G"=>"%47", "H"=>"%48", "I"=>"%49", "J"=>"%4A", "K"=>"%4B", "L"=>"%4C", "M"=>"%4D", "N"=>"%4E", "O"=>"%4F", "P"=>"%50", "Q"=>"%51", "R"=>"%52", "S"=>"%53", "T"=>"%54", "U"=>"%55", "V"=>"%56", "W"=>"%57", "X"=>"%58", "Y"=>"%59", "Z"=>"%5A", "["=>"%5B", "\\"=>"%5C", "]"=>"%5D", "^"=>"%5E", "_"=>"%5F", "`"=>"%60", "a"=>"%61", "b"=>"%62", "c"=>"%63", "d"=>"%64", "e"=>"%65", "f"=>"%66", "g"=>"%67", "h"=>"%68", "i"=>"%69", "j"=>"%6A", "k"=>"%6B", "l"=>"%6C", "m"=>"%6D", "n"=>"%6E", "o"=>"%6F", "p"=>"%70", "q"=>"%71", "r"=>"%72", "s"=>"%73", "t"=>"%74", "u"=>"%75", "v"=>"%76", "w"=>"%77", "x"=>"%78", "y"=>"%79", "z"=>"%7A", "{"=>"%7B", "|"=>"%7C", "}"=>"%7D", "~"=>"%7E", "\u007F"=>"%7F", "\u0080"=>"%80", "\u0081"=>"%81", "\u0082"=>"%82", "\u0083"=>"%83", "\u0084"=>"%84", "\u0085"=>"%85", "\u0086"=>"%86", "\u0087"=>"%87", "\u0088"=>"%88", "\u0089"=>"%89", "\u008A"=>"%8A", "\u008B"=>"%8B", "\u008C"=>"%8C", "\u008D"=>"%8D", "\u008E"=>"%8E", "\u008F"=>"%8F", "\u0090"=>"%90", "\u0091"=>"%91", "\u0092"=>"%92", "\u0093"=>"%93", "\u0094"=>"%94", "\u0095"=>"%95", "\u0096"=>"%96", "\u0097"=>"%97", "\u0098"=>"%98", "\u0099"=>"%99", "\u009A"=>"%9A", "\u009B"=>"%9B", "\u009C"=>"%9C", "\u009D"=>"%9D", "\u009E"=>"%9E", "\u009F"=>"%9F", "\u00A0"=>"%A0", "\u00A1"=>"%A1", "\u00A2"=>"%A2", "\u00A3"=>"%A3", "\u00A4"=>"%A4", "\u00A5"=>"%A5", "\u00A6"=>"%A6", "\u00A7"=>"%A7", "\u00A8"=>"%A8", "\u00A9"=>"%A9", "\u00AA"=>"%AA", "\u00AB"=>"%AB", "\u00AC"=>"%AC", "\u00AD"=>"%AD", "\u00AE"=>"%AE", "\u00AF"=>"%AF", "\u00B0"=>"%B0", "\u00B1"=>"%B1", "\u00B2"=>"%B2", "\u00B3"=>"%B3", "\u00B4"=>"%B4", "\u00B5"=>"%B5", "\u00B6"=>"%B6", "\u00B7"=>"%B7", "\u00B8"=>"%B8", "\u00B9"=>"%B9", "\u00BA"=>"%BA", "\u00BB"=>"%BB", "\u00BC"=>"%BC", "\u00BD"=>"%BD", "\u00BE"=>"%BE", "\u00BF"=>"%BF", "\u00C0"=>"%C0", "\u00C1"=>"%C1", "\u00C2"=>"%C2", "\u00C3"=>"%C3", "\u00C4"=>"%C4", "\u00C5"=>"%C5", "\u00C6"=>"%C6", "\u00C7"=>"%C7", "\u00C8"=>"%C8", "\u00C9"=>"%C9", "\u00CA"=>"%CA", "\u00CB"=>"%CB", "\u00CC"=>"%CC", "\u00CD"=>"%CD", "\u00CE"=>"%CE", "\u00CF"=>"%CF", "\u00D0"=>"%D0", "\u00D1"=>"%D1", "\u00D2"=>"%D2", "\u00D3"=>"%D3", "\u00D4"=>"%D4", "\u00D5"=>"%D5", "\u00D6"=>"%D6", "\u00D7"=>"%D7", "\u00D8"=>"%D8", "\u00D9"=>"%D9", "\u00DA"=>"%DA", "\u00DB"=>"%DB", "\u00DC"=>"%DC", "\u00DD"=>"%DD", "\u00DE"=>"%DE", "\u00DF"=>"%DF", "\u00E0"=>"%E0", "\u00E1"=>"%E1", "\u00E2"=>"%E2", "\u00E3"=>"%E3", "\u00E4"=>"%E4", "\u00E5"=>"%E5", "\u00E6"=>"%E6", "\u00E7"=>"%E7", "\u00E8"=>"%E8", "\u00E9"=>"%E9", "\u00EA"=>"%EA", "\u00EB"=>"%EB", "\u00EC"=>"%EC", "\u00ED"=>"%ED", "\u00EE"=>"%EE", "\u00EF"=>"%EF", "\u00F0"=>"%F0", "\u00F1"=>"%F1", "\u00F2"=>"%F2", "\u00F3"=>"%F3", "\u00F4"=>"%F4", "\u00F5"=>"%F5", "\u00F6"=>"%F6", "\u00F7"=>"%F7", "\u00F8"=>"%F8", "\u00F9"=>"%F9", "\u00FA"=>"%FA", "\u00FB"=>"%FB", "\u00FC"=>"%FC", "\u00FD"=>"%FD", "\u00FE"=>"%FE", "\u00FF"=>"%FF"}
@@ -54,7 +54,7 @@ module URI
54
54
  def self.decode_www_form_component(str, enc=Encoding::UTF_8)
55
55
  raise ArgumentError, "invalid %-encoding (#{str})" if /%(?![0-9a-fA-F][0-9a-fA-F])/ =~ str
56
56
  str.b.gsub(/\+|%[0-9a-fA-F][0-9a-fA-F]/, TBLDECWWWCOMP_).force_encoding(enc)
57
- end
57
+ end
58
58
  end
59
59
 
60
60
  module Kernel