glimmer-dsl-opal 0.0.9 → 0.1.0

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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +57 -28
  4. data/VERSION +1 -1
  5. data/lib/glimmer-dsl-opal.rb +26 -11
  6. data/lib/glimmer/data_binding/element_binding.rb +1 -1
  7. data/lib/glimmer/data_binding/ext/observable_model.rb +4 -4
  8. data/lib/glimmer/data_binding/list_selection_binding.rb +1 -1
  9. data/lib/glimmer/data_binding/table_items_binding.rb +3 -3
  10. data/lib/glimmer/dsl/opal/column_properties_expression.rb +2 -2
  11. data/lib/glimmer/dsl/opal/combo_selection_data_binding_expression.rb +2 -2
  12. data/lib/glimmer/dsl/opal/dsl.rb +4 -16
  13. data/lib/glimmer/dsl/opal/layout_data_expression.rb +2 -2
  14. data/lib/glimmer/dsl/opal/{text_expression.rb → layout_expression.rb} +5 -5
  15. data/lib/glimmer/dsl/opal/list_selection_data_binding_expression.rb +2 -3
  16. data/lib/glimmer/dsl/opal/message_box_expression.rb +2 -2
  17. data/lib/glimmer/dsl/opal/shell_expression.rb +2 -2
  18. data/lib/glimmer/dsl/opal/table_expression.rb +2 -2
  19. data/lib/glimmer/dsl/opal/table_items_data_binding_expression.rb +2 -2
  20. data/lib/glimmer/dsl/opal/widget_expression.rb +23 -0
  21. data/lib/glimmer/opal/display_proxy.rb +3 -3
  22. data/lib/glimmer/opal/element_proxy.rb +11 -3
  23. data/lib/glimmer/swt/browser_proxy.rb +27 -0
  24. data/lib/glimmer/swt/button_proxy.rb +40 -0
  25. data/lib/glimmer/{opal/select_proxy.rb → swt/combo_proxy.rb} +14 -10
  26. data/lib/glimmer/{opal/div_proxy.rb → swt/composite_proxy.rb} +8 -6
  27. data/lib/glimmer/{opal → swt}/event_listener_proxy.rb +1 -1
  28. data/lib/glimmer/{opal → swt}/grid_layout_proxy.rb +5 -18
  29. data/lib/glimmer/swt/label_proxy.rb +30 -0
  30. data/lib/glimmer/{opal → swt}/layout_data_proxy.rb +3 -3
  31. data/lib/glimmer/swt/layout_proxy.rb +60 -0
  32. data/lib/glimmer/{opal → swt}/list_proxy.rb +16 -13
  33. data/lib/glimmer/{opal/modal.rb → swt/message_box_proxy.rb} +61 -9
  34. data/lib/glimmer/{opal → swt}/point.rb +1 -1
  35. data/lib/glimmer/{opal → swt}/property_owner.rb +1 -1
  36. data/lib/glimmer/swt/shell_proxy.rb +235 -0
  37. data/lib/glimmer/{opal/tab_folder.rb → swt/tab_folder_proxy.rb} +13 -14
  38. data/lib/glimmer/{opal/tab_item.rb → swt/tab_item_proxy.rb} +37 -34
  39. data/lib/glimmer/{opal/table_column.rb → swt/table_column_proxy.rb} +13 -7
  40. data/lib/glimmer/{opal/table_item.rb → swt/table_item_proxy.rb} +59 -48
  41. data/lib/glimmer/swt/table_proxy.rb +177 -0
  42. data/lib/glimmer/swt/text_proxy.rb +46 -0
  43. data/lib/glimmer/swt/widget_proxy.rb +389 -0
  44. data/lib/jquery.js +2 -0
  45. data/lib/samples/elaborate/contact_manager.rb +1 -1
  46. data/lib/samples/hello/hello_computed.rb +19 -19
  47. metadata +79 -55
  48. data/lib/glimmer/dsl/opal/browser_expression.rb +0 -17
  49. data/lib/glimmer/dsl/opal/button_expression.rb +0 -18
  50. data/lib/glimmer/dsl/opal/combo_expression.rb +0 -17
  51. data/lib/glimmer/dsl/opal/composite_expression.rb +0 -17
  52. data/lib/glimmer/dsl/opal/grid_layout_expression.rb +0 -17
  53. data/lib/glimmer/dsl/opal/label_expression.rb +0 -17
  54. data/lib/glimmer/dsl/opal/list_expression.rb +0 -17
  55. data/lib/glimmer/dsl/opal/tab_folder_expression.rb +0 -17
  56. data/lib/glimmer/dsl/opal/tab_item_expression.rb +0 -17
  57. data/lib/glimmer/opal/document_proxy.rb +0 -187
  58. data/lib/glimmer/opal/iframe_proxy.rb +0 -23
  59. data/lib/glimmer/opal/input_proxy.rb +0 -45
  60. data/lib/glimmer/opal/label_proxy.rb +0 -25
  61. data/lib/glimmer/opal/table_proxy.rb +0 -149
