{"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 ? `
${this.config.comment}
` : '';\n\n return (\n `
\n
\n
\n
\n
\n ${this.config.comment}\n
\n
`\n );\n }\n\n _loadFile(){\n for(let item of this.config.preLoadList) {\n let img = new Image();\n img.onload = this._onSuccess;\n img.onerror = this._onFail;\n img.src = `${this.store.static}${this.config.resourcePath}${item}`;\n }\n }\n\n _updateBar(){\n let draw = () =>{\n if(this.store.progress < this.store.loadingIndex) {\n this.store.progress = this.store.progress + this.config.drawSize;\n\n let progressSize = (this.store.progress / this.store.loadSize * 100) >= 100 ? 100 : this.store.progress / this.store.loadSize * 100;\n\n $('.loader__progress').css({height: progressSize + '%'});\n }\n\n if(this.store.progress >= this.store.loadSize) {\n animationId.stop();\n\n $('.loader').delay(this.config.delay)[this.config.removeType](this.config.removeType === 'fadeOut' ? 300 : 0, function(){\n $(this).remove();\n });\n\n $(document).trigger('preLoaded');\n $(document).trigger('preloadend');\n }\n };\n\n let animationId = new util.animation.animationframe(draw);\n\n animationId.start();\n };\n\n _onSuccess(){\n this.store.loadSuccess = this.store.loadSuccess + 1;\n this.store.loadingIndex = this.store.loadingIndex + 1;\n }\n\n _onFail(){\n this.store.loadFail = this.store.loadFail + 1;\n this.store.loadingIndex = this.store.loadingIndex + 1;\n }\n}\n\nexport default Preloader;"],"names":["AnimationFrame","animate","fps","requestID","now","delta","loop","then","Date","interval","this","requestAnimationFrame","window","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","f","setTimeout","cancelAnimationFrame","mozCancelAnimationFrame","nowBrowser","agent","navigator","userAgent","toLowerCase","trident","match","appName","indexOf","test","nowbrowser","href","location","url","gameName","src","callback","script","document","createElement","setAttribute","readyState","onreadystatechange","onload","getElementsByTagName","appendChild","css","clickTraceStr","_trk_clickTrace","param1","param2","log","str","String","prototype","trim","replace","e","type","originalEvent","detail","wheelDeltaY","wheelDelta","eventTarget","findTarget","target","$","checkName","checkNode","is","parent","diffTime","to","getTime","util","detect","gamename","options","config","store","_onSuccess","bind","_onFail","_init","loadSize","preLoadList","length","static","environment","en","game","isMobile","ismobile","_setTheme","_loadFile","_updateBar","theme","img","Image","append","_this","_themeTemplate","width","height","w","h","loaderStyle","comment","item","onerror","resourcePath","animationId","animation","animationframe","_this2","progress","loadingIndex","drawSize","progressSize","stop","delay","removeType","remove","trigger","start","loadSuccess","loadFail"],"mappings":"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"}