Sha256: 02f1b97151cd6bb4db1bf8212e8b17845d23213ff9a2d158ced42880b33e817b

Contents?: true

Size: 1.48 KB

Versions: 1

Compression:

Stored size: 1.48 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)
        super(parent, args)
        @items = []
      end
      
      def element
        'select'
      end
      
      def text=(value)
        @text = value
        Document.find(path).value = value
      end
      
      def items=(the_items)
        @items = the_items
        redraw
      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
        select_text = @text        
        items = @items
        select_id = id
        select_style = css
        select_class = name
        @dom ||= html {
          select(id: select_id, class: select_class, style: select_style) {
            items.to_a.each do |item|
              option_hash = {value: item}
              option_hash[:selected] = 'selected' if select_text == item
              option(option_hash) {
                item
              } 
            end
          }
        }.to_s
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
glimmer-dsl-opal-0.1.0 lib/glimmer/swt/combo_proxy.rb