Sha256: 476b4b8bc4d8b7cb8d825a340b9bd38bfff7edb8ba9be5f20d51fe343207814d

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

require 'glimmer/data_binding/observable_element'
require 'glimmer/opal/event_listener_proxy'
require 'glimmer/opal/element_proxy'

module Glimmer
  module Opal
    class SelectProxy < ElementProxy
      include Glimmer::DataBinding::ObservableElement
      attr_reader :text, :items
      
      def initialize(parent, args)
        super(parent, args)
        @items = []
      end
      
      def text=(value)
        @text = value
        redraw
      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
        @dom ||= DOM {
          select(id: select_id) {
            items.to_a.each do |item|
              option_hash = {value: item}
              option_hash[:selected] = 'selected' if select_text == item
              option(option_hash) {
                item
              } 
            end
          }
        }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
glimmer-dsl-opal-0.0.2 lib/glimmer/opal/select_proxy.rb