addon-sdk/source/lib/sdk/keyboard/observer.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:b914f54b56b2
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 "use strict";
6
7 module.metadata = {
8 "stability": "unstable"
9 };
10
11 const { Trait } = require("../deprecated/light-traits");
12 const { EventEmitterTrait: EventEmitter } = require("../deprecated/events");
13 const { DOMEventAssembler } = require("../deprecated/events/assembler");
14 const { browserWindowIterator } = require('../deprecated/window-utils');
15 const { isBrowser } = require('../window/utils');
16 const { observer: windowObserver } = require("../windows/observer");
17
18 // Event emitter objects used to register listeners and emit events on them
19 // when they occur.
20 const observer = Trait.compose(DOMEventAssembler, EventEmitter).create({
21 /**
22 * Method is implemented by `EventEmitter` and is used just for emitting
23 * events on registered listeners.
24 */
25 _emit: Trait.required,
26 /**
27 * Events that are supported and emitted by the module.
28 */
29 supportedEventsTypes: [ "keydown", "keyup", "keypress" ],
30 /**
31 * Function handles all the supported events on all the windows that are
32 * observed. Method is used to proxy events to the listeners registered on
33 * this event emitter.
34 * @param {Event} event
35 * Keyboard event being emitted.
36 */
37 handleEvent: function handleEvent(event) {
38 this._emit(event.type, event, event.target.ownerDocument.defaultView);
39 }
40 });
41
42 // Adding each opened window to a list of observed windows.
43 windowObserver.on("open", function onOpen(window) {
44 if (isBrowser(window))
45 observer.observe(window);
46 });
47 // Removing each closed window form the list of observed windows.
48 windowObserver.on("close", function onClose(window) {
49 if (isBrowser(window))
50 observer.ignore(window);
51 });
52
53 // Making observer aware of already opened windows.
54 for each (let window in browserWindowIterator())
55 observer.observe(window);
56
57 exports.observer = observer;

mercurial