72 lines
1.6 KiB
JavaScript
72 lines
1.6 KiB
JavaScript
/**
|
|
* @author Toru Nagashima
|
|
* @copyright 2015 Toru Nagashima. All rights reserved.
|
|
* See LICENSE file in root directory for full license.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* Creates a unique key.
|
|
*
|
|
* @param {string} name - A name to create.
|
|
* @returns {symbol|string}
|
|
* @private
|
|
*/
|
|
var createUniqueKey = exports.createUniqueKey = (typeof Symbol !== "undefined" ?
|
|
Symbol :
|
|
function createUniqueKey(name) {
|
|
return "[[" + name + "_" + Math.random().toFixed(8).slice(2) + "]]";
|
|
});
|
|
|
|
/**
|
|
* The key of listeners.
|
|
*
|
|
* @type {symbol|string}
|
|
* @private
|
|
*/
|
|
exports.LISTENERS = createUniqueKey("listeners");
|
|
|
|
/**
|
|
* A value of kind for listeners which are registered in the capturing phase.
|
|
*
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
exports.CAPTURE = 1;
|
|
|
|
/**
|
|
* A value of kind for listeners which are registered in the bubbling phase.
|
|
*
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
exports.BUBBLE = 2;
|
|
|
|
/**
|
|
* A value of kind for listeners which are registered as an attribute.
|
|
*
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
exports.ATTRIBUTE = 3;
|
|
|
|
/**
|
|
* @typedef object ListenerNode
|
|
* @property {function} listener - A listener function.
|
|
* @property {number} kind - The kind of the listener.
|
|
* @property {ListenerNode|null} next - The next node.
|
|
* If this node is the last, this is `null`.
|
|
*/
|
|
|
|
/**
|
|
* Creates a node of singly linked list for a list of listeners.
|
|
*
|
|
* @param {function} listener - A listener function.
|
|
* @param {number} kind - The kind of the listener.
|
|
* @returns {ListenerNode} The created listener node.
|
|
*/
|
|
exports.newNode = function newNode(listener, kind) {
|
|
return {listener: listener, kind: kind, next: null};
|
|
};
|