Class: Dommy::PermissionStatus

Inherits:
Object
  • Object
show all
Includes:
Bridge::Methods, 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 Bridge::Methods

included

Methods included from EventTarget

#__internal_deliver_event__, #add_event_listener, capture_flag, #deliver_at, #dispatch_event, js_truthy?, #remove_event_listener

Constructor Details

#initialize(window, name, state) ⇒ PermissionStatus

Returns a new instance of PermissionStatus.



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

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.



286
287
288
# File 'lib/dommy/navigator.rb', line 286

def name
  @name
end

#stateObject (readonly)

Returns the value of attribute state.



286
287
288
# File 'lib/dommy/navigator.rb', line 286

def state
  @state
end

Instance Method Details

#__internal_event_parent__Object



340
341
342
# File 'lib/dommy/navigator.rb', line 340

def __internal_event_parent__
  nil
end

#__internal_set_state__(new_state) ⇒ Object



295
296
297
298
299
300
# File 'lib/dommy/navigator.rb', line 295

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



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

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



302
303
304
305
306
307
308
309
310
311
# File 'lib/dommy/navigator.rb', line 302

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

#__js_set__(key, value) ⇒ Object



313
314
315
316
317
318
319
320
321
322
323
324
325
# File 'lib/dommy/navigator.rb', line 313

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