{"version":3,"sources":["webpack:///download/conceptart.js","webpack:///webpack/bootstrap 73259ee1221799c218e6","webpack:///./_src/js/model/model.js","webpack:///./_src/js/utils/util.js","webpack:///./_src/js/download/conceptart.js","webpack:///./_src/js/download/conceptArt/ConceptArt.js","webpack:///./_src/js/model/msg/board.js","webpack:///./_src/js/utils/service.js","webpack:///./_src/js/model/msg/alert.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","BREAKPOINTS","PET_NECKLACE_ID","tablet","pc","max","truthy","falsy","isDefined","not","isNotDefined","each","getResolution","namespace","ua","window","navigator","userAgent","test","existy","obj","isString","exec","location","hostname","constructor","String","isObject","isFunction","Function","func","TypeError","$ele","length","dataCanLoop","context","_context","Array","isArray","breakpoint","arguments","undefined","global","innerWidth","parent","ns","parts","split","value","__WEBPACK_IMPORTED_MODULE_0__conceptArt_ConceptArt__","__WEBPACK_IMPORTED_MODULE_1__utils_util__","$","nc","lineage","conceptArt","options","Error","option","extend","wrap","apiDomain","ConceptArt","init","jQuery","_classCallCheck","instance","Constructor","__WEBPACK_IMPORTED_MODULE_0__model_model__","__WEBPACK_IMPORTED_MODULE_1__model_msg_board__","__WEBPACK_IMPORTED_MODULE_2__utils_util__","__WEBPACK_IMPORTED_MODULE_3__utils_service__","_createClass","defineProperties","target","props","descriptor","writable","key","protoProps","staticProps","this","_","IMAGEVIEWER_ID","CAROUSEL_HEIGHT","contiGroupData","data","currentResolution","currentGroupData","currentIndex","isStartChangeImageByImageViewer","isStartChangeImageBySlick","isDraggingSlickWrap","imageViewer","carouselWrap","slickWrap","msg","FAIL_LOAD_CONCEPTART_DATA","getDatasWithOption","type","url","dataType","contentType","Accept","setNoData","forEach","item","push","JSON","parse","jsonData","reverse","setInstance","alert","items","group","groups","setList","on","proxy","resize","empty","append","BOARD","NO_ITEM","groupData","firstItem","thumbnailSrc","tpl","img","src","getListTpl","artTitle","groupListWrap","evt","btn","groupIndex","parseInt","attr","isArranged","imgObj","setImageViewer","setImageViewerTopBarTitle","title","index","itemsLength","imgObjs","w","width","h","height","ui","ImageViewerRWD","isPreloadImages","id","topBarTitle","hasDownloadFileBtn","readyCallback","setCarousel","resizeForcibly","activateCarouselItem","photoswipe","slideByUrl","firstImgIndex","listen","destroyImageViewer","destroyCarousel","getCurrentIndex","activateCarousel","setTopBarTitle","slick","infinite","dots","speed","arrows","slidesToShow","slidesToScroll","event","currentSlide","nextSlide","goToImageViewer","idx","goTo","goToCarousel","slides","removeClass","filter","addClass","isDestroyOnlyContainer","hide","remove","isCarouselInitialized","slickTrack","off","hasClass","resolution","resizeByResolution","setHeight","innerHeight","RETRY_LATER","jQueryAjaxOptions","resolvedCallback","rejectedCallback","promises","promise","ajax","when","apply","then","fail","ALERT","REQUIRE_LOGIN"],"mappings":"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","file":"download/conceptart.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 2);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return BREAKPOINTS; });\n/* unused harmony export DAYS */\n/* unused harmony export API_DOMAIN_DEFAULT */\n/* unused harmony export API_COMMUNITY_DOMAIN */\n/* unused harmony export STATIC_DOMAIN_DEFAULT */\n/* unused harmony export STATIC_CDN_DOMAIN_DEFAULT */\n/* unused harmony export NO_ITEM_IMAGE_URL */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return PET_NECKLACE_ID; });\nvar BREAKPOINTS = {\n tablet: 640,\n pc: 960,\n max: 1340\n};\n\nvar DAYS = {\n 'Sunday': '일',\n 'Monday': '월',\n 'Tuesday': '화',\n 'Wednesday': '수',\n 'Thursday': '목',\n 'Friday': '금',\n 'Saturday': '토'\n};\n\nvar API_DOMAIN_DEFAULT = 'https://api-lineage.plaync.com';\n\nvar API_COMMUNITY_DOMAIN = 'https://api-commnity.plaync.com/lineage1';\n\nvar STATIC_DOMAIN_DEFAULT = 'https://assets.playnccdn.com'; // https://wstatic.plaync.co.kr';\n\nvar STATIC_CDN_DOMAIN_DEFAULT = 'https://wstatic-cdn.plaync.com';\n\nvar NO_ITEM_IMAGE_URL = STATIC_DOMAIN_DEFAULT + '/lineage/v1/img/world/item/noimg.gif';\n\nvar PET_NECKLACE_ID = 25668;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export ua */\n/* unused harmony export locationOriginRegex */\n/* unused harmony export isIE */\n/* unused harmony export isEdge */\n/* unused harmony export isOpera */\n/* unused harmony export isChrome */\n/* unused harmony export isIOS */\n/* unused harmony export isAndroid */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return truthy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return falsy; });\n/* unused harmony export existy */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return isDefined; });\n/* unused harmony export isRc */\n/* unused harmony export isInteger */\n/* unused harmony export isString */\n/* unused harmony export isNumber */\n/* unused harmony export isBoolean */\n/* unused harmony export isObject */\n/* unused harmony export isFunction */\n/* unused harmony export isRegExp */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return not; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return isNotDefined; });\n/* unused harmony export parseInt10 */\n/* unused harmony export parseStrIntToInt */\n/* unused harmony export removeElementInArray */\n/* unused harmony export allOf */\n/* unused harmony export anyOf */\n/* unused harmony export getDefined */\n/* unused harmony export notSingleEle */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return each; });\n/* unused harmony export getFileExtension */\n/* unused harmony export getFirstObjectHasProperty */\n/* unused harmony export getObjectHasProperty */\n/* unused harmony export overlappedConditionSortByProperty */\n/* unused harmony export getPositionFromTranslateStr */\n/* unused harmony export isIndexInLoop */\n/* unused harmony export getLoopedLastIndex */\n/* unused harmony export getReverseLoopedFirstIndex */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return getResolution; });\n/* unused harmony export isPhoneResolution */\n/* unused harmony export isTabletResolution */\n/* unused harmony export isMobileResolution */\n/* unused harmony export numberWithCommas */\n/* unused harmony export getUriParams */\n/* unused harmony export getUriCombinedParams */\n/* unused harmony export getHashParams */\n/* unused harmony export getHashCombinedParams */\n/* unused harmony export getObjForPagination */\n/* unused harmony export getDivideIntStrByThousandUnit */\n/* unused harmony export getMarketPriceStr */\n/* unused harmony export getEmphasizedStrByQuery */\n/* unused harmony export getSeparatedDateStr */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return namespace; });\n/* unused harmony export template */\n/* unused harmony export getUrlAddCategoryIdByArticle */\n/* unused harmony export getChangedStats */\n/* unused harmony export getPlusElixirPointByLevel */\n/* unused harmony export isLevelCanConsumeElixirStat */\n/* unused harmony export isLevelGetElixirPoint */\n/* unused harmony export getStatMaxByLevel */\n/* unused harmony export isWarrior */\n/* unused harmony export getClassName */\n/* unused harmony export removeEquipInEquips */\n/* unused harmony export isPetNecklace */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__model_model__ = __webpack_require__(0);\n/*\r\n * common utils\r\n */\n\n\n\nvar ua = window.navigator.userAgent;\n\nvar locationOriginRegex = /^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})/;\n\nvar isIE = function () {\n return (/msie/i.test(ua) || /trident/i.test(ua)\n );\n}();\n\nvar isEdge = function isEdge(userAgent) {\n return (/Gecko/i.test(userAgent) && /Edge/i.test(userAgent)\n );\n};\n\nvar isOpera = function isOpera(userAgent) {\n return (/Opera/i.test(userAgent) || /OPR\\//i.test(userAgent)\n );\n};\n\nvar isChrome = function isChrome(userAgent) {\n return !isEdge(userAgent) && !isOpera(userAgent) && /Chrome/i.test(userAgent);\n};\n\nvar isIOS = function isIOS(userAgent) {\n return (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream\n );\n};\n\nvar isAndroid = function isAndroid(userAgent) {\n return (/android/i.test(userAgent)\n );\n};\n\nvar truthy = function truthy(object) {\n return !!object;\n};\n\nvar falsy = function falsy(object) {\n return !!!object;\n};\n\nvar existy = function existy(obj) {\n return obj != null;\n};\n\nvar isDefined = function isDefined(obj) {\n var flag = true;\n if (obj === null || typeof obj === 'undefined') return false;\n return flag;\n};\n\nvar isRc = function () {\n return isDefined(/^rc-/.exec(location.hostname));\n}();\n\nvar isInteger = function isInteger(obj) {\n if (!isDefined(obj) || obj.constructor !== Number) return false;\n\n // https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n return isFinite(obj) && Math.floor(obj) === obj;\n};\n\nvar isString = function isString(obj) {\n if (!isDefined(obj)) return false;\n return obj.constructor === String;\n};\n\nvar isNumber = function isNumber(obj) {\n if (!isDefined(obj)) return false;\n return obj.constructor === Number;\n};\n\nvar isBoolean = function isBoolean(obj) {\n if (!isDefined(obj)) return false;\n return obj.constructor === Boolean;\n};\n\nvar isObject = function isObject(obj) {\n if (!isDefined(obj)) return false;\n return obj.constructor === Object;\n};\n\nvar isFunction = function isFunction(obj) {\n if (!isDefined(obj)) return false;\n return obj.constructor === Function;\n};\n\nvar isRegExp = function isRegExp(obj) {\n if (!isDefined(obj)) return false;\n return obj.constructor === RegExp;\n};\n\nvar not = function not(func) {\n if (!isFunction(func)) throw new TypeError('func parameter type of not() must be Function.');\n\n return function (object) {\n return !func(object);\n };\n};\n\nvar isNotDefined = not(isDefined);\n\nvar parseInt10 = function parseInt10(number) {\n return parseInt(number, 10);\n};\n\nvar parseStrIntToInt = function parseStrIntToInt(strIntOrInt) {\n var val = strIntOrInt;\n\n if (!isDefined(val)) return 0;\n if (typeof val === 'number') return val;\n\n return parseInt10(val.split(',').join(''));\n};\n\nvar removeElementInArray = function removeElementInArray(arr, target) {\n if (!Array.isArray(arr)) throw new TypeError('arr parameter type of removeElementInArray() must be Array.');\n\n var clonedArr = arr.slice(0),\n index = clonedArr.indexOf(target);\n\n if (index >= 0) clonedArr.splice(index, 1);\n\n return clonedArr;\n};\n\nvar allOf = function allOf() /*args*/{\n var args = Array.prototype.slice.call(arguments);\n\n return args.every(function (val) {\n return val === true;\n });\n};\n\nvar anyOf = function anyOf() /*args*/{\n var args = Array.prototype.slice.call(arguments);\n\n return args.some(function (val) {\n return val === true;\n });\n};\n\nvar getDefined = function getDefined(val, defaultVal) {\n return isDefined(val) ? val : defaultVal;\n};\n\nvar notSingleEle = not(function ($ele) {\n return $ele.length === 1;\n});\n\nvar each = function each(dataCanLoop, func, context) {\n var _context = existy(context) ? context : null;\n\n if (!(Array.isArray(dataCanLoop) || isString(dataCanLoop))) throw new TypeError('dataCanLoop parameter type of each() must be Array or String.');\n\n var result = false;\n for (var i = 0, max = dataCanLoop.length; i < max; i++) {\n result = func.call(_context, dataCanLoop[i]);\n if (result === false) break;\n }\n};\n\nvar getFileExtension = function getFileExtension(fileName) {\n if (!isString(fileName)) throw new TypeError('getFileExtension() requires String parameter.');\n\n if (fileName.length <= 0) return '';\n\n var lastDotIndex = fileName.lastIndexOf('.'),\n extension = fileName.substr(lastDotIndex + 1);\n\n return extension;\n};\n\nvar getFirstObjectHasProperty = function getFirstObjectHasProperty(arrayHasObjects, propertyKey, findPropertyValueOrRegex) {\n if (!Array.isArray(arrayHasObjects) || arrayHasObjects.length <= 0) return null;\n if (!isString(propertyKey)) return null;\n\n var obj = void 0,\n result = null;\n for (var i = 0, max = arrayHasObjects.length; i < max; ++i) {\n obj = arrayHasObjects[i];\n if (!obj.hasOwnProperty(propertyKey)) continue;\n\n if (isRegExp(findPropertyValueOrRegex)) {\n if (findPropertyValueOrRegex.test(obj[propertyKey])) {\n result = obj;\n break;\n }\n } else {\n if (obj[propertyKey] === findPropertyValueOrRegex) {\n result = obj;\n break;\n }\n }\n }\n return result;\n};\n\nvar getObjectHasProperty = function getObjectHasProperty(arrayHasObjects, propertyKey) {\n if (!Array.isArray(arrayHasObjects) || arrayHasObjects.length <= 0) return null;\n if (!isString(propertyKey)) return null;\n var obj = void 0,\n result = null;\n\n each(arrayHasObjects, function (obj) {\n if (obj.hasOwnProperty(propertyKey)) result = obj[propertyKey];\n });\n // console.log( '=> util.js getObjectHasProperty() result : ', propertyKey, result );\n return result;\n};\n\nvar overlappedConditionSortByProperty = function sortByProp(_datas, _conditions, _conditionIndex) {\n var datas = Array.prototype.slice.call(_datas);\n\n if (!_conditions || _conditions.constructor !== Array || _conditions.length < 0) return datas;\n\n var conditionIndex = _conditionIndex >= 0 ? _conditionIndex : 0,\n condition = _conditions[conditionIndex];\n\n if (conditionIndex <= 0) datas.sort(condition.func);\n\n if (_conditions.length <= 1) return datas;\n\n if (conditionIndex < _conditions.length - 1) {\n var prevProperty = condition.property,\n nextConditionIndex = conditionIndex + 1,\n nextCondition = _conditions[nextConditionIndex];\n\n var memoObj = {},\n memoArr = [],\n arr = [];\n\n var obj = void 0,\n prop = void 0;\n for (var i = 0, max = datas.length; i < max; i++) {\n obj = datas[i];\n prop = String(obj[prevProperty]);\n\n if (!memoObj[prop]) {\n memoObj[prop] = [];\n memoArr.push(memoObj[prop]);\n }\n\n arr = memoObj[prop];\n arr.push(obj);\n }\n\n for (var j = 0, len = memoArr.length; j < len; j++) {\n arr = memoArr[j];\n arr.sort(nextCondition.func);\n\n memoArr[j] = overlappedConditionSortByProperty(arr, _conditions, nextConditionIndex);\n }\n\n var resultArr = memoArr.reduce(function (acc, curVal, curIndex, array) {\n return acc.concat(curVal);\n });\n\n return resultArr;\n }\n\n return datas;\n};\n\nvar getPositionFromTranslateStr = function getPositionFromTranslateStr(str) {\n var obj = { x: 0, y: 0 };\n if (!isDefined(str)) return obj;\n\n var values = str.match(/[+-]?(\\d*\\.)?\\d+/g);\n if (values.length <= 0) return obj;\n\n if (/translateX/g.test(str)) {\n obj.x = parseFloat(values[0]);\n return obj;\n }\n\n if (/translateY/g.test(str)) {\n obj.y = parseFloat(values[0]);\n return obj;\n }\n\n obj.x = parseFloat(values[0]);\n if (values.length > 1) obj.y = parseFloat(values[1]);\n\n return obj;\n};\n\nvar isIndexInLoop = function isIndexInLoop(totalLength, loopGap, firstIndex, searchIndex) {\n var args = Array.prototype.slice.call(arguments);\n if (args.length < 4) throw Error('isIndexInLoop function requires 4 arguments.');\n\n if (!isInteger(totalLength) || !isInteger(loopGap) || !isInteger(firstIndex) || !isInteger(searchIndex)) {\n throw Error('arguments must be Integer Number.');\n }\n if (totalLength < 1 || firstIndex < 1) {\n throw Error('totalLength and startIndex can not smaller than 1.');\n }\n if (loopGap > totalLength) {\n throw Error('loopGap can not bigger than totalLength.');\n }\n\n var index = firstIndex;\n for (var i = 0; i < loopGap; i++) {\n if (index === searchIndex) return true;\n index = index + 1 > totalLength ? 1 : index + 1;\n }\n\n return false;\n};\n\nvar getLoopedLastIndex = function getLoopedLastIndex(totalLength, loopGap, firstIndex) {\n var args = Array.prototype.slice.call(arguments);\n if (args.length < 3) throw Error('getLoopedLastIndex function requires 3 arguments.');\n\n if (!isInteger(totalLength) || !isInteger(loopGap) || !isInteger(firstIndex)) {\n throw Error('arguments must be Integer Number.');\n }\n if (totalLength < 1 || firstIndex < 1) {\n throw Error('totalLength and firstIndex can not smaller than 1.');\n }\n if (loopGap > totalLength || firstIndex > totalLength) {\n throw Error('loopGap and firstIndex can not bigger than totalLength.');\n }\n\n var index = firstIndex;\n for (var i = 0; i < loopGap - 1; i++) {\n index++;\n if (index > totalLength) index = 1;\n }\n return index;\n};\n\nvar getReverseLoopedFirstIndex = function getReverseLoopedFirstIndex(totalLength, loopGap, lastIndex) {\n var args = Array.prototype.slice.call(arguments);\n if (args.length < 3) throw Error('getReverseLoopedFirstIndex function requires 3 arguments.');\n\n if (!isInteger(totalLength) || !isInteger(loopGap) || !isInteger(lastIndex)) {\n throw Error('arguments must be Integer Number.');\n }\n if (totalLength < 1 || lastIndex < 1) {\n throw Error('totalLength and lastIndex can not smaller than 1.');\n }\n if (loopGap > totalLength || lastIndex > totalLength) {\n throw Error('loopGap and lastIndex can not bigger than totalLength.');\n }\n\n var index = lastIndex;\n for (var i = 0; i < loopGap - 1; i++) {\n index = index - 1 < 1 ? totalLength : index - 1;\n }\n\n return index;\n};\n\nvar getResolution = function getResolution() {\n var breakpoint = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { tablet: 640, pc: 960, max: 1260 };\n var global = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n\n var resolution = '';\n if (breakpoint.max && global.innerWidth >= breakpoint.max) {\n resolution = 'max';\n } else if (breakpoint.pc && global.innerWidth >= breakpoint.pc) {\n resolution = 'pc';\n } else if (breakpoint.tablet && global.innerWidth >= breakpoint.tablet) {\n resolution = 'tablet';\n } else {\n resolution = 'phone';\n }\n\n return resolution;\n};\n\nvar isPhoneResolution = function isPhoneResolution(resolution) {\n return resolution === 'phone';\n};\n\nvar isTabletResolution = function isTabletResolution(resolution) {\n return resolution === 'tablet';\n};\n\nvar isMobileResolution = function isMobileResolution(resolution) {\n return resolution === 'phone' || resolution === 'tablet';\n};\n\n// http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\nvar numberWithCommas = function numberWithCommas(number) {\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\nvar getUriParams = function getUriParams(uri) {\n if (uri.length < 1) return null;\n var str = uri.split('#')[0];\n\n var tmpArr = str.split('?');\n if (tmpArr.length < 2) return null;\n\n var paramStr = tmpArr[1],\n params = paramStr.split('&');\n\n var keyValueArr = void 0,\n obj = {};\n for (var i = 0, max = params.length; i < max; ++i) {\n keyValueArr = params[i].split('=');\n if (keyValueArr.length > 1) obj[keyValueArr[0]] = keyValueArr[1];\n\n // if (keyValueArr.length <= 1) return null;\n // obj[keyValueArr[0]] = keyValueArr[1];\n }\n return obj;\n};\n\nvar getUriCombinedParams = function getUriCombinedParams(uri, params) {\n if (!uri) return '';\n if (!params) return uri;\n\n var str = '';\n for (var key in params) {\n str += '&' + key + '=' + String(params[key]);\n }\n if (str === '') return uri;\n\n var tmpArr = uri.split('#'),\n uri = tmpArr[0],\n hashStr = isDefined(tmpArr[1]) ? '#' + tmpArr[1] : '';\n\n uri = (uri.indexOf('?') >= 0 ? uri + str : uri + '?' + str.substr(1)) + hashStr;\n return uri;\n};\n\nvar getHashParams = function getHashParams(hashStr) {\n var str = hashStr;\n if (str.length < 1) return null;\n\n var tmpArr = str.split('#');\n if (tmpArr.length < 2) return null;\n\n var paramStr = tmpArr[1],\n params = paramStr.split('&');\n\n var keyValueArr = void 0,\n obj = {};\n for (var i = 0, max = params.length; i < max; ++i) {\n keyValueArr = params[i].split('=');\n if (keyValueArr.length <= 1) return null;\n\n obj[keyValueArr[0]] = keyValueArr[1];\n }\n\n return obj;\n};\n\nvar getHashCombinedParams = function getHashCombinedParams(uri, params) {\n if (!params) return uri;\n\n var str = '';\n for (var key in params) {\n str += '&' + key + '=' + String(params[key]);\n }\n if (str === '') return uri;\n\n uri = uri.indexOf('#') >= 0 ? uri + str : uri + '#' + str.substr(1);\n return uri;\n};\n\nvar getObjForPagination = function getObjForPagination(totalPostNum, displayPostNumPerPage, displayPaginationBtnNum, pageIndex) {\n var args = Array.prototype.slice.call(arguments);\n\n if (args.length < 4) throw new Error('getObjForPagination() requires 4 parameters.');\n\n if (!isInteger(totalPostNum) || !isInteger(displayPostNumPerPage) || !isInteger(displayPaginationBtnNum) || !isInteger(pageIndex)) {\n throw new TypeError('getObjForPagination() requires Integer Number parameters.');\n }\n if (totalPostNum <= 0 || displayPostNumPerPage <= 0 || displayPaginationBtnNum <= 0 || pageIndex <= 0) {\n throw new TypeError('getObjForPagination() requires positive Integer Number parameters.');\n }\n\n var totalPageNum = Math.ceil(totalPostNum / displayPostNumPerPage);\n if (pageIndex < 1) pageIndex = 1;\n if (pageIndex > totalPageNum) pageIndex = totalPageNum;\n\n var paginationBtnGroupIndex = Math.floor((pageIndex - 1) / displayPaginationBtnNum),\n prevPageIndex = paginationBtnGroupIndex * displayPaginationBtnNum,\n firstPageIndex = paginationBtnGroupIndex * displayPaginationBtnNum + 1,\n lastPageIndex = firstPageIndex + displayPaginationBtnNum - 1,\n nextPageIndex = lastPageIndex + 1;\n\n if (lastPageIndex > totalPageNum) lastPageIndex = totalPageNum;\n if (nextPageIndex > totalPageNum) nextPageIndex = 0;\n\n return {\n totalPostNum: totalPostNum,\n displayPostNumPerPage: displayPostNumPerPage,\n displayPaginationBtnNum: displayPaginationBtnNum,\n pageIndex: pageIndex,\n\n totalPageNum: totalPageNum,\n prevPageIndex: prevPageIndex,\n firstPageIndex: firstPageIndex,\n lastPageIndex: lastPageIndex,\n nextPageIndex: nextPageIndex\n };\n};\n\nvar getDivideIntStrByThousandUnit = function getDivideIntStrByThousandUnit(intStr_) {\n if (not(isDefined)(intStr_)) return ['0'];\n\n var DIVIDE_UNIT = 4;\n\n var intStr = String(parseStrIntToInt(intStr_)),\n intStrs = [];\n\n if (intStr.length <= DIVIDE_UNIT) return [String(intStr)];\n\n var lastIndex = 0,\n unitStr = '';\n while (intStr.length > DIVIDE_UNIT) {\n lastIndex = intStr.length;\n unitStr = intStr.substr(lastIndex - DIVIDE_UNIT, lastIndex);\n\n intStr = intStr.substr(0, lastIndex - DIVIDE_UNIT);\n intStrs.unshift(unitStr);\n }\n intStrs.unshift(intStr);\n\n return intStrs;\n};\n\nvar getMarketPriceStr = function getMarketPriceStr(str) {\n var UNIT_PRICE = ['', '만', '억'];\n\n var val = isDefined(str) ? str : '0',\n unitValues = getDivideIntStrByThousandUnit(val);\n\n unitValues.reverse();\n\n var priceStr = '',\n unitVal = 0;\n for (var i = 0, max = unitValues.length; i < max; i++) {\n unitVal = parseInt10(unitValues[i]);\n if (unitVal <= 0) continue;\n\n priceStr = numberWithCommas(unitVal) + UNIT_PRICE[i] + priceStr;\n if (i !== unitValues.length) priceStr = ' ' + priceStr;\n }\n priceStr = priceStr.trim();\n\n if (!priceStr) return '0';\n return priceStr;\n};\n\nvar getEmphasizedStrByQuery = function getEmphasizedStrByQuery(str, query) {\n return (str || '').split(query).join('' + query + '');\n};\n\nvar getSeparatedDateStr = function getSeparatedDateStr(moment, dateStr) {\n var DAYS = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n 'Sunday': '일',\n 'Monday': '월',\n 'Tuesday': '화',\n 'Wednesday': '수',\n 'Thursday': '목',\n 'Friday': '금',\n 'Saturday': '토'\n };\n\n var val = '';\n\n var MIN_TO_SEC = 60,\n HOUR_TO_SEC = 3600,\n DAY_TO_SEC = 86400;\n\n var now = new Date(),\n past = new Date(dateStr),\n diffSeconds = Math.floor((now - past) / 1000);\n\n if (diffSeconds < DAY_TO_SEC) {\n if (diffSeconds < HOUR_TO_SEC) {\n if (diffSeconds < MIN_TO_SEC) {\n val = diffSeconds + '\\uCD08 \\uC804';\n } else {\n var diffMinutes = Math.floor(diffSeconds / MIN_TO_SEC);\n val = diffMinutes + '\\uBD84 \\uC804';\n }\n } else {\n var diffHours = Math.floor(diffSeconds / HOUR_TO_SEC);\n val = diffHours + '\\uC2DC\\uAC04 \\uC804';\n }\n } else {\n var date = moment(dateStr),\n day = DAYS[date.format('dddd')] || '';\n\n val = date.format('YYYY-MM-DD');\n // val = date.format(`YYYY.MM.DD. (${day})`);\n }\n\n return val;\n};\n\nvar namespace = function namespace(_namespace, parent) {\n if (!isString(_namespace)) throw new TypeError('namespace parameter type of namespace() must be String.');\n if (!(isObject(parent) || !isDefined(parent))) throw new TypeError('parent parameter type of namespace() must be Object or null or undefined.');\n\n var ns = parent || window;\n\n if (_namespace) {\n var parts = _namespace.split('.');\n\n for (var i = 0, max = parts.length; i < max; i++) {\n if (!ns[parts[i]]) ns[parts[i]] = {};\n ns = ns[parts[i]];\n }\n }\n\n return ns;\n};\n\nvar template = function template(strings) {\n for (var _len = arguments.length, keys = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n keys[_key - 1] = arguments[_key];\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals\n return function () {\n for (var _len2 = arguments.length, values = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n values[_key2] = arguments[_key2];\n }\n\n var dict = values[values.length - 1] || {};\n\n var result = [strings[0]];\n keys.forEach(function (key, i) {\n var value = Number.isInteger(key) ? values[key] : dict[key];\n result.push(value, strings[i + 1]);\n });\n\n return result.join('');\n };\n};\n\n// board - server list\nvar getUrlAddCategoryIdByArticle = function getUrlAddCategoryIdByArticle(_url, _article, _serverNameMap) {\n var url = _url;\n\n if (url !== '#') {\n var path = url.split('?')[0],\n uriParams = getUriParams(url);\n\n var categoryId = isObject(_article.category) ? _article.category.categoryId : uriParams.categoryId;\n\n if (isNotDefined(categoryId)) {\n // const obj = getFirstObjectHasProperty(_serverNameMap, 'serverId', 1) || _serverNameMap[0];\n // categoryId = obj.categoryId;\n categoryId = 0;\n }\n\n url = getUriCombinedParams(path, $.extend(uriParams, { categoryId: categoryId }));\n }\n\n return url;\n};\n\n// character setting - stat, equip simulator\nvar getChangedStats = function getChangedStats(originalStatObj, newStatObj) {\n var changedStats = {};\n\n var stat, newStat;\n for (var key in originalStatObj) {\n stat = isDefined(originalStatObj[key]) ? originalStatObj[key] : null;\n newStat = isDefined(newStatObj[key]) ? newStatObj[key] : null;\n\n if (allOf(isDefined(newStat), stat !== newStat)) changedStats[key] = newStat;\n }\n\n var changeStatsCount = 0;\n for (var k in changedStats) {\n changeStatsCount++;\n }return changeStatsCount > 0 ? changedStats : null;\n};\n\n// 2021.12 [StatModel.js] STEP_ELIXIR_POINT_BY_LEVEL = [{level: 80, point: 2 }, {level: 90, point: 2}, {level: 100, point: 3 }];\nvar getPlusElixirPointByLevel = function getPlusElixirPointByLevel(level, level_init, plusElixirPointByLevel) {\n var _plusElixirPoint = 0;\n if ((level - level_init) % 2 === 0) {\n _plusElixirPoint = 1;\n }\n each(plusElixirPointByLevel, function (obj) {\n if (parseInt(obj.level) === parseInt(level)) {\n _plusElixirPoint = parseInt(obj.point);\n }\n });\n // console.log( '=> util.js _plusElixirPoint : ', _plusElixirPoint );\n return _plusElixirPoint;\n};\n\n// 2019.11 엘릭서를 사용할 수 없는 레벨 체크 50 이상이면 가능함 _.statData.level - _.model.LEVEL_INIT\nvar isLevelCanConsumeElixirStat = function isLevelCanConsumeElixirStat(level, perLevelPlusElixirPoint) {\n return level >= 0 ? true : false;\n // return (level % perLevelPlusElixirPoint === 0) ? true : false;\n};\n\nvar isLevelGetElixirPoint = function isLevelGetElixirPoint(level, perLevelPlusElixirPoint) {\n // 2019.11\n return level % perLevelPlusElixirPoint === 0 ? true : false;\n};\n\n// STAT_MAX_BY_LEVEL 2021.\nvar getStatMaxByLevel = function getStatMaxByLevel(level, statMaxByLevel) {\n var _statMax = 50;\n each(statMaxByLevel, function (obj) {\n if (parseInt(obj.level) <= level) {\n _statMax = parseInt(obj.max);\n }\n });\n // console.log( '=> util.js getStatMaxByLevel() _statMax : ', _statMax );\n return _statMax;\n};\n\nvar isWarrior = function isWarrior(classId) {\n if (parseInt10(classId) === 7) return true;\n\n return false;\n};\n\nvar getClassName = function getClassName(classId) {\n var CLASS_NAMES_KOR = ['군주', '기사', '요정', '마법사', '다크엘프', '용기사', '환술사', '전사', '검사', '창기사'];\n\n var className = CLASS_NAMES_KOR[parseInt10(classId)];\n if (not(isDefined)(className)) className = '';\n\n return className;\n};\n\nvar removeEquipInEquips = function removeEquipInEquips(equips, equipItemObj) {\n if (!Array.isArray(equips)) throw new TypeError('arr parameter type of removeEquipInEquips() must be Array.');\n\n var clonedEquips = equips.slice();\n\n var equip = void 0;\n for (var i = 0, max = clonedEquips.length; i < max; i++) {\n equip = clonedEquips[i];\n\n if (allOf(isDefined(equip), equip.id === equipItemObj.id, equip.name === equipItemObj.name, equip.slot === equipItemObj.slot)) {\n clonedEquips.splice(i, 1);\n break;\n }\n }\n\n return clonedEquips;\n};\n\nvar isPetNecklace = function isPetNecklace(itemId) {\n return itemId === __WEBPACK_IMPORTED_MODULE_0__model_model__[\"b\" /* PET_NECKLACE_ID */] ? true : false;\n};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(3);\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conceptArt_ConceptArt__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_util__ = __webpack_require__(1);\n\n\n\n(function ($, global) {\n \"use strict\";\n\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_util__[\"f\" /* namespace */])('nc.lineage');\n\n nc.lineage.conceptArt = function (options) {\n if (Object(__WEBPACK_IMPORTED_MODULE_1__utils_util__[\"e\" /* isNotDefined */])(options)) throw new Error('nc.lineage.conceptArt require options object');\n\n var option = $.extend({\n wrap: null,\n apiDomain: '',\n global: global\n }, options);\n\n var conceptArt = new __WEBPACK_IMPORTED_MODULE_0__conceptArt_ConceptArt__[\"a\" /* default */](option).init();\n };\n})(jQuery, window);\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__model_model__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__model_msg_board__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_util__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_service__ = __webpack_require__(6);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\nvar ConceptArt = function () {\n function ConceptArt(options) {\n _classCallCheck(this, ConceptArt);\n\n var _ = this;\n\n // const\n _.IMAGEVIEWER_ID = 'imageviewer-rwd';\n _.CAROUSEL_HEIGHT = 165;\n\n // variables\n _.option = $.extend({\n wrap: null,\n apiDomain: '',\n breakpoint: __WEBPACK_IMPORTED_MODULE_0__model_model__[\"a\" /* BREAKPOINTS */],\n global: window\n }, options);\n\n _.contiGroupData = [];\n _.data = null;\n\n _.global = _.option.global ? _.option.global : window;\n\n _.currentResolution = '';\n _.currentGroupData = null;\n _.currentIndex = 0;\n\n _.isStartChangeImageByImageViewer = false;\n _.isStartChangeImageBySlick = false;\n _.isDraggingSlickWrap = false;\n\n _.wrap = null;\n _.imageViewer = null;\n\n _.carouselWrap = null;\n _.slickWrap = null;\n\n _.msg = {\n FAIL_LOAD_CONCEPTART_DATA: '원화 데이터를 불러올 수 없습니다. 잠시 후, 다시 시도해주세요.'\n };\n }\n\n _createClass(ConceptArt, [{\n key: 'init',\n value: function init() {\n var _ = this;\n\n _.wrap = _.option.wrap;\n\n // getDatasWithOption([{\n // type: 'GET',\n // url: _.option.apiPath,\n // dataType: 'json',\n // contentType: 'application/json',\n // xhrFields: {withCredentials: true}\n //\n // }], (data) => {\n // _.data = data;\n //\n // if (not(Array.isArray)(_.data) || _.data.length <= 0) {\n // _.setNoData();\n //\n // } else {\n // _.data.reverse();\n //\n // _.setInstance();\n // }\n //\n // }, (data) => {\n // _.global.alert(_.msg.FAIL_LOAD_CONCEPTART_DATA); // '원화 데이터를 불러올 수 없습니다. 잠시 후, 다시 시도해주세요.'\n // });\n Object(__WEBPACK_IMPORTED_MODULE_3__utils_service__[\"a\" /* getDatasWithOption */])([{\n type: 'GET',\n url: _.option.apiDomain + '/conti/getContentGroup?service=lineage&groupAlias=lineage-art&subAlias=ko-KR',\n dataType: 'json',\n contentType: 'application/json',\n Accept: 'application/json'\n }], function (data) {\n if (Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"g\" /* not */])(Array.isArray)(data) || data.length <= 0) {\n _.setNoData();\n } else {\n data.forEach(function (item) {\n _.contiGroupData.push(JSON.parse(item.jsonData));\n });\n console.log(' success _.contiGroupData : ', _.contiGroupData);\n // _.setData(_.contiGroupData.reverse());\n _.data = _.contiGroupData.reverse();\n _.setInstance();\n }\n }, function (data) {\n _.global.alert(_.msg.FAIL_LOAD_CONCEPTART_DATA); // '원화 데이터를 불러올 수 없습니다. 잠시 후, 다시 시도해주세요.'\n });\n\n return _;\n }\n }, {\n key: 'setData',\n value: function setData(data) {\n var _ = this;\n\n var items = [];\n Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"a\" /* each */])(data, function (group) {\n if (Array.isArray(group.groups) && group.groups.length > 0) {\n Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"a\" /* each */])(group.groups, function (item) {\n items.push(item);\n });\n }\n });\n\n _.data = items;\n }\n }, {\n key: 'setInstance',\n value: function setInstance() {\n var _ = this;\n\n _.setList();\n\n $(_.global).on('resize', $.proxy(_.resize, _));\n\n _.resize();\n }\n }, {\n key: 'setNoData',\n value: function setNoData() {\n var groupListWrap = $('> ul', this.wrap);\n groupListWrap.empty().append('
  • ' + __WEBPACK_IMPORTED_MODULE_1__model_msg_board__[\"a\" /* BOARD */].NO_ITEM + '
  • ');\n }\n }, {\n key: 'setList',\n value: function setList() {\n var _ = this;\n\n console.log('# setList() _.data : ', _.data);\n\n var groupData = void 0,\n firstItem = void 0,\n thumbnailSrc = void 0,\n tpl = '';\n for (var i = 0, max = _.data.length; i < max; i++) {\n groupData = _.data[i];\n firstItem = groupData.groups[0];\n\n if (!firstItem) continue;\n\n // change by request from UI developer.\n // thumbnailSrc = (firstItem.img.thumbnailSrc) ? firstItem.img.thumbnailSrc : firstItem.img.src;\n thumbnailSrc = firstItem.img.src || '';\n\n tpl += _.getListTpl(i + 1, thumbnailSrc, groupData.artTitle, groupData.groups.length);\n }\n\n var groupListWrap = $('> ul', _.wrap);\n groupListWrap.empty().append(tpl);\n\n // set events\n $('li', groupListWrap).on('click', function (evt) {\n var btn = $(this),\n groupIndex = parseInt(btn.attr('data-index'), 10),\n groupData = _.data[groupIndex - 1];\n\n if (!groupData) return;\n\n // make array for open imageViewer. memoization pattern.\n if (Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"b\" /* falsy */])(groupData.isArranged)) {\n var imgObj = void 0;\n for (var _i = 0, _max = groupData.groups.length; _i < _max; _i++) {\n imgObj = groupData.groups[_i].img;\n\n if (!imgObj.thumbnailSrc) imgObj.thumbnailSrc = imgObj.src || '';\n }\n\n groupData.isArranged = true;\n }\n\n // set instances\n _.setImageViewer(groupData);\n _.setImageViewerTopBarTitle(groupData.groups[0].title);\n\n _.currentGroupData = groupData;\n\n _.currentIndex = 1;\n });\n }\n }, {\n key: 'getListTpl',\n value: function getListTpl(index, thumbnailSrc, title, itemsLength) {\n return '
  • \\n
    \\n\\n
    \\n

    ' + title + '

    \\n (' + itemsLength + '\\uC885)\\n
    \\n
  • ';\n }\n }, {\n key: 'setImageViewer',\n value: function setImageViewer(groupData) {\n var _ = this,\n firstImgIndex = 1;\n\n if (Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"e\" /* isNotDefined */])(_.imageViewer)) {\n var imgObj = void 0,\n imgObjs = [];\n for (var i = 0, max = groupData.groups.length; i < max; i++) {\n // images.push(groupData.groups[i].src);\n\n imgObj = groupData.groups[i].img;\n imgObjs.push({ src: imgObj.src, w: parseInt(imgObj.width, 10), h: parseInt(imgObj.height, 10) });\n }\n\n _.imageViewer = new nc.ui.ImageViewerRWD($('body'), imgObjs, {\n // - custom options\n // originViewerUrl: 'http://m.lineage2.plaync.com/board/result/viewimage?imgSrc=',\n // commentUrl: 'http://m.lineage2.plaync.com/board/image/commentList?articleId=606818',\n isPreloadImages: false,\n id: _.IMAGEVIEWER_ID,\n topBarTitle: groupData.artTitle || '',\n hasDownloadFileBtn: false,\n readyCallback: function readyCallback() {\n _.setCarousel(groupData);\n _.resizeForcibly();\n\n _.activateCarouselItem(firstImgIndex);\n },\n\n // - photoswipe library base options - http://photoswipe.com/documentation/options.html\n photoswipe: {\n // arrowEl: true, ...\n\n // TODO - change\n // errorMsg: '
    The image could not be loaded.
    '\n }\n });\n _.imageViewer.slideByUrl(firstImgIndex - 1);\n\n // set events\n _.imageViewer.listen('destroy', function () {\n _.destroyImageViewer(true);\n _.destroyCarousel();\n });\n\n _.imageViewer.listen('afterChange', function () {\n var index = _.imageViewer.getCurrentIndex() + 1;\n\n if (_.isStartChangeImageBySlick) {\n _.activateCarousel(index);\n } else {\n _.isStartChangeImageByImageViewer = true;\n _.activateCarousel(index);\n }\n\n _.setImageViewerTopBarTitle(_.currentGroupData.groups[index - 1].title);\n\n _.currentIndex = index;\n });\n }\n }\n }, {\n key: 'setImageViewerTopBarTitle',\n value: function setImageViewerTopBarTitle(title) {\n if (Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"d\" /* isDefined */])(this.imageViewer)) this.imageViewer.setTopBarTitle(title || '');\n }\n }, {\n key: 'setCarousel',\n value: function setCarousel(groupData) {\n var _ = this;\n\n if (Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"e\" /* isNotDefined */])(_.slickWrap)) {\n var item = void 0,\n tpl = '';\n for (var i = 0, max = groupData.groups.length; i < max; i++) {\n item = groupData.groups[i];\n tpl += '
  • \"'
  • ';\n }\n\n _.carouselWrap = $('
    ');\n $('body').append(_.carouselWrap);\n\n _.slickWrap = $('ul', _.carouselWrap);\n\n _.slickWrap.slick({\n infinite: true,\n dots: false,\n speed: 250,\n arrows: true,\n slidesToShow: 8,\n slidesToScroll: 8\n });\n\n _.carouselWrap.on('mousewheel DOMMouseScroll', function (evt) {\n _.destroyCarousel();\n _.destroyImageViewer();\n });\n\n _.slickWrap.on('beforeChange', function (event, slick, currentSlide, nextSlide) {\n if (_.isStartChangeImageByImageViewer === true) {\n // change image by click thumbnail, or from imageViewer\n\n } else {\n // swipe slick thumbnail or click arrow button in slick\n _.isStartChangeImageBySlick = true;\n\n var index = nextSlide + 1;\n _.goToImageViewer(index);\n _.setImageViewerTopBarTitle(_.currentGroupData.groups[index - 1].title);\n }\n\n _.isStartChangeImageByImageViewer = false;\n _.isStartChangeImageBySlick = false;\n });\n\n // detect drag and click\n $('.slick-track').on('mousedown', '.slick-slide', function (evt) {\n _.isDraggingSlickWrap = false;\n });\n $('.slick-track').on('mousemove', '.slick-slide', function (evt) {\n _.isDraggingSlickWrap = true;\n });\n $('.slick-track').on('mouseup', '.slick-slide', function (evt) {\n if (_.isDraggingSlickWrap === true) {\n // this is drag action.\n\n } else {\n _.isStartChangeImageByImageViewer = true;\n\n var index = parseInt($(this).attr('data-slick-index'), 10) + 1;\n _.goToImageViewer(index);\n _.setImageViewerTopBarTitle(_.currentGroupData.groups[index - 1].title);\n }\n\n _.isDraggingSlickWrap = false;\n });\n }\n }\n }, {\n key: 'goToImageViewer',\n value: function goToImageViewer(index) {\n var idx = index >= 1 ? index - 1 : 0;\n this.imageViewer.goTo(idx);\n }\n }, {\n key: 'goToCarousel',\n value: function goToCarousel(index) {\n var idx = index >= 1 ? index - 1 : 0;\n this.slickWrap.slick('slickGoTo', idx);\n }\n }, {\n key: 'activateCarousel',\n value: function activateCarousel(index) {\n var _ = this;\n\n if (index === _.currentIndex) return;\n\n _.goToCarousel(index);\n _.activateCarouselItem(index);\n }\n }, {\n key: 'activateCarouselItem',\n value: function activateCarouselItem(index) {\n var _ = this;\n\n var slides = $('.slick-slide', _.slickWrap);\n slides.removeClass('on');\n\n var activateSlide = slides.filter(function () {\n var slideIndex = parseInt($(this).attr('data-slick-index'), 10);\n return slideIndex === index - 1;\n });\n\n activateSlide.addClass('on');\n }\n }, {\n key: 'destroyImageViewer',\n value: function destroyImageViewer(isDestroyOnlyContainer) {\n var _ = this;\n\n if (Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"b\" /* falsy */])(isDestroyOnlyContainer)) {\n if (Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"d\" /* isDefined */])(_.imageViewer)) _.imageViewer.hide();\n }\n _.imageViewer = null;\n\n $('#' + _.IMAGEVIEWER_ID).remove();\n }\n }, {\n key: 'destroyCarousel',\n value: function destroyCarousel() {\n var _ = this;\n\n if (Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"h\" /* truthy */])(_.isCarouselInitialized())) {\n // destroy slick\n if (_.slickWrap && _.slickWrap.length) {\n var slickTrack = $('.slick-track', _.slickWrap);\n slickTrack.off('mousedown');\n slickTrack.off('mousemove');\n slickTrack.off('mouseup');\n\n _.slickWrap.off('beforeChange');\n _.slickWrap.slick('unslick');\n }\n _.slickWrap = null;\n\n // destroy carousel\n if (_.carouselWrap && _.carouselWrap.length) {\n _.carouselWrap.off('mousewheel DOMMouseScroll');\n _.carouselWrap.remove();\n }\n _.carouselWrap = null;\n }\n }\n }, {\n key: 'isCarouselInitialized',\n value: function isCarouselInitialized() {\n var _ = this;\n\n if (_.slickWrap && _.slickWrap.length) return _.slickWrap.hasClass('slick-initialized');\n return false;\n }\n }, {\n key: 'resize',\n value: function resize(evt) {\n var _ = this,\n resolution = Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"c\" /* getResolution */])(_.option.breakpoint, _.global);\n\n if (resolution !== _.currentResolution) _.resizeByResolution(resolution);\n\n _.currentResolution = resolution;\n }\n }, {\n key: 'resizeForcibly',\n value: function resizeForcibly() {\n var _ = this,\n resolution = Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"c\" /* getResolution */])(_.option.breakpoint, _.global);\n\n _.resizeByResolution(resolution);\n\n _.currentResolution = resolution;\n }\n }, {\n key: 'resizeByResolution',\n value: function resizeByResolution(resolution) {\n var _ = this;\n\n if (Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"e\" /* isNotDefined */])(_.imageViewer)) return;\n\n switch (resolution) {\n case 'max':\n _.imageViewer.setHeight(window.innerHeight - _.CAROUSEL_HEIGHT);\n break;\n\n case 'pc':\n _.imageViewer.setHeight(window.innerHeight - _.CAROUSEL_HEIGHT);\n break;\n\n case 'tablet':\n _.imageViewer.setHeight(window.innerHeight - _.CAROUSEL_HEIGHT);\n break;\n\n case 'phone':\n _.imageViewer.setHeight(window.innerHeight);\n break;\n }\n }\n }]);\n\n return ConceptArt;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ConceptArt);\n\n/***/ }),\n/* 5 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return BOARD; });\n// TODO - disassemble\nvar BOARD = {\n NO_ITEM: '등록된 글이 없습니다.',\n RETRY_LATER: '잠시 후 다시 시도해주세요.'\n};\n\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export getDatas */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return getDatasWithOption; });\n/* unused harmony export handleApiError */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__model_msg_alert__ = __webpack_require__(7);\n\n\nvar getDatas = function getDatas(urls, resolvedCallback, rejectedCallback) {\n var promises = [];\n\n for (var i = 0, max = urls.length; i < max; i++) {\n var promise = $.ajax({\n type: 'GET',\n url: urls[i],\n dataType: 'json'\n });\n promises.push(promise);\n }\n\n $.when.apply($, promises).then(resolvedCallback).fail(rejectedCallback);\n};\n\nvar getDatasWithOption = function getDatasWithOption(jQueryAjaxOptions, resolvedCallback, rejectedCallback) {\n var promises = [];\n\n for (var i = 0, max = jQueryAjaxOptions.length; i < max; i++) {\n var promise = $.ajax(jQueryAjaxOptions[i]);\n promises.push(promise);\n }\n\n $.when.apply($, promises).then(resolvedCallback).fail(rejectedCallback);\n};\n\nvar handleApiError = function handleApiError(apiResultData) {\n var global = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n\n if (apiResultData) {\n if (parseInt(apiResultData.status, 10) === 401) {\n // http://git.korea.ncsoft.corp/projects/FRONTEND_DEVELOP/repos/uikit-nccommunity/browse/_src/js/lang.js\n global.alert(__WEBPACK_IMPORTED_MODULE_0__model_msg_alert__[\"a\" /* ALERT */].REQUIRE_LOGIN);\n\n if (typeof global.GNBLogin === 'function') {\n global.GNBLogin();\n\n return true;\n }\n }\n }\n\n return false;\n};\n\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ALERT; });\nvar ALERT = {\n REQUIRE_LOGIN: '로그인 후 이용하실 수 있습니다.'\n};\n\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// download/conceptart.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 73259ee1221799c218e6","export const BREAKPOINTS = {\r\n tablet: 640,\r\n pc: 960,\r\n max: 1340\r\n};\r\n\r\nexport const DAYS = {\r\n 'Sunday': '일',\r\n 'Monday': '월',\r\n 'Tuesday': '화',\r\n 'Wednesday': '수',\r\n 'Thursday': '목',\r\n 'Friday': '금',\r\n 'Saturday': '토'\r\n};\r\n\r\nexport const API_DOMAIN_DEFAULT = 'https://api-lineage.plaync.com';\r\n\r\nexport const API_COMMUNITY_DOMAIN = 'https://api-commnity.plaync.com/lineage1';\r\n\r\nexport const STATIC_DOMAIN_DEFAULT = 'https://assets.playnccdn.com'; // https://wstatic.plaync.co.kr';\r\n\r\nexport const STATIC_CDN_DOMAIN_DEFAULT = 'https://wstatic-cdn.plaync.com';\r\n\r\nexport const NO_ITEM_IMAGE_URL = `${STATIC_DOMAIN_DEFAULT}/lineage/v1/img/world/item/noimg.gif`;\r\n\r\nexport const PET_NECKLACE_ID = 25668;\n\n\n// WEBPACK FOOTER //\n// ./_src/js/model/model.js","/*\r\n * common utils\r\n */\r\n\r\nimport {PET_NECKLACE_ID} from '../model/model';\r\n\r\nexport const ua = window.navigator.userAgent;\r\n\r\nexport const locationOriginRegex = /^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})/;\r\n\r\nexport let isIE = (function () {\r\n return /msie/i.test(ua) || /trident/i.test(ua);\r\n}());\r\n\r\nexport let isEdge = (userAgent) => {\r\n return ( /Gecko/i.test(userAgent) && /Edge/i.test(userAgent) );\r\n};\r\n\r\nexport let isOpera = (userAgent) => {\r\n return ( /Opera/i.test(userAgent) || /OPR\\//i.test(userAgent) );\r\n};\r\n\r\nexport let isChrome = (userAgent) => {\r\n return ( !isEdge(userAgent) && !isOpera(userAgent) && /Chrome/i.test(userAgent) );\r\n};\r\n\r\nexport let isIOS = (userAgent) => {\r\n return /iPad|iPhone|iPod/.test(userAgent) && !window.MSStream;\r\n};\r\n\r\nexport let isAndroid = (userAgent) => {\r\n return /android/i.test(userAgent);\r\n};\r\n\r\nexport let truthy = function truthy(object) {\r\n return !!object;\r\n};\r\n\r\nexport let falsy = function falsy(object) {\r\n return !!!object;\r\n};\r\n\r\nexport let existy = (obj) => {\r\n return obj != null;\r\n};\r\n\r\nexport let isDefined = (obj) => {\r\n let flag = true;\r\n if (obj === null || typeof obj === 'undefined') return false;\r\n return flag;\r\n};\r\n\r\nexport let isRc = (function () {\r\n return isDefined(/^rc-/.exec(location.hostname));\r\n}());\r\n\r\nexport let isInteger = (obj) => {\r\n if (!isDefined(obj) || obj.constructor !== Number) return false;\r\n\r\n // https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\r\n return (isFinite(obj) && Math.floor(obj) === obj);\r\n};\r\n\r\nexport let isString = (obj) => {\r\n if (!isDefined(obj)) return false;\r\n return (obj.constructor === String);\r\n};\r\n\r\nexport let isNumber = function isNumber(obj) {\r\n if (!isDefined(obj)) return false;\r\n return (obj.constructor === Number);\r\n};\r\n\r\nexport let isBoolean = (obj) => {\r\n if (!isDefined(obj)) return false;\r\n return (obj.constructor === Boolean);\r\n};\r\n\r\nexport let isObject = (obj) => {\r\n if (!isDefined(obj)) return false;\r\n return (obj.constructor === Object);\r\n};\r\n\r\nexport let isFunction = (obj) => {\r\n if (!isDefined(obj)) return false;\r\n return (obj.constructor === Function);\r\n};\r\n\r\nexport let isRegExp = (obj) => {\r\n if (!isDefined(obj)) return false;\r\n return (obj.constructor === RegExp);\r\n};\r\n\r\nexport let not = (func) => {\r\n if (!isFunction(func)) throw new TypeError('func parameter type of not() must be Function.');\r\n\r\n return (object) => {\r\n return !func(object);\r\n };\r\n};\r\n\r\nexport let isNotDefined = not(isDefined);\r\n\r\nexport let parseInt10 = (number) => {\r\n return parseInt(number, 10);\r\n};\r\n\r\nexport let parseStrIntToInt = (strIntOrInt) => {\r\n let val = strIntOrInt;\r\n\r\n if (!isDefined(val)) return 0;\r\n if (typeof(val) === 'number') return val;\r\n\r\n return parseInt10(val.split(',').join(''));\r\n};\r\n\r\nexport let removeElementInArray = function removeElementInArray(arr, target) {\r\n if (!Array.isArray(arr)) throw new TypeError('arr parameter type of removeElementInArray() must be Array.');\r\n\r\n var clonedArr = arr.slice(0),\r\n index = clonedArr.indexOf(target);\r\n\r\n if (index >= 0) clonedArr.splice(index, 1);\r\n\r\n return clonedArr;\r\n};\r\n\r\nexport let allOf = function allOf(/*args*/) {\r\n const args = Array.prototype.slice.call(arguments);\r\n\r\n return args.every(function (val) {\r\n return (val === true);\r\n });\r\n};\r\n\r\nexport let anyOf = function anyOf(/*args*/) {\r\n const args = Array.prototype.slice.call(arguments);\r\n\r\n return args.some(function (val) {\r\n return (val === true);\r\n });\r\n};\r\n\r\nexport let getDefined = function (val, defaultVal) {\r\n return (isDefined(val)) ? val : defaultVal;\r\n};\r\n\r\nexport let notSingleEle = not(($ele) => {\r\n return $ele.length === 1;\r\n});\r\n\r\nexport let each = (dataCanLoop, func, context) => {\r\n let _context = (existy(context)) ? context : null;\r\n\r\n if (!(Array.isArray(dataCanLoop) || isString(dataCanLoop))) throw new TypeError('dataCanLoop parameter type of each() must be Array or String.');\r\n\r\n let result = false;\r\n for (let i = 0, max = dataCanLoop.length; i < max; i++) {\r\n result = func.call(_context, dataCanLoop[i]);\r\n if (result === false) break;\r\n }\r\n};\r\n\r\nexport let getFileExtension = (fileName) => {\r\n if (!isString(fileName)) throw new TypeError('getFileExtension() requires String parameter.');\r\n\r\n if (fileName.length <= 0) return '';\r\n\r\n var lastDotIndex = fileName.lastIndexOf('.'),\r\n extension = fileName.substr(lastDotIndex + 1);\r\n\r\n return extension;\r\n};\r\n\r\nexport let getFirstObjectHasProperty = function (arrayHasObjects, propertyKey, findPropertyValueOrRegex) {\r\n if (!Array.isArray(arrayHasObjects) || arrayHasObjects.length <= 0) return null;\r\n if (!isString(propertyKey)) return null;\r\n\r\n let obj, result = null;\r\n for (let i = 0, max = arrayHasObjects.length; i < max; ++i) {\r\n obj = arrayHasObjects[i];\r\n if (!obj.hasOwnProperty(propertyKey)) continue;\r\n\r\n if (isRegExp(findPropertyValueOrRegex)) {\r\n if (findPropertyValueOrRegex.test(obj[propertyKey])) {\r\n result = obj;\r\n break;\r\n }\r\n } else {\r\n if (obj[propertyKey] === findPropertyValueOrRegex) {\r\n result = obj;\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nexport let getObjectHasProperty = function getObjectHasProperty(arrayHasObjects, propertyKey ) {\r\n if (!Array.isArray(arrayHasObjects) || arrayHasObjects.length <= 0) return null;\r\n if (!isString(propertyKey)) return null;\r\n let obj, result = null;\r\n\r\n each(arrayHasObjects, (obj) => {\r\n if(obj.hasOwnProperty(propertyKey)) result = obj[propertyKey];\r\n });\r\n // console.log( '=> util.js getObjectHasProperty() result : ', propertyKey, result );\r\n return result;\r\n};\r\n\r\n\r\nexport let overlappedConditionSortByProperty = function sortByProp(_datas, _conditions, _conditionIndex) {\r\n let datas = Array.prototype.slice.call(_datas);\r\n\r\n if (!_conditions || _conditions.constructor !== Array || _conditions.length < 0) return datas;\r\n\r\n let conditionIndex = (_conditionIndex >= 0) ? _conditionIndex : 0,\r\n condition = _conditions[conditionIndex];\r\n\r\n if (conditionIndex <= 0) datas.sort(condition.func);\r\n\r\n if (_conditions.length <= 1) return datas;\r\n\r\n if (conditionIndex < _conditions.length - 1) {\r\n let prevProperty = condition.property,\r\n nextConditionIndex = conditionIndex + 1,\r\n nextCondition = _conditions[nextConditionIndex];\r\n\r\n let memoObj = {},\r\n memoArr = [],\r\n arr = [];\r\n\r\n let obj, prop;\r\n for (let i = 0, max = datas.length; i < max; i++) {\r\n obj = datas[i];\r\n prop = String(obj[prevProperty]);\r\n\r\n if (!memoObj[prop]) {\r\n memoObj[prop] = [];\r\n memoArr.push(memoObj[prop]);\r\n }\r\n\r\n arr = memoObj[prop];\r\n arr.push(obj);\r\n }\r\n\r\n for (let j = 0, len = memoArr.length; j < len; j++) {\r\n arr = memoArr[j];\r\n arr.sort(nextCondition.func);\r\n\r\n memoArr[j] = overlappedConditionSortByProperty(arr, _conditions, nextConditionIndex);\r\n }\r\n\r\n let resultArr = memoArr.reduce((acc, curVal, curIndex, array) => acc.concat(curVal));\r\n\r\n return resultArr;\r\n }\r\n\r\n return datas;\r\n}\r\n\r\n\r\nexport let getPositionFromTranslateStr = (str) => {\r\n let obj = {x: 0, y: 0};\r\n if (!isDefined(str)) return obj;\r\n\r\n let values = str.match(/[+-]?(\\d*\\.)?\\d+/g);\r\n if (values.length <= 0) return obj;\r\n\r\n if (/translateX/g.test(str)) {\r\n obj.x = parseFloat(values[0]);\r\n return obj;\r\n }\r\n\r\n if (/translateY/g.test(str)) {\r\n obj.y = parseFloat(values[0]);\r\n return obj;\r\n }\r\n\r\n obj.x = parseFloat(values[0]);\r\n if (values.length > 1) obj.y = parseFloat(values[1]);\r\n\r\n return obj;\r\n};\r\n\r\nexport let isIndexInLoop = function isIndexInLoop(totalLength, loopGap, firstIndex, searchIndex) {\r\n const args = Array.prototype.slice.call(arguments);\r\n if (args.length < 4) throw Error('isIndexInLoop function requires 4 arguments.');\r\n\r\n if (!isInteger(totalLength) || !isInteger(loopGap) || !isInteger(firstIndex) || !isInteger(searchIndex)) {\r\n throw Error('arguments must be Integer Number.');\r\n }\r\n if (totalLength < 1 || firstIndex < 1) {\r\n throw Error('totalLength and startIndex can not smaller than 1.');\r\n }\r\n if (loopGap > totalLength) {\r\n throw Error('loopGap can not bigger than totalLength.');\r\n }\r\n\r\n let index = firstIndex;\r\n for (let i = 0; i < loopGap; i++) {\r\n if (index === searchIndex) return true;\r\n index = (index + 1 > totalLength) ? 1 : index + 1;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport let getLoopedLastIndex = function getLoopedLastIndex(totalLength, loopGap, firstIndex) {\r\n const args = Array.prototype.slice.call(arguments);\r\n if (args.length < 3) throw Error('getLoopedLastIndex function requires 3 arguments.');\r\n\r\n if (!isInteger(totalLength) || !isInteger(loopGap) || !isInteger(firstIndex)) {\r\n throw Error('arguments must be Integer Number.');\r\n }\r\n if (totalLength < 1 || firstIndex < 1) {\r\n throw Error('totalLength and firstIndex can not smaller than 1.');\r\n }\r\n if (loopGap > totalLength || firstIndex > totalLength) {\r\n throw Error('loopGap and firstIndex can not bigger than totalLength.');\r\n }\r\n\r\n let index = firstIndex;\r\n for (let i = 0; i < loopGap - 1; i++) {\r\n index++;\r\n if (index > totalLength) index = 1;\r\n }\r\n return index;\r\n};\r\n\r\nexport let getReverseLoopedFirstIndex = function getReverseLoopedFirstIndex(totalLength, loopGap, lastIndex) {\r\n const args = Array.prototype.slice.call(arguments);\r\n if (args.length < 3) throw Error('getReverseLoopedFirstIndex function requires 3 arguments.');\r\n\r\n if (!isInteger(totalLength) || !isInteger(loopGap) || !isInteger(lastIndex)) {\r\n throw Error('arguments must be Integer Number.');\r\n }\r\n if (totalLength < 1 || lastIndex < 1) {\r\n throw Error('totalLength and lastIndex can not smaller than 1.');\r\n }\r\n if (loopGap > totalLength || lastIndex > totalLength) {\r\n throw Error('loopGap and lastIndex can not bigger than totalLength.');\r\n }\r\n\r\n let index = lastIndex;\r\n for (let i = 0; i < loopGap - 1; i++) {\r\n index = (index - 1 < 1) ? totalLength : index - 1;\r\n }\r\n\r\n return index;\r\n};\r\n\r\nexport let getResolution = (breakpoint = {tablet: 640, pc: 960, max: 1260}, global = window) => {\r\n let resolution = '';\r\n if (breakpoint.max && global.innerWidth >= breakpoint.max) {\r\n resolution = 'max';\r\n\r\n } else if (breakpoint.pc && global.innerWidth >= breakpoint.pc) {\r\n resolution = 'pc';\r\n\r\n } else if (breakpoint.tablet && global.innerWidth >= breakpoint.tablet) {\r\n resolution = 'tablet';\r\n\r\n } else {\r\n resolution = 'phone';\r\n }\r\n\r\n return resolution;\r\n};\r\n\r\nexport let isPhoneResolution = (resolution) => {\r\n return resolution === 'phone';\r\n};\r\n\r\nexport let isTabletResolution = (resolution) => {\r\n return resolution === 'tablet';\r\n};\r\n\r\nexport let isMobileResolution = (resolution) => {\r\n return ( resolution === 'phone' || resolution === 'tablet');\r\n};\r\n\r\n// http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\r\nexport let numberWithCommas = (number) => {\r\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n};\r\n\r\nexport let getUriParams = (uri) => {\r\n if (uri.length < 1) return null;\r\n let str = uri.split('#')[0];\r\n\r\n let tmpArr = str.split('?');\r\n if (tmpArr.length < 2) return null;\r\n\r\n let paramStr = tmpArr[1],\r\n params = paramStr.split('&');\r\n\r\n let keyValueArr, obj = {};\r\n for (let i = 0, max = params.length; i < max; ++i) {\r\n keyValueArr = params[i].split('=');\r\n if (keyValueArr.length > 1) obj[keyValueArr[0]] = keyValueArr[1];\r\n\r\n // if (keyValueArr.length <= 1) return null;\r\n // obj[keyValueArr[0]] = keyValueArr[1];\r\n }\r\n return obj;\r\n};\r\n\r\nexport let getUriCombinedParams = (uri, params) => {\r\n if (!uri) return '';\r\n if (!params) return uri;\r\n\r\n let str = '';\r\n for (let key in params) {\r\n str += '&' + key + '=' + String(params[key]);\r\n }\r\n if (str === '') return uri;\r\n\r\n var tmpArr = uri.split('#'),\r\n uri = tmpArr[0],\r\n hashStr = (isDefined(tmpArr[1])) ? '#' + tmpArr[1] : '';\r\n\r\n uri = ((uri.indexOf('?') >= 0) ? (uri + str) : (uri + '?' + str.substr(1))) + hashStr;\r\n return uri;\r\n};\r\n\r\nexport let getHashParams = (hashStr) => {\r\n let str = hashStr;\r\n if (str.length < 1) return null;\r\n\r\n let tmpArr = str.split('#');\r\n if (tmpArr.length < 2) return null;\r\n\r\n let paramStr = tmpArr[1],\r\n params = paramStr.split('&');\r\n\r\n let keyValueArr, obj = {};\r\n for (let i = 0, max = params.length; i < max; ++i) {\r\n keyValueArr = params[i].split('=');\r\n if (keyValueArr.length <= 1) return null;\r\n\r\n obj[keyValueArr[0]] = keyValueArr[1];\r\n }\r\n\r\n return obj;\r\n};\r\n\r\nexport let getHashCombinedParams = (uri, params) => {\r\n if (!params) return uri;\r\n\r\n let str = '';\r\n for (let key in params) {\r\n str += '&' + key + '=' + String(params[key]);\r\n }\r\n if (str === '') return uri;\r\n\r\n uri = (uri.indexOf('#') >= 0) ? (uri + str) : (uri + '#' + str.substr(1));\r\n return uri;\r\n};\r\n\r\nexport let getObjForPagination = function (totalPostNum, displayPostNumPerPage, displayPaginationBtnNum, pageIndex) {\r\n const args = Array.prototype.slice.call(arguments);\r\n\r\n if (args.length < 4) throw new Error('getObjForPagination() requires 4 parameters.');\r\n\r\n if (!isInteger(totalPostNum) || !isInteger(displayPostNumPerPage) || !isInteger(displayPaginationBtnNum) || !isInteger(pageIndex)) {\r\n throw new TypeError('getObjForPagination() requires Integer Number parameters.');\r\n }\r\n if (totalPostNum <= 0 || displayPostNumPerPage <= 0 || displayPaginationBtnNum <= 0 || pageIndex <= 0) {\r\n throw new TypeError('getObjForPagination() requires positive Integer Number parameters.');\r\n }\r\n\r\n let totalPageNum = Math.ceil(totalPostNum / displayPostNumPerPage);\r\n if (pageIndex < 1) pageIndex = 1;\r\n if (pageIndex > totalPageNum) pageIndex = totalPageNum;\r\n\r\n let paginationBtnGroupIndex = Math.floor((pageIndex - 1) / displayPaginationBtnNum),\r\n prevPageIndex = paginationBtnGroupIndex * displayPaginationBtnNum,\r\n firstPageIndex = (paginationBtnGroupIndex * displayPaginationBtnNum) + 1,\r\n lastPageIndex = firstPageIndex + displayPaginationBtnNum - 1,\r\n nextPageIndex = lastPageIndex + 1;\r\n\r\n if (lastPageIndex > totalPageNum) lastPageIndex = totalPageNum;\r\n if (nextPageIndex > totalPageNum) nextPageIndex = 0;\r\n\r\n return {\r\n totalPostNum: totalPostNum,\r\n displayPostNumPerPage: displayPostNumPerPage,\r\n displayPaginationBtnNum: displayPaginationBtnNum,\r\n pageIndex: pageIndex,\r\n\r\n totalPageNum: totalPageNum,\r\n prevPageIndex: prevPageIndex,\r\n firstPageIndex: firstPageIndex,\r\n lastPageIndex: lastPageIndex,\r\n nextPageIndex: nextPageIndex\r\n };\r\n};\r\n\r\nexport let getDivideIntStrByThousandUnit = (intStr_) => {\r\n if (not(isDefined)(intStr_)) return ['0'];\r\n\r\n const DIVIDE_UNIT = 4;\r\n\r\n let intStr = String(parseStrIntToInt(intStr_)),\r\n intStrs = [];\r\n\r\n if (intStr.length <= DIVIDE_UNIT) return [String(intStr)];\r\n\r\n let lastIndex = 0, unitStr = '';\r\n while (intStr.length > DIVIDE_UNIT) {\r\n lastIndex = intStr.length;\r\n unitStr = intStr.substr(lastIndex - DIVIDE_UNIT, lastIndex);\r\n\r\n intStr = intStr.substr(0, lastIndex - DIVIDE_UNIT);\r\n intStrs.unshift(unitStr);\r\n }\r\n intStrs.unshift(intStr);\r\n\r\n return intStrs;\r\n};\r\n\r\nexport let getMarketPriceStr = (str) => {\r\n const UNIT_PRICE = ['', '만', '억'];\r\n\r\n let val = ( isDefined(str) ) ? str : '0',\r\n unitValues = getDivideIntStrByThousandUnit(val);\r\n\r\n unitValues.reverse();\r\n\r\n let priceStr = '', unitVal = 0;\r\n for (let i = 0, max = unitValues.length; i < max; i++) {\r\n unitVal = parseInt10(unitValues[i]);\r\n if (unitVal <= 0) continue;\r\n\r\n priceStr = (numberWithCommas(unitVal) + UNIT_PRICE[i]) + priceStr;\r\n if (i !== unitValues.length) priceStr = ' ' + priceStr;\r\n }\r\n priceStr = priceStr.trim();\r\n\r\n if (!priceStr) return '0';\r\n return priceStr;\r\n};\r\n\r\nexport let getEmphasizedStrByQuery = (str, query) => {\r\n return (str || '').split(query).join(`${query}`);\r\n};\r\n\r\nexport let getSeparatedDateStr = (moment, dateStr, DAYS = {\r\n 'Sunday': '일',\r\n 'Monday': '월',\r\n 'Tuesday': '화',\r\n 'Wednesday': '수',\r\n 'Thursday': '목',\r\n 'Friday': '금',\r\n 'Saturday': '토'\r\n}) => {\r\n let val = '';\r\n\r\n const MIN_TO_SEC = 60,\r\n HOUR_TO_SEC = 3600,\r\n DAY_TO_SEC = 86400;\r\n\r\n const now = new Date(),\r\n past = new Date(dateStr),\r\n diffSeconds = Math.floor((now - past) / 1000);\r\n\r\n if (diffSeconds < DAY_TO_SEC) {\r\n if (diffSeconds < HOUR_TO_SEC) {\r\n if (diffSeconds < MIN_TO_SEC) {\r\n val = `${diffSeconds}초 전`;\r\n\r\n } else {\r\n const diffMinutes = Math.floor(diffSeconds / MIN_TO_SEC);\r\n val = `${diffMinutes}분 전`;\r\n }\r\n\r\n } else {\r\n const diffHours = Math.floor(diffSeconds / HOUR_TO_SEC);\r\n val = `${diffHours}시간 전`;\r\n }\r\n\r\n } else {\r\n const date = moment(dateStr),\r\n day = (DAYS[date.format('dddd')] || '');\r\n\r\n val = date.format(`YYYY-MM-DD`);\r\n // val = date.format(`YYYY.MM.DD. (${day})`);\r\n }\r\n\r\n return val;\r\n};\r\n\r\nexport let namespace = (namespace, parent) => {\r\n if (!isString(namespace)) throw new TypeError('namespace parameter type of namespace() must be String.');\r\n if (!(isObject(parent) || !isDefined(parent))) throw new TypeError('parent parameter type of namespace() must be Object or null or undefined.');\r\n\r\n let ns = parent || window;\r\n\r\n if (namespace) {\r\n let parts = namespace.split('.');\r\n\r\n for (let i = 0, max = parts.length; i < max; i++) {\r\n if (!ns[parts[i]]) ns[parts[i]] = {};\r\n ns = ns[parts[i]];\r\n }\r\n }\r\n\r\n return ns;\r\n};\r\n\r\nexport let template = function template(strings, ...keys) {\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals\r\n return (function (...values) {\r\n let dict = values[values.length - 1] || {};\r\n\r\n let result = [strings[0]];\r\n keys.forEach(function (key, i) {\r\n let value = Number.isInteger(key) ? values[key] : dict[key];\r\n result.push(value, strings[i + 1]);\r\n });\r\n\r\n return result.join('');\r\n });\r\n};\r\n\r\n// board - server list\r\nexport let getUrlAddCategoryIdByArticle = function(_url, _article, _serverNameMap) {\r\n let url = _url;\r\n\r\n if (url !== '#') {\r\n const path = url.split('?')[0],\r\n uriParams = getUriParams(url);\r\n\r\n let categoryId = (isObject(_article.category)) ? _article.category.categoryId : uriParams.categoryId;\r\n\r\n if (isNotDefined(categoryId)) {\r\n // const obj = getFirstObjectHasProperty(_serverNameMap, 'serverId', 1) || _serverNameMap[0];\r\n // categoryId = obj.categoryId;\r\n categoryId = 0;\r\n }\r\n\r\n url = getUriCombinedParams(path, $.extend(uriParams, {categoryId: categoryId}));\r\n }\r\n\r\n return url;\r\n}\r\n\r\n// character setting - stat, equip simulator\r\nexport let getChangedStats = function (originalStatObj, newStatObj) {\r\n let changedStats = {};\r\n\r\n var stat, newStat;\r\n for (let key in originalStatObj) {\r\n stat = (isDefined(originalStatObj[key])) ? originalStatObj[key] : null;\r\n newStat = (isDefined(newStatObj[key])) ? newStatObj[key] : null;\r\n\r\n if (allOf(isDefined(newStat), stat !== newStat)) changedStats[key] = newStat;\r\n }\r\n\r\n let changeStatsCount = 0;\r\n for (let k in changedStats) changeStatsCount++;\r\n\r\n return (changeStatsCount > 0) ? changedStats : null;\r\n};\r\n\r\n// 2021.12 [StatModel.js] STEP_ELIXIR_POINT_BY_LEVEL = [{level: 80, point: 2 }, {level: 90, point: 2}, {level: 100, point: 3 }];\r\nexport let getPlusElixirPointByLevel = function (level, level_init, plusElixirPointByLevel ) {\r\n let _plusElixirPoint = 0;\r\n if ( (level - level_init) % 2 === 0 ) {\r\n _plusElixirPoint = 1;\r\n }\r\n each(plusElixirPointByLevel, (obj) => {\r\n if( parseInt(obj.level) === parseInt(level) ) {\r\n _plusElixirPoint = parseInt(obj.point);\r\n }\r\n });\r\n // console.log( '=> util.js _plusElixirPoint : ', _plusElixirPoint );\r\n return _plusElixirPoint;\r\n};\r\n\r\n// 2019.11 엘릭서를 사용할 수 없는 레벨 체크 50 이상이면 가능함 _.statData.level - _.model.LEVEL_INIT\r\nexport let isLevelCanConsumeElixirStat = function (level, perLevelPlusElixirPoint) {\r\n return (level >= 0) ? true : false;\r\n // return (level % perLevelPlusElixirPoint === 0) ? true : false;\r\n};\r\n\r\nexport let isLevelGetElixirPoint = function (level, perLevelPlusElixirPoint) { // 2019.11\r\n return (level % perLevelPlusElixirPoint === 0) ? true : false;\r\n};\r\n\r\n// STAT_MAX_BY_LEVEL 2021.\r\nexport let getStatMaxByLevel = function (level, statMaxByLevel ) {\r\n let _statMax = 50;\r\n each(statMaxByLevel, (obj) => {\r\n if (parseInt(obj.level) <= level) {\r\n _statMax = parseInt(obj.max);\r\n }\r\n });\r\n // console.log( '=> util.js getStatMaxByLevel() _statMax : ', _statMax );\r\n return _statMax;\r\n};\r\n\r\nexport let isWarrior = function (classId) {\r\n if (parseInt10(classId) === 7) return true;\r\n\r\n return false;\r\n}\r\n\r\nexport let getClassName = function (classId) {\r\n const CLASS_NAMES_KOR = ['군주', '기사', '요정', '마법사', '다크엘프', '용기사', '환술사', '전사', '검사', '창기사'];\r\n\r\n let className = CLASS_NAMES_KOR[parseInt10(classId)];\r\n if (not(isDefined)(className)) className = '';\r\n\r\n return className;\r\n};\r\n\r\nexport let removeEquipInEquips = function (equips, equipItemObj) {\r\n if (!Array.isArray(equips)) throw new TypeError('arr parameter type of removeEquipInEquips() must be Array.');\r\n\r\n const clonedEquips = equips.slice();\r\n\r\n let equip;\r\n for (let i = 0, max = clonedEquips.length; i < max; i++) {\r\n equip = clonedEquips[i];\r\n\r\n if (allOf(isDefined(equip), equip.id === equipItemObj.id, equip.name === equipItemObj.name, equip.slot === equipItemObj.slot)) {\r\n clonedEquips.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n return clonedEquips;\r\n};\r\n\r\nexport const isPetNecklace = function(itemId) {\r\n return (itemId === PET_NECKLACE_ID) ? true : false;\r\n};\n\n\n// WEBPACK FOOTER //\n// ./_src/js/utils/util.js","import ConceptArt from './conceptArt/ConceptArt';\r\nimport { isNotDefined, namespace } from '../utils/util';\r\n\r\n(function ($, global) {\r\n \"use strict\";\r\n\r\n namespace('nc.lineage');\r\n\r\n nc.lineage.conceptArt = function (options) {\r\n if (isNotDefined(options)) throw new Error('nc.lineage.conceptArt require options object');\r\n\r\n const option = $.extend({\r\n wrap: null,\r\n apiDomain: '',\r\n global: global\r\n }, options);\r\n\r\n let conceptArt = new ConceptArt(option).init();\r\n };\r\n}(jQuery, window));\n\n\n// WEBPACK FOOTER //\n// ./_src/js/download/conceptart.js","import { BREAKPOINTS } from '../../model/model';\r\nimport { BOARD } from '../../model/msg/board';\r\nimport {isDefined, not, isNotDefined, truthy, falsy, getResolution, each, anyOf, parseInt10} from '../../utils/util';\r\nimport { getDatasWithOption } from '../../utils/service';\r\n\r\nclass ConceptArt {\r\n constructor(options) {\r\n const _ = this;\r\n\r\n // const\r\n _.IMAGEVIEWER_ID = 'imageviewer-rwd';\r\n _.CAROUSEL_HEIGHT = 165;\r\n\r\n // variables\r\n _.option = $.extend({\r\n wrap: null,\r\n apiDomain: '',\r\n breakpoint: BREAKPOINTS,\r\n global: window\r\n }, options);\r\n\r\n _.contiGroupData = [];\r\n _.data = null;\r\n\r\n _.global = (_.option.global) ? _.option.global : window;\r\n\r\n _.currentResolution = '';\r\n _.currentGroupData = null;\r\n _.currentIndex = 0;\r\n\r\n _.isStartChangeImageByImageViewer = false;\r\n _.isStartChangeImageBySlick = false;\r\n _.isDraggingSlickWrap = false;\r\n\r\n _.wrap = null;\r\n _.imageViewer = null;\r\n\r\n _.carouselWrap = null;\r\n _.slickWrap = null;\r\n\r\n _.msg = {\r\n FAIL_LOAD_CONCEPTART_DATA: '원화 데이터를 불러올 수 없습니다. 잠시 후, 다시 시도해주세요.'\r\n };\r\n }\r\n\r\n init() {\r\n const _ = this;\r\n\r\n _.wrap = _.option.wrap;\r\n\r\n // getDatasWithOption([{\r\n // type: 'GET',\r\n // url: _.option.apiPath,\r\n // dataType: 'json',\r\n // contentType: 'application/json',\r\n // xhrFields: {withCredentials: true}\r\n //\r\n // }], (data) => {\r\n // _.data = data;\r\n //\r\n // if (not(Array.isArray)(_.data) || _.data.length <= 0) {\r\n // _.setNoData();\r\n //\r\n // } else {\r\n // _.data.reverse();\r\n //\r\n // _.setInstance();\r\n // }\r\n //\r\n // }, (data) => {\r\n // _.global.alert(_.msg.FAIL_LOAD_CONCEPTART_DATA); // '원화 데이터를 불러올 수 없습니다. 잠시 후, 다시 시도해주세요.'\r\n // });\r\n getDatasWithOption([{\r\n type: 'GET',\r\n url: _.option.apiDomain +'/conti/getContentGroup?service=lineage&groupAlias=lineage-art&subAlias=ko-KR',\r\n dataType: 'json',\r\n contentType: 'application/json',\r\n Accept: 'application/json'\r\n }], (data) => {\r\n if(not(Array.isArray)(data) || data.length <= 0) {\r\n _.setNoData();\r\n } else {\r\n data.forEach(item => {\r\n _.contiGroupData.push(JSON.parse(item.jsonData));\r\n });\r\n console.log( ' success _.contiGroupData : ', _.contiGroupData );\r\n // _.setData(_.contiGroupData.reverse());\r\n _.data = _.contiGroupData.reverse();\r\n _.setInstance();\r\n }\r\n }, (data) => {\r\n _.global.alert(_.msg.FAIL_LOAD_CONCEPTART_DATA); // '원화 데이터를 불러올 수 없습니다. 잠시 후, 다시 시도해주세요.'\r\n });\r\n\r\n return _;\r\n }\r\n\r\n setData(data) {\r\n const _ = this;\r\n\r\n let items = [];\r\n each(data, function (group) {\r\n if (Array.isArray(group.groups) && group.groups.length > 0) {\r\n each(group.groups, function (item) {\r\n items.push(item);\r\n });\r\n }\r\n });\r\n\r\n _.data = items;\r\n\r\n }\r\n\r\n setInstance() {\r\n const _ = this;\r\n\r\n _.setList();\r\n\r\n $(_.global).on('resize', $.proxy(_.resize, _));\r\n\r\n _.resize();\r\n }\r\n\r\n setNoData() {\r\n const groupListWrap = $('> ul', this.wrap);\r\n groupListWrap.empty().append(`
  • ${BOARD.NO_ITEM}
  • `);\r\n }\r\n\r\n setList() {\r\n const _ = this;\r\n\r\n console.log('# setList() _.data : ', _.data );\r\n\r\n\r\n let groupData, firstItem, thumbnailSrc, tpl = '';\r\n for (let i = 0, max = _.data.length; i < max; i++) {\r\n groupData = _.data[i];\r\n firstItem = groupData.groups[0];\r\n\r\n if (!firstItem) continue;\r\n\r\n // change by request from UI developer.\r\n // thumbnailSrc = (firstItem.img.thumbnailSrc) ? firstItem.img.thumbnailSrc : firstItem.img.src;\r\n thumbnailSrc = firstItem.img.src || '';\r\n\r\n tpl += _.getListTpl(i + 1, thumbnailSrc, groupData.artTitle, groupData.groups.length);\r\n }\r\n\r\n let groupListWrap = $('> ul', _.wrap);\r\n groupListWrap.empty().append(tpl);\r\n\r\n // set events\r\n $('li', groupListWrap).on('click', function (evt) {\r\n let btn = $(this),\r\n groupIndex = parseInt(btn.attr('data-index'), 10),\r\n groupData = _.data[groupIndex - 1];\r\n\r\n if (!groupData) return;\r\n\r\n // make array for open imageViewer. memoization pattern.\r\n if (falsy(groupData.isArranged)) {\r\n let imgObj;\r\n for (let i = 0, max = groupData.groups.length; i < max; i++) {\r\n imgObj = groupData.groups[i].img;\r\n\r\n if (!imgObj.thumbnailSrc) imgObj.thumbnailSrc = imgObj.src || '';\r\n }\r\n\r\n groupData.isArranged = true;\r\n }\r\n\r\n // set instances\r\n _.setImageViewer(groupData);\r\n _.setImageViewerTopBarTitle(groupData.groups[0].title);\r\n\r\n _.currentGroupData = groupData;\r\n\r\n _.currentIndex = 1;\r\n });\r\n }\r\n\r\n getListTpl(index, thumbnailSrc, title, itemsLength) {\r\n return `
  • \r\n
    \r\n\r\n
    \r\n

    ${title}

    \r\n (${itemsLength}종)\r\n
    \r\n
  • `;\r\n }\r\n\r\n setImageViewer(groupData) {\r\n const _ = this,\r\n firstImgIndex = 1;\r\n\r\n if (isNotDefined(_.imageViewer)) {\r\n let imgObj, imgObjs = [];\r\n for (let i = 0, max = groupData.groups.length; i < max; i++) {\r\n // images.push(groupData.groups[i].src);\r\n\r\n imgObj = groupData.groups[i].img;\r\n imgObjs.push({src: imgObj.src, w: parseInt(imgObj.width, 10), h: parseInt(imgObj.height, 10)});\r\n }\r\n\r\n _.imageViewer = new nc.ui.ImageViewerRWD($('body'), imgObjs, {\r\n // - custom options\r\n // originViewerUrl: 'http://m.lineage2.plaync.com/board/result/viewimage?imgSrc=',\r\n // commentUrl: 'http://m.lineage2.plaync.com/board/image/commentList?articleId=606818',\r\n isPreloadImages: false,\r\n id: _.IMAGEVIEWER_ID,\r\n topBarTitle: groupData.artTitle || '',\r\n hasDownloadFileBtn: false,\r\n readyCallback: function () {\r\n _.setCarousel(groupData);\r\n _.resizeForcibly();\r\n\r\n _.activateCarouselItem(firstImgIndex);\r\n },\r\n\r\n // - photoswipe library base options - http://photoswipe.com/documentation/options.html\r\n photoswipe: {\r\n // arrowEl: true, ...\r\n\r\n // TODO - change\r\n // errorMsg: '
    The image could not be loaded.
    '\r\n }\r\n });\r\n _.imageViewer.slideByUrl(firstImgIndex - 1);\r\n\r\n // set events\r\n _.imageViewer.listen('destroy', function () {\r\n _.destroyImageViewer(true);\r\n _.destroyCarousel();\r\n });\r\n\r\n _.imageViewer.listen('afterChange', function () {\r\n const index = _.imageViewer.getCurrentIndex() + 1;\r\n\r\n if (_.isStartChangeImageBySlick) {\r\n _.activateCarousel(index);\r\n\r\n } else {\r\n _.isStartChangeImageByImageViewer = true;\r\n _.activateCarousel(index);\r\n }\r\n\r\n _.setImageViewerTopBarTitle(_.currentGroupData.groups[index - 1].title);\r\n\r\n _.currentIndex = index;\r\n });\r\n }\r\n }\r\n\r\n setImageViewerTopBarTitle(title) {\r\n if (isDefined(this.imageViewer)) this.imageViewer.setTopBarTitle(title || '');\r\n }\r\n\r\n setCarousel(groupData) {\r\n const _ = this;\r\n\r\n if (isNotDefined(_.slickWrap)) {\r\n let item, tpl = '';\r\n for (let i = 0, max = groupData.groups.length; i < max; i++) {\r\n item = groupData.groups[i];\r\n tpl += `
  • \"${item.title}\"
  • `;\r\n }\r\n\r\n _.carouselWrap = $(`
    `);\r\n $('body').append(_.carouselWrap);\r\n\r\n _.slickWrap = $('ul', _.carouselWrap);\r\n\r\n _.slickWrap.slick({\r\n infinite: true,\r\n dots: false,\r\n speed: 250,\r\n arrows: true,\r\n slidesToShow: 8,\r\n slidesToScroll: 8\r\n });\r\n\r\n _.carouselWrap.on('mousewheel DOMMouseScroll', function (evt) {\r\n _.destroyCarousel();\r\n _.destroyImageViewer();\r\n });\r\n\r\n _.slickWrap.on('beforeChange', function (event, slick, currentSlide, nextSlide) {\r\n if (_.isStartChangeImageByImageViewer === true) {\r\n // change image by click thumbnail, or from imageViewer\r\n\r\n } else {\r\n // swipe slick thumbnail or click arrow button in slick\r\n _.isStartChangeImageBySlick = true;\r\n\r\n const index = nextSlide + 1;\r\n _.goToImageViewer(index);\r\n _.setImageViewerTopBarTitle(_.currentGroupData.groups[index - 1].title);\r\n }\r\n\r\n _.isStartChangeImageByImageViewer = false;\r\n _.isStartChangeImageBySlick = false;\r\n });\r\n\r\n // detect drag and click\r\n $('.slick-track').on('mousedown', '.slick-slide', (evt) => {\r\n _.isDraggingSlickWrap = false;\r\n });\r\n $('.slick-track').on('mousemove', '.slick-slide', (evt) => {\r\n _.isDraggingSlickWrap = true;\r\n });\r\n $('.slick-track').on('mouseup', '.slick-slide', function (evt) {\r\n if (_.isDraggingSlickWrap === true) {\r\n // this is drag action.\r\n\r\n } else {\r\n _.isStartChangeImageByImageViewer = true;\r\n\r\n const index = parseInt($(this).attr('data-slick-index'), 10) + 1;\r\n _.goToImageViewer(index);\r\n _.setImageViewerTopBarTitle(_.currentGroupData.groups[index - 1].title);\r\n }\r\n\r\n _.isDraggingSlickWrap = false;\r\n });\r\n }\r\n }\r\n\r\n goToImageViewer(index) {\r\n const idx = (index >= 1) ? index - 1 : 0;\r\n this.imageViewer.goTo(idx);\r\n }\r\n\r\n goToCarousel(index) {\r\n const idx = (index >= 1) ? index - 1 : 0;\r\n this.slickWrap.slick('slickGoTo', idx);\r\n }\r\n\r\n activateCarousel(index) {\r\n const _ = this;\r\n\r\n if (index === _.currentIndex) return;\r\n\r\n _.goToCarousel(index);\r\n _.activateCarouselItem(index);\r\n }\r\n\r\n activateCarouselItem(index) {\r\n const _ = this;\r\n\r\n let slides = $('.slick-slide', _.slickWrap);\r\n slides.removeClass('on');\r\n\r\n let activateSlide = slides.filter(function () {\r\n let slideIndex = parseInt($(this).attr('data-slick-index'), 10);\r\n return slideIndex === (index - 1);\r\n });\r\n\r\n activateSlide.addClass('on');\r\n }\r\n\r\n destroyImageViewer(isDestroyOnlyContainer) {\r\n const _ = this;\r\n\r\n if (falsy(isDestroyOnlyContainer)) {\r\n if (isDefined(_.imageViewer)) _.imageViewer.hide();\r\n }\r\n _.imageViewer = null;\r\n\r\n $('#' + _.IMAGEVIEWER_ID).remove();\r\n }\r\n\r\n destroyCarousel() {\r\n const _ = this;\r\n\r\n if (truthy(_.isCarouselInitialized())) {\r\n // destroy slick\r\n if (_.slickWrap && _.slickWrap.length) {\r\n const slickTrack = $('.slick-track', _.slickWrap);\r\n slickTrack.off('mousedown');\r\n slickTrack.off('mousemove');\r\n slickTrack.off('mouseup');\r\n\r\n _.slickWrap.off('beforeChange');\r\n _.slickWrap.slick('unslick');\r\n }\r\n _.slickWrap = null;\r\n\r\n // destroy carousel\r\n if (_.carouselWrap && _.carouselWrap.length) {\r\n _.carouselWrap.off('mousewheel DOMMouseScroll');\r\n _.carouselWrap.remove();\r\n }\r\n _.carouselWrap = null;\r\n }\r\n }\r\n\r\n isCarouselInitialized() {\r\n const _ = this;\r\n\r\n if (_.slickWrap && _.slickWrap.length) return _.slickWrap.hasClass('slick-initialized');\r\n return false;\r\n }\r\n\r\n resize(evt) {\r\n const _ = this,\r\n resolution = getResolution(_.option.breakpoint, _.global);\r\n\r\n if (resolution !== _.currentResolution) _.resizeByResolution(resolution);\r\n\r\n _.currentResolution = resolution;\r\n }\r\n\r\n resizeForcibly() {\r\n const _ = this,\r\n resolution = getResolution(_.option.breakpoint, _.global);\r\n\r\n _.resizeByResolution(resolution);\r\n\r\n _.currentResolution = resolution;\r\n }\r\n\r\n resizeByResolution(resolution) {\r\n const _ = this;\r\n\r\n if (isNotDefined(_.imageViewer)) return;\r\n\r\n switch (resolution) {\r\n case 'max' :\r\n _.imageViewer.setHeight(window.innerHeight - _.CAROUSEL_HEIGHT);\r\n break;\r\n\r\n case 'pc' :\r\n _.imageViewer.setHeight(window.innerHeight - _.CAROUSEL_HEIGHT);\r\n break;\r\n\r\n case 'tablet' :\r\n _.imageViewer.setHeight(window.innerHeight - _.CAROUSEL_HEIGHT);\r\n break;\r\n\r\n case 'phone' :\r\n _.imageViewer.setHeight(window.innerHeight);\r\n break;\r\n }\r\n }\r\n}\r\n\r\nexport default ConceptArt;\n\n\n// WEBPACK FOOTER //\n// ./_src/js/download/conceptArt/ConceptArt.js","// TODO - disassemble\r\nconst BOARD = {\r\n NO_ITEM: '등록된 글이 없습니다.',\r\n RETRY_LATER: '잠시 후 다시 시도해주세요.'\r\n};\r\n\r\nexport {\r\n BOARD\r\n};\n\n\n// WEBPACK FOOTER //\n// ./_src/js/model/msg/board.js","import { ALERT } from '../model/msg/alert';\r\n\r\nlet getDatas = function (urls, resolvedCallback, rejectedCallback) {\r\n let promises = [];\r\n\r\n for (let i = 0, max = urls.length; i < max; i++) {\r\n const promise = $.ajax({\r\n type: 'GET',\r\n url: urls[i],\r\n dataType: 'json'\r\n });\r\n promises.push(promise);\r\n }\r\n\r\n $.when.apply($, promises)\r\n .then(resolvedCallback)\r\n .fail(rejectedCallback);\r\n};\r\n\r\nlet getDatasWithOption = function (jQueryAjaxOptions, resolvedCallback, rejectedCallback) {\r\n let promises = [];\r\n\r\n for (let i = 0, max = jQueryAjaxOptions.length; i < max; i++) {\r\n const promise = $.ajax(jQueryAjaxOptions[i]);\r\n promises.push(promise);\r\n }\r\n\r\n $.when.apply($, promises)\r\n .then(resolvedCallback)\r\n .fail(rejectedCallback);\r\n};\r\n\r\nlet handleApiError = function (apiResultData, global = window) {\r\n if (apiResultData) {\r\n if (parseInt(apiResultData.status, 10) === 401) {\r\n // http://git.korea.ncsoft.corp/projects/FRONTEND_DEVELOP/repos/uikit-nccommunity/browse/_src/js/lang.js\r\n global.alert(ALERT.REQUIRE_LOGIN);\r\n\r\n if (typeof global.GNBLogin === 'function') {\r\n global.GNBLogin();\r\n\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport {\r\n getDatas,\r\n getDatasWithOption,\r\n handleApiError\r\n};\n\n\n// WEBPACK FOOTER //\n// ./_src/js/utils/service.js","const ALERT = {\r\n REQUIRE_LOGIN: '로그인 후 이용하실 수 있습니다.'\r\n};\r\n\r\nexport {\r\n ALERT\r\n};\n\n\n// WEBPACK FOOTER //\n// ./_src/js/model/msg/alert.js"],"sourceRoot":""}