Class: Dommy::PermissionStatus

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

Overview

‘PermissionStatus` — `state` + `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 EventTarget

#__deliver_event__, #add_event_listener, #dispatch_event, #invoke_listener, #remove_event_listener

Constructor Details

#initialize(window, name, state) ⇒ PermissionStatus

Returns a new instance of PermissionStatus.



282
283
284
285
286
287
# File 'lib/dommy/navigator.rb', line 282

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.



280
281
282
# File 'lib/dommy/navigator.rb', line 280

def name
  @name
end

#stateObject (readonly)

Returns the value of attribute state.



280
281
282
# File 'lib/dommy/navigator.rb', line 280

def state
  @state
end

Instance Method Details

#__event_parent__Object



330
331
332
# File 'lib/dommy/navigator.rb', line 330

def __event_parent__
  nil
end

#__js_call__(method, args) ⇒ Object



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

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])
  when "dispatchEvent"
    dispatch_event(args[0])
  end
end

#__js_get__(key) ⇒ Object



296
297
298
299
300
301
302
303
304
305
# File 'lib/dommy/navigator.rb', line 296

def __js_get__(key)
  case key
  when "name"
    @name
  when "state"
    @state
  when "onchange"
    @onchange
  end
end

#__js_set__(key, value) ⇒ Object



307
308
309
310
311
312
313
314
315
316
317
# File 'lib/dommy/navigator.rb', line 307

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
  end

  nil
end

#__set_state__(new_state) ⇒ Object



289
290
291
292
293
294
# File 'lib/dommy/navigator.rb', line 289

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

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