{"version":3,"file":"preloader.js","sources":["../node_modules/promokit-util/_src/animationfame.js","../node_modules/promokit-util/_src/animation.js","../node_modules/promokit-util/_src/nowbrowser.js","../node_modules/promokit-util/_src/ismobile.js","../node_modules/promokit-util/_src/vendorprefix.js","../node_modules/promokit-util/_src/environment.js","../node_modules/promokit-util/_src/gamename.js","../node_modules/promokit-util/_src/loadjs.js","../node_modules/promokit-util/_src/loadcss.js","../node_modules/promokit-util/_src/trace.js","../node_modules/promokit-util/_src/trim.js","../node_modules/promokit-util/_src/removespace.js","../node_modules/promokit-util/_src/getwheeldirection.js","../node_modules/promokit-util/_src/getDelegateTarget.js","../node_modules/promokit-util/_src/ispreventtime.js","../_src/js/preloader.js"],"sourcesContent":["class AnimationFrame {\n constructor(animate, fps = 60){\n this.requestID = 0;\n this.fps = fps;\n this.animate = animate;\n }\n\n start(){\n let now;\n let delta;\n let loop;\n let then = Date.now();\n\n const interval = 1000 / this.fps;\n\n if(this.fps < 60) {\n loop = () =>{\n this.requestID = requestAnimationFrame(loop);\n now = Date.now();\n delta = now - then;\n if(delta > interval) {\n then = now - (delta % interval);\n this.animate();\n }\n };\n } else {\n loop = () =>{\n this.requestID = requestAnimationFrame(loop);\n this.animate();\n };\n }\n\n this.requestID = requestAnimationFrame(loop);\n }\n\n stop(){\n cancelAnimationFrame(this.requestID);\n }\n}\n\nexport default AnimationFrame;","import animationframe from './animationfame';\n\nwindow.requestAnimationFrame = window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || window.msRequestAnimationFrame\n || function(f){\n return setTimeout(f, 1000 / 60)\n };\n\nwindow.cancelAnimationFrame = window.cancelAnimationFrame\n || window.mozCancelAnimationFrame\n || function(requestID){\n clearTimeout(requestID)\n };\n\nexport default {\n animationframe\n}","/**\n * 현재 브라우저 종류 체크\n * @param agent(navigator.userAgent)\n * @returns {*}\n */\nconst nowBrowser = (agent = navigator.userAgent.toLowerCase()) =>{\n const trident = agent.match(/trident\\/(\\d.\\d)/i);\n\n if(trident !== null) {\n if(trident[1] === \"7.0\") return \"IE\" + 11;\n if(trident[1] === \"6.0\") return \"IE\" + 10;\n if(trident[1] === \"5.0\") return \"IE\" + 9;\n if(trident[1] === \"4.0\") return \"IE\" + 8;\n }\n\n if(navigator.appName === 'Microsoft Internet Explorer') return \"IE\" + 7;\n\n if(agent.indexOf(\"edge\") !== -1) return 'Edge';\n if(agent.indexOf(\"chrome\") !== -1) return 'Chrome';\n if(agent.indexOf(\"opera\") !== -1) return 'Opera';\n if(agent.indexOf(\"firefox\") !== -1) return 'Firefox';\n if(agent.indexOf(\"safari\") !== -1) return 'Safari';\n};\n\nexport default nowBrowser;","/**\n * 모바일 브라우저 인지 체크\n * @param agent\n * @returns {boolean}\n */\nconst isMobile = (agent = navigator.userAgent.toLowerCase()) =>{\n return /(android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini)/i.test(agent);\n};\n\nexport default isMobile;","import nowbrowser from './nowbrowser';\n\n/**\n * vendor prefix 설정\n * @param now\n * @returns {*}\n */\nconst vendorPrefix = (now = nowbrowser()) =>{\n const prefix = {\n IE11: '-ms-',\n IE10: '-ms-',\n IE9: '-ms-',\n Chrome: '-webkit-',\n Opera: '-o-',\n Firefox: '-moz-',\n Safari: '-webkit-',\n };\n\n return prefix[now];\n};\n\nexport default vendorPrefix;","/**\n * get environment\n * @param href\n * @returns {*}\n */\nconst environment = (href = location.href) =>{\n let here;\n\n if(/rc\\./i.test(href) || /rc-/i.test(href)) {\n here = 'rc';\n }\n else if(/local|localhost|opdev|ui-static|file:/i.test(href)) {\n here = 'local';\n }\n else {\n here = 'live';\n }\n\n return here;\n};\n\nexport default environment;","/**\n * get game name\n * @param url\n * @returns {*}\n */\nconst getGameName = (url = location.href) =>{\n let gameName = '';\n\n if(/aion\\.plaync\\.com/.test(url)) {\n gameName = {\n 'en': 'aion',\n 'ko': '아이온'\n };\n }\n\n if(/lineage\\.plaync\\.com/.test(url)) {\n gameName = {\n 'en': 'lineage',\n 'ko': '리니지'\n };\n }\n\n if(/lineage2\\.plaync\\.com/.test(url)) {\n gameName = {\n 'en': 'lineage2',\n 'ko': '리니지2'\n };\n }\n\n if(/lineage2\\.plaync\\.com\\/classic/.test(url) || /lineage2\\.plaync\\.com\\/promo\\/lineage2classic/.test(url)) {\n gameName = {\n 'en': 'lineage2classic',\n 'ko': '리니지2클래식'\n };\n }\n\n if(/bns\\.plaync\\.com/.test(url)) {\n gameName = {\n 'en': 'bns',\n 'ko': '블소'\n };\n }\n\n return gameName;\n};\n\nexport default getGameName;","const loadJs = (src, callback) =>{\n const script = document.createElement('script');\n\n script.setAttribute('src', src);\n\n if(script.readyState) {\n script.onreadystatechange = function(){\n if(script.readyState === \"loaded\" || script.readyState === \"complete\") {\n script.onreadystatechange = null;\n callback && callback();\n }\n }\n } else {\n script.onload = function(){\n callback && callback();\n };\n }\n\n document.getElementsByTagName('head')[0].appendChild(script);\n\n return false;\n};\n\nexport default loadJs;","const loadCss = (src, callback) =>{\n const css = document.createElement('link');\n\n css.setAttribute('rel', 'stylesheet');\n css.setAttribute('href', src);\n\n\n if(css.readyState) {\n css.onreadystatechange = function(){\n if(css.readyState === \"loaded\" || css.readyState === \"complete\") {\n css.onreadystatechange = null;\n callback && callback();\n }\n }\n } else {\n css.onload = function(){\n callback && callback();\n };\n }\n\n document.getElementsByTagName('head')[0].appendChild(css);\n};\n\nexport default loadCss;","/**\n * trk click Trace logger\n * @param clickTraceStr\n */\nconst trace = (clickTraceStr) =>{\n if(typeof _trk_clickTrace !== 'function') {\n window._trk_clickTrace = function(param1, param2){\n console.log(`_trk_clickTrace('${param1}','${param2}')`);\n };\n }\n\n _trk_clickTrace('EVT', clickTraceStr);\n};\n\nexport default trace;","/**\n * 문자 앞 뒤 공백 제거\n * @param str\n * @returns {string|XML}\n */\nconst trim = (str) =>{\n if(String.prototype.trim) {\n return str.trim();\n }\n\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n};\n\nexport default trim;","/**\n * 공백 제거\n * @param str\n * @returns {*|void|string|XML}\n */\n\nconst removeSpace = (str) =>{\n return str.replace(/\\s/gi, '');\n};\n\nexport default removeSpace;","/**\n * 마우스휠 이벤트 방향 감지\n *\n * @param e - mouse wheel event(mousewheel DOMMouseScroll)\n * @returns {number} - Return direction(up: -1 , down: 1)\n * @example\n *\n * $(window).on('mousewheel DOMMouseScroll', function(e){\n * getWheelDirection(e)\n * });\n *\n */\n\nconst getWheelDirection = (e) =>{\n if(e.type === \"DOMMouseScroll\") return e.originalEvent.detail > 0 ? 1 : -1;\n if(e.originalEvent.wheelDeltaY) return e.originalEvent.wheelDeltaY > 0 ? -1 : 1;\n return e.originalEvent.wheelDelta > 0 ? -1 : 1;\n};\n\nexport default getWheelDirection;","const getDelegateTarget = (eventTarget, findTarget) =>{\n let target = $(eventTarget);\n\n const checkName = (checkNode) =>{\n if(!checkNode.is(findTarget)) {\n checkName(checkNode.parent());\n } else {\n target = checkNode;\n }\n };\n\n checkName(target);\n\n return target;\n};\n\nexport default getDelegateTarget;","/**\n * 일정시간 동안 false를 반환\n *\n * @param diffTime - 기준시간\n * @param to - true를 얻기 위한 기준시간 부터 경과 시간(1/1000 s)\n * @returns {boolean}\n */\nconst isPreventTime = (diffTime, to = 1500) =>{\n return (new Date().getTime() - diffTime) < to;\n};\n\nexport default isPreventTime;","import util from 'promokit-util';\n\nconst gameName = util.detect.gamename();\n\nclass Preloader {\n constructor(options){\n this.config = {\n ...{\n 'drawSize': 1,\n 'resourcePath': '',\n 'theme': [],\n 'preLoadList': [],\n 'comment': '본 페이지는 Chrome/IE10 이상의 1920 x 1080 해상도에 최적화되어 있습니다.',\n 'removeType': 'fadeOut',\n 'delay': 0,\n 'game': false\n }, ...options\n };\n\n this.store = {\n loadingIndex: 0,\n loadFail: 0,\n loadSuccess: 0,\n progress: 0,\n href: '',\n static: '',\n loadSize: '',\n game: '',\n width: 0,\n height: 0,\n isMobile: false,\n animationFrame: false,\n theme: null\n };\n\n this._onSuccess = this._onSuccess.bind(this);\n this._onFail = this._onFail.bind(this);\n this._init();\n }\n\n _init(){\n this.store.href = location.href;\n this.store.loadSize = this.config.preLoadList.length;\n this.store.static = '';\n\n switch(util.detect.environment()) {\n case 'live':\n if(gameName.en === 'lineage') {\n this.store.static = 'https://wstatic.plaync.co.kr';\n } else {\n this.store.static = 'http://static.plaync.co.kr';\n }\n\n break;\n\n case 'rc':\n if(gameName.en === 'lineage') {\n this.store.static = 'https://rc-wstatic.plaync.co.kr';\n } else {\n this.store.static = 'http://rc.static.plaync.co.kr';\n }\n\n break;\n\n case 'local':\n this.store.static = 'http://ui-static.korea.ncsoft.corp';\n break;\n }\n\n this.store.game = this.config.game || gameName.en;\n this.store.isMobile = util.detect.ismobile();\n this._setTheme();\n this._loadFile();\n this._updateBar();\n }\n\n _setTheme(){\n this.store.theme = {\n \"aion\": [`${this.store.static}/uikit/preloader/v1.0/loader_aion_off.png`, `${this.store.static}/uikit/preloader/v1.0/loader_aion_on.png`, \"#020811\"],\n \"lineage\": [`${this.store.static}/uikit/preloader/v1.0/loader_lineage_off.png`, `${this.store.static}/uikit/preloader/v1.0/loader_lineage_on.png`, \"#020811\"],\n \"lineage2\": [`${this.store.static}/uikit/preloader/v1.0/loader_lineage2_off.png`, `${this.store.static}/uikit/preloader/v1.0/loader_lineage2_on.png`, \"#020811\"],\n \"lineage2classic\": [`${this.store.static}/uikit/preloader/v1.0/loader_lineage2classic_off.png`, `${this.store.static}/uikit/preloader/v1.0/loader_lineage2classic_on.png`, \"#020811\"],\n \"bns\": [`${this.store.static}/uikit/preloader/v1.0/loader_bns_off.png`, `${this.store.static}/uikit/preloader/v1.0/loader_bns_on.png`, \"#020811\"],\n };\n\n this.store.theme = [\n this.config.theme[0] ? `${this.store.static}${this.config.theme[0]}` : this.store.theme[this.store.game][0],\n this.config.theme[1] ? `${this.store.static}${this.config.theme[1]}` : this.store.theme[this.store.game][1],\n this.config.theme[2] || this.store.theme[this.store.game][2]\n ];\n\n let img = new Image();\n\n img.onload = (e) =>{\n $('body').append(this._themeTemplate(this.store.isMobile ? e.target.width / 2 : e.target.width, this.store.isMobile ? e.target.height / 2 : e.target.height));\n };\n\n img.src = this.store.theme[0];\n }\n\n _themeTemplate(w, h){\n let loaderStyle = {\n loader: `background:${this.store.theme[2]}; position:fixed; top:0; bottom:0; left:0; right:0; z-index:10000;`,\n con: `position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); text-align:center;`,\n bar: `background:url(${this.store.theme[0]}) 50% 100% no-repeat; width:${w}px; height:${h}px; background-size:cover; position:relative; display:inline-block;`,\n progress: `background:url(${this.store.theme[1]}) 50% 100% no-repeat;background-size:cover; position:absolute; left:0; bottom:0; width:100%; height:0;`\n };\n\n this.config.comment = this.config.comment && !this.store.isMobile ? `