Sha256: 935c3ffc0776edf0788a0053760e94178c651657fd317611fe2b103f04f57f73

Contents?: true

Size: 1.46 KB

Versions: 3

Compression:

Stored size: 1.46 KB

Contents

require 'glimmer/data_binding/observable_element'
require 'glimmer/swt/widget_proxy'

module Glimmer
  module SWT
    class ComboProxy < WidgetProxy
      include Glimmer::DataBinding::ObservableElement
      attr_reader :text, :items
      
      def initialize(parent, args, block)
        super(parent, args, block)
        @items = []
      end
      
      def element
        'select'
      end
      
      def text=(value)
        @text = value
        Document.find(path).value = value
      end
      
      def items=(the_items)
        @items = the_items
        items_dom = items.to_a.map do |item|
          option_hash = {value: item}
          option_hash[:selected] = 'selected' if @text == item
          html {
            option(option_hash) {
              item
            }
          }.to_s
        end
        dom_element.html(items_dom)
      end

      def observation_request_to_event_mapping
        {
          'on_widget_selected' => {
            event: 'change',
            event_handler: -> (event_listener) {
              -> (event) {
                @text = event.target.value
                event_listener.call(event)
              }
            }
          }
        }
      end
      
      def dom
        items = @items
        select_id = id
        select_style = css
        select_class = name
        @dom ||= html {
          select(id: select_id, class: select_class, style: select_style) {
          }
        }.to_s
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
glimmer-dsl-opal-0.7.1 lib/glimmer/swt/combo_proxy.rb
glimmer-dsl-opal-0.7.0 lib/glimmer/swt/combo_proxy.rb
glimmer-dsl-opal-0.6.1 lib/glimmer/swt/combo_proxy.rb