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.



219
220
221
222
223
224
# File 'lib/dommy/navigator.rb', line 219

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.



217
218
219
# File 'lib/dommy/navigator.rb', line 217

def name
  @name
end

#stateObject (readonly)

Returns the value of attribute state.



217
218
219
# File 'lib/dommy/navigator.rb', line 217

def state
  @state
end

Instance Method Details

#__event_parent__Object



267
268
269
# File 'lib/dommy/navigator.rb', line 267

def __event_parent__
  nil
end

#__js_call__(method, args) ⇒ Object



256
257
258
259
260
261
262
263
264
265
# File 'lib/dommy/navigator.rb', line 256

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



233
234
235
236
237
238
239
240
241
242
# File 'lib/dommy/navigator.rb', line 233

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

#__js_set__(key, value) ⇒ Object



244
245
246
247
248
249
250
251
252
253
254
# File 'lib/dommy/navigator.rb', line 244

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



226
227
228
229
230
231
# File 'lib/dommy/navigator.rb', line 226

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

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