glimmer-dsl-opal 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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'