7684763ad6840048a1663d241e454969.json
340 KB
{"ast":null,"code":"/*!\n * tui-code-snippet.js\n * @version 1.5.2\n * @author NHN. FE Development Lab <dl_javascript@nhn.com>\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n if (typeof exports === 'object' && typeof module === 'object') module.exports = factory();else if (typeof define === 'function' && define.amd) define([], factory);else if (typeof exports === 'object') exports[\"util\"] = factory();else root[\"tui\"] = root[\"tui\"] || {}, root[\"tui\"][\"util\"] = factory();\n})(this, function () {\n return (\n /******/\n function (modules) {\n // webpackBootstrap\n\n /******/\n // The module cache\n\n /******/\n var installedModules = {};\n /******/\n // The require function\n\n /******/\n\n function __webpack_require__(moduleId) {\n /******/\n // Check if module is in cache\n\n /******/\n if (installedModules[moduleId])\n /******/\n return installedModules[moduleId].exports;\n /******/\n // Create a new module (and put it into the cache)\n\n /******/\n\n var module = installedModules[moduleId] = {\n /******/\n exports: {},\n\n /******/\n id: moduleId,\n\n /******/\n loaded: false\n /******/\n\n };\n /******/\n // Execute the module function\n\n /******/\n\n modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n /******/\n // Flag the module as loaded\n\n /******/\n\n module.loaded = true;\n /******/\n // Return the exports of the module\n\n /******/\n\n return module.exports;\n /******/\n }\n /******/\n // expose the modules object (__webpack_modules__)\n\n /******/\n\n\n __webpack_require__.m = modules;\n /******/\n // expose the module cache\n\n /******/\n\n __webpack_require__.c = installedModules;\n /******/\n // __webpack_public_path__\n\n /******/\n\n __webpack_require__.p = \"dist\";\n /******/\n // Load entry module and return exports\n\n /******/\n\n return __webpack_require__(0);\n /******/\n }(\n /************************************************************************/\n\n /******/\n [\n /* 0 */\n\n /***/\n function (module, exports, __webpack_require__) {\n 'use strict';\n /**\n * @fileoverview\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n * @namespace tui.util\n * @example\n * // node, commonjs\n * var util = require('tui-code-snippet');\n * @example\n * // distribution file, script\n * <script src='path-to/tui-code-snippt.js'></script>\n * <script>\n * var util = tui.util;\n * <script>\n */\n\n var util = {};\n\n var object = __webpack_require__(1);\n\n var extend = object.extend;\n extend(util, object);\n extend(util, __webpack_require__(3));\n extend(util, __webpack_require__(2));\n extend(util, __webpack_require__(4));\n extend(util, __webpack_require__(5));\n extend(util, __webpack_require__(6));\n extend(util, __webpack_require__(7));\n extend(util, __webpack_require__(8));\n extend(util, __webpack_require__(9));\n util.browser = __webpack_require__(10);\n util.popup = __webpack_require__(11);\n util.formatDate = __webpack_require__(12);\n util.defineClass = __webpack_require__(13);\n util.defineModule = __webpack_require__(14);\n util.defineNamespace = __webpack_require__(15);\n util.CustomEvents = __webpack_require__(16);\n util.Enum = __webpack_require__(17);\n util.ExMap = __webpack_require__(18);\n util.HashMap = __webpack_require__(20);\n util.Map = __webpack_require__(19);\n module.exports = util;\n /***/\n },\n /* 1 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview This module has some functions for handling a plain object, json.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var type = __webpack_require__(2);\n\n var array = __webpack_require__(3);\n /**\n * The last id of stamp\n * @type {number}\n * @private\n */\n\n\n var lastId = 0;\n /**\n * Extend the target object from other objects.\n * @param {object} target - Object that will be extended\n * @param {...object} objects - Objects as sources\n * @returns {object} Extended object\n * @memberof tui.util\n */\n\n function extend(target, objects) {\n // eslint-disable-line no-unused-vars\n var hasOwnProp = Object.prototype.hasOwnProperty;\n var source, prop, i, len;\n\n for (i = 1, len = arguments.length; i < len; i += 1) {\n source = arguments[i];\n\n for (prop in source) {\n if (hasOwnProp.call(source, prop)) {\n target[prop] = source[prop];\n }\n }\n }\n\n return target;\n }\n /**\n * Assign a unique id to an object\n * @param {object} obj - Object that will be assigned id.\n * @returns {number} Stamped id\n * @memberof tui.util\n */\n\n\n function stamp(obj) {\n if (!obj.__fe_id) {\n lastId += 1;\n obj.__fe_id = lastId; // eslint-disable-line camelcase\n }\n\n return obj.__fe_id;\n }\n /**\n * Verify whether an object has a stamped id or not.\n * @param {object} obj - adjusted object\n * @returns {boolean}\n * @memberof tui.util\n */\n\n\n function hasStamp(obj) {\n return type.isExisty(pick(obj, '__fe_id'));\n }\n /**\n * Reset the last id of stamp\n * @private\n */\n\n\n function resetLastId() {\n lastId = 0;\n }\n /**\n * Return a key-list(array) of a given object\n * @param {object} obj - Object from which a key-list will be extracted\n * @returns {Array} A key-list(array)\n * @memberof tui.util\n */\n\n\n function keys(obj) {\n var keyArray = [];\n var key;\n\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n keyArray.push(key);\n }\n }\n\n return keyArray;\n }\n /**\n * Return the equality for multiple objects(jsonObjects).<br>\n * See {@link http://stackoverflow.com/questions/1068834/object-comparison-in-javascript}\n * @param {...object} object - Multiple objects for comparing.\n * @returns {boolean} Equality\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var jsonObj1 = {name:'milk', price: 1000};\n * var jsonObj2 = {name:'milk', price: 1000};\n * var jsonObj3 = {name:'milk', price: 1000};\n * util.compareJSON(jsonObj1, jsonObj2, jsonObj3); // true\n *\n * var jsonObj4 = {name:'milk', price: 1000};\n * var jsonObj5 = {name:'beer', price: 3000};\n * util.compareJSON(jsonObj4, jsonObj5); // false\n */\n\n\n function compareJSON(object) {\n var argsLen = arguments.length;\n var i = 1;\n\n if (argsLen < 1) {\n return true;\n }\n\n for (; i < argsLen; i += 1) {\n if (!isSameObject(object, arguments[i])) {\n return false;\n }\n }\n\n return true;\n }\n /**\n * @param {*} x - object to compare\n * @param {*} y - object to compare\n * @returns {boolean} - whether object x and y is same or not\n * @private\n */\n\n\n function isSameObject(x, y) {\n // eslint-disable-line complexity\n var leftChain = [];\n var rightChain = [];\n var p; // remember that NaN === NaN returns false\n // and isNaN(undefined) returns true\n\n if (isNaN(x) && isNaN(y) && type.isNumber(x) && type.isNumber(y)) {\n return true;\n } // Compare primitives and functions.\n // Check if both arguments link to the same object.\n // Especially useful on step when comparing prototypes\n\n\n if (x === y) {\n return true;\n } // Works in case when functions are created in constructor.\n // Comparing dates is a common scenario. Another built-ins?\n // We can even handle functions passed across iframes\n\n\n if (type.isFunction(x) && type.isFunction(y) || x instanceof Date && y instanceof Date || x instanceof RegExp && y instanceof RegExp || x instanceof String && y instanceof String || x instanceof Number && y instanceof Number) {\n return x.toString() === y.toString();\n } // At last checking prototypes as good a we can\n\n\n if (!(x instanceof Object && y instanceof Object)) {\n return false;\n }\n\n if (x.isPrototypeOf(y) || y.isPrototypeOf(x) || x.constructor !== y.constructor || x.prototype !== y.prototype) {\n return false;\n } // check for infinitive linking loops\n\n\n if (array.inArray(x, leftChain) > -1 || array.inArray(y, rightChain) > -1) {\n return false;\n } // Quick checking of one object beeing a subset of another.\n\n\n for (p in y) {\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n return false;\n } else if (typeof y[p] !== typeof x[p]) {\n return false;\n }\n } // This for loop executes comparing with hasOwnProperty() and typeof for each property in 'x' object,\n // and verifying equality for x[property] and y[property].\n\n\n for (p in x) {\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n return false;\n } else if (typeof y[p] !== typeof x[p]) {\n return false;\n }\n\n if (typeof x[p] === 'object' || typeof x[p] === 'function') {\n leftChain.push(x);\n rightChain.push(y);\n\n if (!isSameObject(x[p], y[p])) {\n return false;\n }\n\n leftChain.pop();\n rightChain.pop();\n } else if (x[p] !== y[p]) {\n return false;\n }\n }\n\n return true;\n }\n /* eslint-enable complexity */\n\n /**\n * Retrieve a nested item from the given object/array\n * @param {object|Array} obj - Object for retrieving\n * @param {...string|number} paths - Paths of property\n * @returns {*} Value\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var obj = {\n * 'key1': 1,\n * 'nested' : {\n * 'key1': 11,\n * 'nested': {\n * 'key1': 21\n * }\n * }\n * };\n * util.pick(obj, 'nested', 'nested', 'key1'); // 21\n * util.pick(obj, 'nested', 'nested', 'key2'); // undefined\n *\n * var arr = ['a', 'b', 'c'];\n * util.pick(arr, 1); // 'b'\n */\n\n\n function pick(obj, paths) {\n // eslint-disable-line no-unused-vars\n var args = arguments;\n var target = args[0];\n var i = 1;\n var length = args.length;\n\n for (; i < length; i += 1) {\n if (type.isUndefined(target) || type.isNull(target)) {\n return;\n }\n\n target = target[args[i]];\n }\n\n return target; // eslint-disable-line consistent-return\n }\n\n module.exports = {\n extend: extend,\n stamp: stamp,\n hasStamp: hasStamp,\n resetLastId: resetLastId,\n keys: Object.prototype.keys || keys,\n compareJSON: compareJSON,\n pick: pick\n };\n /***/\n },\n /* 2 */\n\n /***/\n function (module, exports) {\n /**\n * @fileoverview This module provides some functions to check the type of variable\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var toString = Object.prototype.toString;\n /**\n * Check whether the given variable is existing or not.<br>\n * If the given variable is not null and not undefined, returns true.\n * @param {*} param - Target for checking\n * @returns {boolean} Is existy?\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * util.isExisty(''); //true\n * util.isExisty(0); //true\n * util.isExisty([]); //true\n * util.isExisty({}); //true\n * util.isExisty(null); //false\n * util.isExisty(undefined); //false\n */\n\n function isExisty(param) {\n return !isUndefined(param) && !isNull(param);\n }\n /**\n * Check whether the given variable is undefined or not.<br>\n * If the given variable is undefined, returns true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is undefined?\n * @memberof tui.util\n */\n\n\n function isUndefined(obj) {\n return obj === undefined; // eslint-disable-line no-undefined\n }\n /**\n * Check whether the given variable is null or not.<br>\n * If the given variable(arguments[0]) is null, returns true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is null?\n * @memberof tui.util\n */\n\n\n function isNull(obj) {\n return obj === null;\n }\n /**\n * Check whether the given variable is truthy or not.<br>\n * If the given variable is not null or not undefined or not false, returns true.<br>\n * (It regards 0 as true)\n * @param {*} obj - Target for checking\n * @returns {boolean} Is truthy?\n * @memberof tui.util\n */\n\n\n function isTruthy(obj) {\n return isExisty(obj) && obj !== false;\n }\n /**\n * Check whether the given variable is falsy or not.<br>\n * If the given variable is null or undefined or false, returns true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is falsy?\n * @memberof tui.util\n */\n\n\n function isFalsy(obj) {\n return !isTruthy(obj);\n }\n /**\n * Check whether the given variable is an arguments object or not.<br>\n * If the given variable is an arguments object, return true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is arguments?\n * @memberof tui.util\n */\n\n\n function isArguments(obj) {\n var result = isExisty(obj) && (toString.call(obj) === '[object Arguments]' || !!obj.callee);\n return result;\n }\n /**\n * Check whether the given variable is an instance of Array or not.<br>\n * If the given variable is an instance of Array, return true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is array instance?\n * @memberof tui.util\n */\n\n\n function isArray(obj) {\n return obj instanceof Array;\n }\n /**\n * Check whether the given variable is an object or not.<br>\n * If the given variable is an object, return true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is object?\n * @memberof tui.util\n */\n\n\n function isObject(obj) {\n return obj === Object(obj);\n }\n /**\n * Check whether the given variable is a function or not.<br>\n * If the given variable is a function, return true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is function?\n * @memberof tui.util\n */\n\n\n function isFunction(obj) {\n return obj instanceof Function;\n }\n /**\n * Check whether the given variable is a number or not.<br>\n * If the given variable is a number, return true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is number?\n * @memberof tui.util\n */\n\n\n function isNumber(obj) {\n return typeof obj === 'number' || obj instanceof Number;\n }\n /**\n * Check whether the given variable is a string or not.<br>\n * If the given variable is a string, return true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is string?\n * @memberof tui.util\n */\n\n\n function isString(obj) {\n return typeof obj === 'string' || obj instanceof String;\n }\n /**\n * Check whether the given variable is a boolean or not.<br>\n * If the given variable is a boolean, return true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is boolean?\n * @memberof tui.util\n */\n\n\n function isBoolean(obj) {\n return typeof obj === 'boolean' || obj instanceof Boolean;\n }\n /**\n * Check whether the given variable is an instance of Array or not.<br>\n * If the given variable is an instance of Array, return true.<br>\n * (It is used for multiple frame environments)\n * @param {*} obj - Target for checking\n * @returns {boolean} Is an instance of array?\n * @memberof tui.util\n */\n\n\n function isArraySafe(obj) {\n return toString.call(obj) === '[object Array]';\n }\n /**\n * Check whether the given variable is a function or not.<br>\n * If the given variable is a function, return true.<br>\n * (It is used for multiple frame environments)\n * @param {*} obj - Target for checking\n * @returns {boolean} Is a function?\n * @memberof tui.util\n */\n\n\n function isFunctionSafe(obj) {\n return toString.call(obj) === '[object Function]';\n }\n /**\n * Check whether the given variable is a number or not.<br>\n * If the given variable is a number, return true.<br>\n * (It is used for multiple frame environments)\n * @param {*} obj - Target for checking\n * @returns {boolean} Is a number?\n * @memberof tui.util\n */\n\n\n function isNumberSafe(obj) {\n return toString.call(obj) === '[object Number]';\n }\n /**\n * Check whether the given variable is a string or not.<br>\n * If the given variable is a string, return true.<br>\n * (It is used for multiple frame environments)\n * @param {*} obj - Target for checking\n * @returns {boolean} Is a string?\n * @memberof tui.util\n */\n\n\n function isStringSafe(obj) {\n return toString.call(obj) === '[object String]';\n }\n /**\n * Check whether the given variable is a boolean or not.<br>\n * If the given variable is a boolean, return true.<br>\n * (It is used for multiple frame environments)\n * @param {*} obj - Target for checking\n * @returns {boolean} Is a boolean?\n * @memberof tui.util\n */\n\n\n function isBooleanSafe(obj) {\n return toString.call(obj) === '[object Boolean]';\n }\n /**\n * Check whether the given variable is a instance of HTMLNode or not.<br>\n * If the given variables is a instance of HTMLNode, return true.\n * @param {*} html - Target for checking\n * @returns {boolean} Is HTMLNode ?\n * @memberof tui.util\n */\n\n\n function isHTMLNode(html) {\n if (typeof HTMLElement === 'object') {\n return html && (html instanceof HTMLElement || !!html.nodeType);\n }\n\n return !!(html && html.nodeType);\n }\n /**\n * Check whether the given variable is a HTML tag or not.<br>\n * If the given variables is a HTML tag, return true.\n * @param {*} html - Target for checking\n * @returns {Boolean} Is HTML tag?\n * @memberof tui.util\n */\n\n\n function isHTMLTag(html) {\n if (typeof HTMLElement === 'object') {\n return html && html instanceof HTMLElement;\n }\n\n return !!(html && html.nodeType && html.nodeType === 1);\n }\n /**\n * Check whether the given variable is empty(null, undefined, or empty array, empty object) or not.<br>\n * If the given variables is empty, return true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is empty?\n * @memberof tui.util\n */\n\n\n function isEmpty(obj) {\n if (!isExisty(obj) || _isEmptyString(obj)) {\n return true;\n }\n\n if (isArray(obj) || isArguments(obj)) {\n return obj.length === 0;\n }\n\n if (isObject(obj) && !isFunction(obj)) {\n return !_hasOwnProperty(obj);\n }\n\n return true;\n }\n /**\n * Check whether given argument is empty string\n * @param {*} obj - Target for checking\n * @returns {boolean} whether given argument is empty string\n * @memberof tui.util\n * @private\n */\n\n\n function _isEmptyString(obj) {\n return isString(obj) && obj === '';\n }\n /**\n * Check whether given argument has own property\n * @param {Object} obj - Target for checking\n * @returns {boolean} - whether given argument has own property\n * @memberof tui.util\n * @private\n */\n\n\n function _hasOwnProperty(obj) {\n var key;\n\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n return true;\n }\n }\n\n return false;\n }\n /**\n * Check whether the given variable is not empty\n * (not null, not undefined, or not empty array, not empty object) or not.<br>\n * If the given variables is not empty, return true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is not empty?\n * @memberof tui.util\n */\n\n\n function isNotEmpty(obj) {\n return !isEmpty(obj);\n }\n /**\n * Check whether the given variable is an instance of Date or not.<br>\n * If the given variables is an instance of Date, return true.\n * @param {*} obj - Target for checking\n * @returns {boolean} Is an instance of Date?\n * @memberof tui.util\n */\n\n\n function isDate(obj) {\n return obj instanceof Date;\n }\n /**\n * Check whether the given variable is an instance of Date or not.<br>\n * If the given variables is an instance of Date, return true.<br>\n * (It is used for multiple frame environments)\n * @param {*} obj - Target for checking\n * @returns {boolean} Is an instance of Date?\n * @memberof tui.util\n */\n\n\n function isDateSafe(obj) {\n return toString.call(obj) === '[object Date]';\n }\n\n module.exports = {\n isExisty: isExisty,\n isUndefined: isUndefined,\n isNull: isNull,\n isTruthy: isTruthy,\n isFalsy: isFalsy,\n isArguments: isArguments,\n isArray: isArray,\n isArraySafe: isArraySafe,\n isObject: isObject,\n isFunction: isFunction,\n isFunctionSafe: isFunctionSafe,\n isNumber: isNumber,\n isNumberSafe: isNumberSafe,\n isDate: isDate,\n isDateSafe: isDateSafe,\n isString: isString,\n isStringSafe: isStringSafe,\n isBoolean: isBoolean,\n isBooleanSafe: isBooleanSafe,\n isHTMLNode: isHTMLNode,\n isHTMLTag: isHTMLTag,\n isEmpty: isEmpty,\n isNotEmpty: isNotEmpty\n };\n /***/\n },\n /* 3 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview This module has some functions for handling array.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var collection = __webpack_require__(4);\n\n var type = __webpack_require__(2);\n\n var aps = Array.prototype.slice;\n var util;\n /**\n * Generate an integer Array containing an arithmetic progression.\n * @param {number} start - start index\n * @param {number} stop - stop index\n * @param {number} step - next visit index = current index + step\n * @returns {Array}\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * util.range(5); // [0, 1, 2, 3, 4]\n * util.range(1, 5); // [1,2,3,4]\n * util.range(2, 10, 2); // [2,4,6,8]\n * util.range(10, 2, -2); // [10,8,6,4]\n */\n\n var range = function (start, stop, step) {\n var arr = [];\n var flag;\n\n if (type.isUndefined(stop)) {\n stop = start || 0;\n start = 0;\n }\n\n step = step || 1;\n flag = step < 0 ? -1 : 1;\n stop *= flag;\n\n for (; start * flag < stop; start += step) {\n arr.push(start);\n }\n\n return arr;\n };\n /* eslint-disable valid-jsdoc */\n\n /**\n * Zip together multiple lists into a single array\n * @param {...Array}\n * @returns {Array}\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var result = util.zip([1, 2, 3], ['a', 'b','c'], [true, false, true]);\n * console.log(result[0]); // [1, 'a', true]\n * console.log(result[1]); // [2, 'b', false]\n * console.log(result[2]); // [3, 'c', true]\n */\n\n\n var zip = function () {\n /* eslint-enable valid-jsdoc */\n var arr2d = aps.call(arguments);\n var result = [];\n collection.forEach(arr2d, function (arr) {\n collection.forEach(arr, function (value, index) {\n if (!result[index]) {\n result[index] = [];\n }\n\n result[index].push(value);\n });\n });\n return result;\n };\n /**\n * Returns the first index at which a given element can be found in the array\n * from start index(default 0), or -1 if it is not present.<br>\n * It compares searchElement to elements of the Array using strict equality\n * (the same method used by the ===, or triple-equals, operator).\n * @param {*} searchElement Element to locate in the array\n * @param {Array} array Array that will be traversed.\n * @param {number} startIndex Start index in array for searching (default 0)\n * @returns {number} the First index at which a given element, or -1 if it is not present\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var arr = ['one', 'two', 'three', 'four'];\n * var idx1 = util.inArray('one', arr, 3); // -1\n * var idx2 = util.inArray('one', arr); // 0\n */\n\n\n var inArray = function (searchElement, array, startIndex) {\n var i;\n var length;\n startIndex = startIndex || 0;\n\n if (!type.isArray(array)) {\n return -1;\n }\n\n if (Array.prototype.indexOf) {\n return Array.prototype.indexOf.call(array, searchElement, startIndex);\n }\n\n length = array.length;\n\n for (i = startIndex; startIndex >= 0 && i < length; i += 1) {\n if (array[i] === searchElement) {\n return i;\n }\n }\n\n return -1;\n };\n\n util = {\n inArray: inArray,\n range: range,\n zip: zip\n };\n module.exports = util;\n /***/\n },\n /* 4 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview This module has some functions for handling object as collection.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var type = __webpack_require__(2);\n\n var object = __webpack_require__(1);\n /**\n * Execute the provided callback once for each element present\n * in the array(or Array-like object) in ascending order.<br>\n * If the callback function returns false, the loop will be stopped.<br>\n * Callback function(iteratee) is invoked with three arguments:\n * - The value of the element\n * - The index of the element\n * - The array(or Array-like object) being traversed\n * @param {Array} arr The array(or Array-like object) that will be traversed\n * @param {function} iteratee Callback function\n * @param {Object} [context] Context(this) of callback function\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var sum = 0;\n *\n * util.forEachArray([1,2,3], function(value){\n * sum += value;\n * });\n * alert(sum); // 6\n */\n\n\n function forEachArray(arr, iteratee, context) {\n var index = 0;\n var len = arr.length;\n context = context || null;\n\n for (; index < len; index += 1) {\n if (iteratee.call(context, arr[index], index, arr) === false) {\n break;\n }\n }\n }\n /**\n * Execute the provided callback once for each property of object which actually exist.<br>\n * If the callback function returns false, the loop will be stopped.<br>\n * Callback function(iteratee) is invoked with three arguments:\n * - The value of the property\n * - The name of the property\n * - The object being traversed\n * @param {Object} obj The object that will be traversed\n * @param {function} iteratee Callback function\n * @param {Object} [context] Context(this) of callback function\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var sum = 0;\n *\n * util.forEachOwnProperties({a:1,b:2,c:3}, function(value){\n * sum += value;\n * });\n * alert(sum); // 6\n **/\n\n\n function forEachOwnProperties(obj, iteratee, context) {\n var key;\n context = context || null;\n\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (iteratee.call(context, obj[key], key, obj) === false) {\n break;\n }\n }\n }\n }\n /**\n * Execute the provided callback once for each property of object(or element of array) which actually exist.<br>\n * If the object is Array-like object(ex-arguments object), It needs to transform to Array.(see 'ex2' of example).<br>\n * If the callback function returns false, the loop will be stopped.<br>\n * Callback function(iteratee) is invoked with three arguments:\n * - The value of the property(or The value of the element)\n * - The name of the property(or The index of the element)\n * - The object being traversed\n * @param {Object} obj The object that will be traversed\n * @param {function} iteratee Callback function\n * @param {Object} [context] Context(this) of callback function\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var sum = 0;\n *\n * util.forEach([1,2,3], function(value){\n * sum += value;\n * });\n * alert(sum); // 6\n *\n * // In case of Array-like object\n * var array = Array.prototype.slice.call(arrayLike); // change to array\n * util.forEach(array, function(value){\n * sum += value;\n * });\n */\n\n\n function forEach(obj, iteratee, context) {\n if (type.isArray(obj)) {\n forEachArray(obj, iteratee, context);\n } else {\n forEachOwnProperties(obj, iteratee, context);\n }\n }\n /**\n * Execute the provided callback function once for each element in an array, in order,\n * and constructs a new array from the results.<br>\n * If the object is Array-like object(ex-arguments object),\n * It needs to transform to Array.(see 'ex2' of forEach example)<br>\n * Callback function(iteratee) is invoked with three arguments:\n * - The value of the property(or The value of the element)\n * - The name of the property(or The index of the element)\n * - The object being traversed\n * @param {Object} obj The object that will be traversed\n * @param {function} iteratee Callback function\n * @param {Object} [context] Context(this) of callback function\n * @returns {Array} A new array composed of returned values from callback function\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var result = util.map([0,1,2,3], function(value) {\n * return value + 1;\n * });\n *\n * alert(result); // 1,2,3,4\n */\n\n\n function map(obj, iteratee, context) {\n var resultArray = [];\n context = context || null;\n forEach(obj, function () {\n resultArray.push(iteratee.apply(context, arguments));\n });\n return resultArray;\n }\n /**\n * Execute the callback function once for each element present in the array(or Array-like object or plain object).<br>\n * If the object is Array-like object(ex-arguments object),\n * It needs to transform to Array.(see 'ex2' of forEach example)<br>\n * Callback function(iteratee) is invoked with four arguments:\n * - The previousValue\n * - The currentValue\n * - The index\n * - The object being traversed\n * @param {Object} obj The object that will be traversed\n * @param {function} iteratee Callback function\n * @param {Object} [context] Context(this) of callback function\n * @returns {*} The result value\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var result = util.reduce([0,1,2,3], function(stored, value) {\n * return stored + value;\n * });\n *\n * alert(result); // 6\n */\n\n\n function reduce(obj, iteratee, context) {\n var index = 0;\n var keys, length, store;\n context = context || null;\n\n if (!type.isArray(obj)) {\n keys = object.keys(obj);\n length = keys.length;\n store = obj[keys[index += 1]];\n } else {\n length = obj.length;\n store = obj[index];\n }\n\n index += 1;\n\n for (; index < length; index += 1) {\n store = iteratee.call(context, store, obj[keys ? keys[index] : index]);\n }\n\n return store;\n }\n /**\n * Transform the Array-like object to Array.<br>\n * In low IE (below 8), Array.prototype.slice.call is not perfect. So, try-catch statement is used.\n * @param {*} arrayLike Array-like object\n * @returns {Array} Array\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var arrayLike = {\n * 0: 'one',\n * 1: 'two',\n * 2: 'three',\n * 3: 'four',\n * length: 4\n * };\n * var result = util.toArray(arrayLike);\n *\n * alert(result instanceof Array); // true\n * alert(result); // one,two,three,four\n */\n\n\n function toArray(arrayLike) {\n var arr;\n\n try {\n arr = Array.prototype.slice.call(arrayLike);\n } catch (e) {\n arr = [];\n forEachArray(arrayLike, function (value) {\n arr.push(value);\n });\n }\n\n return arr;\n }\n /**\n * Create a new array or plain object with all elements(or properties)\n * that pass the test implemented by the provided function.<br>\n * Callback function(iteratee) is invoked with three arguments:\n * - The value of the property(or The value of the element)\n * - The name of the property(or The index of the element)\n * - The object being traversed\n * @param {Object} obj Object(plain object or Array) that will be traversed\n * @param {function} iteratee Callback function\n * @param {Object} [context] Context(this) of callback function\n * @returns {Object} plain object or Array\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var result1 = util.filter([0,1,2,3], function(value) {\n * return (value % 2 === 0);\n * });\n * alert(result1); // [0, 2]\n *\n * var result2 = util.filter({a : 1, b: 2, c: 3}, function(value) {\n * return (value % 2 !== 0);\n * });\n * alert(result2.a); // 1\n * alert(result2.b); // undefined\n * alert(result2.c); // 3\n */\n\n\n function filter(obj, iteratee, context) {\n var result, add;\n context = context || null;\n\n if (!type.isObject(obj) || !type.isFunction(iteratee)) {\n throw new Error('wrong parameter');\n }\n\n if (type.isArray(obj)) {\n result = [];\n\n add = function (subResult, args) {\n subResult.push(args[0]);\n };\n } else {\n result = {};\n\n add = function (subResult, args) {\n subResult[args[1]] = args[0];\n };\n }\n\n forEach(obj, function () {\n if (iteratee.apply(context, arguments)) {\n add(result, arguments);\n }\n }, context);\n return result;\n }\n /**\n * fetching a property\n * @param {Array} arr target collection\n * @param {String|Number} property property name\n * @returns {Array}\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var objArr = [\n * {'abc': 1, 'def': 2, 'ghi': 3},\n * {'abc': 4, 'def': 5, 'ghi': 6},\n * {'abc': 7, 'def': 8, 'ghi': 9}\n * ];\n * var arr2d = [\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n * util.pluck(objArr, 'abc'); // [1, 4, 7]\n * util.pluck(arr2d, 2); // [3, 6, 9]\n */\n\n\n function pluck(arr, property) {\n var result = map(arr, function (item) {\n return item[property];\n });\n return result;\n }\n\n module.exports = {\n forEachOwnProperties: forEachOwnProperties,\n forEachArray: forEachArray,\n forEach: forEach,\n toArray: toArray,\n map: map,\n reduce: reduce,\n filter: filter,\n pluck: pluck\n };\n /***/\n },\n /* 5 */\n\n /***/\n function (module, exports) {\n /**\n * @fileoverview This module provides a bind() function for context binding.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n /**\n * Create a new function that, when called, has its this keyword set to the provided value.\n * @param {function} fn A original function before binding\n * @param {*} obj context of function in arguments[0]\n * @returns {function()} A new bound function with context that is in arguments[1]\n * @memberof tui.util\n */\n\n function bind(fn, obj) {\n var slice = Array.prototype.slice;\n var args;\n\n if (fn.bind) {\n return fn.bind.apply(fn, slice.call(arguments, 1));\n }\n /* istanbul ignore next */\n\n\n args = slice.call(arguments, 2);\n /* istanbul ignore next */\n\n return function () {\n /* istanbul ignore next */\n return fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\n };\n }\n\n module.exports = {\n bind: bind\n };\n /***/\n },\n /* 6 */\n\n /***/\n function (module, exports) {\n /**\n * @fileoverview This module provides some simple function for inheritance.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n /**\n * Create a new object with the specified prototype object and properties.\n * @param {Object} obj This object will be a prototype of the newly-created object.\n * @returns {Object}\n * @memberof tui.util\n */\n\n function createObject(obj) {\n function F() {} // eslint-disable-line require-jsdoc\n\n\n F.prototype = obj;\n return new F();\n }\n /**\n * Provide a simple inheritance in prototype-oriented.<br>\n * Caution :\n * Don't overwrite the prototype of child constructor.\n *\n * @param {function} subType Child constructor\n * @param {function} superType Parent constructor\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * // Parent constructor\n * function Animal(leg) {\n * this.leg = leg;\n * }\n * Animal.prototype.growl = function() {\n * // ...\n * };\n *\n * // Child constructor\n * function Person(name) {\n * this.name = name;\n * }\n *\n * // Inheritance\n * util.inherit(Person, Animal);\n *\n * // After this inheritance, please use only the extending of property.\n * // Do not overwrite prototype.\n * Person.prototype.walk = function(direction) {\n * // ...\n * };\n */\n\n\n function inherit(subType, superType) {\n var prototype = createObject(superType.prototype);\n prototype.constructor = subType;\n subType.prototype = prototype;\n }\n\n module.exports = {\n createObject: createObject,\n inherit: inherit\n };\n /***/\n },\n /* 7 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview This module has some functions for handling the string.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var collection = __webpack_require__(4);\n\n var object = __webpack_require__(1);\n /**\n * Transform the given HTML Entity string into plain string\n * @param {String} htmlEntity - HTML Entity type string\n * @returns {String} Plain string\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var htmlEntityString = \"A 'quote' is <b>bold</b>\"\n * var result = util.decodeHTMLEntity(htmlEntityString); //\"A 'quote' is <b>bold</b>\"\n */\n\n\n function decodeHTMLEntity(htmlEntity) {\n var entities = {\n '"': '\"',\n '&': '&',\n '<': '<',\n '>': '>',\n ''': '\\'',\n ' ': ' '\n };\n return htmlEntity.replace(/&|<|>|"|'| /g, function (m0) {\n return entities[m0] ? entities[m0] : m0;\n });\n }\n /**\n * Transform the given string into HTML Entity string\n * @param {String} html - String for encoding\n * @returns {String} HTML Entity\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var htmlEntityString = \"<script> alert('test');</script><a href='test'>\";\n * var result = util.encodeHTMLEntity(htmlEntityString);\n * //\"<script> alert('test');</script><a href='test'>\"\n */\n\n\n function encodeHTMLEntity(html) {\n var entities = {\n '\"': 'quot',\n '&': 'amp',\n '<': 'lt',\n '>': 'gt',\n '\\'': '#39'\n };\n return html.replace(/[<>&\"']/g, function (m0) {\n return entities[m0] ? '&' + entities[m0] + ';' : m0;\n });\n }\n /**\n * Return whether the string capable to transform into plain string is in the given string or not.\n * @param {String} string - test string\n * @memberof tui.util\n * @returns {boolean}\n */\n\n\n function hasEncodableString(string) {\n return /[<>&\"']/.test(string);\n }\n /**\n * Return duplicate charters\n * @param {string} operandStr1 The operand string\n * @param {string} operandStr2 The operand string\n * @private\n * @memberof tui.util\n * @returns {string}\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * util.getDuplicatedChar('fe dev', 'nhn entertainment'); // 'e'\n * util.getDuplicatedChar('fdsa', 'asdf'); // 'asdf'\n */\n\n\n function getDuplicatedChar(operandStr1, operandStr2) {\n var i = 0;\n var len = operandStr1.length;\n var pool = {};\n var dupl, key;\n\n for (; i < len; i += 1) {\n key = operandStr1.charAt(i);\n pool[key] = 1;\n }\n\n for (i = 0, len = operandStr2.length; i < len; i += 1) {\n key = operandStr2.charAt(i);\n\n if (pool[key]) {\n pool[key] += 1;\n }\n }\n\n pool = collection.filter(pool, function (item) {\n return item > 1;\n });\n pool = object.keys(pool).sort();\n dupl = pool.join('');\n return dupl;\n }\n\n module.exports = {\n decodeHTMLEntity: decodeHTMLEntity,\n encodeHTMLEntity: encodeHTMLEntity,\n hasEncodableString: hasEncodableString,\n getDuplicatedChar: getDuplicatedChar\n };\n /***/\n },\n /* 8 */\n\n /***/\n function (module, exports) {\n /**\n * @fileoverview collections of some technic methods.\n * @author NHN.\n * FE Development Lab <dl_javascript.nhn.com>\n */\n 'use strict';\n\n var tricks = {};\n var aps = Array.prototype.slice;\n /**\n * Creates a debounced function that delays invoking fn until after delay milliseconds has elapsed\n * since the last time the debouced function was invoked.\n * @param {function} fn The function to debounce.\n * @param {number} [delay=0] The number of milliseconds to delay\n * @memberof tui.util\n * @returns {function} debounced function.\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * function someMethodToInvokeDebounced() {}\n *\n * var debounced = util.debounce(someMethodToInvokeDebounced, 300);\n *\n * // invoke repeatedly\n * debounced();\n * debounced();\n * debounced();\n * debounced();\n * debounced();\n * debounced(); // last invoke of debounced()\n *\n * // invoke someMethodToInvokeDebounced() after 300 milliseconds.\n */\n\n function debounce(fn, delay) {\n var timer, args;\n /* istanbul ignore next */\n\n delay = delay || 0;\n\n function debounced() {\n // eslint-disable-line require-jsdoc\n args = aps.call(arguments);\n window.clearTimeout(timer);\n timer = window.setTimeout(function () {\n fn.apply(null, args);\n }, delay);\n }\n\n return debounced;\n }\n /**\n * return timestamp\n * @memberof tui.util\n * @returns {number} The number of milliseconds from Jan. 1970 00:00:00 (GMT)\n */\n\n\n function timestamp() {\n return Number(new Date());\n }\n /**\n * Creates a throttled function that only invokes fn at most once per every interval milliseconds.\n *\n * You can use this throttle short time repeatedly invoking functions. (e.g MouseMove, Resize ...)\n *\n * if you need reuse throttled method. you must remove slugs (e.g. flag variable) related with throttling.\n * @param {function} fn function to throttle\n * @param {number} [interval=0] the number of milliseconds to throttle invocations to.\n * @memberof tui.util\n * @returns {function} throttled function\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * function someMethodToInvokeThrottled() {}\n *\n * var throttled = util.throttle(someMethodToInvokeThrottled, 300);\n *\n * // invoke repeatedly\n * throttled(); // invoke (leading)\n * throttled();\n * throttled(); // invoke (near 300 milliseconds)\n * throttled();\n * throttled();\n * throttled(); // invoke (near 600 milliseconds)\n * // ...\n * // invoke (trailing)\n *\n * // if you need reuse throttled method. then invoke reset()\n * throttled.reset();\n */\n\n\n function throttle(fn, interval) {\n var base;\n var isLeading = true;\n\n var tick = function (_args) {\n fn.apply(null, _args);\n base = null;\n };\n\n var debounced, stamp, args;\n /* istanbul ignore next */\n\n interval = interval || 0;\n debounced = tricks.debounce(tick, interval);\n\n function throttled() {\n // eslint-disable-line require-jsdoc\n args = aps.call(arguments);\n\n if (isLeading) {\n tick(args);\n isLeading = false;\n return;\n }\n\n stamp = tricks.timestamp();\n base = base || stamp; // pass array directly because `debounce()`, `tick()` are already use\n // `apply()` method to invoke developer's `fn` handler.\n //\n // also, this `debounced` line invoked every time for implements\n // `trailing` features.\n\n debounced(args);\n\n if (stamp - base >= interval) {\n tick(args);\n }\n }\n\n function reset() {\n // eslint-disable-line require-jsdoc\n isLeading = true;\n base = null;\n }\n\n throttled.reset = reset;\n return throttled;\n }\n\n tricks.timestamp = timestamp;\n tricks.debounce = debounce;\n tricks.throttle = throttle;\n module.exports = tricks;\n /***/\n },\n /* 9 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview This module has some functions for handling object as collection.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var object = __webpack_require__(1);\n\n var collection = __webpack_require__(4);\n\n var type = __webpack_require__(2);\n\n var ms7days = 7 * 24 * 60 * 60 * 1000;\n /**\n * Check if the date has passed 7 days\n * @param {number} date - milliseconds\n * @returns {boolean}\n * @ignore\n */\n\n function isExpired(date) {\n var now = new Date().getTime();\n return now - date > ms7days;\n }\n /**\n * Send hostname on DOMContentLoaded.\n * To prevent hostname set tui.usageStatistics to false.\n * @param {string} appName - application name\n * @param {string} trackingId - GA tracking ID\n * @ignore\n */\n\n\n function sendHostname(appName, trackingId) {\n var url = 'https://www.google-analytics.com/collect';\n var hostname = location.hostname;\n var hitType = 'event';\n var eventCategory = 'use';\n var applicationKeyForStorage = 'TOAST UI ' + appName + ' for ' + hostname + ': Statistics';\n var date = window.localStorage.getItem(applicationKeyForStorage); // skip if the flag is defined and is set to false explicitly\n\n if (!type.isUndefined(window.tui) && window.tui.usageStatistics === false) {\n return;\n } // skip if not pass seven days old\n\n\n if (date && !isExpired(date)) {\n return;\n }\n\n window.localStorage.setItem(applicationKeyForStorage, new Date().getTime());\n setTimeout(function () {\n if (document.readyState === 'interactive' || document.readyState === 'complete') {\n imagePing(url, {\n v: 1,\n t: hitType,\n tid: trackingId,\n cid: hostname,\n dp: hostname,\n dh: appName,\n el: appName,\n ec: eventCategory\n });\n }\n }, 1000);\n }\n /**\n * Request image ping.\n * @param {String} url url for ping request\n * @param {Object} trackingInfo infos for make query string\n * @returns {HTMLElement}\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * util.imagePing('https://www.google-analytics.com/collect', {\n * v: 1,\n * t: 'event',\n * tid: 'trackingid',\n * cid: 'cid',\n * dp: 'dp',\n * dh: 'dh'\n * });\n */\n\n\n function imagePing(url, trackingInfo) {\n var queryString = collection.map(object.keys(trackingInfo), function (key, index) {\n var startWith = index === 0 ? '' : '&';\n return startWith + key + '=' + trackingInfo[key];\n }).join('');\n var trackingElement = document.createElement('img');\n trackingElement.src = url + '?' + queryString;\n trackingElement.style.display = 'none';\n document.body.appendChild(trackingElement);\n document.body.removeChild(trackingElement);\n return trackingElement;\n }\n\n module.exports = {\n imagePing: imagePing,\n sendHostname: sendHostname\n };\n /***/\n },\n /* 10 */\n\n /***/\n function (module, exports) {\n /**\n * @fileoverview This module detects the kind of well-known browser and version.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n /**\n * This object has an information that indicate the kind of browser.<br>\n * The list below is a detectable browser list.\n * - ie8 ~ ie11\n * - chrome\n * - firefox\n * - safari\n * - edge\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * util.browser.chrome === true; // chrome\n * util.browser.firefox === true; // firefox\n * util.browser.safari === true; // safari\n * util.browser.msie === true; // IE\n * util.browser.edge === true; // edge\n * util.browser.others === true; // other browser\n * util.browser.version; // browser version\n */\n\n var browser = {\n chrome: false,\n firefox: false,\n safari: false,\n msie: false,\n edge: false,\n others: false,\n version: 0\n };\n\n if (window && window.navigator) {\n detectBrowser();\n }\n /**\n * Detect the browser.\n * @private\n */\n\n\n function detectBrowser() {\n var nav = window.navigator;\n var appName = nav.appName.replace(/\\s/g, '_');\n var userAgent = nav.userAgent;\n var rIE = /MSIE\\s([0-9]+[.0-9]*)/;\n var rIE11 = /Trident.*rv:11\\./;\n var rEdge = /Edge\\/(\\d+)\\./;\n var versionRegex = {\n firefox: /Firefox\\/(\\d+)\\./,\n chrome: /Chrome\\/(\\d+)\\./,\n safari: /Version\\/([\\d.]+).*Safari\\/(\\d+)/\n };\n var key, tmp;\n var detector = {\n Microsoft_Internet_Explorer: function () {\n // eslint-disable-line camelcase\n var detectedVersion = userAgent.match(rIE);\n\n if (detectedVersion) {\n // ie8 ~ ie10\n browser.msie = true;\n browser.version = parseFloat(detectedVersion[1]);\n } else {\n // no version information\n browser.others = true;\n }\n },\n Netscape: function () {\n // eslint-disable-line complexity\n var detected = false;\n\n if (rIE11.exec(userAgent)) {\n browser.msie = true;\n browser.version = 11;\n detected = true;\n } else if (rEdge.exec(userAgent)) {\n browser.edge = true;\n browser.version = userAgent.match(rEdge)[1];\n detected = true;\n } else {\n for (key in versionRegex) {\n if (versionRegex.hasOwnProperty(key)) {\n tmp = userAgent.match(versionRegex[key]);\n\n if (tmp && tmp.length > 1) {\n // eslint-disable-line max-depth\n browser[key] = detected = true;\n browser.version = parseFloat(tmp[1] || 0);\n break;\n }\n }\n }\n }\n\n if (!detected) {\n browser.others = true;\n }\n }\n };\n var fn = detector[appName];\n\n if (fn) {\n detector[appName]();\n }\n }\n\n module.exports = browser;\n /***/\n },\n /* 11 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview This module has some methods for handling popup-window\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var collection = __webpack_require__(4);\n\n var type = __webpack_require__(2);\n\n var func = __webpack_require__(5);\n\n var browser = __webpack_require__(10);\n\n var object = __webpack_require__(1);\n\n var popupId = 0;\n /**\n * Popup management class\n * @constructor\n * @memberof tui.util\n * @example\n * // node, commonjs\n * var popup = require('tui-code-snippet').popup;\n * @example\n * // distribution file, script\n * <script src='path-to/tui-code-snippt.js'></script>\n * <script>\n * var popup = tui.util.popup;\n * <script>\n */\n\n function Popup() {\n /**\n * Caching the window-contexts of opened popups\n * @type {Object}\n */\n this.openedPopup = {};\n /**\n * In IE7, an error occurs when the closeWithParent property attaches to window object.<br>\n * So, It is for saving the value of closeWithParent instead of attaching to window object.\n * @type {Object}\n */\n\n this.closeWithParentPopup = {};\n /**\n * Post data bridge for IE11 popup\n * @type {string}\n */\n\n this.postBridgeUrl = '';\n }\n /**********\n * public methods\n **********/\n\n /**\n * Returns a popup-list administered by current window.\n * @param {string} [key] The key of popup.\n * @returns {Object} popup window list object\n */\n\n\n Popup.prototype.getPopupList = function (key) {\n var target;\n\n if (type.isExisty(key)) {\n target = this.openedPopup[key];\n } else {\n target = this.openedPopup;\n }\n\n return target;\n };\n /**\n * Open popup\n * Caution:\n * In IE11, when transfer data to popup by POST, must set the postBridgeUrl.\n *\n * @param {string} url - popup url\n * @param {Object} options - popup options\n * @param {string} [options.popupName] - Key of popup window.<br>\n * If the key is set, when you try to open by this key, the popup of this key is focused.<br>\n * Or else a new popup window having this key is opened.\n *\n * @param {string} [options.popupOptionStr=\"\"] - Option string of popup window<br>\n * It is same with the third parameter of window.open() method.<br>\n * See {@link http://www.w3schools.com/jsref/met_win_open.asp}\n *\n * @param {boolean} [options.closeWithParent=true] - Is closed when parent window closed?\n *\n * @param {boolean} [options.useReload=false] - This property indicates whether reload the popup or not.<br>\n * If true, the popup will be reloaded when you try to re-open the popup that has been opened.<br>\n * When transmit the POST-data, some browsers alert a message for confirming whether retransmit or not.\n *\n * @param {string} [options.postBridgeUrl='']\n * Use this url to avoid a certain bug occuring when transmitting POST data to the popup in IE11.<br>\n * This specific buggy situation is known to happen because IE11 tries to open the requested url<br>\n * not in a new popup window as intended, but in a new tab.<br>\n * See {@link http://wiki.nhnent.com/pages/viewpage.action?pageId=240562844}\n *\n * @param {string} [options.method=get]\n * The method of transmission when the form-data is transmitted to popup-window.\n *\n * @param {Object} [options.param=null]\n * Using as parameters for transmission when the form-data is transmitted to popup-window.\n */\n\n\n Popup.prototype.openPopup = function (url, options) {\n // eslint-disable-line complexity\n var popup, formElement, useIEPostBridge;\n options = object.extend({\n popupName: 'popup_' + popupId + '_' + Number(new Date()),\n popupOptionStr: '',\n useReload: true,\n closeWithParent: true,\n method: 'get',\n param: {}\n }, options || {});\n options.method = options.method.toUpperCase();\n this.postBridgeUrl = options.postBridgeUrl || this.postBridgeUrl;\n useIEPostBridge = options.method === 'POST' && options.param && browser.msie && browser.version === 11;\n\n if (!type.isExisty(url)) {\n throw new Error('Popup#open() need popup url.');\n }\n\n popupId += 1;\n /*\n * In form-data transmission\n * 1. Create a form before opening a popup.\n * 2. Transmit the form-data.\n * 3. Remove the form after transmission.\n */\n\n if (options.param) {\n if (options.method === 'GET') {\n url = url + (/\\?/.test(url) ? '&' : '?') + this._parameterize(options.param);\n } else if (options.method === 'POST') {\n if (!useIEPostBridge) {\n formElement = this.createForm(url, options.param, options.method, options.popupName);\n url = 'about:blank';\n }\n }\n }\n\n popup = this.openedPopup[options.popupName];\n\n if (!type.isExisty(popup)) {\n this.openedPopup[options.popupName] = popup = this._open(useIEPostBridge, options.param, url, options.popupName, options.popupOptionStr);\n } else if (popup.closed) {\n this.openedPopup[options.popupName] = popup = this._open(useIEPostBridge, options.param, url, options.popupName, options.popupOptionStr);\n } else {\n if (options.useReload) {\n popup.location.replace(url);\n }\n\n popup.focus();\n }\n\n this.closeWithParentPopup[options.popupName] = options.closeWithParent;\n\n if (!popup || popup.closed || type.isUndefined(popup.closed)) {\n alert('please enable popup windows for this website');\n }\n\n if (options.param && options.method === 'POST' && !useIEPostBridge) {\n if (popup) {\n formElement.submit();\n }\n\n if (formElement.parentNode) {\n formElement.parentNode.removeChild(formElement);\n }\n }\n\n window.onunload = func.bind(this.closeAllPopup, this);\n };\n /**\n * Close the popup\n * @param {boolean} [skipBeforeUnload] - If true, the 'window.onunload' will be null and skip unload event.\n * @param {Window} [popup] - Window-context of popup for closing. If omit this, current window-context will be closed.\n */\n\n\n Popup.prototype.close = function (skipBeforeUnload, popup) {\n var target = popup || window;\n skipBeforeUnload = type.isExisty(skipBeforeUnload) ? skipBeforeUnload : false;\n\n if (skipBeforeUnload) {\n window.onunload = null;\n }\n\n if (!target.closed) {\n target.opener = window.location.href;\n target.close();\n }\n };\n /**\n * Close all the popups in current window.\n * @param {boolean} closeWithParent - If true, popups having the closeWithParentPopup property as true will be closed.\n */\n\n\n Popup.prototype.closeAllPopup = function (closeWithParent) {\n var hasArg = type.isExisty(closeWithParent);\n collection.forEachOwnProperties(this.openedPopup, function (popup, key) {\n if (hasArg && this.closeWithParentPopup[key] || !hasArg) {\n this.close(false, popup);\n }\n }, this);\n };\n /**\n * Activate(or focus) the popup of the given name.\n * @param {string} popupName - Name of popup for activation\n */\n\n\n Popup.prototype.focus = function (popupName) {\n this.getPopupList(popupName).focus();\n };\n /**\n * Return an object made of parsing the query string.\n * @returns {Object} An object having some information of the query string.\n * @private\n */\n\n\n Popup.prototype.parseQuery = function () {\n var param = {};\n var search, pair;\n search = window.location.search.substr(1);\n collection.forEachArray(search.split('&'), function (part) {\n pair = part.split('=');\n param[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n });\n return param;\n };\n /**\n * Create a hidden form from the given arguments and return this form.\n * @param {string} action - URL for form transmission\n * @param {Object} [data] - Data for form transmission\n * @param {string} [method] - Method of transmission\n * @param {string} [target] - Target of transmission\n * @param {HTMLElement} [container] - Container element of form.\n * @returns {HTMLElement} Form element\n */\n\n\n Popup.prototype.createForm = function (action, data, method, target, container) {\n var form = document.createElement('form'),\n input;\n container = container || document.body;\n form.method = method || 'POST';\n form.action = action || '';\n form.target = target || '';\n form.style.display = 'none';\n collection.forEachOwnProperties(data, function (value, key) {\n input = document.createElement('input');\n input.name = key;\n input.type = 'hidden';\n input.value = value;\n form.appendChild(input);\n });\n container.appendChild(form);\n return form;\n };\n /**********\n * private methods\n **********/\n\n /**\n * Return an query string made by parsing the given object\n * @param {Object} obj - An object that has information for query string\n * @returns {string} - Query string\n * @private\n */\n\n\n Popup.prototype._parameterize = function (obj) {\n var query = [];\n collection.forEachOwnProperties(obj, function (value, key) {\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return query.join('&');\n };\n /**\n * Open popup\n * @param {boolean} useIEPostBridge - A switch option whether to use alternative\n * of tossing POST data to the popup window in IE11\n * @param {Object} param - A data for tossing to popup\n * @param {string} url - Popup url\n * @param {string} popupName - Popup name\n * @param {string} optionStr - Setting for popup, ex) 'width=640,height=320,scrollbars=yes'\n * @returns {Window} Window context of popup\n * @private\n */\n\n\n Popup.prototype._open = function (useIEPostBridge, param, url, popupName, optionStr) {\n var popup;\n\n if (useIEPostBridge) {\n popup = window.open(this.postBridgeUrl, popupName, optionStr);\n setTimeout(function () {\n popup.redirect(url, param);\n }, 100);\n } else {\n popup = window.open(url, popupName, optionStr);\n }\n\n return popup;\n };\n\n module.exports = new Popup();\n /***/\n },\n /* 12 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview This module has a function for date format.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var type = __webpack_require__(2);\n\n var object = __webpack_require__(1);\n\n var tokens = /[\\\\]*YYYY|[\\\\]*YY|[\\\\]*MMMM|[\\\\]*MMM|[\\\\]*MM|[\\\\]*M|[\\\\]*DD|[\\\\]*D|[\\\\]*HH|[\\\\]*H|[\\\\]*A/gi;\n var MONTH_STR = ['Invalid month', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n var MONTH_DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n var replaceMap = {\n M: function (date) {\n return Number(date.month);\n },\n MM: function (date) {\n var month = date.month;\n return Number(month) < 10 ? '0' + month : month;\n },\n MMM: function (date) {\n return MONTH_STR[Number(date.month)].substr(0, 3);\n },\n MMMM: function (date) {\n return MONTH_STR[Number(date.month)];\n },\n D: function (date) {\n return Number(date.date);\n },\n d: function (date) {\n return replaceMap.D(date); // eslint-disable-line new-cap\n },\n DD: function (date) {\n var dayInMonth = date.date;\n return Number(dayInMonth) < 10 ? '0' + dayInMonth : dayInMonth;\n },\n dd: function (date) {\n return replaceMap.DD(date); // eslint-disable-line new-cap\n },\n YY: function (date) {\n return Number(date.year) % 100;\n },\n yy: function (date) {\n return replaceMap.YY(date); // eslint-disable-line new-cap\n },\n YYYY: function (date) {\n var prefix = '20',\n year = date.year;\n\n if (year > 69 && year < 100) {\n prefix = '19';\n }\n\n return Number(year) < 100 ? prefix + String(year) : year;\n },\n yyyy: function (date) {\n return replaceMap.YYYY(date); // eslint-disable-line new-cap\n },\n A: function (date) {\n return date.meridiem;\n },\n a: function (date) {\n return date.meridiem;\n },\n hh: function (date) {\n var hour = date.hour;\n return Number(hour) < 10 ? '0' + hour : hour;\n },\n HH: function (date) {\n return replaceMap.hh(date);\n },\n h: function (date) {\n return String(Number(date.hour));\n },\n H: function (date) {\n return replaceMap.h(date);\n },\n m: function (date) {\n return String(Number(date.minute));\n },\n mm: function (date) {\n var minute = date.minute;\n return Number(minute) < 10 ? '0' + minute : minute;\n }\n };\n /**\n * Check whether the given variables are valid date or not.\n * @param {number} year - Year\n * @param {number} month - Month\n * @param {number} date - Day in month.\n * @returns {boolean} Is valid?\n * @private\n */\n\n function isValidDate(year, month, date) {\n // eslint-disable-line complexity\n var isValidYear, isValidMonth, isValid, lastDayInMonth;\n year = Number(year);\n month = Number(month);\n date = Number(date);\n isValidYear = year > -1 && year < 100 || year > 1969 && year < 2070;\n isValidMonth = month > 0 && month < 13;\n\n if (!isValidYear || !isValidMonth) {\n return false;\n }\n\n lastDayInMonth = MONTH_DAYS[month];\n\n if (month === 2 && year % 4 === 0) {\n if (year % 100 !== 0 || year % 400 === 0) {\n lastDayInMonth = 29;\n }\n }\n\n isValid = date > 0 && date <= lastDayInMonth;\n return isValid;\n }\n /**\n * Return a string that transformed from the given form and date.\n * @param {string} form - Date form\n * @param {Date|Object} date - Date object\n * @param {{meridiemSet: {AM: string, PM: string}}} option - Option\n * @returns {boolean|string} A transformed string or false.\n * @memberof tui.util\n * @example\n * // key | Shorthand\n * // --------------- |-----------------------\n * // years | YY / YYYY / yy / yyyy\n * // months(n) | M / MM\n * // months(str) | MMM / MMMM\n * // days | D / DD / d / dd\n * // hours | H / HH / h / hh\n * // minutes | m / mm\n * // meridiem(AM,PM) | A / a\n *\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var dateStr1 = util.formatDate('yyyy-MM-dd', {\n * year: 2014,\n * month: 12,\n * date: 12\n * });\n * alert(dateStr1); // '2014-12-12'\n *\n * var dateStr2 = util.formatDate('MMM DD YYYY HH:mm', {\n * year: 1999,\n * month: 9,\n * date: 9,\n * hour: 0,\n * minute: 2\n * });\n * alert(dateStr2); // 'Sep 09 1999 00:02'\n *\n * var dt = new Date(2010, 2, 13),\n * dateStr3 = util.formatDate('yyyy년 M월 dd일', dt);\n * alert(dateStr3); // '2010년 3월 13일'\n *\n * var option4 = {\n * meridiemSet: {\n * AM: '오전',\n * PM: '오후'\n * }\n * };\n * var date4 = {year: 1999, month: 9, date: 9, hour: 13, minute: 2};\n * var dateStr4 = util.formatDate('yyyy-MM-dd A hh:mm', date4, option4));\n * alert(dateStr4); // '1999-09-09 오후 01:02'\n */\n\n\n function formatDate(form, date, option) {\n // eslint-disable-line complexity\n var am = object.pick(option, 'meridiemSet', 'AM') || 'AM';\n var pm = object.pick(option, 'meridiemSet', 'PM') || 'PM';\n var meridiem, nDate, resultStr;\n\n if (type.isDate(date)) {\n nDate = {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n date: date.getDate(),\n hour: date.getHours(),\n minute: date.getMinutes()\n };\n } else {\n nDate = {\n year: date.year,\n month: date.month,\n date: date.date,\n hour: date.hour,\n minute: date.minute\n };\n }\n\n if (!isValidDate(nDate.year, nDate.month, nDate.date)) {\n return false;\n }\n\n nDate.meridiem = '';\n\n if (/([^\\\\]|^)[aA]\\b/.test(form)) {\n meridiem = nDate.hour > 11 ? pm : am;\n\n if (nDate.hour > 12) {\n // See the clock system: https://en.wikipedia.org/wiki/12-hour_clock\n nDate.hour %= 12;\n }\n\n if (nDate.hour === 0) {\n nDate.hour = 12;\n }\n\n nDate.meridiem = meridiem;\n }\n\n resultStr = form.replace(tokens, function (key) {\n if (key.indexOf('\\\\') > -1) {\n // escape character\n return key.replace(/\\\\/, '');\n }\n\n return replaceMap[key](nDate) || '';\n });\n return resultStr;\n }\n\n module.exports = formatDate;\n /***/\n },\n /* 13 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview\n * This module provides a function to make a constructor\n * that can inherit from the other constructors like the CLASS easily.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var inherit = __webpack_require__(6).inherit;\n\n var extend = __webpack_require__(1).extend;\n /**\n * Help a constructor to be defined and to inherit from the other constructors\n * @param {*} [parent] Parent constructor\n * @param {Object} props Members of constructor\n * @param {Function} props.init Initialization method\n * @param {Object} [props.static] Static members of constructor\n * @returns {*} Constructor\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var Parent = util.defineClass({\n * init: function() { // constuructor\n * this.name = 'made by def';\n * },\n * method: function() {\n * // ...\n * },\n * static: {\n * staticMethod: function() {\n * // ...\n * }\n * }\n * });\n *\n * var Child = util.defineClass(Parent, {\n * childMethod: function() {}\n * });\n *\n * Parent.staticMethod();\n *\n * var parentInstance = new Parent();\n * console.log(parentInstance.name); //made by def\n * parentInstance.staticMethod(); // Error\n *\n * var childInstance = new Child();\n * childInstance.method();\n * childInstance.childMethod();\n */\n\n\n function defineClass(parent, props) {\n var obj;\n\n if (!props) {\n props = parent;\n parent = null;\n }\n\n obj = props.init || function () {};\n\n if (parent) {\n inherit(obj, parent);\n }\n\n if (props.hasOwnProperty('static')) {\n extend(obj, props['static']);\n delete props['static'];\n }\n\n extend(obj.prototype, props);\n return obj;\n }\n\n module.exports = defineClass;\n /***/\n },\n /* 14 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview Define module\n * @author NHN.\n * FE Development Lab <dl_javscript@nhn.com>\n * @dependency type.js, defineNamespace.js\n */\n 'use strict';\n\n var defineNamespace = __webpack_require__(15);\n\n var type = __webpack_require__(2);\n\n var INITIALIZATION_METHOD_NAME = 'initialize';\n /**\n * Define module\n * @param {string} namespace - Namespace of module\n * @param {Object} moduleDefinition - Object literal for module\n * @returns {Object} Defined module\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var myModule = util.defineModule('modules.myModule', {\n * name: 'john',\n * message: '',\n * initialize: function() {\n * this.message = 'hello world';\n * },\n * getMessage: function() {\n * return this.name + ': ' + this.message\n * }\n * });\n *\n * console.log(myModule.getMessage()); // 'john: hello world';\n */\n\n function defineModule(namespace, moduleDefinition) {\n var base = moduleDefinition || {};\n\n if (type.isFunction(base[INITIALIZATION_METHOD_NAME])) {\n base[INITIALIZATION_METHOD_NAME]();\n }\n\n return defineNamespace(namespace, base);\n }\n\n module.exports = defineModule;\n /***/\n },\n /* 15 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview Define namespace\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n * @dependency object.js, collection.js\n */\n 'use strict';\n\n var collection = __webpack_require__(4);\n\n var object = __webpack_require__(1);\n /**\n * Define namespace\n * @param {string} namespace - Namespace (ex- 'foo.bar.baz')\n * @param {(object|function)} props - A set of modules or one module\n * @param {boolean} [isOverride] - Override the props to the namespace.<br>\n * (It removes previous properties of this namespace)\n * @returns {(object|function)} Defined namespace\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var neComp = util.defineNamespace;\n * neComp.listMenu = defineClass({\n * init: function() {\n * // ...\n * }\n * });\n */\n\n\n function defineNamespace(namespace, props, isOverride) {\n var names, result, prevLast, last;\n names = namespace.split('.');\n names.unshift(window);\n result = collection.reduce(names, function (obj, name) {\n obj[name] = obj[name] || {};\n return obj[name];\n });\n\n if (isOverride) {\n last = names.pop();\n prevLast = object.pick.apply(null, names);\n result = prevLast[last] = props;\n } else {\n object.extend(result, props);\n }\n\n return result;\n }\n\n module.exports = defineNamespace;\n /***/\n },\n /* 16 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview\n * This module provides some functions for custom events.<br>\n * And it is implemented in the observer design pattern.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var collection = __webpack_require__(4);\n\n var type = __webpack_require__(2);\n\n var object = __webpack_require__(1);\n\n var R_EVENTNAME_SPLIT = /\\s+/g;\n /**\n * A unit of event handler item.\n * @ignore\n * @typedef {object} HandlerItem\n * @property {function} fn - event handler\n * @property {object} ctx - context of event handler\n */\n\n /**\n * @class\n * @memberof tui.util\n * @example\n * // node, commonjs\n * var CustomEvents = require('tui-code-snippet').CustomEvents;\n * @example\n * // distribution file, script\n * <script src='path-to/tui-code-snippt.js'></script>\n * <script>\n * var CustomEvents = tui.util.CustomEvents;\n * </script>\n */\n\n function CustomEvents() {\n /**\n * @type {HandlerItem[]}\n */\n this.events = null;\n /**\n * only for checking specific context event was binded\n * @type {object[]}\n */\n\n this.contexts = null;\n }\n /**\n * Mixin custom events feature to specific constructor\n * @param {function} func - constructor\n * @example\n * //-- #1. Get Module --//\n * var CustomEvents = require('tui-code-snippet').CustomEvents; // node, commonjs\n * var CustomEvents = tui.util.CustomEvents; // distribution file\n *\n * //-- #2. Use property --//\n * var model;\n * function Model() {\n * this.name = '';\n * }\n * CustomEvents.mixin(Model);\n *\n * model = new Model();\n * model.on('change', function() { this.name = 'model'; }, this);\n * model.fire('change');\n * alert(model.name); // 'model';\n */\n\n\n CustomEvents.mixin = function (func) {\n object.extend(func.prototype, CustomEvents.prototype);\n };\n /**\n * Get HandlerItem object\n * @param {function} handler - handler function\n * @param {object} [context] - context for handler\n * @returns {HandlerItem} HandlerItem object\n * @private\n */\n\n\n CustomEvents.prototype._getHandlerItem = function (handler, context) {\n var item = {\n handler: handler\n };\n\n if (context) {\n item.context = context;\n }\n\n return item;\n };\n /**\n * Get event object safely\n * @param {string} [eventName] - create sub event map if not exist.\n * @returns {(object|array)} event object. if you supplied `eventName`\n * parameter then make new array and return it\n * @private\n */\n\n\n CustomEvents.prototype._safeEvent = function (eventName) {\n var events = this.events;\n var byName;\n\n if (!events) {\n events = this.events = {};\n }\n\n if (eventName) {\n byName = events[eventName];\n\n if (!byName) {\n byName = [];\n events[eventName] = byName;\n }\n\n events = byName;\n }\n\n return events;\n };\n /**\n * Get context array safely\n * @returns {array} context array\n * @private\n */\n\n\n CustomEvents.prototype._safeContext = function () {\n var context = this.contexts;\n\n if (!context) {\n context = this.contexts = [];\n }\n\n return context;\n };\n /**\n * Get index of context\n * @param {object} ctx - context that used for bind custom event\n * @returns {number} index of context\n * @private\n */\n\n\n CustomEvents.prototype._indexOfContext = function (ctx) {\n var context = this._safeContext();\n\n var index = 0;\n\n while (context[index]) {\n if (ctx === context[index][0]) {\n return index;\n }\n\n index += 1;\n }\n\n return -1;\n };\n /**\n * Memorize supplied context for recognize supplied object is context or\n * name: handler pair object when off()\n * @param {object} ctx - context object to memorize\n * @private\n */\n\n\n CustomEvents.prototype._memorizeContext = function (ctx) {\n var context, index;\n\n if (!type.isExisty(ctx)) {\n return;\n }\n\n context = this._safeContext();\n index = this._indexOfContext(ctx);\n\n if (index > -1) {\n context[index][1] += 1;\n } else {\n context.push([ctx, 1]);\n }\n };\n /**\n * Forget supplied context object\n * @param {object} ctx - context object to forget\n * @private\n */\n\n\n CustomEvents.prototype._forgetContext = function (ctx) {\n var context, contextIndex;\n\n if (!type.isExisty(ctx)) {\n return;\n }\n\n context = this._safeContext();\n contextIndex = this._indexOfContext(ctx);\n\n if (contextIndex > -1) {\n context[contextIndex][1] -= 1;\n\n if (context[contextIndex][1] <= 0) {\n context.splice(contextIndex, 1);\n }\n }\n };\n /**\n * Bind event handler\n * @param {(string|{name:string, handler:function})} eventName - custom\n * event name or an object {eventName: handler}\n * @param {(function|object)} [handler] - handler function or context\n * @param {object} [context] - context for binding\n * @private\n */\n\n\n CustomEvents.prototype._bindEvent = function (eventName, handler, context) {\n var events = this._safeEvent(eventName);\n\n this._memorizeContext(context);\n\n events.push(this._getHandlerItem(handler, context));\n };\n /**\n * Bind event handlers\n * @param {(string|{name:string, handler:function})} eventName - custom\n * event name or an object {eventName: handler}\n * @param {(function|object)} [handler] - handler function or context\n * @param {object} [context] - context for binding\n * //-- #1. Get Module --//\n * var CustomEvents = require('tui-code-snippet').CustomEvents; // node, commonjs\n * var CustomEvents = tui.util.CustomEvents; // distribution file\n *\n * //-- #2. Use property --//\n * // # 2.1 Basic Usage\n * CustomEvents.on('onload', handler);\n *\n * // # 2.2 With context\n * CustomEvents.on('onload', handler, myObj);\n *\n * // # 2.3 Bind by object that name, handler pairs\n * CustomEvents.on({\n * 'play': handler,\n * 'pause': handler2\n * });\n *\n * // # 2.4 Bind by object that name, handler pairs with context object\n * CustomEvents.on({\n * 'play': handler\n * }, myObj);\n */\n\n\n CustomEvents.prototype.on = function (eventName, handler, context) {\n var self = this;\n\n if (type.isString(eventName)) {\n // [syntax 1, 2]\n eventName = eventName.split(R_EVENTNAME_SPLIT);\n collection.forEach(eventName, function (name) {\n self._bindEvent(name, handler, context);\n });\n } else if (type.isObject(eventName)) {\n // [syntax 3, 4]\n context = handler;\n collection.forEach(eventName, function (func, name) {\n self.on(name, func, context);\n });\n }\n };\n /**\n * Bind one-shot event handlers\n * @param {(string|{name:string,handler:function})} eventName - custom\n * event name or an object {eventName: handler}\n * @param {function|object} [handler] - handler function or context\n * @param {object} [context] - context for binding\n */\n\n\n CustomEvents.prototype.once = function (eventName, handler, context) {\n var self = this;\n\n if (type.isObject(eventName)) {\n context = handler;\n collection.forEach(eventName, function (func, name) {\n self.once(name, func, context);\n });\n return;\n }\n\n function onceHandler() {\n // eslint-disable-line require-jsdoc\n handler.apply(context, arguments);\n self.off(eventName, onceHandler, context);\n }\n\n this.on(eventName, onceHandler, context);\n };\n /**\n * Splice supplied array by callback result\n * @param {array} arr - array to splice\n * @param {function} predicate - function return boolean\n * @private\n */\n\n\n CustomEvents.prototype._spliceMatches = function (arr, predicate) {\n var i = 0;\n var len;\n\n if (!type.isArray(arr)) {\n return;\n }\n\n for (len = arr.length; i < len; i += 1) {\n if (predicate(arr[i]) === true) {\n arr.splice(i, 1);\n len -= 1;\n i -= 1;\n }\n }\n };\n /**\n * Get matcher for unbind specific handler events\n * @param {function} handler - handler function\n * @returns {function} handler matcher\n * @private\n */\n\n\n CustomEvents.prototype._matchHandler = function (handler) {\n var self = this;\n return function (item) {\n var needRemove = handler === item.handler;\n\n if (needRemove) {\n self._forgetContext(item.context);\n }\n\n return needRemove;\n };\n };\n /**\n * Get matcher for unbind specific context events\n * @param {object} context - context\n * @returns {function} object matcher\n * @private\n */\n\n\n CustomEvents.prototype._matchContext = function (context) {\n var self = this;\n return function (item) {\n var needRemove = context === item.context;\n\n if (needRemove) {\n self._forgetContext(item.context);\n }\n\n return needRemove;\n };\n };\n /**\n * Get matcher for unbind specific hander, context pair events\n * @param {function} handler - handler function\n * @param {object} context - context\n * @returns {function} handler, context matcher\n * @private\n */\n\n\n CustomEvents.prototype._matchHandlerAndContext = function (handler, context) {\n var self = this;\n return function (item) {\n var matchHandler = handler === item.handler;\n var matchContext = context === item.context;\n var needRemove = matchHandler && matchContext;\n\n if (needRemove) {\n self._forgetContext(item.context);\n }\n\n return needRemove;\n };\n };\n /**\n * Unbind event by event name\n * @param {string} eventName - custom event name to unbind\n * @param {function} [handler] - handler function\n * @private\n */\n\n\n CustomEvents.prototype._offByEventName = function (eventName, handler) {\n var self = this;\n var forEach = collection.forEachArray;\n var andByHandler = type.isFunction(handler);\n\n var matchHandler = self._matchHandler(handler);\n\n eventName = eventName.split(R_EVENTNAME_SPLIT);\n forEach(eventName, function (name) {\n var handlerItems = self._safeEvent(name);\n\n if (andByHandler) {\n self._spliceMatches(handlerItems, matchHandler);\n } else {\n forEach(handlerItems, function (item) {\n self._forgetContext(item.context);\n });\n self.events[name] = [];\n }\n });\n };\n /**\n * Unbind event by handler function\n * @param {function} handler - handler function\n * @private\n */\n\n\n CustomEvents.prototype._offByHandler = function (handler) {\n var self = this;\n\n var matchHandler = this._matchHandler(handler);\n\n collection.forEach(this._safeEvent(), function (handlerItems) {\n self._spliceMatches(handlerItems, matchHandler);\n });\n };\n /**\n * Unbind event by object(name: handler pair object or context object)\n * @param {object} obj - context or {name: handler} pair object\n * @param {function} handler - handler function\n * @private\n */\n\n\n CustomEvents.prototype._offByObject = function (obj, handler) {\n var self = this;\n var matchFunc;\n\n if (this._indexOfContext(obj) < 0) {\n collection.forEach(obj, function (func, name) {\n self.off(name, func);\n });\n } else if (type.isString(handler)) {\n matchFunc = this._matchContext(obj);\n\n self._spliceMatches(this._safeEvent(handler), matchFunc);\n } else if (type.isFunction(handler)) {\n matchFunc = this._matchHandlerAndContext(handler, obj);\n collection.forEach(this._safeEvent(), function (handlerItems) {\n self._spliceMatches(handlerItems, matchFunc);\n });\n } else {\n matchFunc = this._matchContext(obj);\n collection.forEach(this._safeEvent(), function (handlerItems) {\n self._spliceMatches(handlerItems, matchFunc);\n });\n }\n };\n /**\n * Unbind custom events\n * @param {(string|object|function)} eventName - event name or context or\n * {name: handler} pair object or handler function\n * @param {(function)} handler - handler function\n * @example\n * //-- #1. Get Module --//\n * var CustomEvents = require('tui-code-snippet').CustomEvents; // node, commonjs\n * var CustomEvents = tui.util.CustomEvents; // distribution file\n *\n * //-- #2. Use property --//\n * // # 2.1 off by event name\n * CustomEvents.off('onload');\n *\n * // # 2.2 off by event name and handler\n * CustomEvents.off('play', handler);\n *\n * // # 2.3 off by handler\n * CustomEvents.off(handler);\n *\n * // # 2.4 off by context\n * CustomEvents.off(myObj);\n *\n * // # 2.5 off by context and handler\n * CustomEvents.off(myObj, handler);\n *\n * // # 2.6 off by context and event name\n * CustomEvents.off(myObj, 'onload');\n *\n * // # 2.7 off by an Object.<string, function> that is {eventName: handler}\n * CustomEvents.off({\n * 'play': handler,\n * 'pause': handler2\n * });\n *\n * // # 2.8 off the all events\n * CustomEvents.off();\n */\n\n\n CustomEvents.prototype.off = function (eventName, handler) {\n if (type.isString(eventName)) {\n // [syntax 1, 2]\n this._offByEventName(eventName, handler);\n } else if (!arguments.length) {\n // [syntax 8]\n this.events = {};\n this.contexts = [];\n } else if (type.isFunction(eventName)) {\n // [syntax 3]\n this._offByHandler(eventName);\n } else if (type.isObject(eventName)) {\n // [syntax 4, 5, 6]\n this._offByObject(eventName, handler);\n }\n };\n /**\n * Fire custom event\n * @param {string} eventName - name of custom event\n */\n\n\n CustomEvents.prototype.fire = function (eventName) {\n // eslint-disable-line\n this.invoke.apply(this, arguments);\n };\n /**\n * Fire a event and returns the result of operation 'boolean AND' with all\n * listener's results.\n *\n * So, It is different from {@link CustomEvents#fire}.\n *\n * In service code, use this as a before event in component level usually\n * for notifying that the event is cancelable.\n * @param {string} eventName - Custom event name\n * @param {...*} data - Data for event\n * @returns {boolean} The result of operation 'boolean AND'\n * @example\n * var map = new Map();\n * map.on({\n * 'beforeZoom': function() {\n * // It should cancel the 'zoom' event by some conditions.\n * if (that.disabled && this.getState()) {\n * return false;\n * }\n * return true;\n * }\n * });\n *\n * if (this.invoke('beforeZoom')) { // check the result of 'beforeZoom'\n * // if true,\n * // doSomething\n * }\n */\n\n\n CustomEvents.prototype.invoke = function (eventName) {\n var events, args, index, item;\n\n if (!this.hasListener(eventName)) {\n return true;\n }\n\n events = this._safeEvent(eventName);\n args = Array.prototype.slice.call(arguments, 1);\n index = 0;\n\n while (events[index]) {\n item = events[index];\n\n if (item.handler.apply(item.context, args) === false) {\n return false;\n }\n\n index += 1;\n }\n\n return true;\n };\n /**\n * Return whether at least one of the handlers is registered in the given\n * event name.\n * @param {string} eventName - Custom event name\n * @returns {boolean} Is there at least one handler in event name?\n */\n\n\n CustomEvents.prototype.hasListener = function (eventName) {\n return this.getListenerLength(eventName) > 0;\n };\n /**\n * Return a count of events registered.\n * @param {string} eventName - Custom event name\n * @returns {number} number of event\n */\n\n\n CustomEvents.prototype.getListenerLength = function (eventName) {\n var events = this._safeEvent(eventName);\n\n return events.length;\n };\n\n module.exports = CustomEvents;\n /***/\n },\n /* 17 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview This module provides a Enum Constructor.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n * @example\n * // node, commonjs\n * var Enum = require('tui-code-snippet').Enum;\n * @example\n * // distribution file, script\n * <script src='path-to/tui-code-snippt.js'></script>\n * <script>\n * var Enum = tui.util.Enum;\n * <script>\n */\n 'use strict';\n\n var collection = __webpack_require__(4);\n\n var type = __webpack_require__(2);\n /**\n * Check whether the defineProperty() method is supported.\n * @type {boolean}\n * @ignore\n */\n\n\n var isSupportDefinedProperty = function () {\n try {\n Object.defineProperty({}, 'x', {});\n return true;\n } catch (e) {\n return false;\n }\n }();\n /**\n * A unique value of a constant.\n * @type {number}\n * @ignore\n */\n\n\n var enumValue = 0;\n /**\n * Make a constant-list that has unique values.<br>\n * In modern browsers (except IE8 and lower),<br>\n * a value defined once can not be changed.\n *\n * @param {...string|string[]} itemList Constant-list (An array of string is available)\n * @class\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var Enum = require('tui-code-snippet').Enum; // node, commonjs\n * var Enum = tui.util.Enum; // distribution file\n *\n * //-- #2. Use property --//\n * var MYENUM = new Enum('TYPE1', 'TYPE2');\n * var MYENUM2 = new Enum(['TYPE1', 'TYPE2']);\n *\n * //usage\n * if (value === MYENUM.TYPE1) {\n * ....\n * }\n *\n * //add (If a duplicate name is inputted, will be disregarded.)\n * MYENUM.set('TYPE3', 'TYPE4');\n *\n * //get name of a constant by a value\n * MYENUM.getName(MYENUM.TYPE1); // 'TYPE1'\n *\n * // In modern browsers (except IE8 and lower), a value can not be changed in constants.\n * var originalValue = MYENUM.TYPE1;\n * MYENUM.TYPE1 = 1234; // maybe TypeError\n * MYENUM.TYPE1 === originalValue; // true\n **/\n\n function Enum(itemList) {\n if (itemList) {\n this.set.apply(this, arguments);\n }\n }\n /**\n * Define a constants-list\n * @param {...string|string[]} itemList Constant-list (An array of string is available)\n */\n\n\n Enum.prototype.set = function (itemList) {\n var self = this;\n\n if (!type.isArray(itemList)) {\n itemList = collection.toArray(arguments);\n }\n\n collection.forEach(itemList, function itemListIteratee(item) {\n self._addItem(item);\n });\n };\n /**\n * Return a key of the constant.\n * @param {number} value A value of the constant.\n * @returns {string|undefined} Key of the constant.\n */\n\n\n Enum.prototype.getName = function (value) {\n var self = this;\n var foundedKey;\n collection.forEach(this, function (itemValue, key) {\n // eslint-disable-line consistent-return\n if (self._isEnumItem(key) && value === itemValue) {\n foundedKey = key;\n return false;\n }\n });\n return foundedKey;\n };\n /**\n * Create a constant.\n * @private\n * @param {string} name Constant name. (It will be a key of a constant)\n */\n\n\n Enum.prototype._addItem = function (name) {\n var value;\n\n if (!this.hasOwnProperty(name)) {\n value = this._makeEnumValue();\n\n if (isSupportDefinedProperty) {\n Object.defineProperty(this, name, {\n enumerable: true,\n configurable: false,\n writable: false,\n value: value\n });\n } else {\n this[name] = value;\n }\n }\n };\n /**\n * Return a unique value for assigning to a constant.\n * @private\n * @returns {number} A unique value\n */\n\n\n Enum.prototype._makeEnumValue = function () {\n var value;\n value = enumValue;\n enumValue += 1;\n return value;\n };\n /**\n * Return whether a constant from the given key is in instance or not.\n * @param {string} key - A constant key\n * @returns {boolean} Result\n * @private\n */\n\n\n Enum.prototype._isEnumItem = function (key) {\n return type.isNumber(this[key]);\n };\n\n module.exports = Enum;\n /***/\n },\n /* 18 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview\n * Implements the ExMap (Extended Map) object.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var collection = __webpack_require__(4);\n\n var Map = __webpack_require__(19); // Caching tui.util for performance enhancing\n\n\n var mapAPIsForRead = ['get', 'has', 'forEach', 'keys', 'values', 'entries'];\n var mapAPIsForDelete = ['delete', 'clear'];\n /**\n * The ExMap object is Extended Version of the tui.util.Map object.<br>\n * and added some useful feature to make it easy to manage the Map object.\n * @constructor\n * @param {Array} initData - Array of key-value pairs (2-element Arrays).\n * Each key-value pair will be added to the new Map\n * @memberof tui.util\n * @example\n * // node, commonjs\n * var ExMap = require('tui-code-snippet').ExMap;\n * @example\n * // distribution file, script\n * <script src='path-to/tui-code-snippt.js'></script>\n * <script>\n * var ExMap = tui.util.ExMap;\n * <script>\n */\n\n function ExMap(initData) {\n this._map = new Map(initData);\n this.size = this._map.size;\n }\n\n collection.forEachArray(mapAPIsForRead, function (name) {\n ExMap.prototype[name] = function () {\n return this._map[name].apply(this._map, arguments);\n };\n });\n collection.forEachArray(mapAPIsForDelete, function (name) {\n ExMap.prototype[name] = function () {\n var result = this._map[name].apply(this._map, arguments);\n\n this.size = this._map.size;\n return result;\n };\n });\n\n ExMap.prototype.set = function () {\n this._map.set.apply(this._map, arguments);\n\n this.size = this._map.size;\n return this;\n };\n /**\n * Sets all of the key-value pairs in the specified object to the Map object.\n * @param {Object} object - Plain object that has a key-value pair\n */\n\n\n ExMap.prototype.setObject = function (object) {\n collection.forEachOwnProperties(object, function (value, key) {\n this.set(key, value);\n }, this);\n };\n /**\n * Removes the elements associated with keys in the specified array.\n * @param {Array} keys - Array that contains keys of the element to remove\n */\n\n\n ExMap.prototype.deleteByKeys = function (keys) {\n collection.forEachArray(keys, function (key) {\n this['delete'](key);\n }, this);\n };\n /**\n * Sets all of the key-value pairs in the specified Map object to this Map object.\n * @param {Map} map - Map object to be merged into this Map object\n */\n\n\n ExMap.prototype.merge = function (map) {\n map.forEach(function (value, key) {\n this.set(key, value);\n }, this);\n };\n /**\n * Looks through each key-value pair in the map and returns the new ExMap object of\n * all key-value pairs that pass a truth test implemented by the provided function.\n * @param {function} predicate - Function to test each key-value pair of the Map object.<br>\n * Invoked with arguments (value, key). Return true to keep the element, false otherwise.\n * @returns {ExMap} A new ExMap object\n */\n\n\n ExMap.prototype.filter = function (predicate) {\n var filtered = new ExMap();\n this.forEach(function (value, key) {\n if (predicate(value, key)) {\n filtered.set(key, value);\n }\n });\n return filtered;\n };\n\n module.exports = ExMap;\n /***/\n },\n /* 19 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview\n * Implements the Map object.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var collection = __webpack_require__(4);\n\n var type = __webpack_require__(2);\n\n var array = __webpack_require__(3);\n\n var browser = __webpack_require__(10);\n\n var func = __webpack_require__(5);\n /**\n * Using undefined for a key can be ambiguous if there's deleted item in the array,<br>\n * which is also undefined when accessed by index.<br>\n * So use this unique object as an undefined key to distinguish it from deleted keys.\n * @private\n * @constant\n */\n\n\n var _KEY_FOR_UNDEFINED = {};\n /**\n * For using NaN as a key, use this unique object as a NaN key.<br>\n * This makes it easier and faster to compare an object with each keys in the array<br>\n * through no exceptional comapring for NaN.\n * @private\n * @constant\n */\n\n var _KEY_FOR_NAN = {};\n /**\n * Constructor of MapIterator<br>\n * Creates iterator object with new keyword.\n * @constructor\n * @param {Array} keys - The array of keys in the map\n * @param {function} valueGetter - Function that returns certain value,\n * taking key and keyIndex as arguments.\n * @ignore\n */\n\n function MapIterator(keys, valueGetter) {\n this._keys = keys;\n this._valueGetter = valueGetter;\n this._length = this._keys.length;\n this._index = -1;\n this._done = false;\n }\n /**\n * Implementation of Iterator protocol.\n * @returns {{done: boolean, value: *}} Object that contains done(boolean) and value.\n */\n\n\n MapIterator.prototype.next = function () {\n var data = {};\n\n do {\n this._index += 1;\n } while (type.isUndefined(this._keys[this._index]) && this._index < this._length);\n\n if (this._index >= this._length) {\n data.done = true;\n } else {\n data.done = false;\n data.value = this._valueGetter(this._keys[this._index], this._index);\n }\n\n return data;\n };\n /**\n * The Map object implements the ES6 Map specification as closely as possible.<br>\n * For using objects and primitive values as keys, this object uses array internally.<br>\n * So if the key is not a string, get(), set(), has(), delete() will operates in O(n),<br>\n * and it can cause performance issues with a large dataset.\n *\n * Features listed below are not supported. (can't be implented without native support)\n * - Map object is iterable<br>\n * - Iterable object can be used as an argument of constructor\n *\n * If the browser supports full implementation of ES6 Map specification, native Map obejct\n * will be used internally.\n * @class\n * @param {Array} initData - Array of key-value pairs (2-element Arrays).\n * Each key-value pair will be added to the new Map\n * @memberof tui.util\n * @example\n * // node, commonjs\n * var Map = require('tui-code-snippet').Map;\n * @example\n * // distribution file, script\n * <script src='path-to/tui-code-snippt.js'></script>\n * <script>\n * var Map = tui.util.Map;\n * <script>\n */\n\n\n function Map(initData) {\n this._valuesForString = {};\n this._valuesForIndex = {};\n this._keys = [];\n\n if (initData) {\n this._setInitData(initData);\n }\n\n this.size = 0;\n }\n /* eslint-disable no-extend-native */\n\n /**\n * Add all elements in the initData to the Map object.\n * @private\n * @param {Array} initData - Array of key-value pairs to add to the Map object\n */\n\n\n Map.prototype._setInitData = function (initData) {\n if (!type.isArray(initData)) {\n throw new Error('Only Array is supported.');\n }\n\n collection.forEachArray(initData, function (pair) {\n this.set(pair[0], pair[1]);\n }, this);\n };\n /**\n * Returns true if the specified value is NaN.<br>\n * For unsing NaN as a key, use this method to test equality of NaN<br>\n * because === operator doesn't work for NaN.\n * @private\n * @param {*} value - Any object to be tested\n * @returns {boolean} True if value is NaN, false otherwise.\n */\n\n\n Map.prototype._isNaN = function (value) {\n return typeof value === 'number' && value !== value; // eslint-disable-line no-self-compare\n };\n /**\n * Returns the index of the specified key.\n * @private\n * @param {*} key - The key object to search for.\n * @returns {number} The index of the specified key\n */\n\n\n Map.prototype._getKeyIndex = function (key) {\n var result = -1;\n var value;\n\n if (type.isString(key)) {\n value = this._valuesForString[key];\n\n if (value) {\n result = value.keyIndex;\n }\n } else {\n result = array.inArray(key, this._keys);\n }\n\n return result;\n };\n /**\n * Returns the original key of the specified key.\n * @private\n * @param {*} key - key\n * @returns {*} Original key\n */\n\n\n Map.prototype._getOriginKey = function (key) {\n var originKey = key;\n\n if (key === _KEY_FOR_UNDEFINED) {\n originKey = undefined; // eslint-disable-line no-undefined\n } else if (key === _KEY_FOR_NAN) {\n originKey = NaN;\n }\n\n return originKey;\n };\n /**\n * Returns the unique key of the specified key.\n * @private\n * @param {*} key - key\n * @returns {*} Unique key\n */\n\n\n Map.prototype._getUniqueKey = function (key) {\n var uniqueKey = key;\n\n if (type.isUndefined(key)) {\n uniqueKey = _KEY_FOR_UNDEFINED;\n } else if (this._isNaN(key)) {\n uniqueKey = _KEY_FOR_NAN;\n }\n\n return uniqueKey;\n };\n /**\n * Returns the value object of the specified key.\n * @private\n * @param {*} key - The key of the value object to be returned\n * @param {number} keyIndex - The index of the key\n * @returns {{keyIndex: number, origin: *}} Value object\n */\n\n\n Map.prototype._getValueObject = function (key, keyIndex) {\n // eslint-disable-line consistent-return\n if (type.isString(key)) {\n return this._valuesForString[key];\n }\n\n if (type.isUndefined(keyIndex)) {\n keyIndex = this._getKeyIndex(key);\n }\n\n if (keyIndex >= 0) {\n return this._valuesForIndex[keyIndex];\n }\n };\n /**\n * Returns the original value of the specified key.\n * @private\n * @param {*} key - The key of the value object to be returned\n * @param {number} keyIndex - The index of the key\n * @returns {*} Original value\n */\n\n\n Map.prototype._getOriginValue = function (key, keyIndex) {\n return this._getValueObject(key, keyIndex).origin;\n };\n /**\n * Returns key-value pair of the specified key.\n * @private\n * @param {*} key - The key of the value object to be returned\n * @param {number} keyIndex - The index of the key\n * @returns {Array} Key-value Pair\n */\n\n\n Map.prototype._getKeyValuePair = function (key, keyIndex) {\n return [this._getOriginKey(key), this._getOriginValue(key, keyIndex)];\n };\n /**\n * Creates the wrapper object of original value that contains a key index\n * and returns it.\n * @private\n * @param {type} origin - Original value\n * @param {type} keyIndex - Index of the key\n * @returns {{keyIndex: number, origin: *}} Value object\n */\n\n\n Map.prototype._createValueObject = function (origin, keyIndex) {\n return {\n keyIndex: keyIndex,\n origin: origin\n };\n };\n /**\n * Sets the value for the key in the Map object.\n * @param {*} key - The key of the element to add to the Map object\n * @param {*} value - The value of the element to add to the Map object\n * @returns {Map} The Map object\n */\n\n\n Map.prototype.set = function (key, value) {\n var uniqueKey = this._getUniqueKey(key);\n\n var keyIndex = this._getKeyIndex(uniqueKey);\n\n var valueObject;\n\n if (keyIndex < 0) {\n keyIndex = this._keys.push(uniqueKey) - 1;\n this.size += 1;\n }\n\n valueObject = this._createValueObject(value, keyIndex);\n\n if (type.isString(key)) {\n this._valuesForString[key] = valueObject;\n } else {\n this._valuesForIndex[keyIndex] = valueObject;\n }\n\n return this;\n };\n /**\n * Returns the value associated to the key, or undefined if there is none.\n * @param {*} key - The key of the element to return\n * @returns {*} Element associated with the specified key\n */\n\n\n Map.prototype.get = function (key) {\n var uniqueKey = this._getUniqueKey(key);\n\n var value = this._getValueObject(uniqueKey);\n\n return value && value.origin;\n };\n /**\n * Returns a new Iterator object that contains the keys for each element\n * in the Map object in insertion order.\n * @returns {Iterator} A new Iterator object\n */\n\n\n Map.prototype.keys = function () {\n return new MapIterator(this._keys, func.bind(this._getOriginKey, this));\n };\n /**\n * Returns a new Iterator object that contains the values for each element\n * in the Map object in insertion order.\n * @returns {Iterator} A new Iterator object\n */\n\n\n Map.prototype.values = function () {\n return new MapIterator(this._keys, func.bind(this._getOriginValue, this));\n };\n /**\n * Returns a new Iterator object that contains the [key, value] pairs\n * for each element in the Map object in insertion order.\n * @returns {Iterator} A new Iterator object\n */\n\n\n Map.prototype.entries = function () {\n return new MapIterator(this._keys, func.bind(this._getKeyValuePair, this));\n };\n /**\n * Returns a boolean asserting whether a value has been associated to the key\n * in the Map object or not.\n * @param {*} key - The key of the element to test for presence\n * @returns {boolean} True if an element with the specified key exists;\n * Otherwise false\n */\n\n\n Map.prototype.has = function (key) {\n return !!this._getValueObject(key);\n };\n /**\n * Removes the specified element from a Map object.\n * @param {*} key - The key of the element to remove\n * @function delete\n * @memberof tui.util.Map.prototype\n */\n // cannot use reserved keyword as a property name in IE8 and under.\n\n\n Map.prototype['delete'] = function (key) {\n var keyIndex;\n\n if (type.isString(key)) {\n if (this._valuesForString[key]) {\n keyIndex = this._valuesForString[key].keyIndex;\n delete this._valuesForString[key];\n }\n } else {\n keyIndex = this._getKeyIndex(key);\n\n if (keyIndex >= 0) {\n delete this._valuesForIndex[keyIndex];\n }\n }\n\n if (keyIndex >= 0) {\n delete this._keys[keyIndex];\n this.size -= 1;\n }\n };\n /**\n * Executes a provided function once per each key/value pair in the Map object,\n * in insertion order.\n * @param {function} callback - Function to execute for each element\n * @param {thisArg} thisArg - Value to use as this when executing callback\n */\n\n\n Map.prototype.forEach = function (callback, thisArg) {\n thisArg = thisArg || this;\n collection.forEachArray(this._keys, function (key) {\n if (!type.isUndefined(key)) {\n callback.call(thisArg, this._getValueObject(key).origin, key, this);\n }\n }, this);\n };\n /**\n * Removes all elements from a Map object.\n */\n\n\n Map.prototype.clear = function () {\n Map.call(this);\n };\n /* eslint-enable no-extend-native */\n // Use native Map object if exists.\n // But only latest versions of Chrome and Firefox support full implementation.\n\n\n (function () {\n if (window.Map && (browser.firefox && browser.version >= 37 || browser.chrome && browser.version >= 42)) {\n Map = window.Map; // eslint-disable-line no-func-assign\n }\n })();\n\n module.exports = Map;\n /***/\n },\n /* 20 */\n\n /***/\n function (module, exports, __webpack_require__) {\n /**\n * @fileoverview This module provides the HashMap constructor.\n * @author NHN.\n * FE Development Lab <dl_javascript@nhn.com>\n */\n 'use strict';\n\n var collection = __webpack_require__(4);\n\n var type = __webpack_require__(2);\n /**\n * All the data in hashMap begin with _MAPDATAPREFIX;\n * @type {string}\n * @private\n */\n\n\n var _MAPDATAPREFIX = 'å';\n /**\n * HashMap can handle the key-value pairs.<br>\n * Caution:<br>\n * HashMap instance has a length property but is not an instance of Array.\n * @param {Object} [obj] A initial data for creation.\n * @constructor\n * @memberof tui.util\n * @deprecated since version 1.3.0\n * @example\n * // node, commonjs\n * var HashMap = require('tui-code-snippet').HashMap;\n * var hm = new tui.util.HashMap({\n 'mydata': {\n 'hello': 'imfine'\n },\n 'what': 'time'\n });\n * @example\n * // distribution file, script\n * <script src='path-to/tui-code-snippt.js'></script>\n * <script>\n * var HashMap = tui.util.HashMap;\n * <script>\n * var hm = new tui.util.HashMap({\n 'mydata': {\n 'hello': 'imfine'\n },\n 'what': 'time'\n });\n */\n\n function HashMap(obj) {\n /**\n * size\n * @type {number}\n */\n this.length = 0;\n\n if (obj) {\n this.setObject(obj);\n }\n }\n /**\n * Set a data from the given key with value or the given object.\n * @param {string|Object} key A string or object for key\n * @param {*} [value] A data\n * @example\n * //-- #1. Get Module --//\n * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n * var HashMap = tui.util.HashMap; // distribution file\n *\n * //-- #2. Use property --//\n * var hm = new HashMap();\n * hm.set('key', 'value');\n * hm.set({\n * 'key1': 'data1',\n * 'key2': 'data2'\n * });\n */\n\n\n HashMap.prototype.set = function (key, value) {\n if (arguments.length === 2) {\n this.setKeyValue(key, value);\n } else {\n this.setObject(key);\n }\n };\n /**\n * Set a data from the given key with value.\n * @param {string} key A string for key\n * @param {*} value A data\n * @example\n * //-- #1. Get Module --//\n * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n * var HashMap = tui.util.HashMap; // distribution file\n *\n * //-- #2. Use property --//\n * var hm = new HashMap();\n * hm.setKeyValue('key', 'value');\n */\n\n\n HashMap.prototype.setKeyValue = function (key, value) {\n if (!this.has(key)) {\n this.length += 1;\n }\n\n this[this.encodeKey(key)] = value;\n };\n /**\n * Set a data from the given object.\n * @param {Object} obj A object for data\n * @example\n * //-- #1. Get Module --//\n * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n * var HashMap = tui.util.HashMap; // distribution file\n *\n * //-- #2. Use property --//\n * var hm = new HashMap();\n * hm.setObject({\n * 'key1': 'data1',\n * 'key2': 'data2'\n * });\n */\n\n\n HashMap.prototype.setObject = function (obj) {\n var self = this;\n collection.forEachOwnProperties(obj, function (value, key) {\n self.setKeyValue(key, value);\n });\n };\n /**\n * Merge with the given another hashMap.\n * @param {HashMap} hashMap Another hashMap instance\n */\n\n\n HashMap.prototype.merge = function (hashMap) {\n var self = this;\n hashMap.each(function (value, key) {\n self.setKeyValue(key, value);\n });\n };\n /**\n * Encode the given key for hashMap.\n * @param {string} key A string for key\n * @returns {string} A encoded key\n * @private\n */\n\n\n HashMap.prototype.encodeKey = function (key) {\n return _MAPDATAPREFIX + key;\n };\n /**\n * Decode the given key in hashMap.\n * @param {string} key A string for key\n * @returns {string} A decoded key\n * @private\n */\n\n\n HashMap.prototype.decodeKey = function (key) {\n var decodedKey = key.split(_MAPDATAPREFIX);\n return decodedKey[decodedKey.length - 1];\n };\n /**\n * Return the value from the given key.\n * @param {string} key A string for key\n * @returns {*} The value from a key\n * @example\n * //-- #1. Get Module --//\n * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n * var HashMap = tui.util.HashMap; // distribution file\n *\n * //-- #2. Use property --//\n * var hm = new HashMap();\n * hm.set('key', 'value');\n * hm.get('key') // value\n */\n\n\n HashMap.prototype.get = function (key) {\n return this[this.encodeKey(key)];\n };\n /**\n * Check the existence of a value from the key.\n * @param {string} key A string for key\n * @returns {boolean} Indicating whether a value exists or not.\n * @example\n * //-- #1. Get Module --//\n * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n * var HashMap = tui.util.HashMap; // distribution file\n *\n * //-- #2. Use property --//\n * var hm = new HashMap();\n * hm.set('key', 'value');\n * hm.has('key') // true\n */\n\n\n HashMap.prototype.has = function (key) {\n return this.hasOwnProperty(this.encodeKey(key));\n };\n /**\n * Remove a data(key-value pairs) from the given key or the given key-list.\n * @param {...string|string[]} key A string for key\n * @returns {string|string[]} A removed data\n * @example\n * //-- #1. Get Module --//\n * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n * var HashMap = tui.util.HashMap; // distribution file\n *\n * //-- #2. Use property --//\n * var hm = new HashMap();\n * hm.set('key', 'value');\n * hm.set('key2', 'value');\n *\n * hm.remove('key');\n * hm.remove('key', 'key2');\n * hm.remove(['key', 'key2']);\n */\n\n\n HashMap.prototype.remove = function (key) {\n if (arguments.length > 1) {\n key = collection.toArray(arguments);\n }\n\n return type.isArray(key) ? this.removeByKeyArray(key) : this.removeByKey(key);\n };\n /**\n * Remove data(key-value pair) from the given key.\n * @param {string} key A string for key\n * @returns {*|null} A removed data\n * @example\n * //-- #1. Get Module --//\n * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n * var HashMap = tui.util.HashMap; // distribution file\n *\n * //-- #2. Use property --//\n * var hm = new HashMap();\n * hm.set('key', 'value');\n * hm.removeByKey('key')\n */\n\n\n HashMap.prototype.removeByKey = function (key) {\n var data = this.has(key) ? this.get(key) : null;\n\n if (data !== null) {\n delete this[this.encodeKey(key)];\n this.length -= 1;\n }\n\n return data;\n };\n /**\n * Remove a data(key-value pairs) from the given key-list.\n * @param {string[]} keyArray An array of keys\n * @returns {string[]} A removed data\n * @example\n * //-- #1. Get Module --//\n * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n * var HashMap = tui.util.HashMap; // distribution file\n *\n * //-- #2. Use property --//\n * var hm = new HashMap();\n * hm.set('key', 'value');\n * hm.set('key2', 'value');\n * hm.removeByKeyArray(['key', 'key2']);\n */\n\n\n HashMap.prototype.removeByKeyArray = function (keyArray) {\n var data = [];\n var self = this;\n collection.forEach(keyArray, function (key) {\n data.push(self.removeByKey(key));\n });\n return data;\n };\n /**\n * Remove all the data\n */\n\n\n HashMap.prototype.removeAll = function () {\n var self = this;\n this.each(function (value, key) {\n self.remove(key);\n });\n };\n /**\n * Execute the provided callback once for each all the data.\n * @param {Function} iteratee Callback function\n * @example\n * //-- #1. Get Module --//\n * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n * var HashMap = tui.util.HashMap; // distribution file\n *\n * //-- #2. Use property --//\n * var hm = new HashMap();\n * hm.set('key', 'value');\n * hm.set('key2', 'value');\n *\n * hm.each(function(value, key) {\n * //do something...\n * });\n */\n\n\n HashMap.prototype.each = function (iteratee) {\n var self = this;\n var flag;\n collection.forEachOwnProperties(this, function (value, key) {\n // eslint-disable-line consistent-return\n if (key.charAt(0) === _MAPDATAPREFIX) {\n flag = iteratee(value, self.decodeKey(key));\n }\n\n if (flag === false) {\n return flag;\n }\n });\n };\n /**\n * Return the key-list stored.\n * @returns {Array} A key-list\n * @example\n * //-- #1. Get Module --//\n * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n * var HashMap = tui.util.HashMap; // distribution file\n *\n * //-- #2. Use property --//\n * var hm = new HashMap();\n * hm.set('key', 'value');\n * hm.set('key2', 'value');\n * hm.keys(); //['key', 'key2');\n */\n\n\n HashMap.prototype.keys = function () {\n var keys = [];\n var self = this;\n this.each(function (value, key) {\n keys.push(self.decodeKey(key));\n });\n return keys;\n };\n /**\n * Work similarly to Array.prototype.map().<br>\n * It executes the provided callback that checks conditions once for each element of hashMap,<br>\n * and returns a new array having elements satisfying the conditions\n * @param {Function} condition A function that checks conditions\n * @returns {Array} A new array having elements satisfying the conditions\n * @example\n * //-- #1. Get Module --//\n * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n * var HashMap = tui.util.HashMap; // distribution file\n *\n * //-- #2. Use property --//\n * var hm1 = new HashMap();\n * hm1.set('key', 'value');\n * hm1.set('key2', 'value');\n *\n * hm1.find(function(value, key) {\n * return key === 'key2';\n * }); // ['value']\n *\n * var hm2 = new HashMap({\n * 'myobj1': {\n * visible: true\n * },\n * 'mybobj2': {\n * visible: false\n * }\n * });\n *\n * hm2.find(function(obj, key) {\n * return obj.visible === true;\n * }); // [{visible: true}];\n */\n\n\n HashMap.prototype.find = function (condition) {\n var founds = [];\n this.each(function (value, key) {\n if (condition(value, key)) {\n founds.push(value);\n }\n });\n return founds;\n };\n /**\n * Return a new Array having all values.\n * @returns {Array} A new array having all values\n */\n\n\n HashMap.prototype.toArray = function () {\n var result = [];\n this.each(function (v) {\n result.push(v);\n });\n return result;\n };\n\n module.exports = HashMap;\n /***/\n }\n /******/\n ])\n );\n});\n\n;","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/node_modules/tui-code-snippet/dist/tui-code-snippet.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","modules","installedModules","__webpack_require__","moduleId","id","loaded","call","m","c","p","util","object","extend","browser","popup","formatDate","defineClass","defineModule","defineNamespace","CustomEvents","Enum","ExMap","HashMap","Map","type","array","lastId","target","objects","hasOwnProp","Object","prototype","hasOwnProperty","source","prop","i","len","arguments","length","stamp","obj","__fe_id","hasStamp","isExisty","pick","resetLastId","keys","keyArray","key","push","compareJSON","argsLen","isSameObject","x","y","leftChain","rightChain","isNaN","isNumber","isFunction","Date","RegExp","String","Number","toString","isPrototypeOf","constructor","inArray","pop","paths","args","isUndefined","isNull","param","undefined","isTruthy","isFalsy","isArguments","result","callee","isArray","Array","isObject","Function","isString","isBoolean","Boolean","isArraySafe","isFunctionSafe","isNumberSafe","isStringSafe","isBooleanSafe","isHTMLNode","html","HTMLElement","nodeType","isHTMLTag","isEmpty","_isEmptyString","_hasOwnProperty","isNotEmpty","isDate","isDateSafe","collection","aps","slice","range","start","stop","step","arr","flag","zip","arr2d","forEach","value","index","searchElement","startIndex","indexOf","forEachArray","iteratee","context","forEachOwnProperties","map","resultArray","apply","reduce","store","toArray","arrayLike","e","filter","add","Error","subResult","pluck","property","item","bind","fn","concat","createObject","F","inherit","subType","superType","decodeHTMLEntity","htmlEntity","entities","replace","m0","encodeHTMLEntity","hasEncodableString","string","test","getDuplicatedChar","operandStr1","operandStr2","pool","dupl","charAt","sort","join","tricks","debounce","delay","timer","debounced","window","clearTimeout","setTimeout","timestamp","throttle","interval","base","isLeading","tick","_args","throttled","reset","ms7days","isExpired","date","now","getTime","sendHostname","appName","trackingId","url","hostname","location","hitType","eventCategory","applicationKeyForStorage","localStorage","getItem","tui","usageStatistics","setItem","document","readyState","imagePing","v","t","tid","cid","dp","dh","el","ec","trackingInfo","queryString","startWith","trackingElement","createElement","src","style","display","body","appendChild","removeChild","chrome","firefox","safari","msie","edge","others","version","navigator","detectBrowser","nav","userAgent","rIE","rIE11","rEdge","versionRegex","tmp","detector","Microsoft_Internet_Explorer","detectedVersion","match","parseFloat","Netscape","detected","exec","func","popupId","Popup","openedPopup","closeWithParentPopup","postBridgeUrl","getPopupList","openPopup","options","formElement","useIEPostBridge","popupName","popupOptionStr","useReload","closeWithParent","method","toUpperCase","_parameterize","createForm","_open","closed","focus","alert","submit","parentNode","onunload","closeAllPopup","close","skipBeforeUnload","opener","href","hasArg","parseQuery","search","pair","substr","split","part","decodeURIComponent","action","data","container","form","input","name","query","encodeURIComponent","optionStr","open","redirect","tokens","MONTH_STR","MONTH_DAYS","replaceMap","M","month","MM","MMM","MMMM","D","d","DD","dayInMonth","dd","YY","year","yy","YYYY","prefix","yyyy","A","meridiem","a","hh","hour","HH","h","H","minute","mm","isValidDate","isValidYear","isValidMonth","isValid","lastDayInMonth","option","am","pm","nDate","resultStr","getFullYear","getMonth","getDate","getHours","getMinutes","parent","props","init","INITIALIZATION_METHOD_NAME","namespace","moduleDefinition","isOverride","names","prevLast","last","unshift","R_EVENTNAME_SPLIT","events","contexts","mixin","_getHandlerItem","handler","_safeEvent","eventName","byName","_safeContext","_indexOfContext","ctx","_memorizeContext","_forgetContext","contextIndex","splice","_bindEvent","on","self","once","onceHandler","off","_spliceMatches","predicate","_matchHandler","needRemove","_matchContext","_matchHandlerAndContext","matchHandler","matchContext","_offByEventName","andByHandler","handlerItems","_offByHandler","_offByObject","matchFunc","fire","invoke","hasListener","getListenerLength","isSupportDefinedProperty","defineProperty","enumValue","itemList","set","itemListIteratee","_addItem","getName","foundedKey","itemValue","_isEnumItem","_makeEnumValue","enumerable","configurable","writable","mapAPIsForRead","mapAPIsForDelete","initData","_map","size","setObject","deleteByKeys","merge","filtered","_KEY_FOR_UNDEFINED","_KEY_FOR_NAN","MapIterator","valueGetter","_keys","_valueGetter","_length","_index","_done","next","done","_valuesForString","_valuesForIndex","_setInitData","_isNaN","_getKeyIndex","keyIndex","_getOriginKey","originKey","NaN","_getUniqueKey","uniqueKey","_getValueObject","_getOriginValue","origin","_getKeyValuePair","_createValueObject","valueObject","get","values","entries","has","callback","thisArg","clear","_MAPDATAPREFIX","setKeyValue","encodeKey","hashMap","each","decodeKey","decodedKey","remove","removeByKeyArray","removeByKey","removeAll","find","condition","founds"],"mappings":"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ACF,WAAW,CAACE,KAAD,CAAZ,IAAuB,CAACD,MAAM,CAACC,KAAD,CAArC;AACH;AAED;AACD;AACA;AACA;AACA;AACA;AACA;;;AACC,eAASF,WAAT,CAAqB/B,GAArB,EAA0B;AACtB,eAAOA,GAAG,KAAKkC,SAAf,CADsB,CACI;AAC7B;AAED;AACD;AACA;AACA;AACA;AACA;AACA;;;AACC,eAASF,MAAT,CAAgBhC,GAAhB,EAAqB;AACjB,eAAOA,GAAG,KAAK,IAAf;AACH;AAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;;AACC,eAASmC,QAAT,CAAkBnC,GAAlB,EAAuB;AACnB,eAAOG,QAAQ,CAACH,GAAD,CAAR,IAAiBA,GAAG,KAAK,KAAhC;AACH;AAED;AACD;AACA;AACA;AACA;AACA;AACA;;;AACC,eAASoC,OAAT,CAAiBpC,GAAjB,EAAsB;AAClB,eAAO,CAACmC,QAAQ,CAACnC,GAAD,CAAhB;AACH;AAED;AACD;AACA;AACA;AACA;AACA;AACA;;;AACC,eAASqC,WAAT,CAAqBrC,GAArB,EAA0B;AACtB,YAAIsC,MAAM,GAAGnC,QAAQ,CAACH,GAAD,CAAR,KACPwB,QAAQ,CAAC1D,IAAT,CAAckC,GAAd,MAAuB,oBAAxB,IAAiD,CAAC,CAACA,GAAG,CAACuC,MAD/C,CAAb;AAGA,eAAOD,MAAP;AACH;AAED;AACD;AACA;AACA;AACA;AACA;AACA;;;AACC,eAASE,OAAT,CAAiBxC,GAAjB,EAAsB;AAClB,eAAOA,GAAG,YAAYyC,KAAtB;AACH;AAED;AACD;AACA;AACA;AACA;AACA;AACA;;;AACC,eAASC,QAAT,CAAkB1C,GAAlB,EAAuB;AACnB,eAAOA,GAAG,KAAKV,MAAM,CAACU,GAAD,CAArB;AACH;AAED;AACD;AACA;AACA;AACA;AACA;AACA;;;AACC,eAASmB,UAAT,CAAoBnB,GAApB,EAAyB;AACrB,eAAOA,GAAG,YAAY2C,QAAtB;AACH;AAED;AACD;AACA;AACA;AACA;AACA;AACA;;;AACC,eAASzB,QAAT,CAAkBlB,GAAlB,EAAuB;AACnB,eA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","sourcesContent":["/*!\n * tui-code-snippet.js\n * @version 1.5.2\n * @author NHN. FE Development Lab <dl_javascript@nhn.com>\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"util\"] = factory();\n\telse\n\t\troot[\"tui\"] = root[\"tui\"] || {}, root[\"tui\"][\"util\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"dist\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\t/**\n\t * @fileoverview\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t * @namespace tui.util\n\t * @example\n\t * // node, commonjs\n\t * var util = require('tui-code-snippet');\n\t * @example\n\t * // distribution file, script\n\t * <script src='path-to/tui-code-snippt.js'></script>\n\t * <script>\n\t * var util = tui.util;\n\t * <script>\n\t */\n\tvar util = {};\n\tvar object = __webpack_require__(1);\n\tvar extend = object.extend;\n\n\textend(util, object);\n\textend(util, __webpack_require__(3));\n\textend(util, __webpack_require__(2));\n\textend(util, __webpack_require__(4));\n\textend(util, __webpack_require__(5));\n\textend(util, __webpack_require__(6));\n\textend(util, __webpack_require__(7));\n\textend(util, __webpack_require__(8));\n\textend(util, __webpack_require__(9));\n\n\tutil.browser = __webpack_require__(10);\n\tutil.popup = __webpack_require__(11);\n\tutil.formatDate = __webpack_require__(12);\n\tutil.defineClass = __webpack_require__(13);\n\tutil.defineModule = __webpack_require__(14);\n\tutil.defineNamespace = __webpack_require__(15);\n\tutil.CustomEvents = __webpack_require__(16);\n\tutil.Enum = __webpack_require__(17);\n\tutil.ExMap = __webpack_require__(18);\n\tutil.HashMap = __webpack_require__(20);\n\tutil.Map = __webpack_require__(19);\n\n\tmodule.exports = util;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview This module has some functions for handling a plain object, json.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar type = __webpack_require__(2);\n\tvar array = __webpack_require__(3);\n\n\t/**\n\t * The last id of stamp\n\t * @type {number}\n\t * @private\n\t */\n\tvar lastId = 0;\n\n\t/**\n\t * Extend the target object from other objects.\n\t * @param {object} target - Object that will be extended\n\t * @param {...object} objects - Objects as sources\n\t * @returns {object} Extended object\n\t * @memberof tui.util\n\t */\n\tfunction extend(target, objects) { // eslint-disable-line no-unused-vars\n\t var hasOwnProp = Object.prototype.hasOwnProperty;\n\t var source, prop, i, len;\n\n\t for (i = 1, len = arguments.length; i < len; i += 1) {\n\t source = arguments[i];\n\t for (prop in source) {\n\t if (hasOwnProp.call(source, prop)) {\n\t target[prop] = source[prop];\n\t }\n\t }\n\t }\n\n\t return target;\n\t}\n\n\t/**\n\t * Assign a unique id to an object\n\t * @param {object} obj - Object that will be assigned id.\n\t * @returns {number} Stamped id\n\t * @memberof tui.util\n\t */\n\tfunction stamp(obj) {\n\t if (!obj.__fe_id) {\n\t lastId += 1;\n\t obj.__fe_id = lastId; // eslint-disable-line camelcase\n\t }\n\n\t return obj.__fe_id;\n\t}\n\n\t/**\n\t * Verify whether an object has a stamped id or not.\n\t * @param {object} obj - adjusted object\n\t * @returns {boolean}\n\t * @memberof tui.util\n\t */\n\tfunction hasStamp(obj) {\n\t return type.isExisty(pick(obj, '__fe_id'));\n\t}\n\n\t/**\n\t * Reset the last id of stamp\n\t * @private\n\t */\n\tfunction resetLastId() {\n\t lastId = 0;\n\t}\n\n\t/**\n\t * Return a key-list(array) of a given object\n\t * @param {object} obj - Object from which a key-list will be extracted\n\t * @returns {Array} A key-list(array)\n\t * @memberof tui.util\n\t */\n\tfunction keys(obj) {\n\t var keyArray = [];\n\t var key;\n\n\t for (key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t keyArray.push(key);\n\t }\n\t }\n\n\t return keyArray;\n\t}\n\n\t/**\n\t * Return the equality for multiple objects(jsonObjects).<br>\n\t * See {@link http://stackoverflow.com/questions/1068834/object-comparison-in-javascript}\n\t * @param {...object} object - Multiple objects for comparing.\n\t * @returns {boolean} Equality\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var jsonObj1 = {name:'milk', price: 1000};\n\t * var jsonObj2 = {name:'milk', price: 1000};\n\t * var jsonObj3 = {name:'milk', price: 1000};\n\t * util.compareJSON(jsonObj1, jsonObj2, jsonObj3); // true\n\t *\n\t * var jsonObj4 = {name:'milk', price: 1000};\n\t * var jsonObj5 = {name:'beer', price: 3000};\n\t * util.compareJSON(jsonObj4, jsonObj5); // false\n\t */\n\tfunction compareJSON(object) {\n\t var argsLen = arguments.length;\n\t var i = 1;\n\n\t if (argsLen < 1) {\n\t return true;\n\t }\n\n\t for (; i < argsLen; i += 1) {\n\t if (!isSameObject(object, arguments[i])) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t}\n\n\t/**\n\t * @param {*} x - object to compare\n\t * @param {*} y - object to compare\n\t * @returns {boolean} - whether object x and y is same or not\n\t * @private\n\t */\n\tfunction isSameObject(x, y) { // eslint-disable-line complexity\n\t var leftChain = [];\n\t var rightChain = [];\n\t var p;\n\n\t // remember that NaN === NaN returns false\n\t // and isNaN(undefined) returns true\n\t if (isNaN(x) &&\n\t isNaN(y) &&\n\t type.isNumber(x) &&\n\t type.isNumber(y)) {\n\t return true;\n\t }\n\n\t // Compare primitives and functions.\n\t // Check if both arguments link to the same object.\n\t // Especially useful on step when comparing prototypes\n\t if (x === y) {\n\t return true;\n\t }\n\n\t // Works in case when functions are created in constructor.\n\t // Comparing dates is a common scenario. Another built-ins?\n\t // We can even handle functions passed across iframes\n\t if ((type.isFunction(x) && type.isFunction(y)) ||\n\t (x instanceof Date && y instanceof Date) ||\n\t (x instanceof RegExp && y instanceof RegExp) ||\n\t (x instanceof String && y instanceof String) ||\n\t (x instanceof Number && y instanceof Number)) {\n\t return x.toString() === y.toString();\n\t }\n\n\t // At last checking prototypes as good a we can\n\t if (!(x instanceof Object && y instanceof Object)) {\n\t return false;\n\t }\n\n\t if (x.isPrototypeOf(y) ||\n\t y.isPrototypeOf(x) ||\n\t x.constructor !== y.constructor ||\n\t x.prototype !== y.prototype) {\n\t return false;\n\t }\n\n\t // check for infinitive linking loops\n\t if (array.inArray(x, leftChain) > -1 ||\n\t array.inArray(y, rightChain) > -1) {\n\t return false;\n\t }\n\n\t // Quick checking of one object beeing a subset of another.\n\t for (p in y) {\n\t if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n\t return false;\n\t } else if (typeof y[p] !== typeof x[p]) {\n\t return false;\n\t }\n\t }\n\n\t // This for loop executes comparing with hasOwnProperty() and typeof for each property in 'x' object,\n\t // and verifying equality for x[property] and y[property].\n\t for (p in x) {\n\t if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n\t return false;\n\t } else if (typeof y[p] !== typeof x[p]) {\n\t return false;\n\t }\n\n\t if (typeof (x[p]) === 'object' || typeof (x[p]) === 'function') {\n\t leftChain.push(x);\n\t rightChain.push(y);\n\n\t if (!isSameObject(x[p], y[p])) {\n\t return false;\n\t }\n\n\t leftChain.pop();\n\t rightChain.pop();\n\t } else if (x[p] !== y[p]) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t}\n\t/* eslint-enable complexity */\n\n\t/**\n\t * Retrieve a nested item from the given object/array\n\t * @param {object|Array} obj - Object for retrieving\n\t * @param {...string|number} paths - Paths of property\n\t * @returns {*} Value\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var obj = {\n\t * 'key1': 1,\n\t * 'nested' : {\n\t * 'key1': 11,\n\t * 'nested': {\n\t * 'key1': 21\n\t * }\n\t * }\n\t * };\n\t * util.pick(obj, 'nested', 'nested', 'key1'); // 21\n\t * util.pick(obj, 'nested', 'nested', 'key2'); // undefined\n\t *\n\t * var arr = ['a', 'b', 'c'];\n\t * util.pick(arr, 1); // 'b'\n\t */\n\tfunction pick(obj, paths) { // eslint-disable-line no-unused-vars\n\t var args = arguments;\n\t var target = args[0];\n\t var i = 1;\n\t var length = args.length;\n\n\t for (; i < length; i += 1) {\n\t if (type.isUndefined(target) ||\n\t type.isNull(target)) {\n\t return;\n\t }\n\n\t target = target[args[i]];\n\t }\n\n\t return target; // eslint-disable-line consistent-return\n\t}\n\n\tmodule.exports = {\n\t extend: extend,\n\t stamp: stamp,\n\t hasStamp: hasStamp,\n\t resetLastId: resetLastId,\n\t keys: Object.prototype.keys || keys,\n\t compareJSON: compareJSON,\n\t pick: pick\n\t};\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * @fileoverview This module provides some functions to check the type of variable\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar toString = Object.prototype.toString;\n\n\t/**\n\t * Check whether the given variable is existing or not.<br>\n\t * If the given variable is not null and not undefined, returns true.\n\t * @param {*} param - Target for checking\n\t * @returns {boolean} Is existy?\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * util.isExisty(''); //true\n\t * util.isExisty(0); //true\n\t * util.isExisty([]); //true\n\t * util.isExisty({}); //true\n\t * util.isExisty(null); //false\n\t * util.isExisty(undefined); //false\n\t*/\n\tfunction isExisty(param) {\n\t return !isUndefined(param) && !isNull(param);\n\t}\n\n\t/**\n\t * Check whether the given variable is undefined or not.<br>\n\t * If the given variable is undefined, returns true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is undefined?\n\t * @memberof tui.util\n\t */\n\tfunction isUndefined(obj) {\n\t return obj === undefined; // eslint-disable-line no-undefined\n\t}\n\n\t/**\n\t * Check whether the given variable is null or not.<br>\n\t * If the given variable(arguments[0]) is null, returns true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is null?\n\t * @memberof tui.util\n\t */\n\tfunction isNull(obj) {\n\t return obj === null;\n\t}\n\n\t/**\n\t * Check whether the given variable is truthy or not.<br>\n\t * If the given variable is not null or not undefined or not false, returns true.<br>\n\t * (It regards 0 as true)\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is truthy?\n\t * @memberof tui.util\n\t */\n\tfunction isTruthy(obj) {\n\t return isExisty(obj) && obj !== false;\n\t}\n\n\t/**\n\t * Check whether the given variable is falsy or not.<br>\n\t * If the given variable is null or undefined or false, returns true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is falsy?\n\t * @memberof tui.util\n\t */\n\tfunction isFalsy(obj) {\n\t return !isTruthy(obj);\n\t}\n\n\t/**\n\t * Check whether the given variable is an arguments object or not.<br>\n\t * If the given variable is an arguments object, return true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is arguments?\n\t * @memberof tui.util\n\t */\n\tfunction isArguments(obj) {\n\t var result = isExisty(obj) &&\n\t ((toString.call(obj) === '[object Arguments]') || !!obj.callee);\n\n\t return result;\n\t}\n\n\t/**\n\t * Check whether the given variable is an instance of Array or not.<br>\n\t * If the given variable is an instance of Array, return true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is array instance?\n\t * @memberof tui.util\n\t */\n\tfunction isArray(obj) {\n\t return obj instanceof Array;\n\t}\n\n\t/**\n\t * Check whether the given variable is an object or not.<br>\n\t * If the given variable is an object, return true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is object?\n\t * @memberof tui.util\n\t */\n\tfunction isObject(obj) {\n\t return obj === Object(obj);\n\t}\n\n\t/**\n\t * Check whether the given variable is a function or not.<br>\n\t * If the given variable is a function, return true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is function?\n\t * @memberof tui.util\n\t */\n\tfunction isFunction(obj) {\n\t return obj instanceof Function;\n\t}\n\n\t/**\n\t * Check whether the given variable is a number or not.<br>\n\t * If the given variable is a number, return true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is number?\n\t * @memberof tui.util\n\t */\n\tfunction isNumber(obj) {\n\t return typeof obj === 'number' || obj instanceof Number;\n\t}\n\n\t/**\n\t * Check whether the given variable is a string or not.<br>\n\t * If the given variable is a string, return true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is string?\n\t * @memberof tui.util\n\t */\n\tfunction isString(obj) {\n\t return typeof obj === 'string' || obj instanceof String;\n\t}\n\n\t/**\n\t * Check whether the given variable is a boolean or not.<br>\n\t * If the given variable is a boolean, return true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is boolean?\n\t * @memberof tui.util\n\t */\n\tfunction isBoolean(obj) {\n\t return typeof obj === 'boolean' || obj instanceof Boolean;\n\t}\n\n\t/**\n\t * Check whether the given variable is an instance of Array or not.<br>\n\t * If the given variable is an instance of Array, return true.<br>\n\t * (It is used for multiple frame environments)\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is an instance of array?\n\t * @memberof tui.util\n\t */\n\tfunction isArraySafe(obj) {\n\t return toString.call(obj) === '[object Array]';\n\t}\n\n\t/**\n\t * Check whether the given variable is a function or not.<br>\n\t * If the given variable is a function, return true.<br>\n\t * (It is used for multiple frame environments)\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is a function?\n\t * @memberof tui.util\n\t */\n\tfunction isFunctionSafe(obj) {\n\t return toString.call(obj) === '[object Function]';\n\t}\n\n\t/**\n\t * Check whether the given variable is a number or not.<br>\n\t * If the given variable is a number, return true.<br>\n\t * (It is used for multiple frame environments)\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is a number?\n\t * @memberof tui.util\n\t */\n\tfunction isNumberSafe(obj) {\n\t return toString.call(obj) === '[object Number]';\n\t}\n\n\t/**\n\t * Check whether the given variable is a string or not.<br>\n\t * If the given variable is a string, return true.<br>\n\t * (It is used for multiple frame environments)\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is a string?\n\t * @memberof tui.util\n\t */\n\tfunction isStringSafe(obj) {\n\t return toString.call(obj) === '[object String]';\n\t}\n\n\t/**\n\t * Check whether the given variable is a boolean or not.<br>\n\t * If the given variable is a boolean, return true.<br>\n\t * (It is used for multiple frame environments)\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is a boolean?\n\t * @memberof tui.util\n\t */\n\tfunction isBooleanSafe(obj) {\n\t return toString.call(obj) === '[object Boolean]';\n\t}\n\n\t/**\n\t * Check whether the given variable is a instance of HTMLNode or not.<br>\n\t * If the given variables is a instance of HTMLNode, return true.\n\t * @param {*} html - Target for checking\n\t * @returns {boolean} Is HTMLNode ?\n\t * @memberof tui.util\n\t */\n\tfunction isHTMLNode(html) {\n\t if (typeof HTMLElement === 'object') {\n\t return (html && (html instanceof HTMLElement || !!html.nodeType));\n\t }\n\n\t return !!(html && html.nodeType);\n\t}\n\n\t/**\n\t * Check whether the given variable is a HTML tag or not.<br>\n\t * If the given variables is a HTML tag, return true.\n\t * @param {*} html - Target for checking\n\t * @returns {Boolean} Is HTML tag?\n\t * @memberof tui.util\n\t */\n\tfunction isHTMLTag(html) {\n\t if (typeof HTMLElement === 'object') {\n\t return (html && (html instanceof HTMLElement));\n\t }\n\n\t return !!(html && html.nodeType && html.nodeType === 1);\n\t}\n\n\t/**\n\t * Check whether the given variable is empty(null, undefined, or empty array, empty object) or not.<br>\n\t * If the given variables is empty, return true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is empty?\n\t * @memberof tui.util\n\t */\n\tfunction isEmpty(obj) {\n\t if (!isExisty(obj) || _isEmptyString(obj)) {\n\t return true;\n\t }\n\n\t if (isArray(obj) || isArguments(obj)) {\n\t return obj.length === 0;\n\t }\n\n\t if (isObject(obj) && !isFunction(obj)) {\n\t return !_hasOwnProperty(obj);\n\t }\n\n\t return true;\n\t}\n\n\t/**\n\t * Check whether given argument is empty string\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} whether given argument is empty string\n\t * @memberof tui.util\n\t * @private\n\t */\n\tfunction _isEmptyString(obj) {\n\t return isString(obj) && obj === '';\n\t}\n\n\t/**\n\t * Check whether given argument has own property\n\t * @param {Object} obj - Target for checking\n\t * @returns {boolean} - whether given argument has own property\n\t * @memberof tui.util\n\t * @private\n\t */\n\tfunction _hasOwnProperty(obj) {\n\t var key;\n\t for (key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t return true;\n\t }\n\t }\n\n\t return false;\n\t}\n\n\t/**\n\t * Check whether the given variable is not empty\n\t * (not null, not undefined, or not empty array, not empty object) or not.<br>\n\t * If the given variables is not empty, return true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is not empty?\n\t * @memberof tui.util\n\t */\n\tfunction isNotEmpty(obj) {\n\t return !isEmpty(obj);\n\t}\n\n\t/**\n\t * Check whether the given variable is an instance of Date or not.<br>\n\t * If the given variables is an instance of Date, return true.\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is an instance of Date?\n\t * @memberof tui.util\n\t */\n\tfunction isDate(obj) {\n\t return obj instanceof Date;\n\t}\n\n\t/**\n\t * Check whether the given variable is an instance of Date or not.<br>\n\t * If the given variables is an instance of Date, return true.<br>\n\t * (It is used for multiple frame environments)\n\t * @param {*} obj - Target for checking\n\t * @returns {boolean} Is an instance of Date?\n\t * @memberof tui.util\n\t */\n\tfunction isDateSafe(obj) {\n\t return toString.call(obj) === '[object Date]';\n\t}\n\n\tmodule.exports = {\n\t isExisty: isExisty,\n\t isUndefined: isUndefined,\n\t isNull: isNull,\n\t isTruthy: isTruthy,\n\t isFalsy: isFalsy,\n\t isArguments: isArguments,\n\t isArray: isArray,\n\t isArraySafe: isArraySafe,\n\t isObject: isObject,\n\t isFunction: isFunction,\n\t isFunctionSafe: isFunctionSafe,\n\t isNumber: isNumber,\n\t isNumberSafe: isNumberSafe,\n\t isDate: isDate,\n\t isDateSafe: isDateSafe,\n\t isString: isString,\n\t isStringSafe: isStringSafe,\n\t isBoolean: isBoolean,\n\t isBooleanSafe: isBooleanSafe,\n\t isHTMLNode: isHTMLNode,\n\t isHTMLTag: isHTMLTag,\n\t isEmpty: isEmpty,\n\t isNotEmpty: isNotEmpty\n\t};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview This module has some functions for handling array.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar collection = __webpack_require__(4);\n\tvar type = __webpack_require__(2);\n\n\tvar aps = Array.prototype.slice;\n\tvar util;\n\n\t/**\n\t * Generate an integer Array containing an arithmetic progression.\n\t * @param {number} start - start index\n\t * @param {number} stop - stop index\n\t * @param {number} step - next visit index = current index + step\n\t * @returns {Array}\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * util.range(5); // [0, 1, 2, 3, 4]\n\t * util.range(1, 5); // [1,2,3,4]\n\t * util.range(2, 10, 2); // [2,4,6,8]\n\t * util.range(10, 2, -2); // [10,8,6,4]\n\t */\n\tvar range = function(start, stop, step) {\n\t var arr = [];\n\t var flag;\n\n\t if (type.isUndefined(stop)) {\n\t stop = start || 0;\n\t start = 0;\n\t }\n\n\t step = step || 1;\n\t flag = step < 0 ? -1 : 1;\n\t stop *= flag;\n\n\t for (; start * flag < stop; start += step) {\n\t arr.push(start);\n\t }\n\n\t return arr;\n\t};\n\n\t/* eslint-disable valid-jsdoc */\n\t/**\n\t * Zip together multiple lists into a single array\n\t * @param {...Array}\n\t * @returns {Array}\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var result = util.zip([1, 2, 3], ['a', 'b','c'], [true, false, true]);\n\t * console.log(result[0]); // [1, 'a', true]\n\t * console.log(result[1]); // [2, 'b', false]\n\t * console.log(result[2]); // [3, 'c', true]\n\t */\n\tvar zip = function() {/* eslint-enable valid-jsdoc */\n\t var arr2d = aps.call(arguments);\n\t var result = [];\n\n\t collection.forEach(arr2d, function(arr) {\n\t collection.forEach(arr, function(value, index) {\n\t if (!result[index]) {\n\t result[index] = [];\n\t }\n\t result[index].push(value);\n\t });\n\t });\n\n\t return result;\n\t};\n\n\t/**\n\t * Returns the first index at which a given element can be found in the array\n\t * from start index(default 0), or -1 if it is not present.<br>\n\t * It compares searchElement to elements of the Array using strict equality\n\t * (the same method used by the ===, or triple-equals, operator).\n\t * @param {*} searchElement Element to locate in the array\n\t * @param {Array} array Array that will be traversed.\n\t * @param {number} startIndex Start index in array for searching (default 0)\n\t * @returns {number} the First index at which a given element, or -1 if it is not present\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var arr = ['one', 'two', 'three', 'four'];\n\t * var idx1 = util.inArray('one', arr, 3); // -1\n\t * var idx2 = util.inArray('one', arr); // 0\n\t */\n\tvar inArray = function(searchElement, array, startIndex) {\n\t var i;\n\t var length;\n\t startIndex = startIndex || 0;\n\n\t if (!type.isArray(array)) {\n\t return -1;\n\t }\n\n\t if (Array.prototype.indexOf) {\n\t return Array.prototype.indexOf.call(array, searchElement, startIndex);\n\t }\n\n\t length = array.length;\n\t for (i = startIndex; startIndex >= 0 && i < length; i += 1) {\n\t if (array[i] === searchElement) {\n\t return i;\n\t }\n\t }\n\n\t return -1;\n\t};\n\n\tutil = {\n\t inArray: inArray,\n\t range: range,\n\t zip: zip\n\t};\n\n\tmodule.exports = util;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview This module has some functions for handling object as collection.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar type = __webpack_require__(2);\n\tvar object = __webpack_require__(1);\n\n\t/**\n\t * Execute the provided callback once for each element present\n\t * in the array(or Array-like object) in ascending order.<br>\n\t * If the callback function returns false, the loop will be stopped.<br>\n\t * Callback function(iteratee) is invoked with three arguments:\n\t * - The value of the element\n\t * - The index of the element\n\t * - The array(or Array-like object) being traversed\n\t * @param {Array} arr The array(or Array-like object) that will be traversed\n\t * @param {function} iteratee Callback function\n\t * @param {Object} [context] Context(this) of callback function\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var sum = 0;\n\t *\n\t * util.forEachArray([1,2,3], function(value){\n\t * sum += value;\n\t * });\n\t * alert(sum); // 6\n\t */\n\tfunction forEachArray(arr, iteratee, context) {\n\t var index = 0;\n\t var len = arr.length;\n\n\t context = context || null;\n\n\t for (; index < len; index += 1) {\n\t if (iteratee.call(context, arr[index], index, arr) === false) {\n\t break;\n\t }\n\t }\n\t}\n\n\t/**\n\t * Execute the provided callback once for each property of object which actually exist.<br>\n\t * If the callback function returns false, the loop will be stopped.<br>\n\t * Callback function(iteratee) is invoked with three arguments:\n\t * - The value of the property\n\t * - The name of the property\n\t * - The object being traversed\n\t * @param {Object} obj The object that will be traversed\n\t * @param {function} iteratee Callback function\n\t * @param {Object} [context] Context(this) of callback function\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var sum = 0;\n\t *\n\t * util.forEachOwnProperties({a:1,b:2,c:3}, function(value){\n\t * sum += value;\n\t * });\n\t * alert(sum); // 6\n\t **/\n\tfunction forEachOwnProperties(obj, iteratee, context) {\n\t var key;\n\n\t context = context || null;\n\n\t for (key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t if (iteratee.call(context, obj[key], key, obj) === false) {\n\t break;\n\t }\n\t }\n\t }\n\t}\n\n\t/**\n\t * Execute the provided callback once for each property of object(or element of array) which actually exist.<br>\n\t * If the object is Array-like object(ex-arguments object), It needs to transform to Array.(see 'ex2' of example).<br>\n\t * If the callback function returns false, the loop will be stopped.<br>\n\t * Callback function(iteratee) is invoked with three arguments:\n\t * - The value of the property(or The value of the element)\n\t * - The name of the property(or The index of the element)\n\t * - The object being traversed\n\t * @param {Object} obj The object that will be traversed\n\t * @param {function} iteratee Callback function\n\t * @param {Object} [context] Context(this) of callback function\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var sum = 0;\n\t *\n\t * util.forEach([1,2,3], function(value){\n\t * sum += value;\n\t * });\n\t * alert(sum); // 6\n\t *\n\t * // In case of Array-like object\n\t * var array = Array.prototype.slice.call(arrayLike); // change to array\n\t * util.forEach(array, function(value){\n\t * sum += value;\n\t * });\n\t */\n\tfunction forEach(obj, iteratee, context) {\n\t if (type.isArray(obj)) {\n\t forEachArray(obj, iteratee, context);\n\t } else {\n\t forEachOwnProperties(obj, iteratee, context);\n\t }\n\t}\n\n\t/**\n\t * Execute the provided callback function once for each element in an array, in order,\n\t * and constructs a new array from the results.<br>\n\t * If the object is Array-like object(ex-arguments object),\n\t * It needs to transform to Array.(see 'ex2' of forEach example)<br>\n\t * Callback function(iteratee) is invoked with three arguments:\n\t * - The value of the property(or The value of the element)\n\t * - The name of the property(or The index of the element)\n\t * - The object being traversed\n\t * @param {Object} obj The object that will be traversed\n\t * @param {function} iteratee Callback function\n\t * @param {Object} [context] Context(this) of callback function\n\t * @returns {Array} A new array composed of returned values from callback function\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var result = util.map([0,1,2,3], function(value) {\n\t * return value + 1;\n\t * });\n\t *\n\t * alert(result); // 1,2,3,4\n\t */\n\tfunction map(obj, iteratee, context) {\n\t var resultArray = [];\n\n\t context = context || null;\n\n\t forEach(obj, function() {\n\t resultArray.push(iteratee.apply(context, arguments));\n\t });\n\n\t return resultArray;\n\t}\n\n\t/**\n\t * Execute the callback function once for each element present in the array(or Array-like object or plain object).<br>\n\t * If the object is Array-like object(ex-arguments object),\n\t * It needs to transform to Array.(see 'ex2' of forEach example)<br>\n\t * Callback function(iteratee) is invoked with four arguments:\n\t * - The previousValue\n\t * - The currentValue\n\t * - The index\n\t * - The object being traversed\n\t * @param {Object} obj The object that will be traversed\n\t * @param {function} iteratee Callback function\n\t * @param {Object} [context] Context(this) of callback function\n\t * @returns {*} The result value\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var result = util.reduce([0,1,2,3], function(stored, value) {\n\t * return stored + value;\n\t * });\n\t *\n\t * alert(result); // 6\n\t */\n\tfunction reduce(obj, iteratee, context) {\n\t var index = 0;\n\t var keys, length, store;\n\n\t context = context || null;\n\n\t if (!type.isArray(obj)) {\n\t keys = object.keys(obj);\n\t length = keys.length;\n\t store = obj[keys[index += 1]];\n\t } else {\n\t length = obj.length;\n\t store = obj[index];\n\t }\n\n\t index += 1;\n\t for (; index < length; index += 1) {\n\t store = iteratee.call(context, store, obj[keys ? keys[index] : index]);\n\t }\n\n\t return store;\n\t}\n\n\t/**\n\t * Transform the Array-like object to Array.<br>\n\t * In low IE (below 8), Array.prototype.slice.call is not perfect. So, try-catch statement is used.\n\t * @param {*} arrayLike Array-like object\n\t * @returns {Array} Array\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var arrayLike = {\n\t * 0: 'one',\n\t * 1: 'two',\n\t * 2: 'three',\n\t * 3: 'four',\n\t * length: 4\n\t * };\n\t * var result = util.toArray(arrayLike);\n\t *\n\t * alert(result instanceof Array); // true\n\t * alert(result); // one,two,three,four\n\t */\n\tfunction toArray(arrayLike) {\n\t var arr;\n\t try {\n\t arr = Array.prototype.slice.call(arrayLike);\n\t } catch (e) {\n\t arr = [];\n\t forEachArray(arrayLike, function(value) {\n\t arr.push(value);\n\t });\n\t }\n\n\t return arr;\n\t}\n\n\t/**\n\t * Create a new array or plain object with all elements(or properties)\n\t * that pass the test implemented by the provided function.<br>\n\t * Callback function(iteratee) is invoked with three arguments:\n\t * - The value of the property(or The value of the element)\n\t * - The name of the property(or The index of the element)\n\t * - The object being traversed\n\t * @param {Object} obj Object(plain object or Array) that will be traversed\n\t * @param {function} iteratee Callback function\n\t * @param {Object} [context] Context(this) of callback function\n\t * @returns {Object} plain object or Array\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var result1 = util.filter([0,1,2,3], function(value) {\n\t * return (value % 2 === 0);\n\t * });\n\t * alert(result1); // [0, 2]\n\t *\n\t * var result2 = util.filter({a : 1, b: 2, c: 3}, function(value) {\n\t * return (value % 2 !== 0);\n\t * });\n\t * alert(result2.a); // 1\n\t * alert(result2.b); // undefined\n\t * alert(result2.c); // 3\n\t */\n\tfunction filter(obj, iteratee, context) {\n\t var result, add;\n\n\t context = context || null;\n\n\t if (!type.isObject(obj) || !type.isFunction(iteratee)) {\n\t throw new Error('wrong parameter');\n\t }\n\n\t if (type.isArray(obj)) {\n\t result = [];\n\t add = function(subResult, args) {\n\t subResult.push(args[0]);\n\t };\n\t } else {\n\t result = {};\n\t add = function(subResult, args) {\n\t subResult[args[1]] = args[0];\n\t };\n\t }\n\n\t forEach(obj, function() {\n\t if (iteratee.apply(context, arguments)) {\n\t add(result, arguments);\n\t }\n\t }, context);\n\n\t return result;\n\t}\n\n\t/**\n\t * fetching a property\n\t * @param {Array} arr target collection\n\t * @param {String|Number} property property name\n\t * @returns {Array}\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var objArr = [\n\t * {'abc': 1, 'def': 2, 'ghi': 3},\n\t * {'abc': 4, 'def': 5, 'ghi': 6},\n\t * {'abc': 7, 'def': 8, 'ghi': 9}\n\t * ];\n\t * var arr2d = [\n\t * [1, 2, 3],\n\t * [4, 5, 6],\n\t * [7, 8, 9]\n\t * ];\n\t * util.pluck(objArr, 'abc'); // [1, 4, 7]\n\t * util.pluck(arr2d, 2); // [3, 6, 9]\n\t */\n\tfunction pluck(arr, property) {\n\t var result = map(arr, function(item) {\n\t return item[property];\n\t });\n\n\t return result;\n\t}\n\n\tmodule.exports = {\n\t forEachOwnProperties: forEachOwnProperties,\n\t forEachArray: forEachArray,\n\t forEach: forEach,\n\t toArray: toArray,\n\t map: map,\n\t reduce: reduce,\n\t filter: filter,\n\t pluck: pluck\n\t};\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * @fileoverview This module provides a bind() function for context binding.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\t/**\n\t * Create a new function that, when called, has its this keyword set to the provided value.\n\t * @param {function} fn A original function before binding\n\t * @param {*} obj context of function in arguments[0]\n\t * @returns {function()} A new bound function with context that is in arguments[1]\n\t * @memberof tui.util\n\t */\n\tfunction bind(fn, obj) {\n\t var slice = Array.prototype.slice;\n\t var args;\n\n\t if (fn.bind) {\n\t return fn.bind.apply(fn, slice.call(arguments, 1));\n\t }\n\n\t /* istanbul ignore next */\n\t args = slice.call(arguments, 2);\n\n\t /* istanbul ignore next */\n\t return function() {\n\t /* istanbul ignore next */\n\t return fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\n\t };\n\t}\n\n\tmodule.exports = {\n\t bind: bind\n\t};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * @fileoverview This module provides some simple function for inheritance.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\t/**\n\t * Create a new object with the specified prototype object and properties.\n\t * @param {Object} obj This object will be a prototype of the newly-created object.\n\t * @returns {Object}\n\t * @memberof tui.util\n\t */\n\tfunction createObject(obj) {\n\t function F() {} // eslint-disable-line require-jsdoc\n\t F.prototype = obj;\n\n\t return new F();\n\t}\n\n\t/**\n\t * Provide a simple inheritance in prototype-oriented.<br>\n\t * Caution :\n\t * Don't overwrite the prototype of child constructor.\n\t *\n\t * @param {function} subType Child constructor\n\t * @param {function} superType Parent constructor\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * // Parent constructor\n\t * function Animal(leg) {\n\t * this.leg = leg;\n\t * }\n\t * Animal.prototype.growl = function() {\n\t * // ...\n\t * };\n\t *\n\t * // Child constructor\n\t * function Person(name) {\n\t * this.name = name;\n\t * }\n\t *\n\t * // Inheritance\n\t * util.inherit(Person, Animal);\n\t *\n\t * // After this inheritance, please use only the extending of property.\n\t * // Do not overwrite prototype.\n\t * Person.prototype.walk = function(direction) {\n\t * // ...\n\t * };\n\t */\n\tfunction inherit(subType, superType) {\n\t var prototype = createObject(superType.prototype);\n\t prototype.constructor = subType;\n\t subType.prototype = prototype;\n\t}\n\n\tmodule.exports = {\n\t createObject: createObject,\n\t inherit: inherit\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview This module has some functions for handling the string.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar collection = __webpack_require__(4);\n\tvar object = __webpack_require__(1);\n\t/**\n\t * Transform the given HTML Entity string into plain string\n\t * @param {String} htmlEntity - HTML Entity type string\n\t * @returns {String} Plain string\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var htmlEntityString = \"A 'quote' is <b>bold</b>\"\n\t * var result = util.decodeHTMLEntity(htmlEntityString); //\"A 'quote' is <b>bold</b>\"\n\t */\n\tfunction decodeHTMLEntity(htmlEntity) {\n\t var entities = {\n\t '"': '\"',\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t ''': '\\'',\n\t ' ': ' '\n\t };\n\n\t return htmlEntity.replace(/&|<|>|"|'| /g, function(m0) {\n\t return entities[m0] ? entities[m0] : m0;\n\t });\n\t}\n\n\t/**\n\t * Transform the given string into HTML Entity string\n\t * @param {String} html - String for encoding\n\t * @returns {String} HTML Entity\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var htmlEntityString = \"<script> alert('test');</script><a href='test'>\";\n\t * var result = util.encodeHTMLEntity(htmlEntityString);\n\t * //\"<script> alert('test');</script><a href='test'>\"\n\t */\n\tfunction encodeHTMLEntity(html) {\n\t var entities = {\n\t '\"': 'quot',\n\t '&': 'amp',\n\t '<': 'lt',\n\t '>': 'gt',\n\t '\\'': '#39'\n\t };\n\n\t return html.replace(/[<>&\"']/g, function(m0) {\n\t return entities[m0] ? '&' + entities[m0] + ';' : m0;\n\t });\n\t}\n\n\t/**\n\t * Return whether the string capable to transform into plain string is in the given string or not.\n\t * @param {String} string - test string\n\t * @memberof tui.util\n\t * @returns {boolean}\n\t */\n\tfunction hasEncodableString(string) {\n\t return (/[<>&\"']/).test(string);\n\t}\n\n\t/**\n\t * Return duplicate charters\n\t * @param {string} operandStr1 The operand string\n\t * @param {string} operandStr2 The operand string\n\t * @private\n\t * @memberof tui.util\n\t * @returns {string}\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * util.getDuplicatedChar('fe dev', 'nhn entertainment'); // 'e'\n\t * util.getDuplicatedChar('fdsa', 'asdf'); // 'asdf'\n\t */\n\tfunction getDuplicatedChar(operandStr1, operandStr2) {\n\t var i = 0;\n\t var len = operandStr1.length;\n\t var pool = {};\n\t var dupl, key;\n\n\t for (; i < len; i += 1) {\n\t key = operandStr1.charAt(i);\n\t pool[key] = 1;\n\t }\n\n\t for (i = 0, len = operandStr2.length; i < len; i += 1) {\n\t key = operandStr2.charAt(i);\n\t if (pool[key]) {\n\t pool[key] += 1;\n\t }\n\t }\n\n\t pool = collection.filter(pool, function(item) {\n\t return item > 1;\n\t });\n\n\t pool = object.keys(pool).sort();\n\t dupl = pool.join('');\n\n\t return dupl;\n\t}\n\n\tmodule.exports = {\n\t decodeHTMLEntity: decodeHTMLEntity,\n\t encodeHTMLEntity: encodeHTMLEntity,\n\t hasEncodableString: hasEncodableString,\n\t getDuplicatedChar: getDuplicatedChar\n\t};\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * @fileoverview collections of some technic methods.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript.nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar tricks = {};\n\tvar aps = Array.prototype.slice;\n\n\t/**\n\t * Creates a debounced function that delays invoking fn until after delay milliseconds has elapsed\n\t * since the last time the debouced function was invoked.\n\t * @param {function} fn The function to debounce.\n\t * @param {number} [delay=0] The number of milliseconds to delay\n\t * @memberof tui.util\n\t * @returns {function} debounced function.\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * function someMethodToInvokeDebounced() {}\n\t *\n\t * var debounced = util.debounce(someMethodToInvokeDebounced, 300);\n\t *\n\t * // invoke repeatedly\n\t * debounced();\n\t * debounced();\n\t * debounced();\n\t * debounced();\n\t * debounced();\n\t * debounced(); // last invoke of debounced()\n\t *\n\t * // invoke someMethodToInvokeDebounced() after 300 milliseconds.\n\t */\n\tfunction debounce(fn, delay) {\n\t var timer, args;\n\n\t /* istanbul ignore next */\n\t delay = delay || 0;\n\n\t function debounced() { // eslint-disable-line require-jsdoc\n\t args = aps.call(arguments);\n\n\t window.clearTimeout(timer);\n\t timer = window.setTimeout(function() {\n\t fn.apply(null, args);\n\t }, delay);\n\t }\n\n\t return debounced;\n\t}\n\n\t/**\n\t * return timestamp\n\t * @memberof tui.util\n\t * @returns {number} The number of milliseconds from Jan. 1970 00:00:00 (GMT)\n\t */\n\tfunction timestamp() {\n\t return Number(new Date());\n\t}\n\n\t/**\n\t * Creates a throttled function that only invokes fn at most once per every interval milliseconds.\n\t *\n\t * You can use this throttle short time repeatedly invoking functions. (e.g MouseMove, Resize ...)\n\t *\n\t * if you need reuse throttled method. you must remove slugs (e.g. flag variable) related with throttling.\n\t * @param {function} fn function to throttle\n\t * @param {number} [interval=0] the number of milliseconds to throttle invocations to.\n\t * @memberof tui.util\n\t * @returns {function} throttled function\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * function someMethodToInvokeThrottled() {}\n\t *\n\t * var throttled = util.throttle(someMethodToInvokeThrottled, 300);\n\t *\n\t * // invoke repeatedly\n\t * throttled(); // invoke (leading)\n\t * throttled();\n\t * throttled(); // invoke (near 300 milliseconds)\n\t * throttled();\n\t * throttled();\n\t * throttled(); // invoke (near 600 milliseconds)\n\t * // ...\n\t * // invoke (trailing)\n\t *\n\t * // if you need reuse throttled method. then invoke reset()\n\t * throttled.reset();\n\t */\n\tfunction throttle(fn, interval) {\n\t var base;\n\t var isLeading = true;\n\t var tick = function(_args) {\n\t fn.apply(null, _args);\n\t base = null;\n\t };\n\t var debounced, stamp, args;\n\n\t /* istanbul ignore next */\n\t interval = interval || 0;\n\n\t debounced = tricks.debounce(tick, interval);\n\n\t function throttled() { // eslint-disable-line require-jsdoc\n\t args = aps.call(arguments);\n\n\t if (isLeading) {\n\t tick(args);\n\t isLeading = false;\n\n\t return;\n\t }\n\n\t stamp = tricks.timestamp();\n\n\t base = base || stamp;\n\n\t // pass array directly because `debounce()`, `tick()` are already use\n\t // `apply()` method to invoke developer's `fn` handler.\n\t //\n\t // also, this `debounced` line invoked every time for implements\n\t // `trailing` features.\n\t debounced(args);\n\n\t if ((stamp - base) >= interval) {\n\t tick(args);\n\t }\n\t }\n\n\t function reset() { // eslint-disable-line require-jsdoc\n\t isLeading = true;\n\t base = null;\n\t }\n\n\t throttled.reset = reset;\n\n\t return throttled;\n\t}\n\n\ttricks.timestamp = timestamp;\n\ttricks.debounce = debounce;\n\ttricks.throttle = throttle;\n\n\tmodule.exports = tricks;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview This module has some functions for handling object as collection.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\t'use strict';\n\n\tvar object = __webpack_require__(1);\n\tvar collection = __webpack_require__(4);\n\tvar type = __webpack_require__(2);\n\tvar ms7days = 7 * 24 * 60 * 60 * 1000;\n\n\t/**\n\t * Check if the date has passed 7 days\n\t * @param {number} date - milliseconds\n\t * @returns {boolean}\n\t * @ignore\n\t */\n\tfunction isExpired(date) {\n\t var now = new Date().getTime();\n\n\t return now - date > ms7days;\n\t}\n\n\t/**\n\t * Send hostname on DOMContentLoaded.\n\t * To prevent hostname set tui.usageStatistics to false.\n\t * @param {string} appName - application name\n\t * @param {string} trackingId - GA tracking ID\n\t * @ignore\n\t */\n\tfunction sendHostname(appName, trackingId) {\n\t var url = 'https://www.google-analytics.com/collect';\n\t var hostname = location.hostname;\n\t var hitType = 'event';\n\t var eventCategory = 'use';\n\t var applicationKeyForStorage = 'TOAST UI ' + appName + ' for ' + hostname + ': Statistics';\n\t var date = window.localStorage.getItem(applicationKeyForStorage);\n\n\t // skip if the flag is defined and is set to false explicitly\n\t if (!type.isUndefined(window.tui) && window.tui.usageStatistics === false) {\n\t return;\n\t }\n\n\t // skip if not pass seven days old\n\t if (date && !isExpired(date)) {\n\t return;\n\t }\n\n\t window.localStorage.setItem(applicationKeyForStorage, new Date().getTime());\n\n\t setTimeout(function() {\n\t if (document.readyState === 'interactive' || document.readyState === 'complete') {\n\t imagePing(url, {\n\t v: 1,\n\t t: hitType,\n\t tid: trackingId,\n\t cid: hostname,\n\t dp: hostname,\n\t dh: appName,\n\t el: appName,\n\t ec: eventCategory\n\t });\n\t }\n\t }, 1000);\n\t}\n\n\t/**\n\t * Request image ping.\n\t * @param {String} url url for ping request\n\t * @param {Object} trackingInfo infos for make query string\n\t * @returns {HTMLElement}\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * util.imagePing('https://www.google-analytics.com/collect', {\n\t * v: 1,\n\t * t: 'event',\n\t * tid: 'trackingid',\n\t * cid: 'cid',\n\t * dp: 'dp',\n\t * dh: 'dh'\n\t * });\n\t */\n\tfunction imagePing(url, trackingInfo) {\n\t var queryString = collection.map(object.keys(trackingInfo), function(key, index) {\n\t var startWith = index === 0 ? '' : '&';\n\n\t return startWith + key + '=' + trackingInfo[key];\n\t }).join('');\n\t var trackingElement = document.createElement('img');\n\n\t trackingElement.src = url + '?' + queryString;\n\n\t trackingElement.style.display = 'none';\n\t document.body.appendChild(trackingElement);\n\t document.body.removeChild(trackingElement);\n\n\t return trackingElement;\n\t}\n\n\tmodule.exports = {\n\t imagePing: imagePing,\n\t sendHostname: sendHostname\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * @fileoverview This module detects the kind of well-known browser and version.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\t/**\n\t * This object has an information that indicate the kind of browser.<br>\n\t * The list below is a detectable browser list.\n\t * - ie8 ~ ie11\n\t * - chrome\n\t * - firefox\n\t * - safari\n\t * - edge\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * util.browser.chrome === true; // chrome\n\t * util.browser.firefox === true; // firefox\n\t * util.browser.safari === true; // safari\n\t * util.browser.msie === true; // IE\n\t * util.browser.edge === true; // edge\n\t * util.browser.others === true; // other browser\n\t * util.browser.version; // browser version\n\t */\n\tvar browser = {\n\t chrome: false,\n\t firefox: false,\n\t safari: false,\n\t msie: false,\n\t edge: false,\n\t others: false,\n\t version: 0\n\t};\n\n\tif (window && window.navigator) {\n\t detectBrowser();\n\t}\n\n\t/**\n\t * Detect the browser.\n\t * @private\n\t */\n\tfunction detectBrowser() {\n\t var nav = window.navigator;\n\t var appName = nav.appName.replace(/\\s/g, '_');\n\t var userAgent = nav.userAgent;\n\n\t var rIE = /MSIE\\s([0-9]+[.0-9]*)/;\n\t var rIE11 = /Trident.*rv:11\\./;\n\t var rEdge = /Edge\\/(\\d+)\\./;\n\t var versionRegex = {\n\t firefox: /Firefox\\/(\\d+)\\./,\n\t chrome: /Chrome\\/(\\d+)\\./,\n\t safari: /Version\\/([\\d.]+).*Safari\\/(\\d+)/\n\t };\n\n\t var key, tmp;\n\n\t var detector = {\n\t Microsoft_Internet_Explorer: function() { // eslint-disable-line camelcase\n\t var detectedVersion = userAgent.match(rIE);\n\n\t if (detectedVersion) { // ie8 ~ ie10\n\t browser.msie = true;\n\t browser.version = parseFloat(detectedVersion[1]);\n\t } else { // no version information\n\t browser.others = true;\n\t }\n\t },\n\t Netscape: function() { // eslint-disable-line complexity\n\t var detected = false;\n\n\t if (rIE11.exec(userAgent)) {\n\t browser.msie = true;\n\t browser.version = 11;\n\t detected = true;\n\t } else if (rEdge.exec(userAgent)) {\n\t browser.edge = true;\n\t browser.version = userAgent.match(rEdge)[1];\n\t detected = true;\n\t } else {\n\t for (key in versionRegex) {\n\t if (versionRegex.hasOwnProperty(key)) {\n\t tmp = userAgent.match(versionRegex[key]);\n\t if (tmp && tmp.length > 1) { // eslint-disable-line max-depth\n\t browser[key] = detected = true;\n\t browser.version = parseFloat(tmp[1] || 0);\n\t break;\n\t }\n\t }\n\t }\n\t }\n\t if (!detected) {\n\t browser.others = true;\n\t }\n\t }\n\t };\n\n\t var fn = detector[appName];\n\n\t if (fn) {\n\t detector[appName]();\n\t }\n\t}\n\n\tmodule.exports = browser;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview This module has some methods for handling popup-window\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar collection = __webpack_require__(4);\n\tvar type = __webpack_require__(2);\n\tvar func = __webpack_require__(5);\n\tvar browser = __webpack_require__(10);\n\tvar object = __webpack_require__(1);\n\n\tvar popupId = 0;\n\n\t/**\n\t * Popup management class\n\t * @constructor\n\t * @memberof tui.util\n\t * @example\n\t * // node, commonjs\n\t * var popup = require('tui-code-snippet').popup;\n\t * @example\n\t * // distribution file, script\n\t * <script src='path-to/tui-code-snippt.js'></script>\n\t * <script>\n\t * var popup = tui.util.popup;\n\t * <script>\n\t */\n\tfunction Popup() {\n\t /**\n\t * Caching the window-contexts of opened popups\n\t * @type {Object}\n\t */\n\t this.openedPopup = {};\n\n\t /**\n\t * In IE7, an error occurs when the closeWithParent property attaches to window object.<br>\n\t * So, It is for saving the value of closeWithParent instead of attaching to window object.\n\t * @type {Object}\n\t */\n\t this.closeWithParentPopup = {};\n\n\t /**\n\t * Post data bridge for IE11 popup\n\t * @type {string}\n\t */\n\t this.postBridgeUrl = '';\n\t}\n\n\t/**********\n\t * public methods\n\t **********/\n\n\t/**\n\t * Returns a popup-list administered by current window.\n\t * @param {string} [key] The key of popup.\n\t * @returns {Object} popup window list object\n\t */\n\tPopup.prototype.getPopupList = function(key) {\n\t var target;\n\t if (type.isExisty(key)) {\n\t target = this.openedPopup[key];\n\t } else {\n\t target = this.openedPopup;\n\t }\n\n\t return target;\n\t};\n\n\t/**\n\t * Open popup\n\t * Caution:\n\t * In IE11, when transfer data to popup by POST, must set the postBridgeUrl.\n\t *\n\t * @param {string} url - popup url\n\t * @param {Object} options - popup options\n\t * @param {string} [options.popupName] - Key of popup window.<br>\n\t * If the key is set, when you try to open by this key, the popup of this key is focused.<br>\n\t * Or else a new popup window having this key is opened.\n\t *\n\t * @param {string} [options.popupOptionStr=\"\"] - Option string of popup window<br>\n\t * It is same with the third parameter of window.open() method.<br>\n\t * See {@link http://www.w3schools.com/jsref/met_win_open.asp}\n\t *\n\t * @param {boolean} [options.closeWithParent=true] - Is closed when parent window closed?\n\t *\n\t * @param {boolean} [options.useReload=false] - This property indicates whether reload the popup or not.<br>\n\t * If true, the popup will be reloaded when you try to re-open the popup that has been opened.<br>\n\t * When transmit the POST-data, some browsers alert a message for confirming whether retransmit or not.\n\t *\n\t * @param {string} [options.postBridgeUrl='']\n\t * Use this url to avoid a certain bug occuring when transmitting POST data to the popup in IE11.<br>\n\t * This specific buggy situation is known to happen because IE11 tries to open the requested url<br>\n\t * not in a new popup window as intended, but in a new tab.<br>\n\t * See {@link http://wiki.nhnent.com/pages/viewpage.action?pageId=240562844}\n\t *\n\t * @param {string} [options.method=get]\n\t * The method of transmission when the form-data is transmitted to popup-window.\n\t *\n\t * @param {Object} [options.param=null]\n\t * Using as parameters for transmission when the form-data is transmitted to popup-window.\n\t */\n\tPopup.prototype.openPopup = function(url, options) { // eslint-disable-line complexity\n\t var popup, formElement, useIEPostBridge;\n\n\t options = object.extend({\n\t popupName: 'popup_' + popupId + '_' + Number(new Date()),\n\t popupOptionStr: '',\n\t useReload: true,\n\t closeWithParent: true,\n\t method: 'get',\n\t param: {}\n\t }, options || {});\n\n\t options.method = options.method.toUpperCase();\n\n\t this.postBridgeUrl = options.postBridgeUrl || this.postBridgeUrl;\n\n\t useIEPostBridge = options.method === 'POST' && options.param &&\n\t browser.msie && browser.version === 11;\n\n\t if (!type.isExisty(url)) {\n\t throw new Error('Popup#open() need popup url.');\n\t }\n\n\t popupId += 1;\n\n\t /*\n\t * In form-data transmission\n\t * 1. Create a form before opening a popup.\n\t * 2. Transmit the form-data.\n\t * 3. Remove the form after transmission.\n\t */\n\t if (options.param) {\n\t if (options.method === 'GET') {\n\t url = url + (/\\?/.test(url) ? '&' : '?') + this._parameterize(options.param);\n\t } else if (options.method === 'POST') {\n\t if (!useIEPostBridge) {\n\t formElement = this.createForm(url, options.param, options.method, options.popupName);\n\t url = 'about:blank';\n\t }\n\t }\n\t }\n\n\t popup = this.openedPopup[options.popupName];\n\n\t if (!type.isExisty(popup)) {\n\t this.openedPopup[options.popupName] = popup = this._open(useIEPostBridge, options.param,\n\t url, options.popupName, options.popupOptionStr);\n\t } else if (popup.closed) {\n\t this.openedPopup[options.popupName] = popup = this._open(useIEPostBridge, options.param,\n\t url, options.popupName, options.popupOptionStr);\n\t } else {\n\t if (options.useReload) {\n\t popup.location.replace(url);\n\t }\n\t popup.focus();\n\t }\n\n\t this.closeWithParentPopup[options.popupName] = options.closeWithParent;\n\n\t if (!popup || popup.closed || type.isUndefined(popup.closed)) {\n\t alert('please enable popup windows for this website');\n\t }\n\n\t if (options.param && options.method === 'POST' && !useIEPostBridge) {\n\t if (popup) {\n\t formElement.submit();\n\t }\n\t if (formElement.parentNode) {\n\t formElement.parentNode.removeChild(formElement);\n\t }\n\t }\n\n\t window.onunload = func.bind(this.closeAllPopup, this);\n\t};\n\n\t/**\n\t * Close the popup\n\t * @param {boolean} [skipBeforeUnload] - If true, the 'window.onunload' will be null and skip unload event.\n\t * @param {Window} [popup] - Window-context of popup for closing. If omit this, current window-context will be closed.\n\t */\n\tPopup.prototype.close = function(skipBeforeUnload, popup) {\n\t var target = popup || window;\n\t skipBeforeUnload = type.isExisty(skipBeforeUnload) ? skipBeforeUnload : false;\n\n\t if (skipBeforeUnload) {\n\t window.onunload = null;\n\t }\n\n\t if (!target.closed) {\n\t target.opener = window.location.href;\n\t target.close();\n\t }\n\t};\n\n\t/**\n\t * Close all the popups in current window.\n\t * @param {boolean} closeWithParent - If true, popups having the closeWithParentPopup property as true will be closed.\n\t */\n\tPopup.prototype.closeAllPopup = function(closeWithParent) {\n\t var hasArg = type.isExisty(closeWithParent);\n\n\t collection.forEachOwnProperties(this.openedPopup, function(popup, key) {\n\t if ((hasArg && this.closeWithParentPopup[key]) || !hasArg) {\n\t this.close(false, popup);\n\t }\n\t }, this);\n\t};\n\n\t/**\n\t * Activate(or focus) the popup of the given name.\n\t * @param {string} popupName - Name of popup for activation\n\t */\n\tPopup.prototype.focus = function(popupName) {\n\t this.getPopupList(popupName).focus();\n\t};\n\n\t/**\n\t * Return an object made of parsing the query string.\n\t * @returns {Object} An object having some information of the query string.\n\t * @private\n\t */\n\tPopup.prototype.parseQuery = function() {\n\t var param = {};\n\t var search, pair;\n\n\t search = window.location.search.substr(1);\n\t collection.forEachArray(search.split('&'), function(part) {\n\t pair = part.split('=');\n\t param[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n\t });\n\n\t return param;\n\t};\n\n\t/**\n\t * Create a hidden form from the given arguments and return this form.\n\t * @param {string} action - URL for form transmission\n\t * @param {Object} [data] - Data for form transmission\n\t * @param {string} [method] - Method of transmission\n\t * @param {string} [target] - Target of transmission\n\t * @param {HTMLElement} [container] - Container element of form.\n\t * @returns {HTMLElement} Form element\n\t */\n\tPopup.prototype.createForm = function(action, data, method, target, container) {\n\t var form = document.createElement('form'),\n\t input;\n\n\t container = container || document.body;\n\n\t form.method = method || 'POST';\n\t form.action = action || '';\n\t form.target = target || '';\n\t form.style.display = 'none';\n\n\t collection.forEachOwnProperties(data, function(value, key) {\n\t input = document.createElement('input');\n\t input.name = key;\n\t input.type = 'hidden';\n\t input.value = value;\n\t form.appendChild(input);\n\t });\n\n\t container.appendChild(form);\n\n\t return form;\n\t};\n\n\t/**********\n\t * private methods\n\t **********/\n\n\t/**\n\t * Return an query string made by parsing the given object\n\t * @param {Object} obj - An object that has information for query string\n\t * @returns {string} - Query string\n\t * @private\n\t */\n\tPopup.prototype._parameterize = function(obj) {\n\t var query = [];\n\n\t collection.forEachOwnProperties(obj, function(value, key) {\n\t query.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n\t });\n\n\t return query.join('&');\n\t};\n\n\t/**\n\t * Open popup\n\t * @param {boolean} useIEPostBridge - A switch option whether to use alternative\n\t * of tossing POST data to the popup window in IE11\n\t * @param {Object} param - A data for tossing to popup\n\t * @param {string} url - Popup url\n\t * @param {string} popupName - Popup name\n\t * @param {string} optionStr - Setting for popup, ex) 'width=640,height=320,scrollbars=yes'\n\t * @returns {Window} Window context of popup\n\t * @private\n\t */\n\tPopup.prototype._open = function(useIEPostBridge, param, url, popupName, optionStr) {\n\t var popup;\n\n\t if (useIEPostBridge) {\n\t popup = window.open(this.postBridgeUrl, popupName, optionStr);\n\t setTimeout(function() {\n\t popup.redirect(url, param);\n\t }, 100);\n\t } else {\n\t popup = window.open(url, popupName, optionStr);\n\t }\n\n\t return popup;\n\t};\n\n\tmodule.exports = new Popup();\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview This module has a function for date format.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar type = __webpack_require__(2);\n\tvar object = __webpack_require__(1);\n\n\tvar tokens = /[\\\\]*YYYY|[\\\\]*YY|[\\\\]*MMMM|[\\\\]*MMM|[\\\\]*MM|[\\\\]*M|[\\\\]*DD|[\\\\]*D|[\\\\]*HH|[\\\\]*H|[\\\\]*A/gi;\n\tvar MONTH_STR = [\n\t 'Invalid month', 'January', 'February', 'March', 'April', 'May',\n\t 'June', 'July', 'August', 'September', 'October', 'November', 'December'\n\t];\n\tvar MONTH_DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\tvar replaceMap = {\n\t M: function(date) {\n\t return Number(date.month);\n\t },\n\t MM: function(date) {\n\t var month = date.month;\n\n\t return (Number(month) < 10) ? '0' + month : month;\n\t },\n\t MMM: function(date) {\n\t return MONTH_STR[Number(date.month)].substr(0, 3);\n\t },\n\t MMMM: function(date) {\n\t return MONTH_STR[Number(date.month)];\n\t },\n\t D: function(date) {\n\t return Number(date.date);\n\t },\n\t d: function(date) {\n\t return replaceMap.D(date); // eslint-disable-line new-cap\n\t },\n\t DD: function(date) {\n\t var dayInMonth = date.date;\n\n\t return (Number(dayInMonth) < 10) ? '0' + dayInMonth : dayInMonth;\n\t },\n\t dd: function(date) {\n\t return replaceMap.DD(date); // eslint-disable-line new-cap\n\t },\n\t YY: function(date) {\n\t return Number(date.year) % 100;\n\t },\n\t yy: function(date) {\n\t return replaceMap.YY(date); // eslint-disable-line new-cap\n\t },\n\t YYYY: function(date) {\n\t var prefix = '20',\n\t year = date.year;\n\t if (year > 69 && year < 100) {\n\t prefix = '19';\n\t }\n\n\t return (Number(year) < 100) ? prefix + String(year) : year;\n\t },\n\t yyyy: function(date) {\n\t return replaceMap.YYYY(date); // eslint-disable-line new-cap\n\t },\n\t A: function(date) {\n\t return date.meridiem;\n\t },\n\t a: function(date) {\n\t return date.meridiem;\n\t },\n\t hh: function(date) {\n\t var hour = date.hour;\n\n\t return (Number(hour) < 10) ? '0' + hour : hour;\n\t },\n\t HH: function(date) {\n\t return replaceMap.hh(date);\n\t },\n\t h: function(date) {\n\t return String(Number(date.hour));\n\t },\n\t H: function(date) {\n\t return replaceMap.h(date);\n\t },\n\t m: function(date) {\n\t return String(Number(date.minute));\n\t },\n\t mm: function(date) {\n\t var minute = date.minute;\n\n\t return (Number(minute) < 10) ? '0' + minute : minute;\n\t }\n\t};\n\n\t/**\n\t * Check whether the given variables are valid date or not.\n\t * @param {number} year - Year\n\t * @param {number} month - Month\n\t * @param {number} date - Day in month.\n\t * @returns {boolean} Is valid?\n\t * @private\n\t */\n\tfunction isValidDate(year, month, date) { // eslint-disable-line complexity\n\t var isValidYear, isValidMonth, isValid, lastDayInMonth;\n\n\t year = Number(year);\n\t month = Number(month);\n\t date = Number(date);\n\n\t isValidYear = (year > -1 && year < 100) || ((year > 1969) && (year < 2070));\n\t isValidMonth = (month > 0) && (month < 13);\n\n\t if (!isValidYear || !isValidMonth) {\n\t return false;\n\t }\n\n\t lastDayInMonth = MONTH_DAYS[month];\n\t if (month === 2 && year % 4 === 0) {\n\t if (year % 100 !== 0 || year % 400 === 0) {\n\t lastDayInMonth = 29;\n\t }\n\t }\n\n\t isValid = (date > 0) && (date <= lastDayInMonth);\n\n\t return isValid;\n\t}\n\n\t/**\n\t * Return a string that transformed from the given form and date.\n\t * @param {string} form - Date form\n\t * @param {Date|Object} date - Date object\n\t * @param {{meridiemSet: {AM: string, PM: string}}} option - Option\n\t * @returns {boolean|string} A transformed string or false.\n\t * @memberof tui.util\n\t * @example\n\t * // key | Shorthand\n\t * // --------------- |-----------------------\n\t * // years | YY / YYYY / yy / yyyy\n\t * // months(n) | M / MM\n\t * // months(str) | MMM / MMMM\n\t * // days | D / DD / d / dd\n\t * // hours | H / HH / h / hh\n\t * // minutes | m / mm\n\t * // meridiem(AM,PM) | A / a\n\t *\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var dateStr1 = util.formatDate('yyyy-MM-dd', {\n\t * year: 2014,\n\t * month: 12,\n\t * date: 12\n\t * });\n\t * alert(dateStr1); // '2014-12-12'\n\t *\n\t * var dateStr2 = util.formatDate('MMM DD YYYY HH:mm', {\n\t * year: 1999,\n\t * month: 9,\n\t * date: 9,\n\t * hour: 0,\n\t * minute: 2\n\t * });\n\t * alert(dateStr2); // 'Sep 09 1999 00:02'\n\t *\n\t * var dt = new Date(2010, 2, 13),\n\t * dateStr3 = util.formatDate('yyyy년 M월 dd일', dt);\n\t * alert(dateStr3); // '2010년 3월 13일'\n\t *\n\t * var option4 = {\n\t * meridiemSet: {\n\t * AM: '오전',\n\t * PM: '오후'\n\t * }\n\t * };\n\t * var date4 = {year: 1999, month: 9, date: 9, hour: 13, minute: 2};\n\t * var dateStr4 = util.formatDate('yyyy-MM-dd A hh:mm', date4, option4));\n\t * alert(dateStr4); // '1999-09-09 오후 01:02'\n\t */\n\tfunction formatDate(form, date, option) { // eslint-disable-line complexity\n\t var am = object.pick(option, 'meridiemSet', 'AM') || 'AM';\n\t var pm = object.pick(option, 'meridiemSet', 'PM') || 'PM';\n\t var meridiem, nDate, resultStr;\n\n\t if (type.isDate(date)) {\n\t nDate = {\n\t year: date.getFullYear(),\n\t month: date.getMonth() + 1,\n\t date: date.getDate(),\n\t hour: date.getHours(),\n\t minute: date.getMinutes()\n\t };\n\t } else {\n\t nDate = {\n\t year: date.year,\n\t month: date.month,\n\t date: date.date,\n\t hour: date.hour,\n\t minute: date.minute\n\t };\n\t }\n\n\t if (!isValidDate(nDate.year, nDate.month, nDate.date)) {\n\t return false;\n\t }\n\n\t nDate.meridiem = '';\n\t if (/([^\\\\]|^)[aA]\\b/.test(form)) {\n\t meridiem = (nDate.hour > 11) ? pm : am;\n\t if (nDate.hour > 12) { // See the clock system: https://en.wikipedia.org/wiki/12-hour_clock\n\t nDate.hour %= 12;\n\t }\n\t if (nDate.hour === 0) {\n\t nDate.hour = 12;\n\t }\n\t nDate.meridiem = meridiem;\n\t }\n\n\t resultStr = form.replace(tokens, function(key) {\n\t if (key.indexOf('\\\\') > -1) { // escape character\n\t return key.replace(/\\\\/, '');\n\t }\n\n\t return replaceMap[key](nDate) || '';\n\t });\n\n\t return resultStr;\n\t}\n\n\tmodule.exports = formatDate;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview\n\t * This module provides a function to make a constructor\n\t * that can inherit from the other constructors like the CLASS easily.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar inherit = __webpack_require__(6).inherit;\n\tvar extend = __webpack_require__(1).extend;\n\n\t/**\n\t * Help a constructor to be defined and to inherit from the other constructors\n\t * @param {*} [parent] Parent constructor\n\t * @param {Object} props Members of constructor\n\t * @param {Function} props.init Initialization method\n\t * @param {Object} [props.static] Static members of constructor\n\t * @returns {*} Constructor\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var Parent = util.defineClass({\n\t * init: function() { // constuructor\n\t * this.name = 'made by def';\n\t * },\n\t * method: function() {\n\t * // ...\n\t * },\n\t * static: {\n\t * staticMethod: function() {\n\t * // ...\n\t * }\n\t * }\n\t * });\n\t *\n\t * var Child = util.defineClass(Parent, {\n\t * childMethod: function() {}\n\t * });\n\t *\n\t * Parent.staticMethod();\n\t *\n\t * var parentInstance = new Parent();\n\t * console.log(parentInstance.name); //made by def\n\t * parentInstance.staticMethod(); // Error\n\t *\n\t * var childInstance = new Child();\n\t * childInstance.method();\n\t * childInstance.childMethod();\n\t */\n\tfunction defineClass(parent, props) {\n\t var obj;\n\n\t if (!props) {\n\t props = parent;\n\t parent = null;\n\t }\n\n\t obj = props.init || function() {};\n\n\t if (parent) {\n\t inherit(obj, parent);\n\t }\n\n\t if (props.hasOwnProperty('static')) {\n\t extend(obj, props['static']);\n\t delete props['static'];\n\t }\n\n\t extend(obj.prototype, props);\n\n\t return obj;\n\t}\n\n\tmodule.exports = defineClass;\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview Define module\n\t * @author NHN.\n\t * FE Development Lab <dl_javscript@nhn.com>\n\t * @dependency type.js, defineNamespace.js\n\t */\n\n\t'use strict';\n\n\tvar defineNamespace = __webpack_require__(15);\n\tvar type = __webpack_require__(2);\n\n\tvar INITIALIZATION_METHOD_NAME = 'initialize';\n\n\t/**\n\t * Define module\n\t * @param {string} namespace - Namespace of module\n\t * @param {Object} moduleDefinition - Object literal for module\n\t * @returns {Object} Defined module\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var myModule = util.defineModule('modules.myModule', {\n\t * name: 'john',\n\t * message: '',\n\t * initialize: function() {\n\t * this.message = 'hello world';\n\t * },\n\t * getMessage: function() {\n\t * return this.name + ': ' + this.message\n\t * }\n\t * });\n\t *\n\t * console.log(myModule.getMessage()); // 'john: hello world';\n\t */\n\tfunction defineModule(namespace, moduleDefinition) {\n\t var base = moduleDefinition || {};\n\n\t if (type.isFunction(base[INITIALIZATION_METHOD_NAME])) {\n\t base[INITIALIZATION_METHOD_NAME]();\n\t }\n\n\t return defineNamespace(namespace, base);\n\t}\n\n\tmodule.exports = defineModule;\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview Define namespace\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t * @dependency object.js, collection.js\n\t */\n\n\t'use strict';\n\n\tvar collection = __webpack_require__(4);\n\tvar object = __webpack_require__(1);\n\n\t/**\n\t * Define namespace\n\t * @param {string} namespace - Namespace (ex- 'foo.bar.baz')\n\t * @param {(object|function)} props - A set of modules or one module\n\t * @param {boolean} [isOverride] - Override the props to the namespace.<br>\n\t * (It removes previous properties of this namespace)\n\t * @returns {(object|function)} Defined namespace\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var util = require('tui-code-snippet'); // node, commonjs\n\t * var util = tui.util; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var neComp = util.defineNamespace;\n\t * neComp.listMenu = defineClass({\n\t * init: function() {\n\t * // ...\n\t * }\n\t * });\n\t */\n\tfunction defineNamespace(namespace, props, isOverride) {\n\t var names, result, prevLast, last;\n\n\t names = namespace.split('.');\n\t names.unshift(window);\n\n\t result = collection.reduce(names, function(obj, name) {\n\t obj[name] = obj[name] || {};\n\n\t return obj[name];\n\t });\n\n\t if (isOverride) {\n\t last = names.pop();\n\t prevLast = object.pick.apply(null, names);\n\t result = prevLast[last] = props;\n\t } else {\n\t object.extend(result, props);\n\t }\n\n\t return result;\n\t}\n\n\tmodule.exports = defineNamespace;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview\n\t * This module provides some functions for custom events.<br>\n\t * And it is implemented in the observer design pattern.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar collection = __webpack_require__(4);\n\tvar type = __webpack_require__(2);\n\tvar object = __webpack_require__(1);\n\n\tvar R_EVENTNAME_SPLIT = /\\s+/g;\n\n\t/**\n\t * A unit of event handler item.\n\t * @ignore\n\t * @typedef {object} HandlerItem\n\t * @property {function} fn - event handler\n\t * @property {object} ctx - context of event handler\n\t */\n\n\t/**\n\t * @class\n\t * @memberof tui.util\n\t * @example\n\t * // node, commonjs\n\t * var CustomEvents = require('tui-code-snippet').CustomEvents;\n\t * @example\n\t * // distribution file, script\n\t * <script src='path-to/tui-code-snippt.js'></script>\n\t * <script>\n\t * var CustomEvents = tui.util.CustomEvents;\n\t * </script>\n\t */\n\tfunction CustomEvents() {\n\t /**\n\t * @type {HandlerItem[]}\n\t */\n\t this.events = null;\n\n\t /**\n\t * only for checking specific context event was binded\n\t * @type {object[]}\n\t */\n\t this.contexts = null;\n\t}\n\n\t/**\n\t * Mixin custom events feature to specific constructor\n\t * @param {function} func - constructor\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var CustomEvents = require('tui-code-snippet').CustomEvents; // node, commonjs\n\t * var CustomEvents = tui.util.CustomEvents; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var model;\n\t * function Model() {\n\t * this.name = '';\n\t * }\n\t * CustomEvents.mixin(Model);\n\t *\n\t * model = new Model();\n\t * model.on('change', function() { this.name = 'model'; }, this);\n\t * model.fire('change');\n\t * alert(model.name); // 'model';\n\t */\n\tCustomEvents.mixin = function(func) {\n\t object.extend(func.prototype, CustomEvents.prototype);\n\t};\n\n\t/**\n\t * Get HandlerItem object\n\t * @param {function} handler - handler function\n\t * @param {object} [context] - context for handler\n\t * @returns {HandlerItem} HandlerItem object\n\t * @private\n\t */\n\tCustomEvents.prototype._getHandlerItem = function(handler, context) {\n\t var item = {handler: handler};\n\n\t if (context) {\n\t item.context = context;\n\t }\n\n\t return item;\n\t};\n\n\t/**\n\t * Get event object safely\n\t * @param {string} [eventName] - create sub event map if not exist.\n\t * @returns {(object|array)} event object. if you supplied `eventName`\n\t * parameter then make new array and return it\n\t * @private\n\t */\n\tCustomEvents.prototype._safeEvent = function(eventName) {\n\t var events = this.events;\n\t var byName;\n\n\t if (!events) {\n\t events = this.events = {};\n\t }\n\n\t if (eventName) {\n\t byName = events[eventName];\n\n\t if (!byName) {\n\t byName = [];\n\t events[eventName] = byName;\n\t }\n\n\t events = byName;\n\t }\n\n\t return events;\n\t};\n\n\t/**\n\t * Get context array safely\n\t * @returns {array} context array\n\t * @private\n\t */\n\tCustomEvents.prototype._safeContext = function() {\n\t var context = this.contexts;\n\n\t if (!context) {\n\t context = this.contexts = [];\n\t }\n\n\t return context;\n\t};\n\n\t/**\n\t * Get index of context\n\t * @param {object} ctx - context that used for bind custom event\n\t * @returns {number} index of context\n\t * @private\n\t */\n\tCustomEvents.prototype._indexOfContext = function(ctx) {\n\t var context = this._safeContext();\n\t var index = 0;\n\n\t while (context[index]) {\n\t if (ctx === context[index][0]) {\n\t return index;\n\t }\n\n\t index += 1;\n\t }\n\n\t return -1;\n\t};\n\n\t/**\n\t * Memorize supplied context for recognize supplied object is context or\n\t * name: handler pair object when off()\n\t * @param {object} ctx - context object to memorize\n\t * @private\n\t */\n\tCustomEvents.prototype._memorizeContext = function(ctx) {\n\t var context, index;\n\n\t if (!type.isExisty(ctx)) {\n\t return;\n\t }\n\n\t context = this._safeContext();\n\t index = this._indexOfContext(ctx);\n\n\t if (index > -1) {\n\t context[index][1] += 1;\n\t } else {\n\t context.push([ctx, 1]);\n\t }\n\t};\n\n\t/**\n\t * Forget supplied context object\n\t * @param {object} ctx - context object to forget\n\t * @private\n\t */\n\tCustomEvents.prototype._forgetContext = function(ctx) {\n\t var context, contextIndex;\n\n\t if (!type.isExisty(ctx)) {\n\t return;\n\t }\n\n\t context = this._safeContext();\n\t contextIndex = this._indexOfContext(ctx);\n\n\t if (contextIndex > -1) {\n\t context[contextIndex][1] -= 1;\n\n\t if (context[contextIndex][1] <= 0) {\n\t context.splice(contextIndex, 1);\n\t }\n\t }\n\t};\n\n\t/**\n\t * Bind event handler\n\t * @param {(string|{name:string, handler:function})} eventName - custom\n\t * event name or an object {eventName: handler}\n\t * @param {(function|object)} [handler] - handler function or context\n\t * @param {object} [context] - context for binding\n\t * @private\n\t */\n\tCustomEvents.prototype._bindEvent = function(eventName, handler, context) {\n\t var events = this._safeEvent(eventName);\n\t this._memorizeContext(context);\n\t events.push(this._getHandlerItem(handler, context));\n\t};\n\n\t/**\n\t * Bind event handlers\n\t * @param {(string|{name:string, handler:function})} eventName - custom\n\t * event name or an object {eventName: handler}\n\t * @param {(function|object)} [handler] - handler function or context\n\t * @param {object} [context] - context for binding\n\t * //-- #1. Get Module --//\n\t * var CustomEvents = require('tui-code-snippet').CustomEvents; // node, commonjs\n\t * var CustomEvents = tui.util.CustomEvents; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * // # 2.1 Basic Usage\n\t * CustomEvents.on('onload', handler);\n\t *\n\t * // # 2.2 With context\n\t * CustomEvents.on('onload', handler, myObj);\n\t *\n\t * // # 2.3 Bind by object that name, handler pairs\n\t * CustomEvents.on({\n\t * 'play': handler,\n\t * 'pause': handler2\n\t * });\n\t *\n\t * // # 2.4 Bind by object that name, handler pairs with context object\n\t * CustomEvents.on({\n\t * 'play': handler\n\t * }, myObj);\n\t */\n\tCustomEvents.prototype.on = function(eventName, handler, context) {\n\t var self = this;\n\n\t if (type.isString(eventName)) {\n\t // [syntax 1, 2]\n\t eventName = eventName.split(R_EVENTNAME_SPLIT);\n\t collection.forEach(eventName, function(name) {\n\t self._bindEvent(name, handler, context);\n\t });\n\t } else if (type.isObject(eventName)) {\n\t // [syntax 3, 4]\n\t context = handler;\n\t collection.forEach(eventName, function(func, name) {\n\t self.on(name, func, context);\n\t });\n\t }\n\t};\n\n\t/**\n\t * Bind one-shot event handlers\n\t * @param {(string|{name:string,handler:function})} eventName - custom\n\t * event name or an object {eventName: handler}\n\t * @param {function|object} [handler] - handler function or context\n\t * @param {object} [context] - context for binding\n\t */\n\tCustomEvents.prototype.once = function(eventName, handler, context) {\n\t var self = this;\n\n\t if (type.isObject(eventName)) {\n\t context = handler;\n\t collection.forEach(eventName, function(func, name) {\n\t self.once(name, func, context);\n\t });\n\n\t return;\n\t }\n\n\t function onceHandler() { // eslint-disable-line require-jsdoc\n\t handler.apply(context, arguments);\n\t self.off(eventName, onceHandler, context);\n\t }\n\n\t this.on(eventName, onceHandler, context);\n\t};\n\n\t/**\n\t * Splice supplied array by callback result\n\t * @param {array} arr - array to splice\n\t * @param {function} predicate - function return boolean\n\t * @private\n\t */\n\tCustomEvents.prototype._spliceMatches = function(arr, predicate) {\n\t var i = 0;\n\t var len;\n\n\t if (!type.isArray(arr)) {\n\t return;\n\t }\n\n\t for (len = arr.length; i < len; i += 1) {\n\t if (predicate(arr[i]) === true) {\n\t arr.splice(i, 1);\n\t len -= 1;\n\t i -= 1;\n\t }\n\t }\n\t};\n\n\t/**\n\t * Get matcher for unbind specific handler events\n\t * @param {function} handler - handler function\n\t * @returns {function} handler matcher\n\t * @private\n\t */\n\tCustomEvents.prototype._matchHandler = function(handler) {\n\t var self = this;\n\n\t return function(item) {\n\t var needRemove = handler === item.handler;\n\n\t if (needRemove) {\n\t self._forgetContext(item.context);\n\t }\n\n\t return needRemove;\n\t };\n\t};\n\n\t/**\n\t * Get matcher for unbind specific context events\n\t * @param {object} context - context\n\t * @returns {function} object matcher\n\t * @private\n\t */\n\tCustomEvents.prototype._matchContext = function(context) {\n\t var self = this;\n\n\t return function(item) {\n\t var needRemove = context === item.context;\n\n\t if (needRemove) {\n\t self._forgetContext(item.context);\n\t }\n\n\t return needRemove;\n\t };\n\t};\n\n\t/**\n\t * Get matcher for unbind specific hander, context pair events\n\t * @param {function} handler - handler function\n\t * @param {object} context - context\n\t * @returns {function} handler, context matcher\n\t * @private\n\t */\n\tCustomEvents.prototype._matchHandlerAndContext = function(handler, context) {\n\t var self = this;\n\n\t return function(item) {\n\t var matchHandler = (handler === item.handler);\n\t var matchContext = (context === item.context);\n\t var needRemove = (matchHandler && matchContext);\n\n\t if (needRemove) {\n\t self._forgetContext(item.context);\n\t }\n\n\t return needRemove;\n\t };\n\t};\n\n\t/**\n\t * Unbind event by event name\n\t * @param {string} eventName - custom event name to unbind\n\t * @param {function} [handler] - handler function\n\t * @private\n\t */\n\tCustomEvents.prototype._offByEventName = function(eventName, handler) {\n\t var self = this;\n\t var forEach = collection.forEachArray;\n\t var andByHandler = type.isFunction(handler);\n\t var matchHandler = self._matchHandler(handler);\n\n\t eventName = eventName.split(R_EVENTNAME_SPLIT);\n\n\t forEach(eventName, function(name) {\n\t var handlerItems = self._safeEvent(name);\n\n\t if (andByHandler) {\n\t self._spliceMatches(handlerItems, matchHandler);\n\t } else {\n\t forEach(handlerItems, function(item) {\n\t self._forgetContext(item.context);\n\t });\n\n\t self.events[name] = [];\n\t }\n\t });\n\t};\n\n\t/**\n\t * Unbind event by handler function\n\t * @param {function} handler - handler function\n\t * @private\n\t */\n\tCustomEvents.prototype._offByHandler = function(handler) {\n\t var self = this;\n\t var matchHandler = this._matchHandler(handler);\n\n\t collection.forEach(this._safeEvent(), function(handlerItems) {\n\t self._spliceMatches(handlerItems, matchHandler);\n\t });\n\t};\n\n\t/**\n\t * Unbind event by object(name: handler pair object or context object)\n\t * @param {object} obj - context or {name: handler} pair object\n\t * @param {function} handler - handler function\n\t * @private\n\t */\n\tCustomEvents.prototype._offByObject = function(obj, handler) {\n\t var self = this;\n\t var matchFunc;\n\n\t if (this._indexOfContext(obj) < 0) {\n\t collection.forEach(obj, function(func, name) {\n\t self.off(name, func);\n\t });\n\t } else if (type.isString(handler)) {\n\t matchFunc = this._matchContext(obj);\n\n\t self._spliceMatches(this._safeEvent(handler), matchFunc);\n\t } else if (type.isFunction(handler)) {\n\t matchFunc = this._matchHandlerAndContext(handler, obj);\n\n\t collection.forEach(this._safeEvent(), function(handlerItems) {\n\t self._spliceMatches(handlerItems, matchFunc);\n\t });\n\t } else {\n\t matchFunc = this._matchContext(obj);\n\n\t collection.forEach(this._safeEvent(), function(handlerItems) {\n\t self._spliceMatches(handlerItems, matchFunc);\n\t });\n\t }\n\t};\n\n\t/**\n\t * Unbind custom events\n\t * @param {(string|object|function)} eventName - event name or context or\n\t * {name: handler} pair object or handler function\n\t * @param {(function)} handler - handler function\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var CustomEvents = require('tui-code-snippet').CustomEvents; // node, commonjs\n\t * var CustomEvents = tui.util.CustomEvents; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * // # 2.1 off by event name\n\t * CustomEvents.off('onload');\n\t *\n\t * // # 2.2 off by event name and handler\n\t * CustomEvents.off('play', handler);\n\t *\n\t * // # 2.3 off by handler\n\t * CustomEvents.off(handler);\n\t *\n\t * // # 2.4 off by context\n\t * CustomEvents.off(myObj);\n\t *\n\t * // # 2.5 off by context and handler\n\t * CustomEvents.off(myObj, handler);\n\t *\n\t * // # 2.6 off by context and event name\n\t * CustomEvents.off(myObj, 'onload');\n\t *\n\t * // # 2.7 off by an Object.<string, function> that is {eventName: handler}\n\t * CustomEvents.off({\n\t * 'play': handler,\n\t * 'pause': handler2\n\t * });\n\t *\n\t * // # 2.8 off the all events\n\t * CustomEvents.off();\n\t */\n\tCustomEvents.prototype.off = function(eventName, handler) {\n\t if (type.isString(eventName)) {\n\t // [syntax 1, 2]\n\t this._offByEventName(eventName, handler);\n\t } else if (!arguments.length) {\n\t // [syntax 8]\n\t this.events = {};\n\t this.contexts = [];\n\t } else if (type.isFunction(eventName)) {\n\t // [syntax 3]\n\t this._offByHandler(eventName);\n\t } else if (type.isObject(eventName)) {\n\t // [syntax 4, 5, 6]\n\t this._offByObject(eventName, handler);\n\t }\n\t};\n\n\t/**\n\t * Fire custom event\n\t * @param {string} eventName - name of custom event\n\t */\n\tCustomEvents.prototype.fire = function(eventName) { // eslint-disable-line\n\t this.invoke.apply(this, arguments);\n\t};\n\n\t/**\n\t * Fire a event and returns the result of operation 'boolean AND' with all\n\t * listener's results.\n\t *\n\t * So, It is different from {@link CustomEvents#fire}.\n\t *\n\t * In service code, use this as a before event in component level usually\n\t * for notifying that the event is cancelable.\n\t * @param {string} eventName - Custom event name\n\t * @param {...*} data - Data for event\n\t * @returns {boolean} The result of operation 'boolean AND'\n\t * @example\n\t * var map = new Map();\n\t * map.on({\n\t * 'beforeZoom': function() {\n\t * // It should cancel the 'zoom' event by some conditions.\n\t * if (that.disabled && this.getState()) {\n\t * return false;\n\t * }\n\t * return true;\n\t * }\n\t * });\n\t *\n\t * if (this.invoke('beforeZoom')) { // check the result of 'beforeZoom'\n\t * // if true,\n\t * // doSomething\n\t * }\n\t */\n\tCustomEvents.prototype.invoke = function(eventName) {\n\t var events, args, index, item;\n\n\t if (!this.hasListener(eventName)) {\n\t return true;\n\t }\n\n\t events = this._safeEvent(eventName);\n\t args = Array.prototype.slice.call(arguments, 1);\n\t index = 0;\n\n\t while (events[index]) {\n\t item = events[index];\n\n\t if (item.handler.apply(item.context, args) === false) {\n\t return false;\n\t }\n\n\t index += 1;\n\t }\n\n\t return true;\n\t};\n\n\t/**\n\t * Return whether at least one of the handlers is registered in the given\n\t * event name.\n\t * @param {string} eventName - Custom event name\n\t * @returns {boolean} Is there at least one handler in event name?\n\t */\n\tCustomEvents.prototype.hasListener = function(eventName) {\n\t return this.getListenerLength(eventName) > 0;\n\t};\n\n\t/**\n\t * Return a count of events registered.\n\t * @param {string} eventName - Custom event name\n\t * @returns {number} number of event\n\t */\n\tCustomEvents.prototype.getListenerLength = function(eventName) {\n\t var events = this._safeEvent(eventName);\n\n\t return events.length;\n\t};\n\n\tmodule.exports = CustomEvents;\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview This module provides a Enum Constructor.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t * @example\n\t * // node, commonjs\n\t * var Enum = require('tui-code-snippet').Enum;\n\t * @example\n\t * // distribution file, script\n\t * <script src='path-to/tui-code-snippt.js'></script>\n\t * <script>\n\t * var Enum = tui.util.Enum;\n\t * <script>\n\t */\n\n\t'use strict';\n\n\tvar collection = __webpack_require__(4);\n\tvar type = __webpack_require__(2);\n\n\t/**\n\t * Check whether the defineProperty() method is supported.\n\t * @type {boolean}\n\t * @ignore\n\t */\n\tvar isSupportDefinedProperty = (function() {\n\t try {\n\t Object.defineProperty({}, 'x', {});\n\n\t return true;\n\t } catch (e) {\n\t return false;\n\t }\n\t})();\n\n\t/**\n\t * A unique value of a constant.\n\t * @type {number}\n\t * @ignore\n\t */\n\tvar enumValue = 0;\n\n\t/**\n\t * Make a constant-list that has unique values.<br>\n\t * In modern browsers (except IE8 and lower),<br>\n\t * a value defined once can not be changed.\n\t *\n\t * @param {...string|string[]} itemList Constant-list (An array of string is available)\n\t * @class\n\t * @memberof tui.util\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var Enum = require('tui-code-snippet').Enum; // node, commonjs\n\t * var Enum = tui.util.Enum; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var MYENUM = new Enum('TYPE1', 'TYPE2');\n\t * var MYENUM2 = new Enum(['TYPE1', 'TYPE2']);\n\t *\n\t * //usage\n\t * if (value === MYENUM.TYPE1) {\n\t * ....\n\t * }\n\t *\n\t * //add (If a duplicate name is inputted, will be disregarded.)\n\t * MYENUM.set('TYPE3', 'TYPE4');\n\t *\n\t * //get name of a constant by a value\n\t * MYENUM.getName(MYENUM.TYPE1); // 'TYPE1'\n\t *\n\t * // In modern browsers (except IE8 and lower), a value can not be changed in constants.\n\t * var originalValue = MYENUM.TYPE1;\n\t * MYENUM.TYPE1 = 1234; // maybe TypeError\n\t * MYENUM.TYPE1 === originalValue; // true\n\t **/\n\tfunction Enum(itemList) {\n\t if (itemList) {\n\t this.set.apply(this, arguments);\n\t }\n\t}\n\n\t/**\n\t * Define a constants-list\n\t * @param {...string|string[]} itemList Constant-list (An array of string is available)\n\t */\n\tEnum.prototype.set = function(itemList) {\n\t var self = this;\n\n\t if (!type.isArray(itemList)) {\n\t itemList = collection.toArray(arguments);\n\t }\n\n\t collection.forEach(itemList, function itemListIteratee(item) {\n\t self._addItem(item);\n\t });\n\t};\n\n\t/**\n\t * Return a key of the constant.\n\t * @param {number} value A value of the constant.\n\t * @returns {string|undefined} Key of the constant.\n\t */\n\tEnum.prototype.getName = function(value) {\n\t var self = this;\n\t var foundedKey;\n\n\t collection.forEach(this, function(itemValue, key) { // eslint-disable-line consistent-return\n\t if (self._isEnumItem(key) && value === itemValue) {\n\t foundedKey = key;\n\n\t return false;\n\t }\n\t });\n\n\t return foundedKey;\n\t};\n\n\t/**\n\t * Create a constant.\n\t * @private\n\t * @param {string} name Constant name. (It will be a key of a constant)\n\t */\n\tEnum.prototype._addItem = function(name) {\n\t var value;\n\n\t if (!this.hasOwnProperty(name)) {\n\t value = this._makeEnumValue();\n\n\t if (isSupportDefinedProperty) {\n\t Object.defineProperty(this, name, {\n\t enumerable: true,\n\t configurable: false,\n\t writable: false,\n\t value: value\n\t });\n\t } else {\n\t this[name] = value;\n\t }\n\t }\n\t};\n\n\t/**\n\t * Return a unique value for assigning to a constant.\n\t * @private\n\t * @returns {number} A unique value\n\t */\n\tEnum.prototype._makeEnumValue = function() {\n\t var value;\n\n\t value = enumValue;\n\t enumValue += 1;\n\n\t return value;\n\t};\n\n\t/**\n\t * Return whether a constant from the given key is in instance or not.\n\t * @param {string} key - A constant key\n\t * @returns {boolean} Result\n\t * @private\n\t */\n\tEnum.prototype._isEnumItem = function(key) {\n\t return type.isNumber(this[key]);\n\t};\n\n\tmodule.exports = Enum;\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview\n\t * Implements the ExMap (Extended Map) object.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar collection = __webpack_require__(4);\n\tvar Map = __webpack_require__(19);\n\n\t// Caching tui.util for performance enhancing\n\tvar mapAPIsForRead = ['get', 'has', 'forEach', 'keys', 'values', 'entries'];\n\tvar mapAPIsForDelete = ['delete', 'clear'];\n\n\t/**\n\t * The ExMap object is Extended Version of the tui.util.Map object.<br>\n\t * and added some useful feature to make it easy to manage the Map object.\n\t * @constructor\n\t * @param {Array} initData - Array of key-value pairs (2-element Arrays).\n\t * Each key-value pair will be added to the new Map\n\t * @memberof tui.util\n\t * @example\n\t * // node, commonjs\n\t * var ExMap = require('tui-code-snippet').ExMap;\n\t * @example\n\t * // distribution file, script\n\t * <script src='path-to/tui-code-snippt.js'></script>\n\t * <script>\n\t * var ExMap = tui.util.ExMap;\n\t * <script>\n\t */\n\tfunction ExMap(initData) {\n\t this._map = new Map(initData);\n\t this.size = this._map.size;\n\t}\n\n\tcollection.forEachArray(mapAPIsForRead, function(name) {\n\t ExMap.prototype[name] = function() {\n\t return this._map[name].apply(this._map, arguments);\n\t };\n\t});\n\n\tcollection.forEachArray(mapAPIsForDelete, function(name) {\n\t ExMap.prototype[name] = function() {\n\t var result = this._map[name].apply(this._map, arguments);\n\t this.size = this._map.size;\n\n\t return result;\n\t };\n\t});\n\n\tExMap.prototype.set = function() {\n\t this._map.set.apply(this._map, arguments);\n\t this.size = this._map.size;\n\n\t return this;\n\t};\n\n\t/**\n\t * Sets all of the key-value pairs in the specified object to the Map object.\n\t * @param {Object} object - Plain object that has a key-value pair\n\t */\n\tExMap.prototype.setObject = function(object) {\n\t collection.forEachOwnProperties(object, function(value, key) {\n\t this.set(key, value);\n\t }, this);\n\t};\n\n\t/**\n\t * Removes the elements associated with keys in the specified array.\n\t * @param {Array} keys - Array that contains keys of the element to remove\n\t */\n\tExMap.prototype.deleteByKeys = function(keys) {\n\t collection.forEachArray(keys, function(key) {\n\t this['delete'](key);\n\t }, this);\n\t};\n\n\t/**\n\t * Sets all of the key-value pairs in the specified Map object to this Map object.\n\t * @param {Map} map - Map object to be merged into this Map object\n\t */\n\tExMap.prototype.merge = function(map) {\n\t map.forEach(function(value, key) {\n\t this.set(key, value);\n\t }, this);\n\t};\n\n\t/**\n\t * Looks through each key-value pair in the map and returns the new ExMap object of\n\t * all key-value pairs that pass a truth test implemented by the provided function.\n\t * @param {function} predicate - Function to test each key-value pair of the Map object.<br>\n\t * Invoked with arguments (value, key). Return true to keep the element, false otherwise.\n\t * @returns {ExMap} A new ExMap object\n\t */\n\tExMap.prototype.filter = function(predicate) {\n\t var filtered = new ExMap();\n\n\t this.forEach(function(value, key) {\n\t if (predicate(value, key)) {\n\t filtered.set(key, value);\n\t }\n\t });\n\n\t return filtered;\n\t};\n\n\tmodule.exports = ExMap;\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * @fileoverview\n\t * Implements the Map object.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar collection = __webpack_require__(4);\n\tvar type = __webpack_require__(2);\n\tvar array = __webpack_require__(3);\n\tvar browser = __webpack_require__(10);\n\tvar func = __webpack_require__(5);\n\n\t/**\n\t * Using undefined for a key can be ambiguous if there's deleted item in the array,<br>\n\t * which is also undefined when accessed by index.<br>\n\t * So use this unique object as an undefined key to distinguish it from deleted keys.\n\t * @private\n\t * @constant\n\t */\n\tvar _KEY_FOR_UNDEFINED = {};\n\n\t/**\n\t * For using NaN as a key, use this unique object as a NaN key.<br>\n\t * This makes it easier and faster to compare an object with each keys in the array<br>\n\t * through no exceptional comapring for NaN.\n\t * @private\n\t * @constant\n\t */\n\tvar _KEY_FOR_NAN = {};\n\n\t/**\n\t * Constructor of MapIterator<br>\n\t * Creates iterator object with new keyword.\n\t * @constructor\n\t * @param {Array} keys - The array of keys in the map\n\t * @param {function} valueGetter - Function that returns certain value,\n\t * taking key and keyIndex as arguments.\n\t * @ignore\n\t */\n\tfunction MapIterator(keys, valueGetter) {\n\t this._keys = keys;\n\t this._valueGetter = valueGetter;\n\t this._length = this._keys.length;\n\t this._index = -1;\n\t this._done = false;\n\t}\n\n\t/**\n\t * Implementation of Iterator protocol.\n\t * @returns {{done: boolean, value: *}} Object that contains done(boolean) and value.\n\t */\n\tMapIterator.prototype.next = function() {\n\t var data = {};\n\t do {\n\t this._index += 1;\n\t } while (type.isUndefined(this._keys[this._index]) && this._index < this._length);\n\n\t if (this._index >= this._length) {\n\t data.done = true;\n\t } else {\n\t data.done = false;\n\t data.value = this._valueGetter(this._keys[this._index], this._index);\n\t }\n\n\t return data;\n\t};\n\n\t/**\n\t * The Map object implements the ES6 Map specification as closely as possible.<br>\n\t * For using objects and primitive values as keys, this object uses array internally.<br>\n\t * So if the key is not a string, get(), set(), has(), delete() will operates in O(n),<br>\n\t * and it can cause performance issues with a large dataset.\n\t *\n\t * Features listed below are not supported. (can't be implented without native support)\n\t * - Map object is iterable<br>\n\t * - Iterable object can be used as an argument of constructor\n\t *\n\t * If the browser supports full implementation of ES6 Map specification, native Map obejct\n\t * will be used internally.\n\t * @class\n\t * @param {Array} initData - Array of key-value pairs (2-element Arrays).\n\t * Each key-value pair will be added to the new Map\n\t * @memberof tui.util\n\t * @example\n\t * // node, commonjs\n\t * var Map = require('tui-code-snippet').Map;\n\t * @example\n\t * // distribution file, script\n\t * <script src='path-to/tui-code-snippt.js'></script>\n\t * <script>\n\t * var Map = tui.util.Map;\n\t * <script>\n\t */\n\tfunction Map(initData) {\n\t this._valuesForString = {};\n\t this._valuesForIndex = {};\n\t this._keys = [];\n\n\t if (initData) {\n\t this._setInitData(initData);\n\t }\n\n\t this.size = 0;\n\t}\n\n\t/* eslint-disable no-extend-native */\n\t/**\n\t * Add all elements in the initData to the Map object.\n\t * @private\n\t * @param {Array} initData - Array of key-value pairs to add to the Map object\n\t */\n\tMap.prototype._setInitData = function(initData) {\n\t if (!type.isArray(initData)) {\n\t throw new Error('Only Array is supported.');\n\t }\n\t collection.forEachArray(initData, function(pair) {\n\t this.set(pair[0], pair[1]);\n\t }, this);\n\t};\n\n\t/**\n\t * Returns true if the specified value is NaN.<br>\n\t * For unsing NaN as a key, use this method to test equality of NaN<br>\n\t * because === operator doesn't work for NaN.\n\t * @private\n\t * @param {*} value - Any object to be tested\n\t * @returns {boolean} True if value is NaN, false otherwise.\n\t */\n\tMap.prototype._isNaN = function(value) {\n\t return typeof value === 'number' && value !== value; // eslint-disable-line no-self-compare\n\t};\n\n\t/**\n\t * Returns the index of the specified key.\n\t * @private\n\t * @param {*} key - The key object to search for.\n\t * @returns {number} The index of the specified key\n\t */\n\tMap.prototype._getKeyIndex = function(key) {\n\t var result = -1;\n\t var value;\n\n\t if (type.isString(key)) {\n\t value = this._valuesForString[key];\n\t if (value) {\n\t result = value.keyIndex;\n\t }\n\t } else {\n\t result = array.inArray(key, this._keys);\n\t }\n\n\t return result;\n\t};\n\n\t/**\n\t * Returns the original key of the specified key.\n\t * @private\n\t * @param {*} key - key\n\t * @returns {*} Original key\n\t */\n\tMap.prototype._getOriginKey = function(key) {\n\t var originKey = key;\n\t if (key === _KEY_FOR_UNDEFINED) {\n\t originKey = undefined; // eslint-disable-line no-undefined\n\t } else if (key === _KEY_FOR_NAN) {\n\t originKey = NaN;\n\t }\n\n\t return originKey;\n\t};\n\n\t/**\n\t * Returns the unique key of the specified key.\n\t * @private\n\t * @param {*} key - key\n\t * @returns {*} Unique key\n\t */\n\tMap.prototype._getUniqueKey = function(key) {\n\t var uniqueKey = key;\n\t if (type.isUndefined(key)) {\n\t uniqueKey = _KEY_FOR_UNDEFINED;\n\t } else if (this._isNaN(key)) {\n\t uniqueKey = _KEY_FOR_NAN;\n\t }\n\n\t return uniqueKey;\n\t};\n\n\t/**\n\t * Returns the value object of the specified key.\n\t * @private\n\t * @param {*} key - The key of the value object to be returned\n\t * @param {number} keyIndex - The index of the key\n\t * @returns {{keyIndex: number, origin: *}} Value object\n\t */\n\tMap.prototype._getValueObject = function(key, keyIndex) { // eslint-disable-line consistent-return\n\t if (type.isString(key)) {\n\t return this._valuesForString[key];\n\t }\n\n\t if (type.isUndefined(keyIndex)) {\n\t keyIndex = this._getKeyIndex(key);\n\t }\n\t if (keyIndex >= 0) {\n\t return this._valuesForIndex[keyIndex];\n\t }\n\t};\n\n\t/**\n\t * Returns the original value of the specified key.\n\t * @private\n\t * @param {*} key - The key of the value object to be returned\n\t * @param {number} keyIndex - The index of the key\n\t * @returns {*} Original value\n\t */\n\tMap.prototype._getOriginValue = function(key, keyIndex) {\n\t return this._getValueObject(key, keyIndex).origin;\n\t};\n\n\t/**\n\t * Returns key-value pair of the specified key.\n\t * @private\n\t * @param {*} key - The key of the value object to be returned\n\t * @param {number} keyIndex - The index of the key\n\t * @returns {Array} Key-value Pair\n\t */\n\tMap.prototype._getKeyValuePair = function(key, keyIndex) {\n\t return [this._getOriginKey(key), this._getOriginValue(key, keyIndex)];\n\t};\n\n\t/**\n\t * Creates the wrapper object of original value that contains a key index\n\t * and returns it.\n\t * @private\n\t * @param {type} origin - Original value\n\t * @param {type} keyIndex - Index of the key\n\t * @returns {{keyIndex: number, origin: *}} Value object\n\t */\n\tMap.prototype._createValueObject = function(origin, keyIndex) {\n\t return {\n\t keyIndex: keyIndex,\n\t origin: origin\n\t };\n\t};\n\n\t/**\n\t * Sets the value for the key in the Map object.\n\t * @param {*} key - The key of the element to add to the Map object\n\t * @param {*} value - The value of the element to add to the Map object\n\t * @returns {Map} The Map object\n\t */\n\tMap.prototype.set = function(key, value) {\n\t var uniqueKey = this._getUniqueKey(key);\n\t var keyIndex = this._getKeyIndex(uniqueKey);\n\t var valueObject;\n\n\t if (keyIndex < 0) {\n\t keyIndex = this._keys.push(uniqueKey) - 1;\n\t this.size += 1;\n\t }\n\t valueObject = this._createValueObject(value, keyIndex);\n\n\t if (type.isString(key)) {\n\t this._valuesForString[key] = valueObject;\n\t } else {\n\t this._valuesForIndex[keyIndex] = valueObject;\n\t }\n\n\t return this;\n\t};\n\n\t/**\n\t * Returns the value associated to the key, or undefined if there is none.\n\t * @param {*} key - The key of the element to return\n\t * @returns {*} Element associated with the specified key\n\t */\n\tMap.prototype.get = function(key) {\n\t var uniqueKey = this._getUniqueKey(key);\n\t var value = this._getValueObject(uniqueKey);\n\n\t return value && value.origin;\n\t};\n\n\t/**\n\t * Returns a new Iterator object that contains the keys for each element\n\t * in the Map object in insertion order.\n\t * @returns {Iterator} A new Iterator object\n\t */\n\tMap.prototype.keys = function() {\n\t return new MapIterator(this._keys, func.bind(this._getOriginKey, this));\n\t};\n\n\t/**\n\t * Returns a new Iterator object that contains the values for each element\n\t * in the Map object in insertion order.\n\t * @returns {Iterator} A new Iterator object\n\t */\n\tMap.prototype.values = function() {\n\t return new MapIterator(this._keys, func.bind(this._getOriginValue, this));\n\t};\n\n\t/**\n\t * Returns a new Iterator object that contains the [key, value] pairs\n\t * for each element in the Map object in insertion order.\n\t * @returns {Iterator} A new Iterator object\n\t */\n\tMap.prototype.entries = function() {\n\t return new MapIterator(this._keys, func.bind(this._getKeyValuePair, this));\n\t};\n\n\t/**\n\t * Returns a boolean asserting whether a value has been associated to the key\n\t * in the Map object or not.\n\t * @param {*} key - The key of the element to test for presence\n\t * @returns {boolean} True if an element with the specified key exists;\n\t * Otherwise false\n\t */\n\tMap.prototype.has = function(key) {\n\t return !!this._getValueObject(key);\n\t};\n\n\t/**\n\t * Removes the specified element from a Map object.\n\t * @param {*} key - The key of the element to remove\n\t * @function delete\n\t * @memberof tui.util.Map.prototype\n\t */\n\t// cannot use reserved keyword as a property name in IE8 and under.\n\tMap.prototype['delete'] = function(key) {\n\t var keyIndex;\n\n\t if (type.isString(key)) {\n\t if (this._valuesForString[key]) {\n\t keyIndex = this._valuesForString[key].keyIndex;\n\t delete this._valuesForString[key];\n\t }\n\t } else {\n\t keyIndex = this._getKeyIndex(key);\n\t if (keyIndex >= 0) {\n\t delete this._valuesForIndex[keyIndex];\n\t }\n\t }\n\n\t if (keyIndex >= 0) {\n\t delete this._keys[keyIndex];\n\t this.size -= 1;\n\t }\n\t};\n\n\t/**\n\t * Executes a provided function once per each key/value pair in the Map object,\n\t * in insertion order.\n\t * @param {function} callback - Function to execute for each element\n\t * @param {thisArg} thisArg - Value to use as this when executing callback\n\t */\n\tMap.prototype.forEach = function(callback, thisArg) {\n\t thisArg = thisArg || this;\n\t collection.forEachArray(this._keys, function(key) {\n\t if (!type.isUndefined(key)) {\n\t callback.call(thisArg, this._getValueObject(key).origin, key, this);\n\t }\n\t }, this);\n\t};\n\n\t/**\n\t * Removes all elements from a Map object.\n\t */\n\tMap.prototype.clear = function() {\n\t Map.call(this);\n\t};\n\t/* eslint-enable no-extend-native */\n\n\t// Use native Map object if exists.\n\t// But only latest versions of Chrome and Firefox support full implementation.\n\t(function() {\n\t if (window.Map && (\n\t (browser.firefox && browser.version >= 37) ||\n\t (browser.chrome && browser.version >= 42)\n\t )\n\t ) {\n\t Map = window.Map; // eslint-disable-line no-func-assign\n\t }\n\t})();\n\n\tmodule.exports = Map;\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview This module provides the HashMap constructor.\n\t * @author NHN.\n\t * FE Development Lab <dl_javascript@nhn.com>\n\t */\n\n\t'use strict';\n\n\tvar collection = __webpack_require__(4);\n\tvar type = __webpack_require__(2);\n\t/**\n\t * All the data in hashMap begin with _MAPDATAPREFIX;\n\t * @type {string}\n\t * @private\n\t */\n\tvar _MAPDATAPREFIX = 'å';\n\n\t/**\n\t * HashMap can handle the key-value pairs.<br>\n\t * Caution:<br>\n\t * HashMap instance has a length property but is not an instance of Array.\n\t * @param {Object} [obj] A initial data for creation.\n\t * @constructor\n\t * @memberof tui.util\n\t * @deprecated since version 1.3.0\n\t * @example\n\t * // node, commonjs\n\t * var HashMap = require('tui-code-snippet').HashMap;\n\t * var hm = new tui.util.HashMap({\n\t 'mydata': {\n\t 'hello': 'imfine'\n\t },\n\t 'what': 'time'\n\t});\n\t * @example\n\t * // distribution file, script\n\t * <script src='path-to/tui-code-snippt.js'></script>\n\t * <script>\n\t * var HashMap = tui.util.HashMap;\n\t * <script>\n\t * var hm = new tui.util.HashMap({\n\t 'mydata': {\n\t 'hello': 'imfine'\n\t },\n\t 'what': 'time'\n\t});\n\t */\n\tfunction HashMap(obj) {\n\t /**\n\t * size\n\t * @type {number}\n\t */\n\t this.length = 0;\n\n\t if (obj) {\n\t this.setObject(obj);\n\t }\n\t}\n\n\t/**\n\t * Set a data from the given key with value or the given object.\n\t * @param {string|Object} key A string or object for key\n\t * @param {*} [value] A data\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n\t * var HashMap = tui.util.HashMap; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var hm = new HashMap();\n\t * hm.set('key', 'value');\n\t * hm.set({\n\t * 'key1': 'data1',\n\t * 'key2': 'data2'\n\t * });\n\t */\n\tHashMap.prototype.set = function(key, value) {\n\t if (arguments.length === 2) {\n\t this.setKeyValue(key, value);\n\t } else {\n\t this.setObject(key);\n\t }\n\t};\n\n\t/**\n\t * Set a data from the given key with value.\n\t * @param {string} key A string for key\n\t * @param {*} value A data\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n\t * var HashMap = tui.util.HashMap; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var hm = new HashMap();\n\t * hm.setKeyValue('key', 'value');\n\t */\n\tHashMap.prototype.setKeyValue = function(key, value) {\n\t if (!this.has(key)) {\n\t this.length += 1;\n\t }\n\t this[this.encodeKey(key)] = value;\n\t};\n\n\t/**\n\t * Set a data from the given object.\n\t * @param {Object} obj A object for data\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n\t * var HashMap = tui.util.HashMap; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var hm = new HashMap();\n\t * hm.setObject({\n\t * 'key1': 'data1',\n\t * 'key2': 'data2'\n\t * });\n\t */\n\tHashMap.prototype.setObject = function(obj) {\n\t var self = this;\n\n\t collection.forEachOwnProperties(obj, function(value, key) {\n\t self.setKeyValue(key, value);\n\t });\n\t};\n\n\t/**\n\t * Merge with the given another hashMap.\n\t * @param {HashMap} hashMap Another hashMap instance\n\t */\n\tHashMap.prototype.merge = function(hashMap) {\n\t var self = this;\n\n\t hashMap.each(function(value, key) {\n\t self.setKeyValue(key, value);\n\t });\n\t};\n\n\t/**\n\t * Encode the given key for hashMap.\n\t * @param {string} key A string for key\n\t * @returns {string} A encoded key\n\t * @private\n\t */\n\tHashMap.prototype.encodeKey = function(key) {\n\t return _MAPDATAPREFIX + key;\n\t};\n\n\t/**\n\t * Decode the given key in hashMap.\n\t * @param {string} key A string for key\n\t * @returns {string} A decoded key\n\t * @private\n\t */\n\tHashMap.prototype.decodeKey = function(key) {\n\t var decodedKey = key.split(_MAPDATAPREFIX);\n\n\t return decodedKey[decodedKey.length - 1];\n\t};\n\n\t/**\n\t * Return the value from the given key.\n\t * @param {string} key A string for key\n\t * @returns {*} The value from a key\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n\t * var HashMap = tui.util.HashMap; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var hm = new HashMap();\n\t * hm.set('key', 'value');\n\t * hm.get('key') // value\n\t */\n\tHashMap.prototype.get = function(key) {\n\t return this[this.encodeKey(key)];\n\t};\n\n\t/**\n\t * Check the existence of a value from the key.\n\t * @param {string} key A string for key\n\t * @returns {boolean} Indicating whether a value exists or not.\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n\t * var HashMap = tui.util.HashMap; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var hm = new HashMap();\n\t * hm.set('key', 'value');\n\t * hm.has('key') // true\n\t */\n\tHashMap.prototype.has = function(key) {\n\t return this.hasOwnProperty(this.encodeKey(key));\n\t};\n\n\t/**\n\t * Remove a data(key-value pairs) from the given key or the given key-list.\n\t * @param {...string|string[]} key A string for key\n\t * @returns {string|string[]} A removed data\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n\t * var HashMap = tui.util.HashMap; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var hm = new HashMap();\n\t * hm.set('key', 'value');\n\t * hm.set('key2', 'value');\n\t *\n\t * hm.remove('key');\n\t * hm.remove('key', 'key2');\n\t * hm.remove(['key', 'key2']);\n\t */\n\tHashMap.prototype.remove = function(key) {\n\t if (arguments.length > 1) {\n\t key = collection.toArray(arguments);\n\t }\n\n\t return type.isArray(key) ? this.removeByKeyArray(key) : this.removeByKey(key);\n\t};\n\n\t/**\n\t * Remove data(key-value pair) from the given key.\n\t * @param {string} key A string for key\n\t * @returns {*|null} A removed data\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n\t * var HashMap = tui.util.HashMap; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var hm = new HashMap();\n\t * hm.set('key', 'value');\n\t * hm.removeByKey('key')\n\t */\n\tHashMap.prototype.removeByKey = function(key) {\n\t var data = this.has(key) ? this.get(key) : null;\n\n\t if (data !== null) {\n\t delete this[this.encodeKey(key)];\n\t this.length -= 1;\n\t }\n\n\t return data;\n\t};\n\n\t/**\n\t * Remove a data(key-value pairs) from the given key-list.\n\t * @param {string[]} keyArray An array of keys\n\t * @returns {string[]} A removed data\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n\t * var HashMap = tui.util.HashMap; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var hm = new HashMap();\n\t * hm.set('key', 'value');\n\t * hm.set('key2', 'value');\n\t * hm.removeByKeyArray(['key', 'key2']);\n\t */\n\tHashMap.prototype.removeByKeyArray = function(keyArray) {\n\t var data = [];\n\t var self = this;\n\n\t collection.forEach(keyArray, function(key) {\n\t data.push(self.removeByKey(key));\n\t });\n\n\t return data;\n\t};\n\n\t/**\n\t * Remove all the data\n\t */\n\tHashMap.prototype.removeAll = function() {\n\t var self = this;\n\n\t this.each(function(value, key) {\n\t self.remove(key);\n\t });\n\t};\n\n\t/**\n\t * Execute the provided callback once for each all the data.\n\t * @param {Function} iteratee Callback function\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n\t * var HashMap = tui.util.HashMap; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var hm = new HashMap();\n\t * hm.set('key', 'value');\n\t * hm.set('key2', 'value');\n\t *\n\t * hm.each(function(value, key) {\n\t * //do something...\n\t * });\n\t */\n\tHashMap.prototype.each = function(iteratee) {\n\t var self = this;\n\t var flag;\n\n\t collection.forEachOwnProperties(this, function(value, key) { // eslint-disable-line consistent-return\n\t if (key.charAt(0) === _MAPDATAPREFIX) {\n\t flag = iteratee(value, self.decodeKey(key));\n\t }\n\n\t if (flag === false) {\n\t return flag;\n\t }\n\t });\n\t};\n\n\t/**\n\t * Return the key-list stored.\n\t * @returns {Array} A key-list\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n\t * var HashMap = tui.util.HashMap; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var hm = new HashMap();\n\t * hm.set('key', 'value');\n\t * hm.set('key2', 'value');\n\t * hm.keys(); //['key', 'key2');\n\t */\n\tHashMap.prototype.keys = function() {\n\t var keys = [];\n\t var self = this;\n\n\t this.each(function(value, key) {\n\t keys.push(self.decodeKey(key));\n\t });\n\n\t return keys;\n\t};\n\n\t/**\n\t * Work similarly to Array.prototype.map().<br>\n\t * It executes the provided callback that checks conditions once for each element of hashMap,<br>\n\t * and returns a new array having elements satisfying the conditions\n\t * @param {Function} condition A function that checks conditions\n\t * @returns {Array} A new array having elements satisfying the conditions\n\t * @example\n\t * //-- #1. Get Module --//\n\t * var HashMap = require('tui-code-snippet').HashMap; // node, commonjs\n\t * var HashMap = tui.util.HashMap; // distribution file\n\t *\n\t * //-- #2. Use property --//\n\t * var hm1 = new HashMap();\n\t * hm1.set('key', 'value');\n\t * hm1.set('key2', 'value');\n\t *\n\t * hm1.find(function(value, key) {\n\t * return key === 'key2';\n\t * }); // ['value']\n\t *\n\t * var hm2 = new HashMap({\n\t * 'myobj1': {\n\t * visible: true\n\t * },\n\t * 'mybobj2': {\n\t * visible: false\n\t * }\n\t * });\n\t *\n\t * hm2.find(function(obj, key) {\n\t * return obj.visible === true;\n\t * }); // [{visible: true}];\n\t */\n\tHashMap.prototype.find = function(condition) {\n\t var founds = [];\n\n\t this.each(function(value, key) {\n\t if (condition(value, key)) {\n\t founds.push(value);\n\t }\n\t });\n\n\t return founds;\n\t};\n\n\t/**\n\t * Return a new Array having all values.\n\t * @returns {Array} A new array having all values\n\t */\n\tHashMap.prototype.toArray = function() {\n\t var result = [];\n\n\t this.each(function(v) {\n\t result.push(v);\n\t });\n\n\t return result;\n\t};\n\n\tmodule.exports = HashMap;\n\n\n/***/ })\n/******/ ])\n});\n;"]},"metadata":{},"sourceType":"script"}