@@ -1,7 +1,7 @@
1
1
  require 'glimmer/dsl/static_expression'
2
2
  require 'glimmer/dsl/top_level_expression'
3
3
  require 'glimmer/dsl/parent_expression'
4
- require 'glimmer/opal/modal'
4
+ require 'glimmer/swt/message_box_proxy'
5
5
 
6
6
  module Glimmer
7
7
  module DSL
@@ -12,7 +12,7 @@ module Glimmer
12
12
 
13
13
  def interpret(parent, keyword, *args, &block)
14
14
  parent = args.delete_at(0)
15
- Glimmer::Opal::Modal.new(parent, args)
15
+ Glimmer::SWT::MessageBoxProxy.new(parent, args)
16
16
  end
17
17
  end
18
18
  end
@@ -1,7 +1,7 @@
1
1
  require 'glimmer/dsl/static_expression'
2
2
  require 'glimmer/dsl/top_level_expression'
3
3
  require 'glimmer/dsl/parent_expression'
4
- require 'glimmer/opal/document_proxy'
4
+ require 'glimmer/swt/shell_proxy'
5
5
 
6
6
  module Glimmer
7
7
  module DSL
@@ -11,7 +11,7 @@ module Glimmer
11
11
  include ParentExpression
12
12
 
13
13
  def interpret(parent, keyword, *args, &block)
14
- Glimmer::Opal::DocumentProxy.new(args)
14
+ Glimmer::SWT::ShellProxy.new(*args)
15
15
  end
16
16
  end
17
17
  end
@@ -1,6 +1,6 @@
1
1
  require 'glimmer/dsl/static_expression'
2
2
  require 'glimmer/dsl/parent_expression'
3
- require 'glimmer/opal/table_proxy'
3
+ require 'glimmer/swt/table_proxy'
4
4
 
5
5
  module Glimmer
6
6
  module DSL
@@ -9,7 +9,7 @@ module Glimmer
9
9
  include ParentExpression
10
10
 
11
11
  def interpret(parent, keyword, *args, &block)
12
- Glimmer::Opal::TableProxy.new(parent, args)
12
+ Glimmer::SWT::TableProxy.new(parent, args)
13
13
  end
14
14
  end
15
15
  end
@@ -1,7 +1,7 @@
1
1
  require 'glimmer/dsl/expression'
2
2
  require 'glimmer/data_binding/model_binding'
3
3
  require 'glimmer/data_binding/table_items_binding'
4
- require 'glimmer/opal/table_proxy'
4
+ require 'glimmer/swt/table_proxy'
5
5
 
6
6
  module Glimmer
7
7
  module DSL
@@ -11,7 +11,7 @@ module Glimmer
11
11
  def can_interpret?(parent, keyword, *args, &block)
12
12
  keyword == "items" and
13
13
  block.nil? and
14
- parent.is_a?(Glimmer::Opal::TableProxy) and
14
+ parent.is_a?(Glimmer::SWT::TableProxy) and
15
15
  args.size == 2 and
16
16
  args[0].is_a?(DataBinding::ModelBinding) and
17
17
  args[0].evaluate_property.is_a?(Array) and
