{"version":3,"sources":["webpack:///service/beginner.js","webpack:///webpack/bootstrap ac3e8aae86983c12f7b6","webpack:///./_src/js/model/model.js","webpack:///./_src/js/utils/service.js","webpack:///./_src/js/utils/util.js","webpack:///./_src/js/service/beginner/tpl.js","webpack:///./_src/js/service/beginner.js","webpack:///./_src/js/service/beginner/BeginnerTop.js","webpack:///./_src/js/model/msg/alert.js","webpack:///./_src/js/service/beginner/BeginnerItem.js","webpack:///./_src/js/service/beginner/BeginnerMagic.js","webpack:///./_src/js/service/beginner/BeginnerHunt.js","webpack:///./_src/js/service/beginner/BeginnerRecommend.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","API_DOMAIN_DEFAULT","PET_NECKLACE_ID","tablet","pc","max","getDatasWithOption","jQueryAjaxOptions","resolvedCallback","rejectedCallback","promises","length","promise","$","ajax","push","when","apply","then","fail","isNotDefined","getResolution","namespace","ua","window","navigator","userAgent","isDefined","test","obj","isString","exec","location","hostname","constructor","String","isObject","isFunction","Function","not","func","TypeError","$ele","breakpoint","arguments","undefined","global","innerWidth","parent","ns","parts","split","_classCallCheck","instance","Constructor","SettingModel","options","this","_","isLogin","DEVICE_TYPE","DEFAULT_SERVER_ID","DEFAULT_GENDER","ITEM_NAMES","weapon","helmet","armor","cape","gloves","boots","legging","shield","belt","necklace","ring","shoulder","CLASS_NAMES","0","1","2","3","4","5","6","7","8","9","10","ACQUISITION_NAMES","Quest","NPC","Making","Drop","CLASS_MAGIC_POWERBOOK","BOSS_NAMES","11","12","13","ObjectKeys","keys","ObjectValues","values","value","__WEBPACK_IMPORTED_MODULE_0__beginner_BeginnerTop__","__WEBPACK_IMPORTED_MODULE_1__beginner_BeginnerItem__","__WEBPACK_IMPORTED_MODULE_2__beginner_BeginnerMagic__","__WEBPACK_IMPORTED_MODULE_3__beginner_BeginnerHunt__","__WEBPACK_IMPORTED_MODULE_4__beginner_BeginnerRecommend__","__WEBPACK_IMPORTED_MODULE_5__utils_util__","__WEBPACK_IMPORTED_MODULE_6__model_model__","nc","lineage","beginner","Error","option","extend","apiDomain","classId","level","wrap","BeginnerTop","init","BeginnerItem","BeginnerMagic","BeginnerHunt","BeginnerRecommend","jQuery","__WEBPACK_IMPORTED_MODULE_1__model_model__","__WEBPACK_IMPORTED_MODULE_2__utils_util__","__WEBPACK_IMPORTED_MODULE_3__tpl__","_createClass","defineProperties","target","props","descriptor","writable","key","protoProps","staticProps","model","currentResolution","setClass","setMenu","setHelper","setQuickmenu","_classId","_className","_classMagicPowerbook","_classTypeText","removeClass","addClass","itemWrap","append","magicWrap","html","attr","dropdown","activateIndex","activateCallback","index","document","href","getUriCombinedParams","pathname","useDefaultSelectInMobileDevice","_itemHelperHandler","_magicHelperHandler","_itemHelperWrap","siblings","_magicHelperWrap","find","click","is","fadeOut","fadeIn","_quickmenu","_quickbtn","_quickitem","e","preventDefault","toggleClass","_section","_itemOffset","offset","_quickOffsetTop","top","animate","scrollTop","resize","ALERT","REQUIRE_LOGIN","__WEBPACK_IMPORTED_MODULE_0__utils_service__","setData","type","url","dataType","data","setInstance","_wrap","_data","itemRecommend","itemTpl","itemTypes","itemAcquisitionDisplay","acquisition","acquisitionDom","acquisitionTpl","map","acquisitionItem","acquisitionIdx","item","itemName","itemData","itemIndex","itemQuality","itemWikiUrl","setSlick","itemSlider","slick","dots","infinite","arrows","speed","slidesToShow","slidesToScroll","responsive","settings","centerMode","centerPadding","_dataBattle","magicRecommend","Battle","_dataHunt","Hunt","magicBattleTpl","magicHuntTpl","magicHuntDom","magicBattleDom","magicAcquisitionDisplay","required","magicQuality","magicWikiUrl","magicName","magicLevel","magicPassive","wrapAll","huntWrap","contentType","Accept","jsonData","setNoData","JSON","parse","recommendWrap","empty","groups","hide","show","on","_lv","tpl","groupsIndex","group","items","_idx","limit","zone","feature","tmpl_tab","title","join","setVideoData","_tmpl","img","subject","desc","videoItems","videoWrap","recommendSlider"],"mappings":"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","file":"service/beginner.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 = 4);\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__, \"b\", function() { return BREAKPOINTS; });\n/* unused harmony export DAYS */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return 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__, \"c\", 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 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/* 2 */\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/* unused harmony export truthy */\n/* unused harmony export falsy */\n/* unused harmony export existy */\n/* unused harmony export 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/* unused harmony export not */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", 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/* unused harmony export 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__, \"a\", 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__, \"c\", 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__[\"c\" /* PET_NECKLACE_ID */] ? true : false;\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// const singletonId = Symbol();\n// const singletonEnforcer = Symbol();\n\nvar SettingModel = function SettingModel(options) {\n _classCallCheck(this, SettingModel);\n\n //constructor(enforcer) {\n //if (enforcer !== singletonEnforcer) throw new Error('SettingModel can not use construct. use getInstance method');\n\n var _ = this;\n\n _.isLogin = false;\n _.DEVICE_TYPE = 'pc';\n _.DEFAULT_SERVER_ID = 1;\n _.DEFAULT_GENDER = 'MALE';\n\n _.ITEM_NAMES = {\n 'weapon': '무기',\n 'helmet': '투구',\n 'armor': '갑옷',\n 'cape': '망토 ',\n 'gloves': '장갑',\n 'boots': '부츠',\n 'legging': '각반',\n 'shield': '방패/가더',\n 'belt': '벨트',\n 'necklace': '목걸이',\n 'ring': '반지',\n 'shoulder': '견갑'\n };\n _.CLASS_NAMES = {\n '0': '군주',\n '1': '기사',\n '2': '요정',\n '3': '마법사',\n '4': '다크엘프',\n '5': '용기사',\n '6': '환술사',\n '7': '전사',\n '8': '검사',\n '9': '창기사',\n '10': '성기사'\n };\n _.ACQUISITION_NAMES = {\n 'Quest': '퀘스트',\n 'NPC': 'NPC 판매',\n 'Making': '제작',\n 'Drop': '드랍'\n };\n _.CLASS_MAGIC_POWERBOOK = {\n '0': '/powerbook/wiki/%EA%B5%B0%EC%A3%BC%20%EB%A7%88%EB%B2%95',\n '1': '/powerbook/wiki/%EA%B8%B0%EC%82%AC%20%EA%B8%B0%EC%88%A0',\n '2': '/powerbook/wiki/%EC%A0%95%EB%A0%B9%20%EB%A7%88%EB%B2%95',\n '3': '/powerbook/wiki/%EC%9D%BC%EB%B0%98%20%EB%A7%88%EB%B2%95',\n '4': '/powerbook/wiki/%ED%9D%91%EC%A0%95%EB%A0%B9%20%EB%A7%88%EB%B2%95',\n '5': '/powerbook/wiki/%EC%9A%A9%EA%B8%B0%EC%82%AC%20%EB%A7%88%EB%B2%95',\n '6': '/powerbook/wiki/%ED%99%98%EC%88%A0%EC%82%AC%20%EB%A7%88%EB%B2%95',\n '7': '/powerbook/wiki/%EC%A0%84%EC%82%AC%20%EA%B8%B0%EC%88%A0',\n '8': '/powerbook/wiki/%EA%B2%80%EC%82%AC+%EA%B8%B0%EC%88%A0',\n '9': '/powerbook/wiki/%EC%B0%BD%EA%B8%B0%EC%82%AC+%EA%B8%B0%EC%88%A0',\n '10': '/powerbook/wiki/%EC%84%B1%EA%B8%B0%EC%82%AC%20%EA%B8%B0%EC%88%A0'\n };\n _.BOSS_NAMES = {\n '1': '말하는섬',\n '2': '글루디오 던전',\n '3': '고대 정령의 무덤',\n '4': '풍룡의 둥지',\n '5': '상아탑',\n '6': '오렌 설벽',\n '7': '기란 감옥',\n '8': '용의 계곡',\n '9': '화룡의 둥지',\n '10': '오만의 탑',\n '11': '지배의 탑',\n '12': '사막',\n '13': '기타 필드 보스'\n };\n\n _.ObjectKeys = function (obj) {\n var keys = [];\n\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n keys.push(i);\n }\n }\n return keys;\n };\n\n _.ObjectValues = function (obj) {\n var values = [];\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n values.push(obj[i]);\n }\n }\n return values;\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (SettingModel);\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(5);\n\n\n/***/ }),\n/* 5 */\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__beginner_BeginnerTop__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__beginner_BeginnerItem__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__beginner_BeginnerMagic__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__beginner_BeginnerHunt__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__beginner_BeginnerRecommend__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_util__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__model_model__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__utils_service__ = __webpack_require__(1);\n\n\n\n\n\n\n\n\n\n\n(function ($, global) {\n \"use strict\";\n\n Object(__WEBPACK_IMPORTED_MODULE_5__utils_util__[\"c\" /* namespace */])('nc.lineage');\n\n nc.lineage.beginner = function (options) {\n if (Object(__WEBPACK_IMPORTED_MODULE_5__utils_util__[\"b\" /* isNotDefined */])(options)) throw new Error('nc.lineage.beginner require options object');\n\n var option = $.extend(true, {\n apiDomain: __WEBPACK_IMPORTED_MODULE_6__model_model__[\"a\" /* API_DOMAIN_DEFAULT */],\n classId: 0,\n level: 0,\n wrap: null\n }, options);\n\n var beginnerTop = new __WEBPACK_IMPORTED_MODULE_0__beginner_BeginnerTop__[\"a\" /* default */](option).init();\n var beginnerItem = new __WEBPACK_IMPORTED_MODULE_1__beginner_BeginnerItem__[\"a\" /* default */](option).init();\n var beginnerMagic = new __WEBPACK_IMPORTED_MODULE_2__beginner_BeginnerMagic__[\"a\" /* default */](option).init();\n var beginnerHunt = new __WEBPACK_IMPORTED_MODULE_3__beginner_BeginnerHunt__[\"a\" /* default */](option).init();\n var beginnerRecommend = new __WEBPACK_IMPORTED_MODULE_4__beginner_BeginnerRecommend__[\"a\" /* default */](option).init();\n };\n})(jQuery, window);\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_service__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__model_model__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_util__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tpl__ = __webpack_require__(3);\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 BeginnerTop = function () {\n function BeginnerTop(options) {\n _classCallCheck(this, BeginnerTop);\n\n var _ = this;\n\n if (!options) return;\n\n _.option = $.extend({\n wrap: null,\n apiDomain: '',\n classId: 0,\n level: 0,\n global: window\n }, options);\n\n _.wrap = _.option.wrap;\n _.model = new __WEBPACK_IMPORTED_MODULE_3__tpl__[\"a\" /* default */]();\n\n _.global = _.option.global ? _.option.global : window;\n _.currentResolution = Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"a\" /* getResolution */])(__WEBPACK_IMPORTED_MODULE_1__model_model__[\"b\" /* BREAKPOINTS */], window);\n }\n\n _createClass(BeginnerTop, [{\n key: 'init',\n value: function init() {\n\n console.log('BeginnerTop !! ');\n var _ = this;\n\n _.setClass();\n _.setMenu();\n _.setHelper();\n _.setQuickmenu();\n // return _;\n }\n }, {\n key: 'setClass',\n value: function setClass() {\n var _ = this,\n _level = _.option.level,\n _classId = _.option.classId;\n\n var _className = _.model.CLASS_NAMES[_classId]; // ex. 군주\n var _classMagicPowerbook = _.model.CLASS_MAGIC_POWERBOOK[_classId];\n var _classTypeText = _classId == 1 || _classId >= 7 ? '기술' : '마법';\n\n console.log('_className : ', _className);\n $('.wrap-section-beginner').removeClass().addClass('wrap-section-beginner class-' + _classId);\n $('.header-class', _.option.wrap.itemWrap).append(_className);\n _classId == 2 ? $('.header-class', _.option.wrap.magicWrap).append(_className + '(바람 계열)') : $('.header-class', _.option.wrap.magicWrap).append(_className);\n\n $('.btn-magic-powerbook', _.option.wrap.magicWrap).html('powerbook' + _className + ' ' + _classTypeText).attr('href', _classMagicPowerbook); // ex. 군주or성기사 등 마법or기술 파워북\n\n\n var dropdown = nc.lineage.dropdown({\n wrap: $('.ui-dropdown-class'),\n activateIndex: _.option.classId + 1,\n activateCallback: function activateCallback(obj) {\n if (obj.index === _.option.classId + 1) return;\n document.location.href = window.getUriCombinedParams(document.location.pathname, {\n classId: obj.index - 1\n });\n },\n useDefaultSelectInMobileDevice: true\n });\n }\n }, {\n key: 'setMenu',\n value: function setMenu() {\n var _ = this;\n }\n }, {\n key: 'setHelper',\n value: function setHelper() {\n var _ = this;\n\n var _itemHelperHandler = $('.icon-helper', _.option.wrap.itemWrap),\n _magicHelperHandler = $('.icon-helper', _.option.wrap.magicWrap),\n _itemHelperWrap = _itemHelperHandler.siblings('.wrap-helper'),\n _magicHelperWrap = _magicHelperHandler.siblings('.wrap-helper'),\n _wrapItem = _.option.wrap.itemWrap.find('.wrap-helper'); // $('.wrap-helper', _.option.wrap.itemWrap); /*,\n\n\n /*let helperInit = setTimeout( function(){\r\n _itemHelperWrap.fadeOut('fast');\r\n _magicHelperWrap.fadeOut('fast');\r\n _itemHelperHandler.removeClass('on');\r\n _magicHelperHandler.removeClass('on');\r\n }, 3000 ); */\n\n _itemHelperHandler.click(function () {\n //clearTimeout(helperInit);\n if (_itemHelperWrap.is(':visible')) {\n _itemHelperWrap.fadeOut('fast');\n _itemHelperHandler.removeClass('on');\n } else {\n _itemHelperWrap.fadeIn('fast');\n _itemHelperHandler.addClass('on');\n }\n });\n\n _magicHelperHandler.click(function () {\n //clearTimeout(helperInit);\n if (_magicHelperWrap.is(':visible')) {\n _magicHelperWrap.fadeOut('fast');\n _magicHelperHandler.removeClass('on');\n } else {\n _magicHelperWrap.fadeIn('fast');\n _magicHelperHandler.addClass('on');\n }\n });\n }\n }, {\n key: 'setQuickmenu',\n value: function setQuickmenu() {\n var _ = this;\n\n var _quickmenu = $('.quickmenu');\n var _quickbtn = $('.button-toggle', _quickmenu);\n var _quickitem = $('a', _quickmenu);\n\n console.log(' _.currentResolution () : ', _.currentResolution);\n\n if (_.currentResolution == 'pc' || _.currentResolution == 'max') {\n _quickmenu.removeClass('off');\n }\n\n _quickbtn.click(function (e) {\n e.preventDefault();\n _quickmenu.toggleClass('off');\n });\n\n _quickitem.click(function (e) {\n e.preventDefault();\n\n var _section = $(this).attr(\"class\");\n var _itemOffset = $('.wrap-section-' + _section).offset();\n var _quickOffsetTop = _.currentResolution == 'pc' || _.currentResolution == 'max' ? _itemOffset.top - 59 : _itemOffset.top - 106;\n\n _quickitem.removeClass('on');\n $(this).addClass('on');\n\n $(\"html, body\").animate({\n scrollTop: _quickOffsetTop\n }, 500);\n });\n\n $(window).resize(function () {\n\n _.currentResolution = Object(__WEBPACK_IMPORTED_MODULE_2__utils_util__[\"a\" /* getResolution */])(__WEBPACK_IMPORTED_MODULE_1__model_model__[\"b\" /* BREAKPOINTS */], window);\n if (_.currentResolution == 'pc' || _.currentResolution == 'max') {\n _quickmenu.removeClass('off');\n } else {\n _quickmenu.addClass('off');\n }\n\n // console.log( '_currentResolution : ', _.currentResolution );\n\n });\n }\n }]);\n\n return BeginnerTop;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BeginnerTop);\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/* 8 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_service__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__model_model__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_util__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tpl__ = __webpack_require__(3);\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 BeginnerItem = function () {\n function BeginnerItem(options) {\n _classCallCheck(this, BeginnerItem);\n\n var _ = this;\n\n if (!options) return;\n _.option = $.extend({\n wrap: null,\n apiDomain: '',\n classId: 0,\n level: 1,\n isLogin: false,\n global: window\n }, options);\n\n _.model = new __WEBPACK_IMPORTED_MODULE_3__tpl__[\"a\" /* default */]();\n _.global = _.option.global ? _.option.global : window;\n }\n\n _createClass(BeginnerItem, [{\n key: 'init',\n value: function init() {\n var _ = this;\n console.log('BeginnerItem init !! ');\n\n _.setData();\n\n /*\r\n if (truthy(_.option.isLogin)) {\r\n if (isDefined(_.option.wrap) && _.option.wrap.length) _.setData();\r\n }\r\n return _;\r\n */\n }\n }, {\n key: 'setData',\n value: function setData() {\n var _ = this,\n _level = _.option.level,\n _classId = _.option.classId;\n\n Object(__WEBPACK_IMPORTED_MODULE_0__utils_service__[\"a\" /* getDatasWithOption */])([{\n type: 'GET',\n url: _.option.apiDomain + '/api/returnbrave/recommend/item/' + _classId,\n dataType: 'json'\n }], function (data) {\n _.setInstance(data);\n }, function (data) {\n // no process\n });\n }\n }, {\n key: 'setInstance',\n value: function setInstance(data) {\n var _ = this,\n _level = _.option.level,\n _classId = _.option.classId,\n _wrap = _.option.wrap.itemWrap;\n var _data = data.itemRecommend;\n\n if (!Object.keys) {\n Object.keys = function (obj) {\n var keys = [];\n\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n keys.push(i);\n }\n }\n return keys;\n };\n }\n\n if (!Object.values) {\n Object.values = function (obj) {\n var values = [];\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n values.push(obj[i]);\n }\n }\n return values;\n };\n }\n\n var itemTpl = '';\n var itemTypes = Object.keys(_.model.ITEM_NAMES);\n var itemValues = Object.values(_.model.ITEM_NAMES);\n\n // 입수법\n var acqTypes = Object.keys(_.model.ACQUISITION_NAMES);\n var itemAcquisitionDisplay = function itemAcquisitionDisplay(acquisition) {\n\n var acquisitionDom = $('');\n\n var acquisitionTpl = 'QNMD';\n acquisitionDom.append(acquisitionTpl);\n\n acquisition.map(function (acquisitionItem, acquisitionIdx) {\n acquisitionDom.find('.acq-' + acquisitionItem).addClass('on');\n });\n return acquisitionDom.html();\n }; // itemAcquisitionDisplay function()\n\n\n itemTypes.map(function (item, index) {\n var itemName = _.model.ITEM_NAMES[item]; // ex. 무기\n\n itemTpl += '
\\n
' + itemName + '
';\n\n _data[item].map(function (itemData, itemIndex) {\n\n if (itemIndex > 5) return;\n itemTpl += '- \\n ' + itemData.itemName + '\\n ' + itemAcquisitionDisplay(itemData.acquisition) + '\\n
\\n ';\n });\n itemTpl += '
';\n });\n // console.log('html : ', itemTpl);\n\n $('.article-item', _wrap).append(itemTpl);\n\n _.setSlick($('.article-item', _wrap));\n } // setInstance()\n\n\n }, {\n key: 'setSlick',\n value: function setSlick(_wrap) {\n var _ = this;\n\n var itemSlider = _wrap;\n itemSlider.slick({\n dots: true,\n infinite: true,\n arrows: true,\n speed: 300,\n slidesToShow: 1,\n slidesToScroll: 1,\n responsive: [{\n breakpoint: 3840,\n settings: \"unslick\"\n }, {\n breakpoint: 960,\n settings: {\n slidesToShow: 2,\n slidesToScroll: 2,\n centerMode: false,\n centerPadding: '0'\n }\n }, {\n breakpoint: 640,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1,\n centerMode: true,\n centerPadding: '40px'\n }\n }]\n });\n $(window).resize(function () {\n itemSlider.slick('resize');\n });\n } // setSlick()\n\n }]);\n\n return BeginnerItem;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BeginnerItem);\n\n/***/ }),\n/* 9 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_service__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__model_model__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_util__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tpl__ = __webpack_require__(3);\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 BeginnerMagic = function () {\n function BeginnerMagic(options) {\n _classCallCheck(this, BeginnerMagic);\n\n var _ = this;\n\n if (!options) return;\n _.option = $.extend({\n wrap: null,\n apiDomain: '',\n classId: 0,\n level: 1,\n isLogin: false,\n global: window\n }, options);\n\n _.model = new __WEBPACK_IMPORTED_MODULE_3__tpl__[\"a\" /* default */]();\n _.global = _.option.global ? _.option.global : window;\n }\n\n _createClass(BeginnerMagic, [{\n key: 'init',\n value: function init() {\n var _ = this;\n console.log('BeginnerMagic init !! ');\n\n _.setData();\n }\n }, {\n key: 'setData',\n value: function setData() {\n var _ = this,\n _level = _.option.level,\n _classId = _.option.classId;\n\n Object(__WEBPACK_IMPORTED_MODULE_0__utils_service__[\"a\" /* getDatasWithOption */])([{\n type: 'GET',\n url: _.option.apiDomain + '/api/returnbrave/recommend/magic/' + _classId,\n dataType: 'json'\n }], function (data) {\n _.setInstance(data);\n }, function (data) {\n // no process\n\n });\n }\n }, {\n key: 'setInstance',\n value: function setInstance(data) {\n var _ = this,\n _level = _.option.level,\n _classId = _.option.classId,\n _wrap = _.option.wrap.magicWrap;\n\n var _dataBattle = data.magicRecommend.Battle,\n _dataHunt = data.magicRecommend.Hunt;\n\n if (!Object.keys) {\n Object.keys = function (obj) {\n var keys = [];\n\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n keys.push(i);\n }\n }\n return keys;\n };\n }\n\n if (!Object.values) {\n Object.values = function (obj) {\n var values = [];\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n values.push(obj[i]);\n }\n }\n return values;\n };\n }\n\n var magicTpl = '',\n magicBattleTpl = '',\n magicHuntTpl = '';\n\n var magicHuntDom = $('사냥용
');\n var magicBattleDom = $('전투용
');\n\n // 입수법\n var acqTypes = Object.keys(_.model.ACQUISITION_NAMES);\n var magicAcquisitionDisplay = function magicAcquisitionDisplay(acquisition) {\n var acquisitionDom = $('');\n var acquisitionTpl = 'QND';\n acquisitionDom.append(acquisitionTpl);\n\n acquisition.map(function (acquisitionItem, acquisitionIdx) {\n acquisitionDom.find('.acq-' + acquisitionItem).addClass('on');\n });\n return acquisitionDom.html();\n }; // itemAcquisitionDisplay function()\n\n\n // magic Battle\n\n if (_dataBattle.required.length <= 0) {\n magicBattleTpl += '';\n } else {\n magicBattleTpl += '\\n
\\uD544\\uC218
\\uB9C8\\uBC95 | \\uC2B5\\uB4DD \\uB808\\uBCA8 | \\uD68D\\uB4DD \\uBC29\\uBC95 | \\uD328\\uC2DC\\uBE0C |
';\n _dataBattle.required.map(function (item, index) {\n magicBattleTpl += '\\n ' + item.magicName + ' | \\n ' + item.magicLevel + ' | \\n ' + magicAcquisitionDisplay(item.acquisition) + ' | \\n ' + (item.magicPassive || '-') + ' | \\n
';\n });\n }\n magicBattleTpl += '
';\n\n if (_dataBattle.option.length <= 0) {\n magicBattleTpl += '';\n } else {\n magicBattleTpl += '\\n
\\uC120\\uD0DD
\\uB9C8\\uBC95 | \\uC2B5\\uB4DD \\uB808\\uBCA8 | \\uD68D\\uB4DD \\uBC29\\uBC95 | \\uD328\\uC2DC\\uBE0C |
';\n _dataBattle.option.map(function (item, index) {\n magicBattleTpl += '\\n ' + item.magicName + ' | \\n ' + item.magicLevel + ' | \\n ' + magicAcquisitionDisplay(item.acquisition) + ' | \\n ' + (item.magicPassive || '-') + ' | \\n
';\n });\n magicBattleTpl += '
';\n }\n\n // magic Hunt\n\n if (_dataHunt.required.length <= 0) {\n magicHuntTpl += '';\n } else {\n magicHuntTpl += '\\n
\\uD544\\uC218
\\uB9C8\\uBC95 | \\uC2B5\\uB4DD \\uB808\\uBCA8 | \\uD68D\\uB4DD \\uBC29\\uBC95 | \\uD328\\uC2DC\\uBE0C |
';\n _dataHunt.required.map(function (item, index) {\n magicHuntTpl += '\\n ' + item.magicName + ' | \\n ' + item.magicLevel + ' | \\n ' + magicAcquisitionDisplay(item.acquisition) + ' | \\n ' + (item.magicPassive || '-') + ' | \\n
';\n });\n magicHuntTpl += '
';\n }\n\n if (_dataHunt.option.length <= 0) {\n magicHuntTpl += '';\n } else {\n magicHuntTpl += '\\n
\\uC120\\uD0DD
\\uB9C8\\uBC95 | \\uC2B5\\uB4DD \\uB808\\uBCA8 | \\uD68D\\uB4DD \\uBC29\\uBC95 | \\uD328\\uC2DC\\uBE0C |
';\n _dataHunt.option.map(function (item, index) {\n magicHuntTpl += '\\n ' + item.magicName + ' | \\n ' + item.magicLevel + ' | \\n ' + magicAcquisitionDisplay(item.acquisition) + ' | \\n ' + (item.magicPassive || '-') + ' | \\n
';\n });\n magicHuntTpl += '
';\n }\n\n magicHuntDom.append(magicHuntTpl);\n magicBattleDom.append(magicBattleTpl);\n\n $('.article-magic', _wrap).append(magicHuntDom.wrapAll('').parent().html(), magicBattleDom.wrapAll('
').parent().html());\n } // setInstance()\n\n }]);\n\n return BeginnerMagic;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BeginnerMagic);\n\n/***/ }),\n/* 10 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_service__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__model_model__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_util__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tpl__ = __webpack_require__(3);\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 BeginnerHunt = function () {\n function BeginnerHunt(options) {\n _classCallCheck(this, BeginnerHunt);\n\n var _ = this;\n\n if (!options) return;\n\n _.option = $.extend({\n wrap: null,\n apiDomain: '',\n classId: 0,\n level: 1,\n isLogin: false,\n global: window\n }, options);\n\n _.model = new __WEBPACK_IMPORTED_MODULE_3__tpl__[\"a\" /* default */]();\n _.global = _.option.global ? _.option.global : window;\n }\n\n /* init() {\r\n const _ = this\r\n console.log('BeginnerHunt init !! ');\r\n \r\n _.setData();\r\n \r\n }*/\n\n\n _createClass(BeginnerHunt, [{\n key: 'init',\n value: function init() {\n var _ = this,\n _wrap = _.option.wrap.huntWrap;\n console.log('# BeginnerHunt init !! ');\n\n Object(__WEBPACK_IMPORTED_MODULE_0__utils_service__[\"a\" /* getDatasWithOption */])([{\n type: 'GET',\n url: _.option.apiDomain + '/conti/getContent?service=lineage&alias=beginner-hunt&lang=ko-KR',\n dataType: 'json',\n contentType: 'application/json',\n Accept: 'application/json'\n }], function (data) {\n console.log('# BeginnerRecommend.js data : ', JSON.parse(data.jsonData));\n if (data.jsonData.length <= 0) {\n _.setNoData();\n } else {\n _.setData(JSON.parse(data.jsonData));\n }\n }, function (data) {\n console.log('데이터를 불러올 수 없습니다. 잠시 후, 다시 시도해주세요.');\n });\n }\n }, {\n key: 'setNoData',\n value: function setNoData() {\n $(this.option.wrap.recommendWrap).empty().append('
-
');\n }\n }, {\n key: 'setData',\n value: function setData(data) {\n var _ = this,\n _level = _.option.level,\n _classId = _.option.classId,\n\n // _data = _.global.huntData.groups,\n _wrap = _.option.wrap.huntWrap;\n\n _.setInstance(data.groups);\n\n /*let _lv;\r\n if( 80 <= _level ) {\r\n _lv = 4;\r\n } else if ( 75 <= _level && _level < 80 ) {\r\n _lv = 3;\r\n } else if ( 55 <= _level && _level < 75 ) {\r\n _lv = 2;\r\n } else {\r\n _lv = 1;\r\n }*/\n var _lv = 1;\n\n $('.tab li', _wrap).removeClass('on');\n $('.table', _wrap).hide();\n\n $('.tab li:nth-child(' + _lv + ')', _wrap).addClass('on');\n $('#hunt-' + _lv, _wrap).show();\n\n $('.tab a', _wrap).on('click', function () {\n var _lv = $(this).data('lv');\n\n $('.tab li', _wrap).removeClass('on');\n $('.table', _wrap).hide();\n\n $('.tab li:nth-child(' + _lv + ')', _wrap).addClass('on');\n $('#hunt-' + _lv, _wrap).show();\n return false;\n });\n\n // _.setActive(_lv);\n }\n }, {\n key: 'setInstance',\n value: function setInstance(data) {\n var _ = this,\n _level = _.option.level,\n _classId = _.option.classId,\n _wrap = _.option.wrap.huntWrap;\n\n var tpl = '';\n\n console.log('setInstance() data : ', data);\n\n data.map(function (groups, groupsIndex) {\n var group = groups.items;\n var _idx = groupsIndex + 1;\n\n tpl += '\\n
\\n \\n \\n \\uC0AC\\uB0E5\\uD130 | ';\n\n group.map(function (item, itemIndex) {\n tpl += '' + item.name + ' | ';\n });\n tpl += '
\\n \\n \\n \\n \\uC785\\uC7A5 \\uC870\\uAC74 | ';\n group.map(function (item, itemIndex) {\n tpl += '' + item.limit + ' | ';\n });\n tpl += '
\\n\\t\\t\\t\\t\\n \\uC9C0\\uC5ED \\uC124\\uC815 | ';\n group.map(function (item, itemIndex) {\n tpl += '' + item.zone + ' | ';\n });\n tpl += '
\\n\\t\\t\\t\\t\\n \\uC8FC\\uC694 \\uD2B9\\uC9D5 | ';\n group.map(function (item, itemIndex) {\n tpl += '' + item.feature + ' | ';\n });\n\n tpl += '
\\n \\n
';\n });\n\n var tmpl_tab = '\\n
\\n ';\n\n $('.article-tab', _wrap).empty().append(tmpl_tab); // tab\n $('.table-bundle-row', _wrap).empty().append(tpl);\n } // setInstance()\n\n\n }]);\n\n return BeginnerHunt;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BeginnerHunt);\n\n/***/ }),\n/* 11 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_service__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__model_model__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_util__ = __webpack_require__(2);\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\nvar BeginnerRecommend = function () {\n function BeginnerRecommend(options) {\n _classCallCheck(this, BeginnerRecommend);\n\n var _ = this;\n\n if (!options) return;\n\n if (!options) return;\n _.option = $.extend({\n wrap: null,\n apiDomain: '',\n classId: 0,\n level: 1,\n isLogin: false,\n global: window\n }, options);\n\n _.global = _.option.global ? _.option.global : window;\n }\n\n _createClass(BeginnerRecommend, [{\n key: 'init',\n value: function init() {\n var _ = this,\n _wrap = _.option.wrap.recommendWrap;\n console.log('# BeginnerRecommend init !! ');\n\n Object(__WEBPACK_IMPORTED_MODULE_0__utils_service__[\"a\" /* getDatasWithOption */])([{\n type: 'GET',\n url: _.option.apiDomain + '/conti/getContent?service=lineage&alias=beginner-recommend&lang=ko-KR',\n dataType: 'json',\n contentType: 'application/json',\n Accept: 'application/json'\n }], function (data) {\n console.log('# BeginnerRecommend.js data : ', JSON.parse(data.jsonData));\n if (data.jsonData.length <= 0) {\n _.setNoData();\n } else {\n _.setData(JSON.parse(data.jsonData));\n _.setVideoData(JSON.parse(data.jsonData));\n }\n }, function (data) {\n console.log('데이터를 불러올 수 없습니다. 잠시 후, 다시 시도해주세요.');\n });\n }\n }, {\n key: 'setNoData',\n value: function setNoData() {\n $(this.option.wrap.recommendWrap).empty().append('
-
');\n }\n }, {\n key: 'setData',\n value: function setData(data) {\n var _data = data.items;\n var _tmpl = '
\\n \\uCD94\\uCC9C \\uCF58\\uD150\\uCE20
\\n \\n \\uD50C\\uB808\\uC774\\uC5D0 \\uB3C4\\uC6C0\\uC744 \\uC904 \\uC720\\uC6A9\\uD55C \\uCF58\\uD150\\uCE20\\uB4E4\\uC744
\\uB193\\uCE58\\uC9C0 \\uB9D0\\uACE0 \\uD655\\uC778\\uD558\\uC138\\uC694.
\\n \\t\\n ' + _data.map(function (item, index) {\n return '
';\n }).join('') + '\\n
\\n \\n ';\n $(this.option.wrap.recommendWrap).empty().append(_tmpl);\n this.setSlick();\n }\n }, {\n key: 'setVideoData',\n value: function setVideoData(data) {\n var _data = data.videoItems;\n var _tmpl = '
\\n \\uC601\\uC0C1 \\uAC00\\uC774\\uB4DC
\\n \\n \\t\\n ' + _data.map(function (item, index) {\n return '- \\n ' + item.subject + '\\n
';\n }).join('') + '\\n
\\n \\n ';\n $(this.option.wrap.videoWrap).empty().append(_tmpl);\n }\n }, {\n key: 'setSlick',\n value: function setSlick() {\n var _ = this,\n _wrap = _.option.wrap.recommendWrap;\n\n var recommendSlider = $('.article-recommend', _wrap);\n recommendSlider.slick({\n dots: true,\n infinite: true,\n arrows: true,\n speed: 300,\n slidesToShow: 2,\n slidesToScroll: 2,\n responsive: [{\n breakpoint: 3840,\n settings: \"unslick\"\n }, {\n breakpoint: 960,\n settings: {\n slidesToShow: 3,\n slidesToScroll: 3\n }\n }, {\n breakpoint: 640,\n settings: {\n slidesToShow: 2,\n slidesToScroll: 2\n }\n }]\n });\n $(window).resize(function () {\n recommendSlider.slick('resize');\n });\n } // setSlick()\n\n }]);\n\n return BeginnerRecommend;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BeginnerRecommend);\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// service/beginner.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 = 4);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ac3e8aae86983c12f7b6","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","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","/*\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","\r\n// const singletonId = Symbol();\r\n// const singletonEnforcer = Symbol();\r\n\r\nclass SettingModel {\r\n constructor(options) {\r\n\r\n //constructor(enforcer) {\r\n //if (enforcer !== singletonEnforcer) throw new Error('SettingModel can not use construct. use getInstance method');\r\n\r\n const _ = this;\r\n\r\n _.isLogin = false;\r\n _.DEVICE_TYPE = 'pc';\r\n _.DEFAULT_SERVER_ID = 1;\r\n _.DEFAULT_GENDER = 'MALE';\r\n\r\n _.ITEM_NAMES = {\r\n 'weapon': '무기',\r\n 'helmet': '투구',\r\n 'armor': '갑옷',\r\n 'cape': '망토 ',\r\n 'gloves': '장갑',\r\n 'boots': '부츠',\r\n 'legging': '각반',\r\n 'shield': '방패/가더',\r\n 'belt': '벨트',\r\n 'necklace': '목걸이',\r\n 'ring': '반지',\r\n 'shoulder': '견갑'\r\n };\r\n _.CLASS_NAMES = {\r\n '0': '군주',\r\n '1': '기사',\r\n '2': '요정',\r\n '3': '마법사',\r\n '4': '다크엘프',\r\n '5': '용기사',\r\n '6': '환술사',\r\n '7': '전사',\r\n '8': '검사',\r\n '9': '창기사',\r\n '10': '성기사'\r\n };\r\n _.ACQUISITION_NAMES = {\r\n 'Quest': '퀘스트',\r\n 'NPC': 'NPC 판매',\r\n 'Making': '제작',\r\n 'Drop': '드랍'\r\n };\r\n _.CLASS_MAGIC_POWERBOOK = {\r\n '0': '/powerbook/wiki/%EA%B5%B0%EC%A3%BC%20%EB%A7%88%EB%B2%95',\r\n '1': '/powerbook/wiki/%EA%B8%B0%EC%82%AC%20%EA%B8%B0%EC%88%A0',\r\n '2': '/powerbook/wiki/%EC%A0%95%EB%A0%B9%20%EB%A7%88%EB%B2%95',\r\n '3': '/powerbook/wiki/%EC%9D%BC%EB%B0%98%20%EB%A7%88%EB%B2%95',\r\n '4': '/powerbook/wiki/%ED%9D%91%EC%A0%95%EB%A0%B9%20%EB%A7%88%EB%B2%95',\r\n '5': '/powerbook/wiki/%EC%9A%A9%EA%B8%B0%EC%82%AC%20%EB%A7%88%EB%B2%95',\r\n '6': '/powerbook/wiki/%ED%99%98%EC%88%A0%EC%82%AC%20%EB%A7%88%EB%B2%95',\r\n '7': '/powerbook/wiki/%EC%A0%84%EC%82%AC%20%EA%B8%B0%EC%88%A0',\r\n '8': '/powerbook/wiki/%EA%B2%80%EC%82%AC+%EA%B8%B0%EC%88%A0',\r\n '9': '/powerbook/wiki/%EC%B0%BD%EA%B8%B0%EC%82%AC+%EA%B8%B0%EC%88%A0',\r\n '10': '/powerbook/wiki/%EC%84%B1%EA%B8%B0%EC%82%AC%20%EA%B8%B0%EC%88%A0'\r\n };\r\n _.BOSS_NAMES = {\r\n '1': '말하는섬',\r\n '2': '글루디오 던전',\r\n '3': '고대 정령의 무덤',\r\n '4': '풍룡의 둥지',\r\n '5': '상아탑',\r\n '6': '오렌 설벽',\r\n '7': '기란 감옥',\r\n '8': '용의 계곡',\r\n '9': '화룡의 둥지',\r\n '10': '오만의 탑',\r\n '11': '지배의 탑',\r\n '12': '사막',\r\n '13': '기타 필드 보스'\r\n };\r\n\r\n _.ObjectKeys = function(obj) {\r\n let keys = [];\r\n\r\n for (let i in obj) {\r\n if (obj.hasOwnProperty(i)) {\r\n keys.push(i);\r\n }\r\n }\r\n return keys;\r\n };\r\n\r\n _.ObjectValues = function(obj) {\r\n let values = [];\r\n for (let i in obj) {\r\n if (obj.hasOwnProperty(i)) {\r\n values.push(obj[i]);\r\n }\r\n }\r\n return values;\r\n };\r\n\r\n\r\n }\r\n\r\n}\r\n\r\nexport default SettingModel;\r\n\n\n\n// WEBPACK FOOTER //\n// ./_src/js/service/beginner/tpl.js","import BeginnerTop from './beginner/BeginnerTop';\r\nimport BeginnerItem from './beginner/BeginnerItem';\r\nimport BeginnerMagic from './beginner/BeginnerMagic';\r\nimport BeginnerHunt from './beginner/BeginnerHunt';\r\nimport BeginnerRecommend from './beginner/BeginnerRecommend';\r\n\r\nimport { isNotDefined, namespace } from './../utils/util';\r\nimport { API_DOMAIN_DEFAULT } from './../model/model';\r\nimport { getDatasWithOption } from './../utils/service';\r\n\r\n(function ($, global) {\r\n \"use strict\";\r\n namespace('nc.lineage');\r\n\r\n nc.lineage.beginner = function (options) {\r\n if (isNotDefined(options)) throw new Error('nc.lineage.beginner require options object');\r\n\r\n const option = $.extend(true, {\r\n apiDomain: API_DOMAIN_DEFAULT,\r\n classId: 0,\r\n level: 0,\r\n wrap: null\r\n }, options);\r\n\r\n let beginnerTop = new BeginnerTop(option).init();\r\n let beginnerItem = new BeginnerItem(option).init();\r\n let beginnerMagic = new BeginnerMagic(option).init();\r\n let beginnerHunt = new BeginnerHunt(option).init();\r\n let beginnerRecommend = new BeginnerRecommend(option).init();\r\n\r\n };\r\n\r\n}(jQuery, window));\n\n\n// WEBPACK FOOTER //\n// ./_src/js/service/beginner.js","import { getDatasWithOption } from '../../utils/service';\r\nimport { BREAKPOINTS } from '../../model/model';\r\nimport { isChrome, isDefined, isObject, not, isNotDefined, each, truthy, falsy, parseInt10, isMobileResolution, getResolution } from '../../utils/util';\r\nimport SettingModel from './tpl';\r\n\r\nclass BeginnerTop {\r\n constructor(options) {\r\n const _ = this;\r\n\r\n if (!options) return;\r\n\r\n _.option = $.extend({\r\n wrap: null,\r\n apiDomain: '',\r\n classId: 0,\r\n level: 0,\r\n global: window\r\n }, options);\r\n\r\n _.wrap = _.option.wrap;\r\n _.model = new SettingModel;\r\n\r\n _.global = (_.option.global) ? _.option.global : window;\r\n _.currentResolution = getResolution( BREAKPOINTS, window );\r\n\r\n }\r\n\r\n init() {\r\n\r\n console.log('BeginnerTop !! ');\r\n const _ = this;\r\n\r\n _.setClass();\r\n _.setMenu();\r\n _.setHelper()\r\n _.setQuickmenu();\r\n // return _;\r\n }\r\n\r\n setClass() {\r\n const _ = this,\r\n _level = _.option.level,\r\n _classId = _.option.classId;\r\n\r\n let _className = _.model.CLASS_NAMES[_classId]; // ex. 군주\r\n let _classMagicPowerbook = _.model.CLASS_MAGIC_POWERBOOK[_classId];\r\n let _classTypeText = (_classId == 1 || _classId >= 7) ? '기술' : '마법';\r\n\r\n console.log('_className : ', _className);\r\n $('.wrap-section-beginner').removeClass().addClass( 'wrap-section-beginner class-'+ _classId );\r\n $('.header-class', _.option.wrap.itemWrap ).append( _className );\r\n (_classId == 2 ) ? $('.header-class', _.option.wrap.magicWrap ).append( _className +'(바람 계열)') : $('.header-class', _.option.wrap.magicWrap ).append( _className );\r\n\r\n $('.btn-magic-powerbook', _.option.wrap.magicWrap ).html(`
powerbook${_className} ${_classTypeText}`).attr('href', _classMagicPowerbook ); // ex. 군주or성기사 등 마법or기술 파워북\r\n \r\n\r\n let dropdown = nc.lineage.dropdown({\r\n wrap: $('.ui-dropdown-class'),\r\n activateIndex: _.option.classId+1,\r\n activateCallback: function (obj) {\r\n if(obj.index === _.option.classId+1) return;\r\n document.location.href = window.getUriCombinedParams(document.location.pathname, {\r\n classId: obj.index-1\r\n });\r\n },\r\n useDefaultSelectInMobileDevice: true\r\n });\r\n\r\n }\r\n\r\n setMenu() {\r\n const _ = this;\r\n }\r\n\r\n setHelper() {\r\n const _ = this;\r\n\r\n let _itemHelperHandler = $('.icon-helper', _.option.wrap.itemWrap ),\r\n _magicHelperHandler = $('.icon-helper', _.option.wrap.magicWrap ),\r\n _itemHelperWrap = _itemHelperHandler.siblings('.wrap-helper'),\r\n _magicHelperWrap = _magicHelperHandler.siblings('.wrap-helper'),\r\n _wrapItem = _.option.wrap.itemWrap.find('.wrap-helper') ; // $('.wrap-helper', _.option.wrap.itemWrap); /*,\r\n\r\n\r\n /*let helperInit = setTimeout( function(){\r\n _itemHelperWrap.fadeOut('fast');\r\n _magicHelperWrap.fadeOut('fast');\r\n _itemHelperHandler.removeClass('on');\r\n _magicHelperHandler.removeClass('on');\r\n }, 3000 ); */\r\n\r\n _itemHelperHandler.click(function(){\r\n //clearTimeout(helperInit);\r\n if( _itemHelperWrap.is(':visible') ) {\r\n _itemHelperWrap.fadeOut('fast');\r\n _itemHelperHandler.removeClass('on');\r\n }else {\r\n _itemHelperWrap.fadeIn('fast');\r\n _itemHelperHandler.addClass('on');\r\n }\r\n });\r\n\r\n _magicHelperHandler.click(function(){\r\n //clearTimeout(helperInit);\r\n if( _magicHelperWrap.is(':visible') ) {\r\n _magicHelperWrap.fadeOut('fast');\r\n _magicHelperHandler.removeClass('on');\r\n }else {\r\n _magicHelperWrap.fadeIn('fast');\r\n _magicHelperHandler.addClass('on');\r\n }\r\n });\r\n\r\n }\r\n\r\n setQuickmenu() {\r\n const _ = this;\r\n\r\n let _quickmenu = $('.quickmenu');\r\n let _quickbtn = $('.button-toggle', _quickmenu);\r\n let _quickitem = $('a', _quickmenu);\r\n\r\n console.log( ' _.currentResolution () : ', _.currentResolution );\r\n\r\n if(_.currentResolution == 'pc' || _.currentResolution == 'max') {\r\n _quickmenu.removeClass('off');\r\n }\r\n\r\n _quickbtn.click(function(e){\r\n e.preventDefault();\r\n _quickmenu.toggleClass('off');\r\n });\r\n\r\n\r\n\r\n _quickitem.click(function(e) {\r\n e.preventDefault();\r\n\r\n\r\n let _section = $(this).attr(\"class\");\r\n let _itemOffset = $('.wrap-section-'+ _section).offset();\r\n let _quickOffsetTop = ( _.currentResolution == 'pc' || _.currentResolution == 'max' ) ? _itemOffset.top - 59 : _itemOffset.top - 106 ;\r\n\r\n\r\n _quickitem.removeClass('on');\r\n $(this).addClass('on');\r\n\r\n $(\"html, body\").animate({\r\n scrollTop: _quickOffsetTop\r\n }, 500);\r\n\r\n\r\n });\r\n\r\n $(window).resize(function() {\r\n\r\n _.currentResolution = getResolution( BREAKPOINTS, window );\r\n if(_.currentResolution == 'pc' || _.currentResolution == 'max') {\r\n _quickmenu.removeClass('off');\r\n }else {\r\n _quickmenu.addClass('off');\r\n }\r\n\r\n // console.log( '_currentResolution : ', _.currentResolution );\r\n\r\n\r\n });\r\n\r\n\r\n\r\n\r\n }\r\n}\r\n\r\nexport default BeginnerTop;\n\n\n// WEBPACK FOOTER //\n// ./_src/js/service/beginner/BeginnerTop.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","import { getDatasWithOption } from '../../utils/service';\r\nimport { BREAKPOINTS } from '../../model/model';\r\nimport { isChrome, isDefined, isObject, not, isNotDefined, each, truthy, falsy, parseInt10, isMobileResolution, getResolution } from '../../utils/util';\r\nimport SettingModel from './tpl';\r\n\r\nclass BeginnerItem {\r\n constructor(options) {\r\n const _ = this;\r\n\r\n if (!options) return;\r\n _.option = $.extend({\r\n wrap: null,\r\n apiDomain: '',\r\n classId: 0,\r\n level: 1,\r\n isLogin: false,\r\n global: window\r\n }, options);\r\n\r\n _.model = new SettingModel;\r\n _.global = (_.option.global) ? _.option.global : window;\r\n\r\n }\r\n\r\n init() {\r\n const _ = this;\r\n console.log('BeginnerItem init !! ');\r\n\r\n _.setData();\r\n\r\n /*\r\n if (truthy(_.option.isLogin)) {\r\n if (isDefined(_.option.wrap) && _.option.wrap.length) _.setData();\r\n }\r\n return _;\r\n */\r\n\r\n }\r\n\r\n setData() {\r\n const _ = this,\r\n _level = _.option.level,\r\n _classId = _.option.classId;\r\n\r\n getDatasWithOption([{\r\n type: 'GET',\r\n url: `${_.option.apiDomain}/api/returnbrave/recommend/item/${_classId}`,\r\n dataType: 'json'\r\n }], (data) => {\r\n _.setInstance(data);\r\n }, (data) => {\r\n // no process\r\n });\r\n\r\n }\r\n\r\n\r\n setInstance(data){\r\n const _ = this,\r\n _level = _.option.level,\r\n _classId = _.option.classId,\r\n _wrap = _.option.wrap.itemWrap;\r\n let _data = data.itemRecommend;\r\n\r\n\r\n if (!Object.keys) {\r\n Object.keys = function(obj) {\r\n var keys = [];\r\n\r\n for (var i in obj) {\r\n if (obj.hasOwnProperty(i)) {\r\n keys.push(i);\r\n }\r\n }\r\n return keys;\r\n };\r\n }\r\n\r\n if (!Object.values) {\r\n Object.values = function(obj) {\r\n var values = [];\r\n for (var i in obj) {\r\n if (obj.hasOwnProperty(i)) {\r\n values.push(obj[i]);\r\n }\r\n }\r\n return values;\r\n };\r\n }\r\n\r\n\r\n\r\n let itemTpl ='';\r\n let itemTypes = Object.keys(_.model.ITEM_NAMES);\r\n let itemValues = Object.values(_.model.ITEM_NAMES);\r\n\r\n\r\n // 입수법\r\n let acqTypes = Object.keys(_.model.ACQUISITION_NAMES);\r\n let itemAcquisitionDisplay = function(acquisition) {\r\n\r\n let acquisitionDom = $('
');\r\n\r\n let acquisitionTpl = `
QNMD`;\r\n acquisitionDom.append(acquisitionTpl);\r\n\r\n acquisition.map((acquisitionItem, acquisitionIdx) => {\r\n acquisitionDom.find(`.acq-${acquisitionItem}`).addClass('on');\r\n });\r\n return acquisitionDom.html();\r\n\r\n } // itemAcquisitionDisplay function()\r\n\r\n\r\n itemTypes.map( (item,index) => {\r\n let itemName = _.model.ITEM_NAMES[item]; // ex. 무기\r\n\r\n itemTpl += `
\r\n
${itemName}
`;\r\n\r\n _data[item].map( (itemData, itemIndex) => {\r\n\r\n if(itemIndex > 5 ) return;\r\n itemTpl += `- \r\n ${itemData.itemName}\r\n ${itemAcquisitionDisplay(itemData.acquisition)}\r\n
\r\n `;\r\n });\r\n itemTpl += `
`;\r\n });\r\n // console.log('html : ', itemTpl);\r\n\r\n $('.article-item', _wrap).append( itemTpl );\r\n\r\n _.setSlick( $('.article-item', _wrap) );\r\n\r\n\r\n } // setInstance()\r\n\r\n\r\n setSlick(_wrap){\r\n const _ = this;\r\n\r\n let itemSlider = _wrap;\r\n itemSlider.slick({\r\n dots: true,\r\n infinite: true,\r\n arrows: true,\r\n speed: 300,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n responsive: [\r\n {\r\n breakpoint: 3840,\r\n settings: \"unslick\"\r\n },\r\n {\r\n breakpoint: 960,\r\n settings: {\r\n slidesToShow: 2,\r\n slidesToScroll: 2,\r\n centerMode: false,\r\n centerPadding: '0'\r\n }\r\n },\r\n {\r\n breakpoint: 640,\r\n settings: {\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n centerMode: true,\r\n centerPadding: '40px'\r\n }\r\n }\r\n ]\r\n });\r\n $(window).resize(function() {\r\n itemSlider.slick('resize');\r\n });\r\n\r\n } // setSlick()\r\n\r\n}\r\n\r\nexport default BeginnerItem;\n\n\n// WEBPACK FOOTER //\n// ./_src/js/service/beginner/BeginnerItem.js","import { getDatasWithOption } from '../../utils/service';\r\nimport { BREAKPOINTS } from '../../model/model';\r\nimport { isChrome, isDefined, isObject, not, isNotDefined, each, truthy, falsy, parseInt10, isMobileResolution, getResolution } from '../../utils/util';\r\nimport SettingModel from './tpl';\r\n\r\nclass BeginnerMagic {\r\n constructor(options) {\r\n const _ = this;\r\n\r\n if (!options) return;\r\n _.option = $.extend({\r\n wrap: null,\r\n apiDomain: '',\r\n classId: 0,\r\n level: 1,\r\n isLogin: false,\r\n global: window\r\n }, options);\r\n\r\n _.model = new SettingModel;\r\n _.global = (_.option.global) ? _.option.global : window;\r\n\r\n }\r\n\r\n init() {\r\n const _ = this;\r\n console.log('BeginnerMagic init !! ');\r\n\r\n _.setData();\r\n\r\n }\r\n\r\n setData() {\r\n const _ = this,\r\n _level = _.option.level,\r\n _classId = _.option.classId;\r\n\r\n getDatasWithOption([{\r\n type: 'GET',\r\n url: `${_.option.apiDomain}/api/returnbrave/recommend/magic/${_classId}`,\r\n dataType: 'json'\r\n }], (data) => {\r\n _.setInstance(data);\r\n }, (data) => {\r\n // no process\r\n\r\n });\r\n\r\n }\r\n\r\n setInstance(data){\r\n const _ = this,\r\n _level = _.option.level,\r\n _classId = _.option.classId,\r\n _wrap = _.option.wrap.magicWrap;\r\n\r\n let _dataBattle = data.magicRecommend.Battle,\r\n _dataHunt = data.magicRecommend.Hunt;\r\n\r\n\r\n if (!Object.keys) {\r\n Object.keys = function(obj) {\r\n var keys = [];\r\n\r\n for (var i in obj) {\r\n if (obj.hasOwnProperty(i)) {\r\n keys.push(i);\r\n }\r\n }\r\n return keys;\r\n };\r\n }\r\n\r\n if (!Object.values) {\r\n Object.values = function(obj) {\r\n var values = [];\r\n for (var i in obj) {\r\n if (obj.hasOwnProperty(i)) {\r\n values.push(obj[i]);\r\n }\r\n }\r\n return values;\r\n };\r\n }\r\n\r\n\r\n let magicTpl = '',\r\n magicBattleTpl = '',\r\n magicHuntTpl = '';\r\n\r\n let magicHuntDom = $('
사냥용
');\r\n let magicBattleDom = $('
전투용
');\r\n\r\n // 입수법\r\n let acqTypes = Object.keys(_.model.ACQUISITION_NAMES);\r\n let magicAcquisitionDisplay = function(acquisition) {\r\n let acquisitionDom = $('
');\r\n let acquisitionTpl = `
QND`;\r\n acquisitionDom.append(acquisitionTpl);\r\n\r\n acquisition.map((acquisitionItem, acquisitionIdx) => {\r\n acquisitionDom.find(`.acq-${acquisitionItem}`).addClass('on');\r\n });\r\n return acquisitionDom.html();\r\n } // itemAcquisitionDisplay function()\r\n\r\n\r\n // magic Battle\r\n\r\n if(_dataBattle.required.length <= 0) {\r\n magicBattleTpl += ``;\r\n } else {\r\n magicBattleTpl += `
\r\n
필수
마법 | 습득 레벨 | 획득 방법 | 패시브 |
`;\r\n _dataBattle.required.map((item, index) => {\r\n magicBattleTpl += `\r\n ${item.magicName} | \r\n ${item.magicLevel} | \r\n ${magicAcquisitionDisplay(item.acquisition)} | \r\n ${item.magicPassive || `-`} | \r\n
`;\r\n });\r\n }\r\n magicBattleTpl += `
`;\r\n\r\n\r\n if(_dataBattle.option.length <= 0) {\r\n magicBattleTpl += ``;\r\n } else {\r\n magicBattleTpl += `
\r\n
선택
마법 | 습득 레벨 | 획득 방법 | 패시브 |
`;\r\n _dataBattle.option.map((item, index) => {\r\n magicBattleTpl += `\r\n ${item.magicName} | \r\n ${item.magicLevel} | \r\n ${magicAcquisitionDisplay(item.acquisition)} | \r\n ${item.magicPassive || `-`} | \r\n
`;\r\n });\r\n magicBattleTpl += `
`;\r\n }\r\n\r\n\r\n // magic Hunt\r\n\r\n if(_dataHunt.required.length <= 0) {\r\n magicHuntTpl += ``;\r\n } else {\r\n magicHuntTpl += `
\r\n
필수
마법 | 습득 레벨 | 획득 방법 | 패시브 |
`;\r\n _dataHunt.required.map((item, index) => {\r\n magicHuntTpl += `\r\n ${item.magicName} | \r\n ${item.magicLevel} | \r\n ${magicAcquisitionDisplay(item.acquisition)} | \r\n ${item.magicPassive || `-`} | \r\n
`;\r\n });\r\n magicHuntTpl += `
`;\r\n }\r\n\r\n if(_dataHunt.option.length <= 0) {\r\n magicHuntTpl += ``;\r\n } else {\r\n magicHuntTpl += `
\r\n
선택
마법 | 습득 레벨 | 획득 방법 | 패시브 |
`;\r\n _dataHunt.option.map((item, index) => {\r\n magicHuntTpl += `\r\n ${item.magicName} | \r\n ${item.magicLevel} | \r\n ${magicAcquisitionDisplay(item.acquisition)} | \r\n ${item.magicPassive || `-`} | \r\n
`;\r\n });\r\n magicHuntTpl += `
`;\r\n }\r\n\r\n magicHuntDom.append(magicHuntTpl);\r\n magicBattleDom.append(magicBattleTpl);\r\n\r\n $('.article-magic', _wrap).append( magicHuntDom.wrapAll('
').parent().html() , magicBattleDom.wrapAll('
').parent().html() );\r\n\r\n\r\n } // setInstance()\r\n\r\n}\r\n\r\nexport default BeginnerMagic;\n\n\n// WEBPACK FOOTER //\n// ./_src/js/service/beginner/BeginnerMagic.js","import { getDatasWithOption } from '../../utils/service';\r\nimport { BREAKPOINTS } from '../../model/model';\r\nimport { isChrome, isDefined, isObject, not, isNotDefined, each, truthy, falsy, parseInt10, isMobileResolution, getResolution } from '../../utils/util';\r\nimport SettingModel from './tpl';\r\n\r\nclass BeginnerHunt {\r\n constructor(options) {\r\n const _ = this;\r\n\r\n if (!options) return;\r\n\r\n _.option = $.extend({\r\n wrap: null,\r\n apiDomain: '',\r\n classId: 0,\r\n level: 1,\r\n isLogin: false,\r\n global: window\r\n }, options);\r\n\r\n _.model = new SettingModel;\r\n _.global = (_.option.global) ? _.option.global : window;\r\n\r\n }\r\n\r\n/* init() {\r\n const _ = this\r\n console.log('BeginnerHunt init !! ');\r\n\r\n _.setData();\r\n\r\n }*/\r\n init() {\r\n const _ = this,\r\n _wrap = _.option.wrap.huntWrap;\r\n console.log('# BeginnerHunt init !! ');\r\n\r\n getDatasWithOption([{\r\n type: 'GET',\r\n url: _.option.apiDomain +'/conti/getContent?service=lineage&alias=beginner-hunt&lang=ko-KR',\r\n dataType: 'json',\r\n contentType: 'application/json',\r\n Accept: 'application/json'\r\n }], (data) => {\r\n console.log('# BeginnerRecommend.js data : ', JSON.parse(data.jsonData) );\r\n if(data.jsonData.length <= 0) {\r\n _.setNoData();\r\n } else {\r\n _.setData(JSON.parse(data.jsonData));\r\n }\r\n }, (data) => {\r\n console.log('데이터를 불러올 수 없습니다. 잠시 후, 다시 시도해주세요.');\r\n });\r\n }\r\n\r\n setNoData() {\r\n $(this.option.wrap.recommendWrap).empty().append(`
-
`);\r\n }\r\n\r\n setData(data) {\r\n const _ = this,\r\n _level = _.option.level,\r\n _classId = _.option.classId,\r\n // _data = _.global.huntData.groups,\r\n _wrap = _.option.wrap.huntWrap;\r\n\r\n\r\n _.setInstance(data.groups);\r\n\r\n\r\n /*let _lv;\r\n if( 80 <= _level ) {\r\n _lv = 4;\r\n } else if ( 75 <= _level && _level < 80 ) {\r\n _lv = 3;\r\n } else if ( 55 <= _level && _level < 75 ) {\r\n _lv = 2;\r\n } else {\r\n _lv = 1;\r\n }*/\r\n let _lv = 1;\r\n\r\n $('.tab li', _wrap).removeClass('on');\r\n $('.table' , _wrap).hide();\r\n\r\n $('.tab li:nth-child('+ _lv +')', _wrap).addClass('on');\r\n $('#hunt-'+ _lv , _wrap).show();\r\n\r\n\r\n $('.tab a', _wrap).on('click', function(){\r\n let _lv = $(this).data('lv');\r\n\r\n $('.tab li', _wrap).removeClass('on');\r\n $('.table' , _wrap).hide();\r\n\r\n $('.tab li:nth-child('+ _lv +')', _wrap).addClass('on');\r\n $('#hunt-'+ _lv , _wrap).show();\r\n return false;\r\n });\r\n\r\n // _.setActive(_lv);\r\n\r\n }\r\n\r\n\r\n setInstance(data){\r\n const _ = this,\r\n _level = _.option.level,\r\n _classId = _.option.classId,\r\n _wrap = _.option.wrap.huntWrap;\r\n\r\n let tpl = '';\r\n\r\n console.log('setInstance() data : ', data);\r\n\r\n data.map( (groups, groupsIndex) => {\r\n const group = groups.items;\r\n let _idx = groupsIndex +1;\r\n\r\n tpl += `\r\n
\r\n \r\n \r\n 사냥터 | `;\r\n\r\n\r\n group.map( (item, itemIndex) => {\r\n tpl += `${item.name} | `;\r\n });\r\n tpl += `
\r\n \r\n \r\n \r\n 입장 조건 | `;\r\n group.map( (item, itemIndex) => {\r\n tpl += `${item.limit} | `;\r\n });\r\n tpl += `
\r\n\t\t\t\t\r\n 지역 설정 | `;\r\n group.map( (item, itemIndex) => {\r\n tpl += `${item.zone} | `;\r\n });\r\n tpl += `
\r\n\t\t\t\t\r\n 주요 특징 | `;\r\n group.map( (item, itemIndex) => {\r\n tpl += `${item.feature} | `;\r\n });\r\n\r\n tpl += `
\r\n \r\n
`;\r\n });\r\n\r\n let tmpl_tab = `\r\n
\r\n ${data.map( (item, i) => {\r\n return `- ${item.title}
`;\r\n }).join('')}\r\n
\r\n `;\r\n\r\n $('.article-tab', _wrap).empty().append(tmpl_tab); // tab\r\n $('.table-bundle-row', _wrap).empty().append(tpl);\r\n\r\n\r\n } // setInstance()\r\n\r\n\r\n\r\n}\r\n\r\nexport default BeginnerHunt;\n\n\n// WEBPACK FOOTER //\n// ./_src/js/service/beginner/BeginnerHunt.js","import { getDatasWithOption } from '../../utils/service';\r\nimport { BREAKPOINTS } from '../../model/model';\r\nimport { isChrome, isDefined, isObject, not, isNotDefined, each, truthy, falsy, parseInt10, isMobileResolution, getResolution } from '../../utils/util';\r\n\r\nclass BeginnerRecommend {\r\n constructor(options) {\r\n const _ = this;\r\n\r\n if (!options) return;\r\n\r\n if (!options) return;\r\n _.option = $.extend({\r\n wrap: null,\r\n apiDomain: '',\r\n classId: 0,\r\n level: 1,\r\n isLogin: false,\r\n global: window\r\n }, options);\r\n\r\n _.global = (_.option.global) ? _.option.global : window;\r\n\r\n }\r\n\r\n init() {\r\n const _ = this,\r\n _wrap = _.option.wrap.recommendWrap;\r\n console.log('# BeginnerRecommend init !! ');\r\n\r\n getDatasWithOption([{\r\n type: 'GET',\r\n url: _.option.apiDomain +'/conti/getContent?service=lineage&alias=beginner-recommend&lang=ko-KR',\r\n dataType: 'json',\r\n contentType: 'application/json',\r\n Accept: 'application/json'\r\n }], (data) => {\r\n console.log('# BeginnerRecommend.js data : ', JSON.parse(data.jsonData) );\r\n if(data.jsonData.length <= 0) {\r\n _.setNoData();\r\n } else {\r\n _.setData(JSON.parse(data.jsonData));\r\n _.setVideoData(JSON.parse(data.jsonData));\r\n }\r\n }, (data) => {\r\n console.log('데이터를 불러올 수 없습니다. 잠시 후, 다시 시도해주세요.');\r\n });\r\n\r\n }\r\n setNoData() {\r\n $(this.option.wrap.recommendWrap).empty().append(`
-
`);\r\n }\r\n setData(data) {\r\n let _data = data.items;\r\n let _tmpl = `
\r\n \r\n \r\n 플레이에 도움을 줄 유용한 콘텐츠들을
놓치지 말고 확인하세요.
\r\n \t\r\n ${_data.map((item, index) => {\r\n return `
`;\r\n }).join('')}\r\n
\r\n \r\n `;\r\n $(this.option.wrap.recommendWrap).empty().append(_tmpl);\r\n this.setSlick();\r\n }\r\n setVideoData(data) {\r\n let _data = data.videoItems;\r\n let _tmpl = `
\r\n \r\n \r\n \t\r\n ${_data.map((item, index) => {\r\n return `- \r\n ${item.subject}\r\n
`;\r\n }).join('')}\r\n
\r\n \r\n `;\r\n $(this.option.wrap.videoWrap).empty().append(_tmpl);\r\n }\r\n\r\n setSlick(){\r\n const _ = this,\r\n _wrap = _.option.wrap.recommendWrap;\r\n\r\n let recommendSlider = $('.article-recommend', _wrap);\r\n recommendSlider.slick({\r\n dots: true,\r\n infinite: true,\r\n arrows: true,\r\n speed: 300,\r\n slidesToShow: 2,\r\n slidesToScroll: 2,\r\n responsive: [\r\n {\r\n breakpoint: 3840,\r\n settings: \"unslick\"\r\n },\r\n {\r\n breakpoint: 960,\r\n settings: {\r\n slidesToShow: 3,\r\n slidesToScroll: 3\r\n }\r\n },\r\n {\r\n breakpoint: 640,\r\n settings: {\r\n slidesToShow: 2,\r\n slidesToScroll: 2\r\n }\r\n }\r\n ]\r\n });\r\n $(window).resize(function() {\r\n recommendSlider.slick('resize');\r\n });\r\n\r\n\r\n } // setSlick()\r\n\r\n}\r\n\r\nexport default BeginnerRecommend;\n\n\n// WEBPACK FOOTER //\n// ./_src/js/service/beginner/BeginnerRecommend.js"],"sourceRoot":""}