Sha256: c27f397f04139790e409abc834193c347fb86c7d567310003f4f37c0aa2980fb

Contents?: true

Size: 1.06 KB

Versions: 3

Compression:

Stored size: 1.06 KB

Contents

require 'volt/page/bindings/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
    # `this.js_event.stopPropagation();`
    `this.js_event.preventDefault();`
  end

  def target
    `this.js_event.toElement`
  end
end


class EventBinding < BaseBinding
  attr_accessor :context, :binding_name
  def initialize(page, target, context, binding_name, event_name, call_proc)
    super(page, target, context, 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

  # Remove the event binding
  def remove
    @page.events.remove(@event_name, self)
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
volt-0.7.14 lib/volt/page/bindings/event_binding.rb
volt-0.7.13 lib/volt/page/bindings/event_binding.rb
volt-0.7.12 lib/volt/page/bindings/event_binding.rb