Sha256: 44b203bcca11adb1fbb9794490dc81679196dd89062bfaeec0076cef0703def7

Contents?: true

Size: 1.15 KB

Versions: 13

Compression:

Stored size: 1.15 KB

Contents

require 'volt/templates/base_binding'

# TODO: We need to figure out how we want to wrap JS events
class JSEvent
  attr_reader :js_event
  def initialize(js_event)
    @js_event = js_event
  end
  
  def key_code
    `this.js_event.keyCode`
  end

  def stop
    # puts "STOPPING"
    # `this.js_event.stopPropagation();`
    `this.js_event.preventDefault();`
  end
end


class EventBinding < BaseBinding
  attr_accessor :context, :binding_name
  def initialize(target, context, binding_name, event_name, call_proc)
    @target = target
    @context = context
    @binding_name = binding_name
    @event_name = event_name
    
    handler = Proc.new do |js_event|
      event = JSEvent.new(js_event)
      event.stop if event_name == 'submit'

      # Call the proc the user setup for the event in context,
      # pass in the wrapper for the JS event
      result = @context.instance_exec(event, &call_proc)
    end

    @listener = $page.events.add(event_name, self, handler)
  end

  def element
    Element.find('#' + binding_name)
  end

  # Remove the event binding
  def remove
    # puts "REMOVE EL FOR #{@event}"
    $page.events.remove(@event_name, self)
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
volt-0.3.7 lib/volt/templates/event_binding.rb
volt-0.3.6 lib/volt/templates/event_binding.rb
volt-0.3.5 lib/volt/templates/event_binding.rb
volt-0.3.4 lib/volt/templates/event_binding.rb
volt-0.3.3 lib/volt/templates/event_binding.rb
volt-0.3.2 lib/volt/templates/event_binding.rb
volt-0.3.1 lib/volt/templates/event_binding.rb
volt-0.3.0 lib/volt/templates/event_binding.rb
volt-0.2.9 lib/volt/templates/event_binding.rb
volt-0.2.7 lib/volt/templates/event_binding.rb
volt-0.2.5 lib/volt/templates/event_binding.rb
volt-0.2.4 lib/volt/templates/event_binding.rb
volt-0.2.3 lib/volt/templates/event_binding.rb