Class: Dommy::PermissionStatus

Inherits:
Object
  • Object
show all
Includes:
Bridge::Methods, EventTarget
Defined in:
lib/dommy/navigator.rb

Overview

PermissionStatusstate + onchange event handler. Fires a change event when Permissions#set mutates the underlying value (mirrors browser behavior where the user toggles a permission).

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Bridge::Methods

included

Methods included from EventTarget

#__dommy_dump_event_failure__, #__internal_deliver_event__, #__internal_process_event_handler_return__, #add_event_listener, capture_flag, #deliver_at, #dispatch_event, #event_name_from_on, #invoke_listener_isolated, js_truthy?, #on_handler, #remove_event_listener, #set_on_handler

Constructor Details

#initialize(window, name, state) ⇒ PermissionStatus

Returns a new instance of PermissionStatus.



312
313
314
315
316
317
# File 'lib/dommy/navigator.rb', line 312

def initialize(window, name, state)
  @window = window
  @name = name
  @state = state
  @onchange = nil
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



310
311
312
# File 'lib/dommy/navigator.rb', line 310

def name
  @name
end

#stateObject (readonly)

Returns the value of attribute state.



310
311
312
# File 'lib/dommy/navigator.rb', line 310

def state
  @state
end

Instance Method Details

#__internal_event_parent__Object



366
367
368
# File 'lib/dommy/navigator.rb', line 366

def __internal_event_parent__
  nil
end

#__internal_set_state__(new_state) ⇒ Object



319
320
321
322
323
324
# File 'lib/dommy/navigator.rb', line 319

def __internal_set_state__(new_state)
  return if @state == new_state

  @state = new_state
  dispatch_event(Event.new("change"))
end

#__js_call__(method, args) ⇒ Object



355
356
357
358
359
360
361
362
363
364
# File 'lib/dommy/navigator.rb', line 355

def __js_call__(method, args)
  case method
  when "addEventListener"
    add_event_listener(args[0], args[1], args[2])
  when "removeEventListener"
    remove_event_listener(args[0], args[1], args[2])
  when "dispatchEvent"
    dispatch_event(args[0])
  end
end

#__js_get__(key) ⇒ Object



326
327
328
329
330
331
332
333
334
335
336
337
# File 'lib/dommy/navigator.rb', line 326

def __js_get__(key)
  case key
  when "name"
    @name
  when "state"
    @state
  when "onchange"
    @onchange
  else
    Bridge::ABSENT
  end
end

#__js_set__(key, value) ⇒ Object



339
340
341
342
343
344
345
346
347
348
349
350
351
# File 'lib/dommy/navigator.rb', line 339

def __js_set__(key, value)
  case key
  when "onchange"
    # Assigning to onchange overwrites the previous handler.
    remove_event_listener("change", @onchange) if @onchange
    @onchange = value
    add_event_listener("change", value) if value
  else
    return Bridge::UNHANDLED
  end

  nil
end