Sha256: 2e2b95c4ebe3e43556ce16ead7b92b9f7886e757d8bb33026ce7b659ca2b6dbe

Contents?: true

Size: 1.38 KB

Versions: 4

Compression:

Stored size: 1.38 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
        select_style = css
        @dom ||= DOM {
          select(id: select_id, 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
          }
        }
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
glimmer-dsl-opal-0.0.9 lib/glimmer/opal/select_proxy.rb
glimmer-dsl-opal-0.0.8 lib/glimmer/opal/select_proxy.rb
glimmer-dsl-opal-0.0.7 lib/glimmer/opal/select_proxy.rb
glimmer-dsl-opal-0.0.6 lib/glimmer/opal/select_proxy.rb