You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
189 KiB
1 lines
189 KiB
{"version":3,"sources":["ax5-core.js","ax5-def.js","ax5-error-msg.js","ax5-polyfill.js","ax5-ui.js","mustache.js"],"names":["root","this","win","doc","document","reIsJson","documentElement","reMs","reSnakeCase","reCamelCase","reDot","reInt","reNotNum","reMoneySplit","RegExp","reAmp","reEq","reClassNameSplit","ax5","info","U","guid","getGuid","urlUtil","url","urls","href","location","param","search","referrer","pathname","hostname","port","split","replace","hashdata","last","baseUrl","left","getError","className","errorCode","methodName","errorMsg","msg","_arguments","arguments","version","onerror","console","error","toArray","join","eventKeys","BACKSPACE","TAB","RETURN","ESC","LEFT","UP","RIGHT","DOWN","DELETE","HOME","END","PAGEUP","PAGEDOWN","INSERT","SPACE","weekNames","label","browser","ua","mobile","browserName","match","browserVersion","navigator","userAgent","toLowerCase","name","exec","indexOf","isBrowser","window","wheelEnm","test","supportTouch","maxTouchPoints","msMaxTouchPoints","supportFileApi","FileReader","File","FileList","Blob","each","O","_fn","isNothing","key","i","l","length","isObj","undefined","call","map","results","fnResult","isObject","push","isFunction","sum","defaultValue","tokenValue","isArray","avg","reduce","tokenItem","reduceRight","filter","k","toJson","jsonString","util","jsonObjectBody","value","isString","isNumber","isUndefined","parseJson","str","force","Function","e","getType","typeName","nodeType","_toString","isWindow","isElement","isNodelist","isDate","Date","isNaN","valueOf","isDateFormat","result","date","mm","substr","dd","getMonth","getDate","first","keys","Object","item","setCookie","cn","cv","exdays","opts","expire","setDate","cookie","escape","toUTCString","path","domain","secure","getCookie","cname","ca","c","charAt","substring","unescape","alert","pos","right","lastIndexOf","camelCase","all","letter","toUpperCase","snakeCase","number","cond","isMinus","returnValue","pair","Number","Math","round","abs","floor","ceil","val","txtNumber","arrNumber","nUnit","myByte","Array","prototype","slice","merge","second","j","p","v","encode","s","encodeURIComponent","decode","decodeURIComponent","apply","localDate","yy","hh","mi","ss","utcD","localD","UTC","getUTCHours","getTimezoneOffset","setUTCHours","d","aDateTime","aTimes","aTime","aDate","va","ISO_8601","ISO_8601_FULL","parseFloat","_d","mxdd","DyMilli","setTime","getTime","getFullYear","parseInt","daysOfMonth","processor","firstDayOfMonth","lastDayOfMonth","fStr","nY","nM","nD","nH","nMM","nS","nDW","yre","regY","mre","regM","dre","regD","hre","regH","mire","regMI","sre","regS","dwre","regDW","getUTCFullYear","setDigit","getHours","getMinutes","getSeconds","getDay","$1","dday","getDayTime","diffnum","thisYearMemoryDay","memoryDay","today","weeksOfMonth","myDate","year","month","count","y","m","num","padder","radix","toString","times","findParentNode","_target","parentNode","tagName","toLocaleLowerCase","klasss","hasClass","a","getAttribute","cssNumber","re","found","unit","css","returns","valSplited","forEach","trim","vSplited","stopEvent","event","cancelBubble","stopPropagation","preventDefault","debounce","func","wait","options","invokeFunc","time","args","lastArgs","thisArg","lastThis","lastInvokeTime","leadingEdge","timerId","setTimeout","timerExpired","leading","remainingWait","timeSinceLastCall","lastCallTime","timeSinceLastInvoke","maxing","min","maxWait","shouldInvoke","now","trailingEdge","trailing","cancel","clearTimeout","flush","debounced","isInvoking","_len","_key","TypeError","max","throttle","deepCopy","obj","r","_typeof","jQuery","extend","escapeHtml","unescapeHtml","string","_string","format","concat","_pos","color","_hexColor","isOnePointZero","n","isPercentage","convertToPercentage","convertTo255","convertToHex","bound01","processPercent","rgbToHsl","g","b","h","hslToRgb","hue2rgb","q","t","matchers","CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","rgb","rgba","hsl","hsla","hsv","hsva","hex3","hex6","hex4","hex8","convertObject","_color","_originalValue","_format","_hex","getHexValue","lighten","amount","darken","getBrightness","isDark","isLight","getHsl","selectRange","textRange","selectAll","el","range","offset","arr","moveStart","collapse","moveEnd","start","end","text","selectNodeContents","setStart","node","setEnd","firstChild","rangeType","selection","get","body","createTextRange","moveToElementText","getSelection","createRange","select","focus","removeAllRanges","addRange","module","exports","def","501","401","402","460","461","re_trim","hwp","hasOwnProperty","hdeb","propertyIsEnumerable","de","del","prop","fun","len","thisp","bind","o","nop","self","bound","querySelectorAll","querySelector","createStyleSheet","style","selector","maxCount","resultSet","addRule","currentStyle","foo","removeRule","Infinity","String","JSON","parse","sJSON","stringify","f","vContent","splice","documentMode","_splice","_slice","begin","size","cloned","upTo","con","method","empty","dummy","properties","methods","pop","webkitMatchMedia","mozMatchMedia","oMatchMedia","msMatchMedia","matchMedia","getElementsByTagName","styleMedia","media","createElement","script","type","id","insertBefore","getComputedStyle","matchMedium","styleSheet","cssText","textContent","width","matches","addListener","localMatchMedia","hasMediaQueries","isListening","timeoutID","queries","handleChange","evt","il","mql","listeners","jl","index","listener","addEventListener","removeListener","ui","axUi","config","setConfig","cfg","callInit","init","log","bindWindowResize","callBack","resize","bindWindowResize__","main","addClass","cls","classStore","factory","arg","initInstance","instance","instanceId","initPrototype","superClass","wrapper","global","mustache","object","typeStr","escapeRegExp","hasProperty","propName","testRegExp","regExpTest","isWhitespace","nonSpaceRe","entityMap","parseTemplate","template","tags","stripSpace","hasTag","nonSpace","spaces","tokens","compileTags","tagsToCompile","spaceRe","Error","openingTagRe","closingTagRe","closingCurlyRe","sections","chr","token","openSection","scanner","Scanner","eos","scanUntil","valueLength","scan","tagRe","whiteRe","equalsRe","curlyRe","nestTokens","squashTokens","lastToken","squashedTokens","numTokens","section","nestedTokens","collector","tail","Context","view","parentContext","cache",".","@each","@key","@value","parent","Writer","objectToString","&","<",">","\"","'","/","lookup","names","context","lookupHit","clearCache","render","partials","renderTokens","originalTemplate","symbol","buffer","renderSection","renderInverted","renderPartial","unescapedValue","escapedValue","rawValue","subRender","defaultWriter","to_html","send"],"mappings":"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","file":"ax5core.min.js","sourcesContent":["(function () {\n 'use strict';\n\n // root of function\n let root = this, win = this,\n doc = (win) ? win.document : null, docElem = (win) ? win.document.documentElement : null,\n reIsJson = /^([\"'](\\\\.|[^\"\\\\\\n\\r])*?[\"']|[,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t])+?$/,\n reMs = /^-ms-/,\n reSnakeCase = /[\\-_]([\\da-z])/gi,\n reCamelCase = /([A-Z])/g,\n reDot = /\\./,\n reInt = /[-|+]?[\\D]/gi,\n reNotNum = /\\D/gi,\n reMoneySplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])'),\n reAmp = /&/g,\n reEq = /=/,\n reClassNameSplit = /[ ]+/g,\n\n /** @namespace {Object} ax5 */\n ax5 = {}, info, U, dom;\n\n /**\n * guid\n * @member {Number} ax5.guid\n */\n ax5.guid = 1;\n /**\n * ax5.guid를 구하고 증가시킵니다.\n * @method ax5.getGuid\n * @returns {Number} guid\n */\n ax5.getGuid = () => {\n return ax5.guid++\n };\n\n /**\n * 상수모음\n * @namespace ax5.info\n */\n ax5.info = info = (function () {\n /**\n * ax5 version\n * @member {String} ax5.info.version\n */\n const version = \"${VERSION}\";\n\n /**\n * ax5 library path\n * @member {String} ax5.info.baseUrl\n */\n const baseUrl = \"\";\n\n /**\n * ax5 에러 출력메세지 사용자 재 정의\n * @member {Object} ax5.info.onerror\n * @examples\n * ```\n * ax5.info.onerror = function(){\n\t\t * console.log(arguments);\n\t\t * }\n * ```\n */\n let onerror = () => {\n console.error(U.toArray(arguments).join(\":\"));\n };\n\n /**\n * event keyCodes\n * @member {Object} ax5.info.eventKeys\n * @example\n * ```\n * {\n\t\t * \tBACKSPACE: 8, TAB: 9,\n\t\t * \tRETURN: 13, ESC: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46,\n\t\t * \tHOME: 36, END: 35, PAGEUP: 33, PAGEDOWN: 34, INSERT: 45, SPACE: 32\n\t\t * }\n * ```\n */\n const eventKeys = {\n BACKSPACE: 8, TAB: 9,\n RETURN: 13, ESC: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46,\n HOME: 36, END: 35, PAGEUP: 33, PAGEDOWN: 34, INSERT: 45, SPACE: 32\n };\n\n /**\n * week names\n * @member {Object[]} weekNames\n * @member {string} weekNames[].label\n *\n * @example\n * ```\n * [\n * {label: \"SUN\"},{label: \"MON\"},{label: \"TUE\"},{label: \"WED\"},{label: \"THU\"},{label: \"FRI\"},{label: \"SAT\"}\n * ]\n * console.log( weekNames[0] );\n * console.log( ax5.info.weekNames[(new Date()).getDay()].label )\n * ```\n */\n let weekNames = [\n {label: \"SUN\"},\n {label: \"MON\"},\n {label: \"TUE\"},\n {label: \"WED\"},\n {label: \"THU\"},\n {label: \"FRI\"},\n {label: \"SAT\"}\n ];\n\n /**\n * 사용자 브라우저 식별용 오브젝트\n * @member {Object} ax5.info.browser\n * @example\n * ```\n * console.log( ax5.info.browser );\n * //Object {name: \"chrome\", version: \"39.0.2171.71\", mobile: false}\n * ```\n */\n let browser = (function (ua, mobile, browserName, match, browser, browserVersion) {\n if (!win || !win.navigator) return {};\n\n ua = navigator.userAgent.toLowerCase(), mobile = (ua.search(/mobile/g) != -1), browserName, match, browser, browserVersion;\n\n if (ua.search(/iphone/g) != -1) {\n return {name: \"iphone\", version: 0, mobile: true}\n }\n else if (ua.search(/ipad/g) != -1) {\n return {name: \"ipad\", version: 0, mobile: true}\n }\n else if (ua.search(/android/g) != -1) {\n match = /(android)[ \\/]([\\w.]+)/.exec(ua) || [];\n browserVersion = (match[2] || \"0\");\n return {name: \"android\", version: browserVersion, mobile: mobile}\n }\n else {\n browserName = \"\";\n match = /(opr)[ \\/]([\\w.]+)/.exec(ua) || /(chrome)[ \\/]([\\w.]+)/.exec(ua) || /(webkit)[ \\/]([\\w.]+)/.exec(ua) || /(msie) ([\\w.]+)/.exec(ua) || ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) || [];\n browser = (match[1] || \"\");\n browserVersion = (match[2] || \"0\");\n\n if (browser == \"msie\") browser = \"ie\";\n return {\n name: browser,\n version: browserVersion,\n mobile: mobile\n }\n }\n ua = null, mobile = null, browserName = null, match = null, browser = null, browserVersion = null;\n })();\n\n /**\n * 브라우저 여부\n * @member {Boolean} ax5.info.isBrowser\n */\n let isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && win.document);\n\n /**\n * 브라우저에 따른 마우스 휠 이벤트이름\n * @member {Object} ax5.info.wheelEnm\n */\n let wheelEnm = (win && (/Firefox/i.test(navigator.userAgent)) ? \"DOMMouseScroll\" : \"mousewheel\");\n\n /**\n * 첫번째 자리수 동사 - (필요한것이 없을때 : 4, 실행오류 : 5)\n * 두번째 자리수 목적어 - 문자열 0, 숫자 1, 배열 2, 오브젝트 3, 함수 4, DOM 5, 파일 6, 기타 7\n * 세번째 자리수 옵션\n * @member {Object} ax5.info.errorMsg\n */\n let errorMsg = {};\n\n /**\n * 현재 페이지의 Url 정보를 리턴합니다.\n * @method ax5.info.urlUtil\n * @returns {Object}\n * @example\n * ```\n * console.log( ax5.util.toJson( ax5.info.urlUtil() ) );\n * {\n\t\t *\t\"baseUrl\": \"http://ax5:2018\",\n\t\t *\t\"href\": \"http://ax5:2018/samples/index.html?a=1&b=1#abc\",\n\t\t *\t\"param\": \"a=1&b=1\",\n\t\t *\t\"referrer\": \"\",\n\t\t *\t\"pathname\": \"/samples/index.html\",\n\t\t *\t\"hostname\": \"ax5\",\n\t\t *\t\"port\": \"2018\",\n\t\t *\t\"url\": \"http://ax5:2018/samples/index.html\",\n\t\t *\t\"hashdata\": \"abc\"\n\t\t * }\n * ```\n */\n function urlUtil(url, urls) {\n url = {\n href: win.location.href,\n param: win.location.search,\n referrer: doc.referrer,\n pathname: win.location.pathname,\n hostname: win.location.hostname,\n port: win.location.port\n }, urls = url.href.split(/[\\?#]/);\n url.param = url.param.replace(\"?\", \"\");\n url.url = urls[0];\n if (url.href.search(\"#\") > -1) {\n url.hashdata = U.last(urls);\n }\n urls = null;\n url.baseUrl = U.left(url.href, \"?\").replace(url.pathname, \"\");\n return url;\n }\n\n /**\n * ax5-error-msg.js 에 정의된 ax5 error를 반환합니다.\n * @method ax5.info.getError\n * @returns {Object}\n * @example\n * ```\n * console.log( ax5.info.getError(\"single-uploader\", \"460\", \"upload\") );\n *\n * if(!this.selectedFile){\n\t\t * if (cfg.onEvent) {\n\t\t * \tvar that = {\n\t\t * \t\taction: \"error\",\n\t\t * \t\terror: ax5.info.getError(\"single-uploader\", \"460\", \"upload\")\n\t\t * \t};\n\t\t * \tcfg.onEvent.call(that, that);\n\t\t * }\n\t\t * return this;\n\t\t * }\n * ```\n */\n function getError(className, errorCode, methodName) {\n if (info.errorMsg && info.errorMsg[className]) {\n return {\n className: className,\n errorCode: errorCode,\n methodName: methodName,\n msg: info.errorMsg[className][errorCode]\n };\n }\n else {\n return {className: className, errorCode: errorCode, methodName: methodName};\n }\n }\n\n /**\n * 브라우져의 터치 기능 유무를 확인합니다.\n * @method ax5.info.supportTouch\n * @returns {boolean}\n * @example\n * ```\n * var chkFlag = ax5.info.supportTouch;\n */\n let supportTouch = (win) ? (('ontouchstart' in win) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)) : false;\n\n let supportFileApi = (win) ? ( win.FileReader && win.File && win.FileList && win.Blob ) : false;\n\n return {\n errorMsg: errorMsg,\n version: version,\n baseUrl: baseUrl,\n onerror: onerror,\n eventKeys: eventKeys,\n weekNames: weekNames,\n browser: browser,\n isBrowser: isBrowser,\n supportTouch: supportTouch,\n supportFileApi: supportFileApi,\n wheelEnm: wheelEnm,\n urlUtil: urlUtil,\n getError: getError\n };\n })();\n\n /**\n * Refer to this by {@link ax5}.\n * @namespace ax5.util\n */\n ax5['util'] = U = (function () {\n const _toString = Object.prototype.toString;\n\n /**\n * Object나 Array의 아이템으로 사용자 함수를 호출합니다.\n * @method ax5.util.each\n * @param {Object|Array} O\n * @param {Function} _fn\n * @example\n * ```js\n * var axf = ax5.util;\n * axf.each([0,1,2], function(){\n\t\t * \t// with this\n\t\t * });\n * axf.each({a:1, b:2}, function(){\n\t\t * \t// with this\n\t\t * });\n * ```\n */\n function each(O, _fn) {\n if (isNothing(O)) return [];\n let key, i = 0, l = O.length,\n isObj = l === undefined || typeof O === \"function\";\n if (isObj) {\n for (key in O) {\n if (typeof O[key] != \"undefined\")\n if (_fn.call(O[key], key, O[key]) === false) break;\n }\n }\n else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\")\n if (_fn.call(O[i], i, O[i++]) === false) break;\n }\n }\n return O;\n }\n\n // In addition to using the http://underscorejs.org : map, reduce, reduceRight, find\n /**\n * 원본 아이템들을 이용하여 사용자 함수의 리턴값으로 이루어진 새로운 배열을 만듭니다.\n * @method ax5.util.map\n * @param {Object|Array} O\n * @param {Function} _fn\n * @returns {Array}\n * @example\n * ```js\n * var myArray = [0,1,2,3,4];\n * var myObject = {a:1, b:\"2\", c:{axj:\"what\", arrs:[0,2,\"3\"]},\n\t\t * fn: function(abcdd){\n\t\t * return abcdd;\n\t\t * }\n\t\t * };\n *\n * var _arr = ax5.util.map( myArray, function(index, I){\n\t\t * return index+1;\n\t\t * });\n * console.log(_arr);\n * // [1, 2, 3, 4, 5]\n *\n * var _arr = ax5.util.map( myObject, function(k, v){\n\t\t * return v * 2;\n\t\t * });\n * console.log(_arr);\n * // [2, 4, NaN, NaN]\n * ```\n */\n function map(O, _fn) {\n if (isNothing(O)) return [];\n let key, i = 0, l = O.length, results = [], fnResult;\n if (isObject(O)) {\n for (key in O) {\n if (typeof O[key] != \"undefined\") {\n fnResult = undefined;\n if ((fnResult = _fn.call(O[key], key, O[key])) === false) break;\n else results.push(fnResult);\n }\n }\n }\n else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") {\n fnResult = undefined;\n if ((fnResult = _fn.call(O[i], i, O[i++])) === false) break;\n else results.push(fnResult);\n }\n }\n }\n return results;\n }\n\n /**\n * 원본 아이템들을 이용하여 사용자 함수의 리턴값이 참인 아이템의 위치나 키값을 반환합니다.\n * @method ax5.util.search\n * @param {Object|Array} O\n * @param {Function|String|Number} _fn - 함수 또는 값\n * @returns {Number|String}\n * @example\n * ```js\n * var myArray = [0,1,2,3,4,5,6];\n * var myObject = {a:\"123\",\"b\":\"123\",c:123};\n *\n * ax5.util.search(myArray, function(){\n\t\t * return this > 3;\n\t\t * });\n * // 4\n * ax5.util.search(myObject, function(k, v){\n\t\t * return v === 123;\n\t\t * });\n * // \"c\"\n * ax5.util.search([1,2,3,4], 3);\n * // 2\n * ax5.util.search([1,2], 4);\n * // -1\n * ax5.util.search([\"name\",\"value\"], \"value\");\n * // 1\n * ax5.util.search([\"name\",\"value\"], \"values\");\n * // -1\n * ax5.util.search({k1:\"name\",k2:\"value\"}, \"value2\");\n * // -1\n * ax5.util.search({k1:\"name\",k2:\"value\"}, \"value\");\n * // \"k2\"\n * ```\n */\n function search(O, _fn) {\n if (isNothing(O)) return -1;\n if (isObject(O)) {\n for (let key in O) {\n if (typeof O[key] != \"undefined\" && isFunction(_fn) && _fn.call(O[key], key, O[key])) {\n return key;\n break;\n }\n else if (O[key] == _fn) {\n return key;\n break;\n }\n }\n }\n else {\n for (let i = 0, l = O.length; i < l; i++) {\n if (typeof O[i] != \"undefined\" && isFunction(_fn) && _fn.call(O[i], i, O[i])) {\n return i;\n break;\n }\n else if (O[i] == _fn) {\n return i;\n break;\n }\n }\n }\n return -1;\n }\n\n /**\n * @method ax5.util.sum\n * @param {Array|Object} O\n * @param {Number} [defaultValue]\n * @param {Function} _fn\n * @returns {Number}\n * @example\n * ```js\n * var arr = [\n * {name: \"122\", value: 9},\n * {name: \"122\", value: 10},\n * {name: \"123\", value: 11}\n * ];\n *\n * var rs = ax5.util.sum(arr, function () {\n * if(this.name == \"122\") {\n * return this.value;\n * }\n * });\n * console.log(rs); // 19\n *\n * console.log(ax5.util.sum(arr, 10, function () {\n * return this.value;\n * }));\n * // 40\n * ```\n */\n function sum(O, defaultValue, _fn) {\n let i, l, tokenValue;\n if (isFunction(defaultValue) && typeof _fn === \"undefined\") {\n _fn = defaultValue;\n defaultValue = 0;\n }\n if (typeof defaultValue === \"undefined\") defaultValue = 0;\n\n if (isArray(O)) {\n i = 0;\n l = O.length;\n for (; i < l; i++) {\n if (typeof O[i] !== \"undefined\") {\n if (( tokenValue = _fn.call(O[i], O[i]) ) === false) break;\n else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue;\n }\n else if (isObject(O)) {\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if (( tokenValue = _fn.call(O[i], O[i]) ) === false) break;\n else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue;\n }\n else {\n console.error(\"argument error : ax5.util.sum - use Array or Object\");\n return defaultValue;\n }\n }\n\n /**\n * @method ax5.util.avg\n * @param {Array|Object} O\n * @param {Number} [defaultValue]\n * @param {Function} _fn\n * @returns {Number}\n * @example\n * ```js\n * var arr = [\n * {name: \"122\", value: 9},\n * {name: \"122\", value: 10},\n * {name: \"123\", value: 11}\n * ];\n *\n * var rs = ax5.util.avg(arr, function () {\n * return this.value;\n * });\n *\n * console.log(rs); // 10\n * ```\n */\n function avg(O, defaultValue, _fn) {\n let i, l, tokenValue;\n if (isFunction(defaultValue) && typeof _fn === \"undefined\") {\n _fn = defaultValue;\n defaultValue = 0;\n }\n if (typeof defaultValue === \"undefined\") defaultValue = 0;\n\n if (isArray(O)) {\n i = 0;\n l = O.length;\n for (; i < l; i++) {\n if (typeof O[i] !== \"undefined\") {\n if (( tokenValue = _fn.call(O[i], O[i]) ) === false) break;\n else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue / l;\n }\n else if (isObject(O)) {\n l = 0;\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if (( tokenValue = _fn.call(O[i], O[i]) ) === false) break;\n else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue; ++l;\n }\n }\n return defaultValue / l;\n }\n else {\n console.error(\"argument error : ax5.util.sum - use Array or Object\");\n return defaultValue;\n }\n }\n\n /**\n * 배열의 왼쪽에서 오른쪽으로 연산을 진행하는데 수행한 결과가 왼쪽 값으로 반영되어 최종 왼쪽 값을 반환합니다.\n * @method ax5.util.reduce\n * @param {Array|Object} O\n * @param {Function} _fn\n * @returns {Alltypes}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.reduce( aarray, function(p, n){\n\t\t * return p * n;\n\t\t * });\n * console.log(result, aarray);\n * // 120 [5, 4, 3, 2, 1]\n *\n * ax5.util.reduce({a:1, b:2}, function(p, n){\n\t\t * return parseInt(p|0) + parseInt(n);\n\t\t * });\n * // 3\n * ```\n */\n function reduce(O, _fn) {\n var i, l, tokenItem;\n if (isArray(O)) {\n i = 0, l = O.length, tokenItem = O[i];\n for (; i < l - 1;) {\n if (typeof O[i] != \"undefined\") {\n if (( tokenItem = _fn.call(root, tokenItem, O[++i]) ) === false) break;\n }\n }\n return tokenItem;\n }\n else if (isObject(O)) {\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if (( tokenItem = _fn.call(root, tokenItem, O[i]) ) === false) break;\n }\n }\n return tokenItem;\n }\n else {\n console.error(\"argument error : ax5.util.reduce - use Array or Object\");\n return null;\n }\n }\n\n /**\n * 배열의 오른쪽에서 왼쪽으로 연산을 진행하는데 수행한 결과가 오른쪽 값으로 반영되어 최종 오른쪽 값을 반환합니다.\n * @method ax5.util.reduceRight\n * @param {Array} O\n * @param {Function} _fn\n * @returns {Alltypes}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.reduceRight( aarray, function(p, n){\n\t\t * console.log( n );\n\t\t * return p * n;\n\t\t * });\n * console.log(result, aarray);\n * 120 [5, 4, 3, 2, 1]\n * ```\n */\n function reduceRight(O, _fn) {\n var i = O.length - 1, tokenItem = O[i];\n for (; i > 0;) {\n if (typeof O[i] != \"undefined\") {\n if (( tokenItem = _fn.call(root, tokenItem, O[--i]) ) === false) break;\n }\n }\n return tokenItem;\n }\n\n /**\n * 배열또는 오브젝트의 각 아이템을 인자로 하는 사용자 함수의 결과가 참인 아이템들의 배열을 반환합니다.\n * @method ax5.util.filter\n * @param {Object|Array} O\n * @param {Function} _fn\n * @returns {Array}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.filter( aarray, function(){\n\t\t * return this % 2;\n\t\t * });\n * console.log(result);\n * // [5, 3, 1]\n *\n * var filObject = {a:1, s:\"string\", oa:{pickup:true, name:\"AXISJ\"}, os:{pickup:true, name:\"AX5\"}};\n * result = ax5.util.filter( filObject, function(){\n\t\t * \treturn this.pickup;\n\t\t * });\n * console.log( ax5.util.toJson(result) );\n * // [{\"pickup\": , \"name\": \"AXISJ\"}, {\"pickup\": , \"name\": \"AX5\"}]\n * ```\n */\n function filter(O, _fn) {\n if (isNothing(O)) return [];\n var k, i = 0, l = O.length, results = [], fnResult;\n if (isObject(O)) {\n for (k in O) {\n if (typeof O[k] != \"undefined\") {\n if (fnResult = _fn.call(O[k], k, O[k])) results.push(O[k]);\n }\n }\n }\n else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") {\n if (fnResult = _fn.call(O[i], i, O[i])) results.push(O[i]);\n i++;\n }\n }\n }\n return results;\n }\n\n /**\n * Object를 JSONString 으로 반환합니다.\n * @method ax5.util.toJson\n * @param {Object|Array} O\n * @returns {String} JSON\n * @example\n * ```js\n * var ax = ax5.util;\n * var myObject = {\n\t\t * a:1, b:\"2\", c:{axj:\"what\", arrs:[0,2,\"3\"]},\n\t\t * fn: function(abcdd){\n\t\t * return abcdd;\n\t\t * }\n\t\t * };\n * console.log( ax.toJson(myObject) );\n * ```\n */\n function toJson(O) {\n var jsonString = \"\";\n if (ax5.util.isArray(O)) {\n var i = 0, l = O.length;\n jsonString += \"[\";\n for (; i < l; i++) {\n if (i > 0) jsonString += \",\";\n jsonString += toJson(O[i]);\n }\n jsonString += \"]\";\n }\n else if (ax5.util.isObject(O)) {\n jsonString += \"{\";\n var jsonObjectBody = [];\n each(O, function (key, value) {\n jsonObjectBody.push('\"' + key + '\": ' + toJson(value));\n });\n jsonString += jsonObjectBody.join(\", \");\n jsonString += \"}\";\n }\n else if (ax5.util.isString(O)) {\n jsonString = '\"' + O + '\"';\n }\n else if (ax5.util.isNumber(O)) {\n jsonString = O;\n }\n else if (ax5.util.isUndefined(O)) {\n jsonString = \"undefined\";\n }\n else if (ax5.util.isFunction(O)) {\n jsonString = '\"{Function}\"';\n }\n else {\n jsonString = O;\n }\n return jsonString;\n }\n\n /**\n * 관용의 JSON Parser\n * @method ax5.util.parseJson\n * @param {String} JSONString\n * @param {Boolean} [force] - 강제 적용 여부 (json 문자열 검사를 무시하고 오브젝트 변환을 시도합니다.)\n * @returns {Object}\n * @example\n * ```\n * console.log(ax5.util.parseJson('{\"a\":1}'));\n * // Object {a: 1}\n * console.log(ax5.util.parseJson(\"{'a':1, 'b':'b'}\"));\n * // Object {a: 1, b: \"b\"}\n * console.log(ax5.util.parseJson(\"{'a':1, 'b':function(){return 1;}}\", true));\n * // Object {a: 1, b: function}\n * console.log(ax5.util.parseJson(\"{a:1}\"));\n * // Object {a: 1}\n * console.log(ax5.util.parseJson(\"[1,2,3]\"));\n * // [1, 2, 3]\n * console.log(ax5.util.parseJson(\"['1','2','3']\"));\n * // [\"1\", \"2\", \"3\"]\n * console.log(ax5.util.parseJson(\"[{'a':'99'},'2','3']\"));\n * // [Object, \"2\", \"3\"]\n * ```\n */\n function parseJson(str, force) {\n if (force || (reIsJson).test(str)) {\n try {\n return (new Function('', 'return ' + str))();\n } catch (e) {\n return {error: 500, msg: 'syntax error'};\n }\n }\n else {\n return {error: 500, msg: 'syntax error'};\n }\n }\n\n /**\n * 인자의 타입을 반환합니다.\n * @method ax5.util.getType\n * @param {Object|Array|String|Number|Element|Etc} O\n * @returns {String} window|element|object|array|function|string|number|undefined|nodelist\n * @example\n * ```js\n * var axf = ax5.util;\n * var a = 11;\n * var b = \"11\";\n * console.log( axf.getType(a) );\n * console.log( axf.getType(b) );\n * ```\n */\n function getType(O) {\n var typeName;\n if (O != null && O == O.window) {\n typeName = \"window\";\n }\n else if (!!(O && O.nodeType == 1)) {\n typeName = \"element\";\n }\n else if (!!(O && O.nodeType == 11)) {\n typeName = \"fragment\";\n }\n else if (O === null) {\n typeName = \"null\";\n }\n else if (typeof O === \"undefined\") {\n typeName = \"undefined\";\n }\n else if (_toString.call(O) == \"[object Object]\") {\n typeName = \"object\";\n }\n else if (_toString.call(O) == \"[object Array]\") {\n typeName = \"array\";\n }\n else if (_toString.call(O) == \"[object String]\") {\n typeName = \"string\";\n }\n else if (_toString.call(O) == \"[object Number]\") {\n typeName = \"number\";\n }\n else if (_toString.call(O) == \"[object NodeList]\") {\n typeName = \"nodelist\";\n }\n else if (typeof O === \"function\") {\n typeName = \"function\";\n }\n return typeName;\n }\n\n /**\n * 오브젝트가 window 인지 판단합니다.\n * @method ax5.util.isWindow\n * @param {Object} O\n * @returns {Boolean}\n */\n function isWindow(O) {\n return O != null && O == O.window;\n }\n\n /**\n * 오브젝트가 HTML 엘리먼트여부인지 판단합니다.\n * @method ax5.util.isElement\n * @param {Object} O\n * @returns {Boolean}\n */\n function isElement(O) {\n return !!(O && (O.nodeType == 1 || O.nodeType == 11));\n }\n\n /**\n * 오브젝트가 Object인지 판단합니다.\n * @method ax5.util.isObject\n * @param {Object} O\n * @returns {Boolean}\n */\n function isObject(O) {\n return _toString.call(O) == \"[object Object]\";\n }\n\n /**\n * 오브젝트가 Array인지 판단합니다.\n * @method ax5.util.isArray\n * @param {Object} O\n * @returns {Boolean}\n */\n function isArray(O) {\n return _toString.call(O) == \"[object Array]\";\n }\n\n /**\n * 오브젝트가 Function인지 판단합니다.\n * @method ax5.util.isFunction\n * @param {Object} O\n * @returns {Boolean}\n */\n function isFunction(O) {\n return typeof O === \"function\";\n }\n\n /**\n * 오브젝트가 String인지 판단합니다.\n * @method ax5.util.isString\n * @param {Object} O\n * @returns {Boolean}\n */\n function isString(O) {\n return _toString.call(O) == \"[object String]\";\n }\n\n /**\n * 오브젝트가 Number인지 판단합니다.\n * @method ax5.util.isNumber\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNumber(O) {\n return _toString.call(O) == \"[object Number]\";\n }\n\n /**\n * 오브젝트가 NodeList인지 판단합니다.\n * @method ax5.util.isNodelist\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNodelist(O) {\n return !!(_toString.call(O) == \"[object NodeList]\" || (typeof O !== \"undefined\" && O && O[0] && O[0].nodeType == 1));\n }\n\n /**\n * 오브젝트가 undefined인지 판단합니다.\n * @method ax5.util.isUndefined\n * @param {Object} O\n * @returns {Boolean}\n */\n function isUndefined(O) {\n return typeof O === \"undefined\";\n }\n\n /**\n * 오브젝트가 undefined이거나 null이거나 빈값인지 판단합니다.\n * @method ax5.util.isNothing\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNothing(O) {\n return (typeof O === \"undefined\" || O === null || O === \"\");\n }\n\n /**\n * 오브젝트가 날자값인지 판단합니다.\n * @method ax5.util.isDate\n * @param {Date} O\n * @returns {Boolean}\n * @example\n * ```js\n * ax5.util.isDate('2016-09-30');\n * // false\n * ax5.util.isDate( new Date('2016-09-30') );\n * // true\n * ```\n */\n function isDate(O) {\n return (O instanceof Date && !isNaN(O.valueOf()));\n }\n\n\n function isDateFormat(O) {\n var\n result = false\n ;\n if (!O) {\n }\n else if (O instanceof Date && !isNaN(O.valueOf())) {\n result = true;\n }\n else {\n if (O.length > 7) {\n if (date(O) instanceof Date) {\n return true;\n }\n }\n O = O.replace(/\\D/g, '');\n if (O.length > 7) {\n var\n mm = O.substr(4, 2),\n dd = O.substr(6, 2)\n ;\n O = date(O);\n if (O.getMonth() == (mm - 1) && O.getDate() == dd) {\n result = true;\n }\n }\n }\n return result;\n }\n\n /**\n * 오브젝트의 첫번째 아이템을 반환합니다.\n * @method ax5.util.first\n * @param {Object|Array} O\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.first({a:1, b:2});\n * // Object {a: 1}\n * ax5.util.first([1,2,3,4]);\n * // 1\n * ```\n */\n function first(O) {\n if (isObject(O)) {\n var keys = Object.keys(O);\n var item = {};\n item[keys[0]] = O[keys[0]];\n return item;\n }\n else if (isArray(O)) {\n return O[0];\n }\n else {\n console.error(\"ax5.util.object.first\", \"argument type error\");\n return undefined;\n }\n }\n\n /**\n * 오브젝트의 마지막 아이템을 반환합니다.\n * @method ax5.util.last\n * @param {Object|Array} O\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.last({a:1, b:2});\n * // Object {b: 2}\n * ax5.util.last([1,2,3,4]);\n * // 4\n * ```\n */\n function last(O) {\n if (isObject(O)) {\n var keys = Object.keys(O);\n var item = {};\n item[keys[keys.length - 1]] = O[keys[keys.length - 1]];\n return item;\n }\n else if (isArray(O)) {\n return O[O.length - 1];\n }\n else {\n console.error(\"ax5.util.object.last\", \"argument type error\");\n return undefined;\n }\n }\n\n /**\n * 쿠키를 설정합니다.\n * @method ax5.util.setCookie\n * @param {String} cname - 쿠키이름\n * @param {String} cvalue - 쿠키값\n * @param {Number} [exdays] - 쿠키 유지일수\n * @param {Object} [opts] - path, domain 설정 옵션\n * @example\n * ```js\n * ax5.util.setCookie(\"jslib\", \"AX5\");\n * ax5.util.setCookie(\"jslib\", \"AX5\", 3);\n * ax5.util.setCookie(\"jslib\", \"AX5\", 3, {path:\"/\", domain:\".axisj.com\"});\n * ```\n */\n function setCookie(cn, cv, exdays, opts) {\n var expire;\n if (typeof exdays === \"number\") {\n expire = new Date();\n expire.setDate(expire.getDate() + exdays);\n }\n opts = opts || {};\n return (doc.cookie = [\n escape(cn), '=', escape(cv),\n expire ? \"; expires=\" + expire.toUTCString() : \"\", // use expires attribute, max-age is not supported by IE\n opts.path ? \"; path=\" + opts.path : \"\",\n opts.domain ? \"; domain=\" + opts.domain : \"\",\n opts.secure ? \"; secure\" : \"\"\n ].join(\"\"));\n }\n\n /**\n * 쿠키를 가져옵니다.\n * @method ax5.util.getCookie\n * @param {String} cname\n * @returns {String} cookie value\n * @example\n * ```js\n * ax5.util.getCookie(\"jslib\");\n * ```\n */\n function getCookie(cname) {\n var name = cname + \"=\";\n var ca = doc.cookie.split(';'), i = 0, l = ca.length;\n for (; i < l; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') c = c.substring(1);\n if (c.indexOf(name) != -1) return unescape(c.substring(name.length, c.length));\n }\n return \"\";\n }\n\n /**\n * jsonString 으로 alert 합니다.\n * @method ax5.util.alert\n * @param {Object|Array|String|Number} O\n * @returns {Object|Array|String|Number} O\n * @example ```js\n * ax5.util.alert({a:1,b:2});\n * ax5.util.alert(\"정말?\");\n * ```\n */\n function alert(O) {\n win.alert(toJson(O));\n return O;\n }\n\n /**\n * 문자열의 특정 문자열까지 잘라주거나 원하는 포지션까지 잘라줍니다.\n * @method ax5.util.left\n * @param {String} str - 문자열\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {String}\n * @example\n * ```js\n * ax5.util.left(\"abcd.efd\", 3);\n * // abc\n * ax5.util.left(\"abcd.efd\", \".\");\n * // abcd\n * ```\n */\n function left(str, pos) {\n if (typeof str === \"undefined\" || typeof pos === \"undefined\") return \"\";\n if (isString(pos)) {\n return (str.indexOf(pos) > -1) ? str.substr(0, str.indexOf(pos)) : \"\";\n }\n else if (isNumber(pos)) {\n return str.substr(0, pos);\n }\n else {\n return \"\";\n }\n }\n\n /**\n * 문자열의 특정 문자열까지 잘라주거나 원하는 포지션까지 잘라줍니다.\n * @method ax5.util.right\n * @param {String} str - 문자열\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {String}\n * @example\n * ```js\n * ax5.util.right(\"abcd.efd\", 3);\n * // efd\n * ax5.util.right(\"abcd.efd\", \".\");\n * // efd\n * ```\n */\n function right(str, pos) {\n if (typeof str === \"undefined\" || typeof pos === \"undefined\") return \"\";\n str = '' + str;\n if (isString(pos)) {\n return (str.lastIndexOf(pos) > -1) ? str.substr(str.lastIndexOf(pos) + 1) : \"\";\n }\n else if (isNumber(pos)) {\n return str.substr(str.length - pos);\n }\n else {\n return \"\";\n }\n }\n\n /**\n * css형 문자열이나 특수문자가 포함된 문자열을 카멜케이스로 바꾸어 반환합니다.\n * @method ax5.util.camelCase\n * @param {String} str\n * @returns {String}\n * @example\n * ```js\n * ax5.util.camelCase(\"inner-width\");\n * ax5.util.camelCase(\"innerWidth\");\n * // innerWidth\n * ```\n */\n function camelCase(str) {\n return str.replace(reMs, \"ms-\").replace(reSnakeCase, function (all, letter) {\n return letter.toUpperCase();\n });\n }\n\n /**\n * css형 문자열이나 카멜케이스문자열을 스네이크 케이스 문자열로 바꾸어 반환합니다.\n * @method ax5.util.snakeCase\n * @param {String} str\n * @returns {String}\n * @example\n * ```js\n * ax5.util.snakeCase(\"innerWidth\");\n * ax5.util.snakeCase(\"inner-Width\");\n * ax5.util.snakeCase(\"innerWidth\");\n * // inner-width\n * ```\n */\n function snakeCase(str) {\n return camelCase(str).replace(reCamelCase, function (all, letter) {\n return \"-\" + letter.toLowerCase();\n });\n }\n\n /**\n * 문자열에서 -. 을 제외한 모든 문자열을 제거하고 숫자로 반환합니다. 옵션에 따라 원하는 형식의 숫자로 변환 할 수 도 있습니다.\n * @method ax5.util.number\n * @param {String|Number} str\n * @param {Object} cond - 옵션\n * @returns {String|Number}\n * @example\n * ```js\n * var cond = {\n\t\t * \tround: {Number|Boolean} - 반올림할 자릿수,\n\t\t * \tmoney: {Boolean} - 통화,\n\t\t * \tabs: {Boolean} - 절대값,\n\t\t * \tbyte: {Boolean} - 바이트\n\t\t * }\n *\n * console.log(ax5.util.number(123456789.678, {round:1}));\n * console.log(ax5.util.number(123456789.678, {round:1, money:true}));\n * console.log(ax5.util.number(123456789.678, {round:2, byte:true}));\n * console.log(ax5.util.number(-123456789.8888, {abs:true, round:2, money:true}));\n * console.log(ax5.util.number(\"A-1234~~56789.8~888PX\", {abs:true, round:2, money:true}));\n *\n * //123456789.7\n * //123,456,789.7\n * //117.7MB\n * //123,456,789.89\n * //123,456,789.89\n * ```\n */\n function number(str, cond) {\n var result, pair = ('' + str).split(reDot), isMinus, returnValue;\n\n isMinus = (Number(pair[0].replace(/,/g, \"\")) < 0 || pair[0] == \"-0\");\n returnValue = 0.0;\n pair[0] = pair[0].replace(reInt, \"\");\n\n if (pair[1]) {\n pair[1] = pair[1].replace(reNotNum, \"\");\n returnValue = Number(pair[0] + \".\" + pair[1]) || 0;\n }\n else {\n returnValue = Number(pair[0]) || 0;\n }\n result = (isMinus) ? -returnValue : returnValue;\n\n each(cond, function (k, c) {\n if (k == \"round\") {\n if (isNumber(c)) {\n if (c < 0) {\n result = +(Math.round(result + \"e-\" + Math.abs(c)) + \"e+\" + Math.abs(c));\n }\n else {\n result = +(Math.round(result + \"e+\" + c) + \"e-\" + c);\n }\n }\n else {\n result = Math.round(result);\n }\n }\n if (k == \"floor\") {\n result = Math.floor(result);\n }\n if (k == \"ceil\") {\n result = Math.ceil(result);\n }\n else if (k == \"money\") {\n result = (function (val) {\n var txtNumber = '' + val;\n if (isNaN(txtNumber) || txtNumber == \"\") {\n return \"\";\n }\n else {\n var arrNumber = txtNumber.split('.');\n arrNumber[0] += '.';\n do {\n arrNumber[0] = arrNumber[0].replace(reMoneySplit, '$1,$2');\n } while (reMoneySplit.test(arrNumber[0]));\n if (arrNumber.length > 1) {\n return arrNumber.join('');\n }\n else {\n return arrNumber[0].split('.')[0];\n }\n }\n })(result);\n }\n else if (k == \"abs\") {\n result = Math.abs(Number(result));\n }\n else if (k == \"byte\") {\n result = (function (val) {\n val = Number(result);\n var nUnit = \"KB\";\n var myByte = val / 1024;\n if (myByte / 1024 > 1) {\n nUnit = \"MB\";\n myByte = myByte / 1024;\n }\n if (myByte / 1024 > 1) {\n nUnit = \"GB\";\n myByte = myByte / 1024;\n }\n return number(myByte, {round: 1}) + nUnit;\n })(result);\n }\n });\n\n return result;\n }\n\n /**\n * 배열 비슷한 오브젝트를 배열로 변환해줍니다.\n * @method ax5.util.toArray\n * @param {Object|Elements|Arguments} O\n * @returns {Array}\n * @example\n * ```js\n * ax5.util.toArray(arguments);\n * //\n * ```\n */\n function toArray(O) {\n if (typeof O.length != \"undefined\") return Array.prototype.slice.call(O);\n return [];\n }\n\n /**\n * 첫번째 인자에 두번째 인자 아이템을 합쳐줍니다. concat과 같은 역할을 하지만. 인자가 Array타입이 아니어도 됩니다.\n * @method ax5.util.merge\n * @param {Array|ArrayLike} first\n * @param {Array|ArrayLike} second\n * @returns {Array} first\n * @example\n * ```\n *\n * ```\n */\n function merge(first, second) {\n var l = second.length,\n i = first.length,\n j = 0;\n\n if (typeof l === \"number\") {\n for (; j < l; j++) {\n first[i++] = second[j];\n }\n }\n else {\n while (second[j] !== undefined) {\n first[i++] = second[j++];\n }\n }\n\n first.length = i;\n\n return first;\n }\n\n /**\n * 오브젝트를 파라미터형식으로 또는 파라미터를 오브젝트 형식으로 변환합니다.\n * @method ax5.util.param\n * @param {Object|Array|String} O\n * @param {String} [cond] - param|object\n * @returns {Object|String}\n * @example\n * ```\n * ax5.util.param({a:1,b:'1232'}, \"param\");\n * ax5.util.param(\"a=1&b=1232\", \"param\");\n * // \"a=1&b=1232\"\n * ax5.util.param(\"a=1&b=1232\");\n * // {a: \"1\", b: \"1232\"}\n * ```\n */\n function param(O, cond) {\n var p;\n if (isString(O) && typeof cond !== \"undefined\" && cond == \"param\") {\n return O;\n }\n else if ((isString(O) && typeof cond !== \"undefined\" && cond == \"object\") || (isString(O) && typeof cond === \"undefined\")) {\n p = {};\n each(O.split(reAmp), function () {\n var item = this.split(reEq);\n if (!p[item[0]]) p[item[0]] = item[1];\n else {\n if (isString(p[item[0]])) p[item[0]] = [p[item[0]]];\n p[item[0]].push(item[1]);\n }\n });\n return p;\n }\n else {\n p = [];\n each(O, function (k, v) {\n p.push(k + \"=\" + escape(v));\n });\n return p.join('&');\n }\n }\n\n function encode(s) {\n return encodeURIComponent(s);\n }\n\n function decode(s) {\n return decodeURIComponent(s);\n }\n\n function error() {\n ax5.info.onerror.apply(this, arguments);\n }\n\n function localDate(yy, mm, dd, hh, mi, ss) {\n var utcD, localD;\n localD = new Date();\n if (mm < 0) mm = 0;\n if (typeof hh === \"undefined\") hh = 12;\n if (typeof mi === \"undefined\") mi = 0;\n utcD = new Date(Date.UTC(yy, mm, dd || 1, hh, mi, ss || 0));\n\n if (mm == 0 && dd == 1 && utcD.getUTCHours() + (utcD.getTimezoneOffset() / 60) < 0) {\n utcD.setUTCHours(0);\n }\n else {\n utcD.setUTCHours(utcD.getUTCHours() + (utcD.getTimezoneOffset() / 60));\n }\n return utcD;\n }\n\n /**\n * 날짜 형식의 문자열이나 Date객체를 조건에 맞게 처리 한 후 원하는 return 값으로 반환합니다.\n * @method ax5.util.date\n * @param {String|Date} d\n * @param {Object} cond\n * @returns {Date|String}\n * @example\n * ```js\n * ax5.util.date('2013-01-01'); // Tue Jan 01 2013 23:59:00 GMT+0900 (KST)\n * ax5.util.date((new Date()), {add:{d:10}, return:'yyyy/MM/dd'}); // \"2015/07/01\"\n * ax5.util.date('1919-03-01', {add:{d:10}, return:'yyyy/MM/dd hh:mm:ss'}); // \"1919/03/11 23:59:00\"\n * ```\n */\n function date(d, cond) {\n let yy, mm, dd, hh, mi,\n aDateTime, aTimes, aTime, aDate,\n va,\n ISO_8601 = /^\\d{4}(-\\d\\d(-\\d\\d(T\\d\\d:\\d\\d(:\\d\\d)?(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?)?)?)?$/i,\n ISO_8601_FULL = /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?$/i;\n\n if (isString(d)) {\n if (d.length == 0) {\n d = new Date();\n }\n else if (d.length > 15) {\n if (ISO_8601_FULL.test(d) || ISO_8601.test(d)) {\n d = new Date(d);\n } else {\n aDateTime = d.split(/ /g), aTimes, aTime,\n aDate = aDateTime[0].split(/\\D/g),\n yy = aDate[0];\n mm = parseFloat(aDate[1]);\n dd = parseFloat(aDate[2]);\n aTime = aDateTime[1] || \"09:00\";\n aTimes = aTime.substring(0, 5).split(\":\");\n hh = parseFloat(aTimes[0]);\n mi = parseFloat(aTimes[1]);\n if (right(aTime, 2) === \"AM\" || right(aTime, 2) === \"PM\") hh += 12;\n d = localDate(yy, mm - 1, dd, hh, mi);\n }\n }\n else if (d.length == 14) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, number(va.substr(6, 2)), number(va.substr(8, 2)), number(va.substr(10, 2)), number(va.substr(12, 2)));\n }\n else if (d.length > 7) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, number(va.substr(6, 2)));\n }\n else if (d.length > 4) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, 1);\n }\n else if (d.length > 2) {\n va = d.replace(/\\D/g, \"\");\n return localDate(va.substr(0, 4), va.substr(4, 2) - 1, 1);\n }\n else {\n d = new Date();\n }\n }\n if (typeof cond === \"undefined\" || typeof d === \"undefined\") {\n return d;\n }\n else {\n if (\"add\" in cond) {\n d = (function (_d, opts) {\n let yy, mm, dd, mxdd,\n DyMilli = ((1000 * 60) * 60) * 24;\n\n if (typeof opts[\"d\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + (opts[\"d\"] * DyMilli));\n }\n else if (typeof opts[\"m\"] !== \"undefined\") {\n yy = _d.getFullYear();\n mm = _d.getMonth();\n dd = _d.getDate();\n yy = yy + parseInt(opts[\"m\"] / 12);\n mm += opts[\"m\"] % 12;\n mxdd = daysOfMonth(yy, mm);\n if (mxdd < dd) dd = mxdd;\n _d = new Date(yy, mm, dd, 12);\n }\n else if (typeof opts[\"y\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + ((opts[\"y\"] * 365) * DyMilli));\n }\n else if (typeof opts[\"h\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + (opts[\"h\"] * 1000 * 60 * 60));\n }\n\n return _d;\n })(new Date(d), cond[\"add\"]);\n }\n if (\"set\" in cond) {\n d = (function (_d, opts) {\n let yy, mm, dd,\n processor = {\n \"firstDayOfMonth\": function (date) {\n yy = date.getFullYear();\n mm = date.getMonth();\n dd = 1;\n return new Date(yy, mm, dd, 12);\n },\n \"lastDayOfMonth\": function (date) {\n yy = date.getFullYear();\n mm = date.getMonth();\n dd = daysOfMonth(yy, mm);\n return new Date(yy, mm, dd, 12);\n }\n };\n if (opts in processor) {\n return processor[opts](_d);\n } else {\n return _d;\n }\n })(new Date(d), cond[\"set\"]);\n }\n if (\"return\" in cond) {\n return (function () {\n\n let fStr = cond[\"return\"], nY, nM, nD, nH, nMM, nS, nDW,\n yre, regY, mre, regM, dre, regD, hre, regH, mire, regMI, sre, regS, dwre, regDW;\n\n nY = d.getUTCFullYear();\n nM = setDigit(d.getMonth() + 1, 2);\n nD = setDigit(d.getDate(), 2);\n nH = setDigit(d.getHours(), 2);\n nMM = setDigit(d.getMinutes(), 2);\n nS = setDigit(d.getSeconds(), 2);\n nDW = d.getDay();\n\n yre = /[^y]*(yyyy)[^y]*/gi;\n yre.exec(fStr);\n regY = RegExp.$1;\n mre = /[^m]*(MM)[^m]*/g;\n mre.exec(fStr);\n regM = RegExp.$1;\n dre = /[^d]*(dd)[^d]*/gi;\n dre.exec(fStr);\n regD = RegExp.$1;\n hre = /[^h]*(hh)[^h]*/gi;\n hre.exec(fStr);\n regH = RegExp.$1;\n mire = /[^m]*(mm)[^i]*/g;\n mire.exec(fStr);\n regMI = RegExp.$1;\n sre = /[^s]*(ss)[^s]*/gi;\n sre.exec(fStr);\n regS = RegExp.$1;\n dwre = /[^d]*(dw)[^w]*/gi;\n dwre.exec(fStr);\n regDW = RegExp.$1;\n\n if (regY === \"yyyy\") {\n fStr = fStr.replace(regY, right(nY, regY.length));\n }\n if (regM === \"MM\") {\n if (regM.length == 1) nM = (d.getMonth() + 1);\n fStr = fStr.replace(regM, nM);\n }\n if (regD === \"dd\") {\n if (regD.length == 1) nD = d.getDate();\n fStr = fStr.replace(regD, nD);\n }\n if (regH === \"hh\") {\n fStr = fStr.replace(regH, nH);\n }\n if (regMI === \"mm\") {\n fStr = fStr.replace(regMI, nMM);\n }\n if (regS === \"ss\") {\n fStr = fStr.replace(regS, nS);\n }\n if (regDW == \"dw\") {\n fStr = fStr.replace(regDW, info.weekNames[nDW].label);\n }\n return fStr;\n })();\n }\n else {\n return d;\n }\n }\n }\n\n /**\n * 인자인 날짜가 오늘부터 몇일전인지 반환합니다. 또는 인자인 날짜가 가까운 미래에 몇일 후인지 반환합니다.\n * @method ax5.util.dday\n * @param {String|Data} d\n * @param {Object} cond\n * @returns {Number}\n * @example\n * ```js\n * ax5.util.dday('2016-01-29');\n * // 1\n * ax5.util.dday('2016-01-29', {today:'2016-01-28'});\n * // 1\n * ax5.util.dday('1977-03-29', {today:'2016-01-28', age:true});\n * // 39\n * ```\n */\n function dday(d, cond) {\n var memoryDay = date(d), DyMilli = ((1000 * 60) * 60) * 24, today = new Date(), diffnum, thisYearMemoryDay;\n\n function getDayTime(_d) {\n return Math.floor(_d.getTime() / DyMilli) * DyMilli;\n }\n\n if (typeof cond === \"undefined\") {\n diffnum = number((( getDayTime(memoryDay) - getDayTime(today) ) / DyMilli), {floor: true});\n return diffnum;\n }\n\n else {\n diffnum = number((( getDayTime(memoryDay) - getDayTime(today) ) / DyMilli), {floor: true});\n if (cond[\"today\"]) {\n today = date(cond.today);\n diffnum = number((( getDayTime(memoryDay) - getDayTime(today) ) / DyMilli), {floor: true});\n }\n if (cond[\"thisYear\"]) {\n thisYearMemoryDay = new Date(today.getFullYear(), memoryDay.getMonth(), memoryDay.getDate());\n diffnum = number((( getDayTime(thisYearMemoryDay) - getDayTime(today) ) / DyMilli), {floor: true});\n if (diffnum < 0) {\n thisYearMemoryDay = new Date(today.getFullYear() + 1, memoryDay.getMonth(), memoryDay.getDate());\n diffnum = number((( getDayTime(thisYearMemoryDay) - getDayTime(today) ) / DyMilli), {floor: true});\n }\n }\n if (cond[\"age\"]) {\n thisYearMemoryDay = new Date(today.getFullYear(), memoryDay.getMonth(), memoryDay.getDate());\n diffnum = thisYearMemoryDay.getFullYear() - memoryDay.getFullYear();\n }\n\n return diffnum;\n }\n }\n\n /**\n * 인자인 날짜가 몇년 몇월의 몇번째 주차인지 반환합니다.\n * @method ax5.util.weeksOfMonth\n * @param {String|Data} d\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.weeksOfMonth(\"2015-10-01\"); // {year: 2015, month: 10, count: 1}\n * ax5.util.weeksOfMonth(\"2015-09-19\"); // {year: 2015, month: 9, count: 3}\n * ```\n */\n function weeksOfMonth(d) {\n var myDate = date(d);\n return {\n year: myDate.getFullYear(),\n month: myDate.getMonth() + 1,\n count: parseInt(myDate.getDate() / 7 + 1)\n };\n }\n\n /**\n * 년월에 맞는 날자수를 반환합니다.\n * (new Date()).getMonth() 기준으로 월값을 보냅니다. \"2월\" 인경우 \"1\" 을 넘기게 됩니다.\n * @method ax5.util.daysOfMonth\n * @param {Number} y\n * @param {Number} m\n * @returns {Number}\n * @examples\n * ```js\n * ax5.util.daysOfMonth(2015, 11); // 31\n * ax5.util.daysOfMonth(2015, 1); // 28\n * ```\n */\n function daysOfMonth(y, m) {\n if (m == 3 || m == 5 || m == 8 || m == 10) {\n return 30;\n }\n else if (m == 1) {\n return (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)) ? 29 : 28;\n }\n else {\n return 31;\n }\n }\n\n /**\n * 원하는 횟수 만큼 자릿수 맞춤 문자열을 포함한 문자열을 반환합니다.\n * 문자열 길이보다 작은값을 보내면 무시됩니다.\n * @method ax5.util.setDigit\n * @param {String|Number} num\n * @param {Number} length\n * @param {String} [padder=0]\n * @param {Number} [radix]\n * @returns {String}\n * @example\n * ```\n * ax5.util.setDigit(2016, 6)\n * // \"002016\"\n * ax5.util.setDigit(2016, 2)\n * // \"2016\"\n * ```\n */\n function setDigit(num, length, padder, radix) {\n var s = num.toString(radix || 10);\n return times((padder || '0'), (length - s.length)) + s;\n }\n\n /**\n * 문자열을 지정된 수만큼 반복 합니다.\n * @param {String} s\n * @param {Number} count\n * @returns {string}\n * @example\n * ```\n * ax5.util.times(2016, 2)\n * //\"20162016\"\n * ```\n */\n function times(s, count) {\n return count < 1 ? '' : new Array(count + 1).join(s);\n }\n\n /**\n * 타겟엘리먼트의 부모 엘리멘트 트리에서 원하는 조건의 엘리먼트를 얻습니다.\n * @method ax5.util.findParentNode\n * @param {Element} _target - target element\n * @param {Object|Function} cond - 원하는 element를 찾을 조건\n * @returns {Element}\n * @example\n * ```\n * // cond 속성정의\n * var cond = {\n\t\t * \ttagname: {String} - 태그명 (ex. a, div, span..),\n\t\t * \tclazz: {String} - 클래스명\n\t\t * \t[, 그 외 찾고 싶은 attribute명들]\n\t\t * };\n * console.log(\n * console.log(\n * ax5.util.findParentNode(e.target, {tagname:\"a\", clazz:\"ax-menu-handel\", \"data-custom-attr\":\"attr_value\"})\n * );\n * // cond 함수로 처리하기\n * jQuery('#id').bind(\"click.app_expand\", function(e){\n\t\t * \tvar target = ax5.util.findParentNode(e.target, function(target){\n\t\t * \t\tif($(target).hasClass(\"aside\")){\n\t\t * \t\t\treturn true;\n\t\t * \t\t}\n\t\t * \t\telse{\n\t\t * \t\t\treturn true;\n\t\t * \t\t}\n\t\t * \t});\n\t\t * \t//client-aside\n\t\t * \tif(target.id !== \"client-aside\"){\n\t\t * \t\t// some action\n\t\t * \t}\n\t\t * });\n * ```\n */\n\n function findParentNode(_target, cond) {\n if (_target) {\n while ((function () {\n var result = true;\n if (typeof cond === \"undefined\") {\n _target = (_target.parentNode) ? _target.parentNode : false;\n }\n else if (isFunction(cond)) {\n result = cond(_target);\n }\n else if (isObject(cond)) {\n for (var k in cond) {\n if (k === \"tagname\") {\n if (_target.tagName.toLocaleLowerCase() != cond[k]) {\n result = false;\n break;\n }\n }\n else if (k === \"clazz\" || k === \"class_name\") {\n if (\"className\" in _target) {\n var klasss = _target.className.split(reClassNameSplit);\n var hasClass = false;\n for (var a = 0; a < klasss.length; a++) {\n if (klasss[a] == cond[k]) {\n hasClass = true;\n break;\n }\n }\n result = hasClass;\n }\n else {\n result = false;\n break;\n }\n }\n else { // 그외 속성값들.\n if (_target.getAttribute) {\n if (_target.getAttribute(k) != cond[k]) {\n result = false;\n break;\n }\n }\n else {\n result = false;\n break;\n }\n }\n }\n }\n return !result;\n })()) {\n if (_target.parentNode && _target.parentNode.parentNode) {\n _target = _target.parentNode;\n }\n else {\n _target = false;\n break;\n }\n }\n }\n return _target;\n }\n\n /**\n * @method ax5.util.cssNumber\n * @param {String|Number} val\n * @returns {String}\n * @example\n * ```\n * console.log(ax5.util.cssNumber(\"100px\"))\n * console.log(ax5.util.cssNumber(\"100%\"))\n * console.log(ax5.util.cssNumber(\"100\"))\n * console.log(ax5.util.cssNumber(100))\n * console.log(ax5.util.cssNumber(\"!!100@#\"))\n * ```\n */\n function cssNumber(val) {\n var re = /\\D?(\\d+)([a-zA-Z%]*)/i,\n found = ('' + val).match(re),\n unit = found[2] || \"px\"\n ;\n\n return found[1] + unit;\n }\n\n /**\n * css string 및 object 를 넘기면 object 및 string 으로 변환되어 리턴됩니다.\n * @method ax5.util.css\n * @param {Object|String} val - CSS String or CSS Object\n * @returns {String|Object}\n * @example\n * ```\n * console.log(ax5.util.css({background: \"#ccc\", padding: \"50px\", width: \"100px\"}));\n * //\"background:#ccc;padding:50px;width:100px;\"\n * console.log(ax5.util.css('width:100px;padding: 50px; background: #ccc'));\n * // object {width: \"100px\", padding: \"50px\", background: \"#ccc\"}\n * ```\n */\n function css(val) {\n var returns;\n if (isObject(val)) {\n returns = '';\n for (var k in val) {\n returns += k + ':' + val[k] + ';';\n }\n return returns;\n }\n else if (isString(val)) {\n returns = {};\n var valSplited = val.split(/[ ]*;[ ]*/g);\n valSplited.forEach(function (v) {\n if ((v = v.trim()) !== \"\") {\n var vSplited = v.split(/[ ]*:[ ]*/g);\n returns[vSplited[0]] = vSplited[1];\n }\n });\n return returns;\n }\n }\n\n /**\n * @method ax5.util.stopEvent\n * @param {Event} e\n * @example\n * ```\n * ax5.util.stopEvent(e);\n * ```\n */\n function stopEvent(e) {\n // 이벤트 중지 구문\n if (!e) var e = window.event;\n\n //e.cancelBubble is supported by IE -\n // this will kill the bubbling process.\n e.cancelBubble = true;\n e.returnValue = false;\n\n //e.stopPropagation works only in Firefox.\n if (e.stopPropagation) e.stopPropagation();\n if (e.preventDefault) e.preventDefault();\n\n return false;\n // 이벤트 중지 구문 끝\n }\n\n /**\n * @method ax5.util.selectRange\n * @param {Element} el\n * @param {Element} offset\n * @example\n * ```\n * ax5.util.selectRange($(\"#select-test-0\")); // selectAll\n * ax5.util.selectRange($(\"#select-test-0\"), \"selectAll\"); //selectAll\n * ax5.util.selectRange($(\"#select-test-0\"), \"start\"); // focus on start\n * ax5.util.selectRange($(\"#select-test-0\"), \"end\"); // focus on end\n * ax5.util.selectRange($(\"#select-test-0\"), [1, 5]); // select 1~5\n * ```\n */\n const selectRange = (function () {\n var processor = {\n 'textRange': {\n 'selectAll': function (el, range, offset) {\n\n },\n 'arr': function (el, range, offset) {\n range.moveStart(\"character\", offset[0]); // todo ie node select 체크필요\n range.collapse();\n range.moveEnd(\"character\", offset[1]);\n },\n 'start': function (el, range, offset) {\n range.moveStart(\"character\", 0);\n range.collapse();\n },\n 'end': function (el, range, offset) {\n range.moveStart(\"character\", range.text.length);\n range.collapse();\n }\n },\n 'range': {\n 'selectAll': function (el, range, offset) {\n range.selectNodeContents(el);\n },\n 'arr': function (el, range, offset) {\n if (isObject(offset[0])) {\n range.setStart(offset[0].node, offset[0].offset);\n range.setEnd(offset[1].node, offset[1].offset);\n }\n else {\n range.setStart(el.firstChild, offset[0]);\n range.setEnd(el.firstChild, offset[1]);\n }\n },\n 'start': function (el, range, offset) {\n range.selectNodeContents(el);\n range.collapse(true);\n },\n 'end': function (el, range, offset) {\n range.selectNodeContents(el);\n range.collapse(false);\n }\n }\n };\n return function (el, offset) {\n var range, rangeType, selection;\n\n if (el instanceof jQuery) {\n el = el.get(0);\n }\n if (!el) return;\n\n // 레인지 타입 선택\n if (doc.body.createTextRange) {\n range = document.body.createTextRange();\n range.moveToElementText(el);\n rangeType = \"textRange\";\n }\n else if (window.getSelection) {\n selection = window.getSelection();\n range = document.createRange();\n rangeType = \"range\";\n }\n\n // range 적용\n if (typeof offset == \"undefined\") {\n processor[rangeType].selectAll.call(this, el, range, offset);\n }\n else if (isArray(offset)) {\n processor[rangeType].arr.call(this, el, range, offset);\n }\n else {\n for (var key in processor[rangeType]) {\n if (offset == key) {\n processor[rangeType][key].call(this, el, range, offset);\n break;\n }\n }\n }\n\n // 포커스 및 셀렉트\n if (doc.body.createTextRange) {\n range.select();\n el.focus();\n }\n else if (window.getSelection) {\n el.focus();\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n }\n })();\n\n /**\n * 지정한 시간을 지연시켜 함수를 실행합니다.\n * @method ax5.util.debounce\n * @param {Function} func\n * @param {Number} wait\n * @param {Object} options\n * @returns {debounced}\n * @example\n * ```js\n * var debounceFn = ax5.util.debounce(function( val ) { console.log(val); }, 300);\n * $(document.body).click(function(){\n * debounceFn(new Date());\n * });\n * ```\n */\n // https://github.com/lodash/lodash/blob/master/debounce.js\n function debounce(func, wait, options) {\n let lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime;\n\n let lastInvokeTime = 0;\n let leading = false;\n let maxing = false;\n let trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError('Expected a function')\n }\n wait = +wait || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n const args = lastArgs;\n const thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n const timeSinceLastCall = time - lastCallTime;\n const timeSinceLastInvoke = time - lastInvokeTime;\n const result = wait - timeSinceLastCall;\n\n return maxing ? Math.min(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n const timeSinceLastCall = time - lastCallTime;\n const timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait))\n }\n\n function timerExpired() {\n const time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time)\n }\n lastArgs = lastThis = undefined;\n return result\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now())\n }\n\n function debounced(...args) {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n\n lastArgs = args;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime)\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime)\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait)\n }\n return result\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced\n }\n\n /**\n * @method ax5.util.throttle\n * @param func\n * @param wait\n * @param options\n * @return {debounced}\n */\n //https://github.com/lodash/lodash/blob/master/throttle.js\n function throttle(func, wait, options) {\n let leading = true;\n let trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError('Expected a function');\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * @method ax5.util.deepCopy\n * @param {Object} obj\n * @returns {Object}\n * @example\n * ```js\n * var obj = [\n * {name:\"A\", child:[{name:\"a-1\"}]},\n * {name:\"B\", child:[{name:\"b-1\"}], callBack: function(){ console.log('callBack'); }}\n * ];\n * var copiedObj = ax5.util.deepCopy(obj)\n * ```\n */\n function deepCopy(obj) {\n var r, l;\n if (typeof obj == 'object') {\n if (U.isArray(obj)) {\n l = obj.length;\n r = new Array(l);\n for (var i = 0; i < l; i++) {\n r[i] = deepCopy(obj[i]);\n }\n return r;\n } else {\n return jQuery.extend({}, obj);\n }\n }\n return obj;\n }\n\n /**\n * HTML 문자열을 escape 처리합니다.\n * \"<\" represents the < sign.\n * \">\" represents the > sign.\n * \"&\" represents the & sign.\n * \"" represents the \" mark.\n * [Character entity references](https://www.w3.org/TR/html401/charset.html#h-5.3)\n * @method ax5.util.escapeHtml\n * @param {String} s\n * @returns {string}\n * @example\n * ```\n * ax5.util.escapeHtml('HTML <span>string</span> & \"escape\"')\n * //\"HTML <span>string</span> & "escape"\"\n * ```\n */\n function escapeHtml(s) {\n if (_toString.call(s) != \"[object String]\") return s;\n if (!s) return \"\";\n return s.replace(/[\\<\\>\\&\\\"]/gm, function (match) {\n switch (match) {\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case \"&\":\n return \"&\";\n case \"\\\"\":\n return \""\";\n default:\n return match;\n }\n });\n }\n\n /**\n * HTML 문자열을 unescape 처리합니다.\n * escapeHtml를 참고하세요.\n * @method ax5.util.unescapeHtml\n * @param {String} s\n * @returns {string}\n * @example\n * ```\n * ax5.util.unescapeHtml('HTML <span>string</span> & "escape"')\n * //\"HTML <span>string</span> & \"escape\"\"\n * ```\n */\n function unescapeHtml(s) {\n if (_toString.call(s) != \"[object String]\") return s;\n if (!s) return \"\";\n return s.replace(/(<)|(>)|(&)|(")/gm, function (match) {\n switch (match) {\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case \"&\":\n return \"&\";\n case \""\":\n return \"\\\"\";\n default:\n return match;\n }\n });\n }\n\n /**\n * @method ax5.util.string\n * @param {String} tmpl\n * @param {*} args\n * @return {ax5string}\n * @example\n * ```js\n * ax5.util.string(\"{0} is dead, but {1} is alive! {0} {2}\").format(\"ASP\", \"ASP.NET\");\n * ax5.util.string(\"{0} is dead, but {1} is alive! {0} {2}\").format([\"ASP\", \"ASP.NET\"]);\n * ax5.util.stinrg(\"{0} counts\").format(100);\n * ```\n */\n function string(_string) {\n return new (function (_string) {\n this.value = _string;\n this.toString = function () {\n return this.value;\n };\n /**\n * @method ax5.util.string.format\n * @returns {*}\n */\n this.format = function () {\n var args = [];\n for (var i = 0, l = arguments.length; i < l; i++) {\n args = args.concat(arguments[i]);\n }\n return this.value.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] != 'undefined' ? args[number] : match;\n });\n };\n /**\n * @method ax5.util.string.escape\n * @returns {*}\n */\n this.escape = function () {\n return escapeHtml(this.value);\n };\n /**\n * @method ax5.util.string.unescape\n * @returns {*}\n */\n this.unescape = function () {\n return unescapeHtml(this.value);\n };\n /**\n * @method ax5.util.string.encode\n * @returns {*}\n */\n this.encode = function () {\n return encode(this.value);\n };\n /**\n * @method ax5.util.string.decode\n * @returns {*}\n */\n this.decode = function () {\n return decode(this.value);\n };\n /**\n * @method ax5.util.string.left\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {*}\n */\n this.left = function (_pos) {\n return left(this.value, _pos);\n };\n /**\n * @method ax5.util.string.right\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {*}\n */\n this.right = function (_pos) {\n return right(this.value, _pos);\n };\n /**\n * @method ax5.util.string.camelCase\n * @returns {*}\n */\n this.camelCase = function () {\n return camelCase(this.value);\n };\n /**\n * @method ax5.util.string.snakeCase\n * @returns {*}\n */\n this.snakeCase = function () {\n return snakeCase(this.value);\n };\n })(_string);\n }\n\n /**\n * @method ax5.util.color\n * @param _hexColor\n * @return {ax5color}\n * @example\n * ```js\n * ax5.util.color(\"#ff3300\").lighten(10).getHexValue()\n * console.log(ax5.util.color(\"#ff3300\").darken(10).getHexValue());\n * ```\n */\n function color(_hexColor) {\n\n const matchers = (function () {\n\n // <http://www.w3.org/TR/css3-values/#integers>\n const CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // <http://www.w3.org/TR/css3-values/#number-value>\n const CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n const CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n const PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n const PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n })();\n\n const convertObject = function (_color) {\n let match;\n if ((match = matchers.rgb.exec(_color))) {\n return {r: match[1], g: match[2], b: match[3]};\n }\n if ((match = matchers.rgba.exec(_color))) {\n return {r: match[1], g: match[2], b: match[3], a: match[4]};\n }\n if ((match = matchers.hsl.exec(_color))) {\n return {h: match[1], s: match[2], l: match[3]};\n }\n if ((match = matchers.hsla.exec(_color))) {\n return {h: match[1], s: match[2], l: match[3], a: match[4]};\n }\n if ((match = matchers.hsv.exec(_color))) {\n return {h: match[1], s: match[2], v: match[3]};\n }\n if ((match = matchers.hsva.exec(_color))) {\n return {h: match[1], s: match[2], v: match[3], a: match[4]};\n }\n if ((match = matchers.hex8.exec(_color))) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n a: parseInt((match[4]) / 255, 16),\n format: \"hex8\"\n };\n }\n if ((match = matchers.hex6.exec(_color))) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n format: \"hex\"\n };\n }\n if ((match = matchers.hex4.exec(_color))) {\n return {\n r: parseInt(match[1] + '' + match[1], 16),\n g: parseInt(match[2] + '' + match[2], 16),\n b: parseInt(match[3] + '' + match[3], 16),\n a: parseInt(match[4] + '' + match[4], 16),\n format: \"hex8\"\n };\n }\n if ((match = matchers.hex3.exec(_color))) {\n return {\n r: parseInt(match[1] + '' + match[1], 16),\n g: parseInt(match[2] + '' + match[2], 16),\n b: parseInt(match[3] + '' + match[3], 16),\n format: \"hex\"\n };\n }\n\n return false;\n };\n\n function isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n }\n\n function isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n }\n\n function convertToPercentage(n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n\n return n;\n }\n\n function convertTo255(n) {\n return ax5.util.number(Math.min(255, Math.max(n, 0)), {'round': 2});\n }\n\n function convertToHex(n) {\n return setDigit(Math.round(n).toString(16), 2)\n }\n\n function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = \"100%\";\n }\n\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n }\n\n function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = Math.max(r, g, b), min = Math.min(r, g, b);\n var h, s, l = (max + min) / 2;\n\n if (max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return {h: h, s: s, l: l};\n }\n\n function hslToRgb(h, s, l) {\n let r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n if (s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n let q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n let p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return {r: r * 255, g: g * 255, b: b * 255};\n }\n\n return new (function (_color) {\n this._originalValue = _color;\n _color = convertObject(_color);\n this.r = _color.r;\n this.g = _color.g;\n this.b = _color.b;\n this.a = _color.a || 1;\n this._format = _color.format;\n this._hex = convertToHex(this.r) + convertToHex(this.g) + convertToHex(this.b);\n\n this.getHexValue = function () {\n return this._hex;\n };\n\n this.lighten = function (amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n let hsl = rgbToHsl(this.r, this.g, this.b), rgb = {};\n\n hsl.l += amount / 100;\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n\n rgb = hslToRgb(hsl.h, convertToPercentage(hsl.s), convertToPercentage(hsl.l));\n\n return color('rgba(' + convertTo255(rgb.r) + ', ' + convertTo255(rgb.g)+ ', ' + convertTo255(rgb.b) + ', ' + this.a + ')');\n };\n\n this.darken = function (amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n let hsl = rgbToHsl(this.r, this.g, this.b), rgb = {};\n\n hsl.l -= amount / 100;\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n\n rgb = hslToRgb(hsl.h, convertToPercentage(hsl.s), convertToPercentage(hsl.l));\n\n return color('rgba(' + convertTo255(rgb.r) + ', ' + convertTo255(rgb.g)+ ', ' + convertTo255(rgb.b) + ', ' + this.a + ')');\n };\n\n this.getBrightness = function () {\n return (this.r * 299 + this.g * 587 + this.b * 114) / 1000;\n };\n\n this.isDark = function() {\n return this.getBrightness() < 128;\n };\n\n this.isLight = function() {\n return !this.isDark();\n };\n\n this.getHsl = function () {\n let hsl = rgbToHsl(this.r, this.g, this.b);\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n return {\n h: hsl.h,\n s: hsl.s,\n l: hsl.l\n }\n };\n\n })(_hexColor);\n }\n\n return {\n alert: alert,\n each: each,\n map: map,\n search: search,\n reduce: reduce,\n reduceRight: reduceRight,\n filter: filter,\n sum: sum,\n avg: avg,\n toJson: toJson,\n parseJson: parseJson,\n first: first,\n last: last,\n deepCopy: deepCopy,\n\n left: left,\n right: right,\n getType: getType,\n isWindow: isWindow,\n isElement: isElement,\n isObject: isObject,\n isArray: isArray,\n isFunction: isFunction,\n isString: isString,\n isNumber: isNumber,\n isNodelist: isNodelist,\n isUndefined: isUndefined,\n isNothing: isNothing,\n setCookie: setCookie,\n getCookie: getCookie,\n camelCase: camelCase,\n snakeCase: snakeCase,\n number: number,\n toArray: toArray,\n merge: merge,\n param: param,\n error: error,\n date: date,\n dday: dday,\n daysOfMonth: daysOfMonth,\n weeksOfMonth: weeksOfMonth,\n setDigit: setDigit,\n times: times,\n findParentNode: findParentNode,\n cssNumber: cssNumber,\n css: css,\n isDate: isDate,\n isDateFormat: isDateFormat,\n stopEvent: stopEvent,\n selectRange: selectRange,\n debounce: debounce,\n throttle: throttle,\n escapeHtml: escapeHtml,\n unescapeHtml: unescapeHtml,\n\n string: string,\n color: color\n }\n })();\n\n if (typeof module === \"object\" && typeof module.exports === \"object\") {\n module.exports = ax5;\n } else {\n root.ax5 = (function () {\n return ax5;\n })(); // ax5.ui에 연결\n }\n\n}).call(typeof window !== \"undefined\" ? window : this);\n","ax5.def = {};","ax5.info.errorMsg[\"ax5dialog\"] = {\n \"501\": \"Duplicate call error\"\n};\n\nax5.info.errorMsg[\"ax5picker\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find content key\"\n};\n\nax5.info.errorMsg[\"single-uploader\"] = {\n \"460\": \"There are no files to be uploaded.\",\n \"461\": \"There is no uploaded files.\"\n};\n\nax5.info.errorMsg[\"ax5calendar\"] = {\n \"401\": \"Can not find target element\"\n};\n\nax5.info.errorMsg[\"ax5formatter\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find pattern\"\n};\n\nax5.info.errorMsg[\"ax5menu\"] = {\n \"501\": \"Can not find menu item\"\n};\n\nax5.info.errorMsg[\"ax5select\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find option\"\n};\n\nax5.info.errorMsg[\"ax5combobox\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find option\"\n};","// 필수 Ployfill 확장 구문\n(function () {\n 'use strict';\n \n var root = this,\n re_trim = /^\\s*|\\s*$/g;\n\n // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\n if (!Object.keys) {\n Object.keys = (function () {\n var hwp = Object.prototype.hasOwnProperty,\n hdeb = !({toString: null}).propertyIsEnumerable('toString'),\n de = [\n 'toString',\n 'toLocaleString',\n 'valueOf',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'constructor'\n ],\n del = de.length;\n\n return function (obj) {\n if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) throw new TypeError('type err');\n var r = [], prop, i;\n for (prop in obj) if (hwp.call(obj, prop)) r.push(prop);\n if (hdeb) {\n for (i = 0; i < del; i++) if (hwp.call(obj, de[i])) r.push(de[i]);\n }\n return r;\n };\n }());\n }\n\n // ES5 15.4.4.18 Array.prototype.forEach ( callbackfn [ , thisArg ] )\n // From https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach\n if (!Array.prototype.forEach) {\n Array.prototype.forEach = function (fun /*, thisp */) {\n if (this === void 0 || this === null) {\n throw TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof fun !== \"function\") {\n throw TypeError();\n }\n var thisp = arguments[1], i;\n for (i = 0; i < len; i++) {\n if (i in t) {\n fun.call(thisp, t[i], i, t);\n }\n }\n };\n }\n\n // ES5 15.3.4.5 Function.prototype.bind ( thisArg [, arg1 [, arg2, ... ]] )\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind\n if (!Function.prototype.bind) {\n Function.prototype.bind = function (o) {\n if (typeof this !== 'function') {\n throw TypeError(\"function\");\n }\n var slice = [].slice,\n args = slice.call(arguments, 1),\n self = this,\n bound = function () {\n return self.apply(this instanceof nop ? this : o,\n args.concat(slice.call(arguments)));\n };\n\n function nop() {}\n\n nop.prototype = self.prototype;\n bound.prototype = new nop();\n return bound;\n };\n }\n\n /*global document */\n /**\n * define document.querySelector & document.querySelectorAll for IE7\n *\n * A not very fast but small hack. The approach is taken from\n * http://weblogs.asp.net/bleroy/archive/2009/08/31/queryselectorall-on-old-ie-versions-something-that-doesn-t-work.aspx\n *\n */\n (function () {\n if (document.querySelectorAll || document.querySelector) {\n return;\n }\n if (!document.createStyleSheet) return;\n var style = document.createStyleSheet(),\n select = function (selector, maxCount) {\n var\n all = document.all,\n l = all.length,\n i,\n resultSet = [];\n\n style.addRule(selector, \"foo:bar\");\n for (i = 0; i < l; i += 1) {\n if (all[i].currentStyle.foo === \"bar\") {\n resultSet.push(all[i]);\n if (resultSet.length > maxCount) {\n break;\n }\n }\n }\n style.removeRule(0);\n return resultSet;\n };\n\n document.querySelectorAll = function (selector) {\n return select(selector, Infinity);\n };\n document.querySelector = function (selector) {\n return select(selector, 1)[0] || null;\n };\n }());\n\n if (!String.prototype.trim) {\n (function () {\n String.prototype.trim = function () {\n return this.replace(re_trim, '');\n };\n })();\n }\n\n if (!window.JSON) {\n window.JSON = {\n parse: function (sJSON) { return (new Function('', 'return ' + sJSON))(); },\n stringify: (function () {\n var r = /[\"]/g, f;\n return f = function (vContent) {\n var result, i, j;\n switch (result = typeof vContent) {\n case'string':\n return '\"' + vContent.replace(r, '\\\\\"') + '\"';\n case'number':\n case'boolean':\n return vContent.toString();\n case'undefined':\n return 'undefined';\n case'function':\n return '\"\"';\n case'object':\n if (!vContent) return 'null';\n result = '';\n if (vContent.splice) {\n for (i = 0, j = vContent.length; i < j; i++) result += ',' + f(vContent[i]);\n return '[' + result.substr(1) + ']';\n }\n else {\n for (i in vContent) if (vContent.hasOwnProperty(i) && vContent[i] !== undefined && typeof vContent[i] != 'function') result += ',\"' + i + '\":' + f(vContent[i]);\n return '{' + result.substr(1) + '}';\n }\n }\n };\n })()\n };\n }\n\n // splice ie8 <= polyfill\n (function () {\n if (!document.documentMode || document.documentMode >= 9) return false;\n var _splice = Array.prototype.splice;\n Array.prototype.splice = function () {\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[1] === \"undefined\") args[1] = this.length - args[0];\n return _splice.apply(this, args);\n };\n })();\n\n /**\n * Shim for \"fixing\" IE's lack of support (IE < 9) for applying slice\n * on host objects like NamedNodeMap, NodeList, and HTMLCollection\n * (technically, since host objects have been implementation-dependent,\n * at least before ES6, IE hasn't needed to work this way).\n * Also works on strings, fixes IE < 9 to allow an explicit undefined\n * for the 2nd argument (as in Firefox), and prevents errors when\n * called on other DOM objects.\n */\n (function () {\n 'use strict';\n var _slice = Array.prototype.slice;\n\n try {\n // Can't be used with DOM elements in IE < 9\n _slice.call(document.documentElement);\n } catch (e) { // Fails in IE < 9\n // This will work for genuine arrays, array-like objects,\n // NamedNodeMap (attributes, entities, notations),\n // NodeList (e.g., getElementsByTagName), HTMLCollection (e.g., childNodes),\n // and will not fail on other DOM objects (as do DOM elements in IE < 9)\n Array.prototype.slice = function(begin, end) {\n // IE < 9 gets unhappy with an undefined end argument\n end = (typeof end !== 'undefined') ? end : this.length;\n\n // For native Array objects, we use the native slice function\n if (Object.prototype.toString.call(this) === '[object Array]'){\n return _slice.call(this, begin, end);\n }\n\n // For array like object we handle it ourselves.\n var i, cloned = [],\n size, len = this.length;\n\n // Handle negative value for \"begin\"\n var start = begin || 0;\n start = (start >= 0) ? start : Math.max(0, len + start);\n\n // Handle negative value for \"end\"\n var upTo = (typeof end == 'number') ? Math.min(end, len) : len;\n if (end < 0) {\n upTo = len + end;\n }\n \n // Actual expected size of the slice\n size = upTo - start;\n\n if (size > 0) {\n cloned = new Array(size);\n if (this.charAt) {\n for (i = 0; i < size; i++) {\n cloned[i] = this.charAt(start + i);\n }\n } else {\n for (i = 0; i < size; i++) {\n cloned[i] = this[start + i];\n }\n }\n }\n\n return cloned;\n };\n }\n }());\n\n // Console-polyfill. MIT license. https://github.com/paulmillr/console-polyfill\n // Make it safe to do console.log() always.\n (function (con) {\n var prop, method;\n var empty = {};\n var dummy = function () {};\n var properties = 'memory'.split(',');\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) con[prop] = con[prop] || empty;\n while (method = methods.pop()) con[method] = con[method] || dummy;\n })(window.console || {}); // Using `this` for web workers.\n\n\n // Modernizr style test\n if (!(window.webkitMatchMedia || window.mozMatchMedia || window.oMatchMedia || window.msMatchMedia || window.matchMedia)) {\n var root = document.getElementsByTagName( 'html' )[0];\n root.className += ' no-matchmedia';\n }\n\n /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */\n window.matchMedia || (window.matchMedia = function() {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n var styleMedia = (window.styleMedia || window.media);\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n\n script.parentNode.insertBefore(style, script);\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;\n\n styleMedia = {\n matchMedium: function(media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n\n return function(media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n }());\n\n /*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n (function(){\n // Bail out for browsers that have addListener support\n if (window.matchMedia && window.matchMedia('all').addListener) {\n return false;\n }\n\n var localMatchMedia = window.matchMedia,\n hasMediaQueries = localMatchMedia('only all').matches,\n isListening = false,\n timeoutID = 0, // setTimeout for debouncing 'handleChange'\n queries = [], // Contains each 'mql' and associated 'listeners' if 'addListener' is used\n handleChange = function(evt) {\n // Debounce\n clearTimeout(timeoutID);\n\n timeoutID = setTimeout(function() {\n for (var i = 0, il = queries.length; i < il; i++) {\n var mql = queries[i].mql,\n listeners = queries[i].listeners || [],\n matches = localMatchMedia(mql.media).matches;\n\n // Update mql.matches value and call listeners\n // Fire listeners only if transitioning to or from matched state\n if (matches !== mql.matches) {\n mql.matches = matches;\n\n for (var j = 0, jl = listeners.length; j < jl; j++) {\n listeners[j].call(window, mql);\n }\n }\n }\n }, 30);\n };\n\n window.matchMedia = function(media) {\n var mql = localMatchMedia(media),\n listeners = [],\n index = 0;\n\n mql.addListener = function(listener) {\n // Changes would not occur to css media type so return now (Affects IE <= 8)\n if (!hasMediaQueries) {\n return;\n }\n\n // Set up 'resize' listener for browsers that support CSS3 media queries (Not for IE <= 8)\n // There should only ever be 1 resize listener running for performance\n if (!isListening) {\n isListening = true;\n window.addEventListener('resize', handleChange, true);\n }\n\n // Push object only if it has not been pushed already\n if (index === 0) {\n index = queries.push({\n mql : mql,\n listeners : listeners\n });\n }\n\n listeners.push(listener);\n };\n\n mql.removeListener = function(listener) {\n for (var i = 0, il = listeners.length; i < il; i++){\n if (listeners[i] === listener){\n listeners.splice(i, 1);\n }\n }\n };\n\n return mql;\n };\n }());\n\n // extend innerWidth ..\n var html = document.getElementsByTagName('html')[0];\n var body = document.getElementsByTagName('body')[0];\n\n /*\n if (!window.innerWidth) window.innerWidth = html.clientWidth;\n if (!window.innerHeight) window.innerHeight = html.clientHeight;\n if (!window.scrollX) window.scrollX = window.pageXOffset || html.scrollLeft;\n if (!window.scrollY) window.scrollY = window.pageYOffset || html.scrollTop;\n */\n}.call(window));","/**\n * Refer to this by {@link ax5}.\n * @namespace ax5.ui\n */\n\n/**\n * @class ax5.ui.root\n * @classdesc ax5 ui class\n * @author tom@axisj.com\n * @example\n * ```\n * var myui = new ax5.ui.root();\n * ```\n */\nax5.ui = (function () {\n\n function axUi() {\n this.config = {};\n this.name = \"root\";\n\n /**\n * 클래스의 속성 정의 메소드 속성 확장후에 내부에 init 함수를 호출합니다.\n * @method ax5.ui.root.setConfig\n * @param {Object} config - 클래스 속성값\n * @param {Boolean} [callInit=true] - init 함수 호출 여부\n * @returns {ax5.ui.axUi}\n * @example\n * ```\n * var myui = new ax5.ui.root();\n * myui.setConfig({\n\t\t * \tid:\"abcd\"\n\t\t * });\n * ```\n */\n this.setConfig = function (cfg, callInit) {\n jQuery.extend(true, this.config, cfg);\n if (typeof callInit == \"undefined\" || callInit === true) {\n this.init();\n }\n return this;\n };\n this.init = function () {\n console.log(this.config);\n };\n\n this.bindWindowResize = function (callBack) {\n setTimeout((function () {\n jQuery(window).resize((function () {\n if (this.bindWindowResize__) clearTimeout(this.bindWindowResize__);\n this.bindWindowResize__ = setTimeout((function () {\n callBack.call(this);\n }).bind(this), 10);\n }).bind(this));\n }).bind(this), 100);\n };\n\n this.stopEvent = function (e) {\n if (e.preventDefault) e.preventDefault();\n if (e.stopPropagation) e.stopPropagation();\n e.cancelBubble = true;\n return false;\n };\n\n this.toString = function () {\n return this.name + '@' + this.version;\n };\n\n // instance init\n this.main = (function () {\n\n }).apply(this, arguments);\n\n }\n\n /**\n * @method ax5.ui.addClass\n * @param {Object} config\n * @param {String} config.className - name of Class\n * @param {Object} [config.classStore=ax5.ui] - 클래스가 저장될 경로\n * @param {Function} [config.superClass=ax5.ui.root]\n * @param {Function} cls - Class Function\n */\n function addClass(config, cls) {\n if (!config || !config.className) throw 'invalid call';\n var classStore = (config.classStore) ? config.classStore : ax5.ui;\n if (!classStore) throw 'invalid classStore';\n\n // make ui definition variable\n ax5.def[config.className] = {\n version: ax5.info.version\n };\n\n var factory = function (cls, arg) {\n switch (arg.length) {\n case 0:\n return new cls();\n break;\n case 1:\n return new cls(arg[0]);\n break;\n case 2:\n return new cls(arg[0], arg[1]);\n break;\n case 3:\n return new cls(arg[0], arg[1], arg[2]);\n break;\n }\n };\n var initInstance = function (name, version, instance) {\n instance.name = name;\n instance.version = version;\n instance.instanceId = ax5.getGuid();\n return instance;\n };\n var initPrototype = function (cls) {\n var superClass = (config.superClass) ? config.superClass : ax5.ui.root;\n if (!ax5.util.isFunction(superClass)) throw 'invalid superClass';\n superClass.call(this); // 부모호출\n cls.prototype = new superClass(); // 상속\n };\n var wrapper = function () {\n if (!this || !(this instanceof wrapper)) throw 'invalid call';\n var instance = factory(cls, arguments);\n return initInstance(config.className, config.version || \"\", instance);\n };\n initPrototype.call(this, cls);\n classStore[config.className] = wrapper;\n }\n\n return {\n root: axUi,\n addClass: addClass\n }\n})();\n","/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n * https://github.com/thomasJang/mustache.js -- imporove some variables\n */\n\n(function defineMustache(global, factory) {\n\n factory(global.mustache = {});\n\n}(window.ax5, function mustacheFactory(mustache) {\n\n var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill(object) {\n return objectToString.call(object) === '[object Array]';\n };\n\n function isFunction(object) {\n return typeof object === 'function';\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr(obj) {\n return isArray(obj) ? 'array' : typeof obj;\n }\n\n function escapeRegExp(string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty(obj, propName) {\n return obj != null && typeof obj === 'object' && (propName in obj);\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n\n function testRegExp(re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n\n function isWhitespace(string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''', '/': '/'\n };\n\n function escapeHtml(string) {\n return String(string).replace(/[&<>\"'\\/]/g, function fromEntityMap(s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n */\n function parseTemplate(template, tags) {\n if (!template)\n return [];\n\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace() {\n if (hasTag && !nonSpace) {\n while (spaces.length)\n delete tokens[spaces.pop()];\n }\n else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n\n function compileTags(tagsToCompile) {\n if (typeof tagsToCompile === 'string')\n tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)\n throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n }\n else {\n nonSpace = true;\n }\n\n tokens.push(['text', chr, start, start + 1]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n')\n stripSpace();\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe))\n break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n }\n else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n }\n else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe))\n throw new Error('Unclosed tag at ' + scanner.pos);\n\n token = [type, value, start, scanner.pos];\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n }\n else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection)\n throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n }\n else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n }\n else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens(tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n }\n else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens(tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner(string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos() {\n return this.tail === '';\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan(re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0)\n return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil(re) {\n var index = this.tail.search(re), match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context(view, parentContext) {\n this.view = view;\n this.cache = {\n '.': this.view,\n '@each': function () {\n var returns = [];\n for (var k in this) {\n returns.push({'@key': k, '@value': this[k]});\n }\n return returns;\n }\n };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push(view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup(name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n }\n else {\n var context = this, names, index, lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n value = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n **/\n while (value != null && index < names.length) {\n if (index === names.length - 1)\n lookupHit = hasProperty(value, names[index]);\n\n value = value[names[index++]];\n }\n }\n else {\n value = context.view[name];\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit)\n break;\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value))\n value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer() {\n this.cache = {};\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache() {\n this.cache = {};\n };\n\n /**\n * Parses and caches the given `template` and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse(template, tags) {\n var cache = this.cache;\n var tokens = cache[template];\n\n if (tokens == null)\n tokens = cache[template] = parseTemplate(template, tags);\n\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n */\n Writer.prototype.render = function render(template, view, partials) {\n var tokens = this.parse(template);\n var context = (view instanceof Context) ? view : new Context(view);\n return this.renderTokens(tokens, context, partials, template);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens(tokens, context, partials, originalTemplate) {\n var buffer = '';\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate);\n else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate);\n else if (symbol === '>') value = this.renderPartial(token, context, partials, originalTemplate);\n else if (symbol === '&') value = this.unescapedValue(token, context);\n else if (symbol === 'name') value = this.escapedValue(token, context);\n else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined)\n buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection(token, context, partials, originalTemplate) {\n var self = this;\n var buffer = '';\n\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender(template) {\n return self.render(template, context, partials);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n if (value[j]) {\n if (typeof value[j] === 'object') {\n value[j]['@i'] = j;\n value[j]['@first'] = (j === 0);\n }\n\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);\n }\n }\n }\n else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);\n }\n else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string')\n throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null)\n buffer += value;\n }\n else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate);\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted(token, context, partials, originalTemplate) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || (isArray(value) && value.length === 0))\n return this.renderTokens(token[4], context, partials, originalTemplate);\n };\n\n Writer.prototype.renderPartial = function renderPartial(token, context, partials) {\n if (!partials) return;\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null)\n return this.renderTokens(this.parse(value), context, partials, value);\n };\n\n Writer.prototype.unescapedValue = function unescapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null)\n return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null)\n return mustache.escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue(token) {\n return token[1];\n };\n\n mustache.name = 'mustache.js';\n mustache.version = '2.1.3';\n mustache.tags = ['{{', '}}'];\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache() {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse(template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view` and `partials` using the\n * default writer.\n */\n mustache.render = function render(template, view, partials) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' + 'but \"' + typeStr(template) + '\" was given as the first ' + 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials);\n };\n\n // This is here for backwards compatibility with 0.4.x.,\n /*eslint-disable */ // eslint wants camel cased function name\n mustache.to_html = function to_html(template, view, partials, send) {\n /*eslint-enable*/\n\n var result = mustache.render(template, view, partials);\n\n if (isFunction(send)) {\n send(result);\n }\n else {\n return result;\n }\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n\n}));"]}
|