/** * @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}; };