@@ -0,0 +1,23 @@
1
+ require 'glimmer/dsl/expression'
2
+ require 'glimmer/dsl/parent_expression'
3
+ require 'glimmer/swt/widget_proxy'
4
+
5
+ module Glimmer
6
+ module DSL
7
+ module Opal
8
+ class WidgetExpression < Expression
9
+ include ParentExpression
10
+ EXCLUDED_KEYWORDS = %w[shell display]
11
+
12
+ def can_interpret?(parent, keyword, *args, &block)
13
+ !EXCLUDED_KEYWORDS.include?(keyword) and
14
+ parent.is_a?(Glimmer::SWT::WidgetProxy)
15
+ end
16
+
17
+ def interpret(parent, keyword, *args, &block)
18
+ Glimmer::SWT::WidgetProxy.for(keyword, parent, args)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -9,11 +9,11 @@ module Glimmer
9
9
 
10
10
  def async_exec(&block)
11
11
  executer = lambda do
12
- if $document.at_css('.modal')
12
+ if Document.find('.modal').to_a.empty?
13
+ block.call
14
+ else
13
15
  sleep(0.05)
14
16
  Async::Task.new(&executer)
15
- else
16
- block.call
17
17
  end
18
18
  end
19
19
  Async::Task.new(&executer)
@@ -1,10 +1,10 @@
1
- require 'glimmer/opal/property_owner'
1
+ require 'glimmer/swt/property_owner'
2
2
 
3
3
  module Glimmer
4
4
  module Opal
5
5
  class ElementProxy
6
6
  include Glimmer
7
- include PropertyOwner
7
+ include Glimmer::SWT::PropertyOwner
8
8
  attr_reader :parent, :args, :css_classes, :css, :children, :enabled
9
9
 
10
10
  class << self
@@ -17,7 +17,11 @@ module Glimmer
17
17
  end
18
18
 
19
19
  def max_id_numbers
20
- @max_id_numbers ||= {}
20
+ @max_id_numbers ||= reset_max_id_numbers!
21
+ end
22
+
23
+ def reset_max_id_numbers!
24
+ @max_id_numbers = {}
21
25
  end
22
26
  end
23
27
 
@@ -30,6 +34,10 @@ module Glimmer
30
34
  @enabled = true
31
35
  @parent.add_child(self)
32
36
  end
37
+
38
+ def dispose
39
+ dom.remove
40
+ end
33
41
 
34
42
  def add_child(child)
35
43
  # return if @children.include?(child) # TODO consider adding an option to enable this if needed to prevent dom repetition
@@ -0,0 +1,27 @@
1
+ require 'glimmer/swt/widget_proxy'
2
+
3
+ module Glimmer
4
+ module SWT
5
+ class BrowserProxy < WidgetProxy
6
+ attr_reader :url
7
+
8
+ def url=(value)
9
+ @url = value
10
+ redraw
11
+ end
12
+
13
+ def element
14
+ 'iframe'
15
+ end
16
+
17
+ def dom
18
+ iframe_id = id
19
+ iframe_url = url
20
+ @dom ||= html {
21
+ iframe(id: iframe_id, class: name, src: iframe_url, frameBorder: 0) {
22
+ }
23
+ }.to_s
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,40 @@
1
+ require 'glimmer/swt/widget_proxy'
2
+
3
+ module Glimmer
4
+ module SWT
5
+ class ButtonProxy < WidgetProxy
6
+ attr_reader :text
7
+
8
+ def text=(value)
9
+ @text = value
10
+ redraw
11
+ end
12
+
13
+ def element
14
+ 'button'
15
+ end
16
+
17
+ def observation_request_to_event_mapping
18
+ {
19
+ 'on_widget_selected' => {
20
+ event: 'click'
21
+ },
22
+ }
23
+ end
24
+
25
+ def dom
26
+ input_text = @text
27
+ input_id = id
28
+ input_style = css
29
+ input_args = {}
30
+ input_disabled = @enabled ? {} : {'disabled': 'disabled'}
31
+ input_args = input_args.merge(type: 'password') if has_style?(:password)
32
+ @dom ||= html {
33
+ button(input_args.merge(id: input_id, class: name, style: input_style, style: 'min-width: 27px;').merge(input_disabled)) {
34
+ input_text.to_s == '' ? '&nbsp;' : input_text
35
+ }
36
+ }.to_s
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,10 +1,9 @@
1
1
  require 'glimmer/data_binding/observable_element'
2
- require 'glimmer/opal/event_listener_proxy'
3
- require 'glimmer/opal/element_proxy'
2
+ require 'glimmer/swt/widget_proxy'
4
3
 
5
4
  module Glimmer
6
- module Opal
7
- class SelectProxy < ElementProxy
5
+ module SWT
6
+ class ComboProxy < WidgetProxy
8
7
  include Glimmer::DataBinding::ObservableElement
9
8
  attr_reader :text, :items
10
9
 
@@ -13,9 +12,13 @@ module Glimmer
13
12
  @items = []
14
13
  end
15
14
 
15
+ def element
16
+ 'select'
17
+ end
18
+
16
19
  def text=(value)
17
20
  @text = value
18
- redraw
21
+ Document.find(path).value = value
19
22
  end
20
23
 
21
24
  def items=(the_items)
@@ -23,12 +26,12 @@ module Glimmer
23
26
  redraw
24
27
  end
25
28
 
26
- def observation_request_to_event_mapping
29
+ def observation_request_to_event_mapping
27
30
  {
28
31
  'on_widget_selected' => {
29
32
  event: 'change',
30
33
  event_handler: -> (event_listener) {
31
- -> (event) {
34
+ -> (event) {
32
35
  @text = event.target.value
33
36
  event_listener.call(event)
34
37
  }
@@ -42,8 +45,9 @@ module Glimmer
42
45
  items = @items
43
46
  select_id = id
44
47
  select_style = css
45
- @dom ||= DOM {
46
- select(id: select_id, style: select_style) {
48
+ select_class = name
49
+ @dom ||= html {
50
+ select(id: select_id, class: select_class, style: select_style) {
47
51
  items.to_a.each do |item|
48
52
  option_hash = {value: item}
49
53
  option_hash[:selected] = 'selected' if select_text == item
@@ -52,7 +56,7 @@ module Glimmer
52
56
  }
53
57
  end
54
58
  }
55
- }
59
+ }.to_s
56
60
  end
57
61
  end
58
62
  end
@@ -1,8 +1,9 @@
1
- require 'glimmer/opal/element_proxy'
1
+ require 'glimmer/swt/grid_layout_proxy'
2
+ require 'glimmer/swt/widget_proxy'
2
3
 
3
4
  module Glimmer
4
- module Opal
5
- class DivProxy < ElementProxy
5
+ module SWT
6
+ class CompositeProxy < WidgetProxy
6
7
  attr_reader :layout
7
8
 
8
9
  def initialize(parent, args)
@@ -20,9 +21,10 @@ module Glimmer
20
21
  def dom
21
22
  div_id = id
22
23
  div_style = css
23
- @dom ||= DOM {
24
- div(id: div_id, class: 'grid-layout', style: div_style)
25
- }
24
+ div_class = "#{name} grid-layout"
25
+ @dom ||= html {
26
+ div(id: div_id, class: div_class, style: div_style)
27
+ }.to_s
26
28
  end
27
29
  end
28
30
  end
@@ -1,5 +1,5 @@
1
1
  module Glimmer
2
- module Opal
2
+ module SWT
3
3
  class EventListenerProxy
4
4
  attr_reader :element_proxy, :event, :selector, :delegate
5
5
 
@@ -1,15 +1,12 @@
1
- require 'glimmer/opal/property_owner'
1
+ require 'glimmer/swt/layout_proxy'
2
2
 
3
3
  module Glimmer
4
- module Opal
5
- class GridLayoutProxy
6
- include PropertyOwner
7
- attr_reader :parent, :args, :num_columns, :make_columns_equal_width, :horizontal_spacing, :vertical_spacing
4
+ module SWT
5
+ class GridLayoutProxy < LayoutProxy
6
+ attr_reader :num_columns, :make_columns_equal_width, :horizontal_spacing, :vertical_spacing
8
7
 
9
8
  def initialize(parent, args)
10
- @parent = parent
11
- @args = args
12
- @parent.add_css_class('grid-layout')
9
+ super(parent, args)
13
10
  @horizontal_spacing = 10
14
11
  @vertical_spacing = 10
15
12
  @num_columns = @args.first || 1
@@ -39,16 +36,6 @@ module Glimmer
39
36
  # @parent.add_css_class("vertical-spacing-#{@vertical_spacing}")
40
37
  reapply
41
38
  end
42
-
43
- def reapply
44
- @parent.css = <<~CSS
45
- display: grid;
46
- grid-template-columns: #{'auto ' * @num_columns.to_i};
47
- grid-row-gap: #{@vertical_spacing}px;
48
- grid-column-gap: #{@horizontal_spacing}px;
49
- justify-content: start;
50
- CSS
51
- end
52
39
  end
53
40
  end
54
41
  end
@@ -0,0 +1,30 @@
1
+ require 'glimmer/swt/widget_proxy'
2
+
3
+ module Glimmer
4
+ module SWT
5
+ class LabelProxy < WidgetProxy
6
+ attr_reader :text
7
+
8
+ def text=(value)
9
+ @text = value
10
+ redraw
11
+ end
12
+
13
+ def element
14
+ 'label'
15
+ end
16
+
17
+ def dom
18
+ label_text = @text
19
+ label_id = id
20
+ label_style = css
21
+ label_class = name
22
+ @dom ||= html {
23
+ label(id: label_id, style: label_style, class: label_class) {
24
+ label_text
25
+ }
26
+ }.to_s
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,9 +1,9 @@
1
- require 'glimmer/opal/property_owner'
1
+ require 'glimmer/swt/property_owner'
2
2
 
3
3
  module Glimmer
4
- module Opal
4
+ module SWT
5
5
  class LayoutDataProxy
6
- include PropertyOwner
6
+ include Glimmer::SWT::PropertyOwner
7
7
  attr_reader :parent,
8
8
  :args,
9
9
  :horizontal_alignment,
@@ -0,0 +1,60 @@
1
+ require 'glimmer/swt/property_owner'
2
+
3
+ module Glimmer
4
+ module SWT
5
+ class LayoutProxy
6
+ include Glimmer::SWT::PropertyOwner
7
+
8
+ class << self
9
+ # Factory Method that translates a Glimmer DSL keyword into a WidgetProxy object
10
+ def for(keyword, parent, args)
11
+ the_layout_class = layout_class(keyword) || Glimmer::SWT::GridLayoutProxy
12
+ the_layout_class.new(parent, args)
13
+ end
14
+
15
+ def layout_class(keyword)
16
+ class_name_alternative = keyword.camelcase(:upper)
17
+ class_name_main = "#{class_name_alternative}Proxy"
18
+ a_layout_class = Glimmer::SWT.const_get(class_name_main.to_sym) rescue Glimmer::SWT.const_get(class_name_alternative.to_sym)
19
+ a_layout_class if a_layout_class.ancestors.include?(Glimmer::SWT::LayoutProxy)
20
+ rescue => e
21
+ puts "Layout #{keyword} was not found!"
22
+ nil
23
+ end
24
+
25
+ def layout_exists?(keyword)
26
+ !!layout_class(keyword)
27
+ end
28
+ end
29
+
30
+ attr_reader :parent, :args
31
+
32
+ def initialize(parent, args)
33
+ @parent = parent
34
+ @args = args
35
+ @parent.add_css_class(css_class)
36
+ end
37
+
38
+ def css_class
39
+ self.class.name.split('::').last.underscore.sub(/_proxy$/, '').gsub('_', '-')
40
+ end
41
+
42
+ def reapply
43
+ layout_css = <<~CSS
44
+ display: grid;
45
+ grid-template-columns: #{'auto ' * @num_columns.to_i};
46
+ grid-row-gap: #{@vertical_spacing}px;
47
+ grid-column-gap: #{@horizontal_spacing}px;
48
+ justify-content: start;
49
+ CSS
50
+ layout_css.split(";").map(&:strip).map {|l| l.split(':').map(&:strip)}.each do |key, value|
51
+ unless key.nil?
52
+ @parent.dom_element.css(key, value)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ require 'glimmer/swt/grid_layout_proxy'