���� JFIF �� � ( %"1"%)+...383,7(-.-
![]() Server : Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.20 System : Linux st2.domain.com 3.10.0-1127.10.1.el7.x86_64 #1 SMP Wed Jun 3 14:28:03 UTC 2020 x86_64 User : apache ( 48) PHP Version : 7.4.20 Disable Function : NONE Directory : /var/www/html/lnovel/layout/novel/js/ |
cdnUrl = 'https://cdn.enovel.mobi'; class ElementCollection extends Array { ready(cb) { const isReady = this.some(e => { return e.readyState != null && e.readyState != "loading" }) if (isReady) { cb() } else { this.on("DOMContentLoaded", cb) } return this } each(cb){ this.forEach(cb); } get(idx){ if(typeof idx == "undefined") return this; return this[idx]; } find(param){ var elms = new ElementCollection(),es,j; for(var i=0;i<this.length;i++){ es = this[i].querySelectorAll(param); for(var j=0;j<es.length;j++){ elms.push(es[j]); } } return elms; } on(event, cbOrSelector, cb) { if (typeof cbOrSelector === "function") { this.forEach(e => e.addEventListener(event, cbOrSelector)) } else { this.forEach(elem => { elem.addEventListener(event, e => { if (e.target.matches(cbOrSelector)){ cb(e); } }) }) } return this; } html(content){ if(typeof content == "undefined") return this[0].innerHTML; this.forEach(elem => {elem.innerHTML = content}); return this; } text(content){ if(typeof content == "undefined") return this[0].innerText; this.forEach(elem => {elem.innerText = content}); return this; } append(content){ this.forEach(elem => {elem.innerHTML += content}); return this; } insertBefore(content){ var div = document.createElement('div'); div.innerHTML = content; this.forEach(function(el){ el.parentNode.insertBefore(div.firstChild,el); }); } next() { return this.map(e => e.nextElementSibling).filter(e => e != null) } prev() { return this.map(e => e.previousElementSibling).filter(e => e != null) } removeClass(className) { this.forEach(e => e.classList.remove(className)) return this } addClass(className) { this.forEach(e => e.classList.add(className)) return this } hasClass(className){ for(var i=0;i<this.length;i++){ if(!this[i].classList.contains(className)) return false; } return true; } attr(attribute,value){ if(typeof value == "undefined") return this[0].getAttribute(attribute); this.forEach(e => e.setAttribute(attribute,value)); return this; } removeAttr(attribute){ this.forEach(e => e.removeAttribute(attribute)); } data(attribute,value){ return this.attr('data-'+attribute,value); } val(value){ if(typeof value== "undefined") return this[0].value; this.forEach(e => e.value=value); return this; } remove(){ this.forEach(e => e.parentNode.removeChild(e)); return this; } css(property, value) { const camelProp = property.replace(/(-[a-z])/, g => { return g.replace("-", "").toUpperCase() }) this.forEach(e => (e.style[camelProp] = value)) return this } height(){ return this[0].offsetHeight; } width(){ return this[0].offsetWidth; } click(){ this.forEach(e => e.click()); } prop(prop){ return this[0][prop]; } parents(selector){ var elms = new ElementCollection(),es,j; if (!Element.prototype.matches) { Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function(s) { var matches = (this.document || this.ownerDocument).querySelectorAll(s), i = matches.length; while (--i >= 0 && matches.item(i) !== this) {} return i > -1; }; } // Set up a parent array var elem; for(var i=0;i<this.length;i++){ elem = this[i]; for ( ; elem && elem !== document; elem = elem.parentNode ) { if (selector) { if (elem.matches(selector)) { elms.push(elem); } continue; } elms.push(elem); } } return elms; } } function $(param) { if (typeof param === "string" || param instanceof String) { return new ElementCollection(...document.querySelectorAll(param)) }else { return new ElementCollection(param) } } callbackLogin = null; userData = false; jwtKey = 'Authorization'; var Main = function(){ var loadDeferreds = function(){ var addStylesNode = document.getElementById("deferred-styles"); var replacement = document.createElement("div"); replacement.innerHTML = addStylesNode.textContent; document.body.appendChild(replacement); addStylesNode.parentElement.removeChild(addStylesNode); }; var genreToggle = function () { if($('#main-nav .toggle-genres').length==0) return; $('#main-nav .toggle-genres').on('click',function(e){ e.preventDefault(); var genreList = this.nextSibling; if(genreList.style.display!='flex') genreList.style.display = 'flex'; else genreList.style.display = 'none'; }); }; var headerUserPanel = function(){ if(document.getElementById('user-panel')==null) return; if(!userData){ document.getElementById('user-panel').innerHTML = '<a href="#" rel="nofollow" class="toggleLogin">'+langs.login_form.login+'</a> | <a href="'+location.origin+'/users/register/" class="toggleRegister" rel="nofollow">'+langs.login_form.register+'</a>'; return; } var html = '<a href="#" class="togglePanel" rel="nofollow"><img src="'+Utils.userAvatar(userData)+'" width="50" height="50"/><label>'+userData.display_name+'</label></a>'; html += '<nav class="user-nav"><ul>'; if(userData.groupID!=3) html += '<li><a href="'+authorUrl+'">'+langs.usernav.author_zone+'</a></li>'; html += '<li><a href="'+location.origin+'/users/information" rel="nofollow">'+langs.usernav.userinfo+'</a></li>' + '<li><a href="'+location.origin+'/users/history" rel="nofollow">'+langs.usernav.history_read+'</a></li>' + '<li><a href="'+location.origin+'/users/nutlog" rel="nofollow">'+langs.usernav.nutlog+'</a></li>' + '<li><a href="'+location.origin+'/users/bookshelf" rel="nofollow">'+langs.usernav.bookshelf+'</a></li>' + '<li><a href="'+location.origin+'/users/notification" rel="nofollow">'+langs.usernav.notification+'</a></li>' + '<li><a href="'+location.origin+'/users/topup" rel="nofollow">'+langs.usernav.topup+'</a></li>' + '<li><a href="'+location.origin+'/users/premium" rel="nofollow">Enovel Premium</a></li>' + '<li><a href="#" rel="nofollow" id="sign-out">'+langs.usernav.signout+'</a></li>'; html += '</ul></nav>'; $('#user-panel').html(html); $('#sign-out').on('click',function(e){ e.preventDefault(); setCookie('Authorization','',-1); document.getElementById('user-panel').innerHTML = '<a href="#" rel="nofollow" class="toggleLogin">'+langs.login_form.login+'</a> | <a href="'+location.origin+'/users/register/" class="toggleRegister" rel="nofollow">'+langs.login_form.register+'</a>'; var script2 = document.createElement('script'); script2.setAttribute('src','https://apis.google.com/js/platform.js?onload=signOut'); document.head.appendChild(script2); events(); if(location.href.match(/\/users\//)) location.href = location.origin; }); $('#user-panel .togglePanel').on('click',function(e){ e.preventDefault(); if($('#user-panel').hasClass('open')){ $('#user-panel').removeClass('open'); }else{ $('#user-panel').addClass('open'); } }); setTimeout(function(){ API.get('/notification',{Prefer:'count_unread'},null,function(data){ var unread = parseInt(data.unread); if(unread==0) return; if(unread>99) unread = '99+'; $('#user-panel .togglePanel,#noti-nav a').append('<span>'+unread+'</span>'); },function (request){ if(request.status==401) setCookie('Authorization','',-1); }); },2000); if(userData && !getCookie('attendance')){ setTimeout(function(){ API.get('/users/profile',{Prefer:'attendance'},null,function(){ setCookie('attendance',1,24); },function(request){ if(request.status==401) setCookie('Authorization','',-1); }); },5000); } } var events = function(){ $(document).on('click','.toggleLogin',function(e){ e.preventDefault(); Main.triggerLogin(callbackLogin); }); }; var searchFormHandler = function(){ var frm = document.getElementById('search-form'); if(!frm) return; frm.addEventListener('submit',function(e){ e.preventDefault(); var action = frm.getAttribute('action'); var key = str2url(document.getElementById('mainSearchInput').value); frm.setAttribute('action', action+key); frm.submit(); }); var bounceTimer = null; $('#mainSearchInput').on('input',function(){ clearTimeout(bounceTimer); if($(this).val().trim().length<3){ $('#search-results').removeClass('open'); return; } bounceTimer = setTimeout(function(){ API.get('/index/search',{},{keyword:$('#mainSearchInput').val()},function(data){ $('#search-results').html('').addClass('open'); if(data.stories.length==0 && data.authors.length==0){ $('#search-results').addClass('empty').html(langs.messages.no_results); } $('#search-results').removeClass('empty'); var html = '',i; if(data.authors.length){ for(i=0;i<data.authors.length;i++){ html += '<a href="'+Utils.authorLink(data.authors[i].authorID)+'" class="search-author-item"><i class="fas fa-user-tie"></i><span>'+langs.author+'</span><h5>'+data.authors[i].name+'</h5></a>'; } } for(i=0;i<data.stories.length;i++){ html += '<a class="search-result-item" href="'+Utils.storyLink(data.stories[i])+'"><h5>' + data.stories[i].title+'</h5><small>'+langs.written_by.replace('%s',data.stories[i].authorName)+'</small><p>'; if(data.stories[i].voted>0) html += '<span class="voted">'+data.stories[i].voted+' '+langs.voted+'</span>'; html += '<span>'+data.stories[i].chapters+' '+langs.chapters+'</span>' + '<span class="badge state'+data.stories[i].state+'">'+langs.state[data.stories[i].state]+'</span></p>'+'</a>'; } $('#search-results').html(html); if(data.total>data.stories.length){ $('#search-results').append('<button type="submit">'+langs.actions.view_other_result.replace('%d',(data.total-data.stories.length))+'</button>'); } }); },1000); }); }; var initUserHeader = function(){ userData = Utils.parseUser(); headerUserPanel(); }; var getParameterByName = function(name, url = window.location.href) { name = name.replace(/[\[\]]/g, '\\$&'); var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); } var trackingUTM = function(){ var source = getParameterByName('utm_source'); var medium = getParameterByName('utm_medium'); var campaign = getParameterByName('utm_campaign'); if(!source || !medium || !campaign) return; setCookie('enovel_utm',JSON.stringify({ source: source,medium:medium,campaign:campaign }),30*24); setCookie('enovel_utm_from',(new Date()).getTime(),30*24); }; var getAffVar = function(key){ if(storageAvailable('localStorage')){ localStorage.setItem('affID',affID); localStorage.setItem('aff_exp',(new Date).getTime()+30*24*3600*1000); }else{ setCookie('affID',affID,30*24); setCookie('aff_exp',(new Date).getTime()+30*24*3600*1000,30*24); } }; var locStorage = function(){ let storageEngine,storage; try { storage = window.localStorage; const x = '__storage_test__'; storage.setItem(x, x); storage.removeItem(x); storageEngine = 'localStorage'; } catch(e) { storageEngine = 'cookie'; } var callbacks = { set_localStorage: function(key,value,exp){ localStorage.setItem(key,value); localStorage.setItem(key+'_exp',(new Date()).getTime() + exp*3600000); }, get_localStorage: function(key){ var value = localStorage.getItem(key); if(!value) return ''; var exp = localStorage.getItem(key+'_exp'); if(!exp || (new Date()).getTime()>parseInt(exp)) return null; return value; }, set_cookie: function(key,value,exp){setCookie(key,value,exp);}, get_cookie: function(key){return getCookie(key)} }; return { set: function(key,value,exp){ callbacks['set_'+storageEngine](key,value,exp); }, get: function(key){ return callbacks['get_'+storageEngine](key); } } }(); var affiliateTracking = function(){ var aff = getParameterByName('aff'); if(aff == null || aff=='') return; aff = aff.split('.'); if(aff.length!==2) return; locStorage.set(aff[0],aff[1],30*24); }; var reportModal = function(){ $(document).on('click','.report-story',function(e){ e.preventDefault(); Main.modal(function(){ var reportForm = '<form id="report-form">' + '<div class="form-group"><label>Link tác phẩm vi phạm</label><input type="text" class="form-control" required name="violate_link" id="violate_link" placeholder="Ex: https://enovel.mobi/tac-pham-vi-pham.1/"></div>' + '<div class="form-group"><label>Link tác phẩm gốc</label><input type="text" class="form-control" required name="original_link" id="original_link" placeholder="Ex: https://enovel.mobi/tac-pham-vi-pham.1/"></div>' + '<div class="form-group"><label>Email liên hệ</label><input type="email" class="form-control" required name="email" id="report_email" placeholder=""></div>' + '<input type="checkbox" name="accept" id="accept-checkbox"><label for="accept-checkbox">'+langs.titles.accept_report+'</label>' + '<button type="submit" name="report" style="display: block;\n' + ' background: var(--primary);\n' + ' color: #fff;\n' + ' border-radius: 4px;\n' + ' text-align: center;\n' + ' padding: 0 10px;\n' + ' border: none;\n' + ' width: 100%;\n' + ' font-size: 15px;\n' + ' margin-bottom: 10px;\n' + ' height: auto;\n' + ' line-height: 40px;">'+langs.actions.send_report+'</button>' + '</form>'; Modal.show('report-modal',langs.titles.report,reportForm,''); $('#report-form').on('submit',function(e){ e.preventDefault(); var data = { violate: $('#violate_link').val(), original: $('#original_link').val(), email: $('#report_email').val() } if(!document.getElementById('accept-checkbox').checked) return; API.post('stories/report',null,data,true,function(data){ Toast.success(langs.messages.report.success); $('#report-modal').remove(); },function(request){ if(typeof langs.messages.report['err_'+request.status]) Toast.error(langs.messages.report['err_'+request.status]) else Toast.error(langs.errors[request.status]); }); }); }); }); }; return { init:function(){ loadDeferreds(); initUserHeader(); events(); searchFormHandler(); if(document.getElementById('main-nav')) genreToggle(); trackingUTM(); affiliateTracking(); reportModal(); }, getUTM: function(){ var utm = getCookie('enovel_utm'); if(!utm) return false; return JSON.parse(utm); }, triggerLogin: function(resolve,reject){ Main.modal(function(){ Modal.login(function(){ $('#login-form').on('submit',function(e){ e.preventDefault(); API.post('/users/login',{},{ username: document.getElementById('login_email').value, password: document.getElementById('login_password').value, remember: document.getElementById('remember-checkbox').checked?1:0 },false,function(data){ setCookie(jwtKey,data.jwt,24*365); if(typeof data.metas != "undefined" && typeof data.metas.colors!="undefined" && data.metas.colors){ var colors = JSON.parse(data.metas.colors); setCookie('primaryColor',colors.primaryColor,365*24); $('#css-color').text(':root {--primary: '+colors.primaryColor+';}') } userData = Utils.parseUser(); headerUserPanel(); if(typeof callbackAfterLogin == 'function') callbackAfterLogin(); $('#login-modal').remove(); if(typeof resolve == 'function') resolve(userData); },function(request){ if(typeof reject=='function') reject(userData); return Toast.error(langs.messages.login[request.status]); }); }); var social_script = document.createElement('script'); social_script.src = cdnUrl+'/assets/v1/js/social_login.js?v=0.0.2'; social_script.onload = function(){ $('#loginfacebook').on('click',function(e){ e.preventDefault(); FB.login(function(login){ if (login.status === 'connected') { FB.api('/me', {fields: 'email,name,gender'},function(response) { var email = typeof response.email == "undefined"?response.id+'@facebook.com':response.email; var gender = typeof response.gender == "undefined"?'':response.gender; API.post('/users/fbLogin',null,{ email: email, name: response.name, gender: gender, id: response.id, remember: document.getElementById('remember-checkbox').checked?1:0, signedRequest: login.authResponse.signedRequest },true,function(data){ setCookie(jwtKey,data.jwt,365*24); if(typeof data.metas != "undefined" && typeof data.metas.colors!="undefined" && data.metas.colors){ var colors = JSON.parse(data.metas.colors); setCookie('primaryColor',colors.primaryColor,365*24); $('#css-color').text(':root {--primary: '+colors.primaryColor+';}') } userData = Utils.parseUser(); headerUserPanel(); if(typeof data.new != "undefined" && data.new && typeof gtag == 'function'){ gtag('event', 'register', {'send_to': 'AW-761386166/URAhCKrkyaQDELaph-sC'}); } if(typeof callbackAfterLogin == 'function') callbackAfterLogin(); $('#login-modal').remove(); if(typeof resolve == 'function') resolve(userData); },function(request){ if(typeof reject=='function') reject(userData); return Toast.error(langs.messages.login[request.status]); }); }); } }, {scope: 'public_profile,email'}); }); }; document.head.appendChild(social_script); var google_script = document.createElement('script'); google_script.src = 'https://apis.google.com/js/api:client.js'; google_script.onload = function(){ gapi.load('auth2', function(){ auth2 = gapi.auth2.init({ client_id: '655828021771-sndqepgk2dkoehf3lnveb1vj2cbir1g7.apps.googleusercontent.com', cookiepolicy: 'single_host_origin' }); auth2.attachClickHandler(document.getElementById('loginGoogle'), {}, function(googleUser) { API.post('/users/ggLogin',{},{code:googleUser.getAuthResponse().id_token,remember: document.getElementById('remember-checkbox').checked?1:0},true,function(data){ setCookie(jwtKey,data.jwt,365*24); if(typeof data.metas != "undefined" && typeof data.metas.colors!="undefined" && data.metas.colors){ var colors = JSON.parse(data.metas.colors); setCookie('primaryColor',colors.primaryColor,365*24); $('#css-color').text(':root {--primary: '+colors.primaryColor+';}') } userData = Utils.parseUser(); headerUserPanel(); if(typeof data.new != "undefined" && data.new && typeof gtag == 'function'){ gtag('event', 'register', {'send_to': 'AW-761386166/URAhCKrkyaQDELaph-sC'}); } if(typeof callbackAfterLogin == 'function') callbackAfterLogin(); $('#login-modal').remove(); if(typeof resolve == 'function') resolve(userData); },function(request){ return Toast.error(langs.messages.login[request.status]); }); }, function(error) { if(typeof reject=='function') reject(userData); alert(JSON.stringify(error, undefined, 2)); }); }); }; document.head.appendChild(google_script); }); }); }, publicheaderUserPanel: function(){headerUserPanel()}, colorPicker: function(){ Main.modal(function(){ var primaryColor = getCookie('primaryColor'); if(!primaryColor) primaryColor = '#bf2c24'; Modal.show('colorPicker','Color Picker','<p style="margin-bottom: 10px;">Nhập mã màu (HEX) hoặc click chọn màu ở ô bên cạnh</p><input type="text" value="'+primaryColor+'" id="primary-color-input" style="width: 80px;"/> <input type="color" id="primary-color" name="primary-color" value="'+primaryColor+'">' + '','<button type="button" class="button button-primary" id="apply_color">Áp Dụng</button>'); $(document).on('click','#apply_color',function(e){ setCookie('primaryColor',$('#primary-color-input').val(),365*24); $('#colorPicker').css('display','none'); $('#css-color').text(':root {--primary: '+$('#primary-color-input').val()+';}') if(Main.isSignedIn()){ API.put('users/profile',null,{colors:{primaryColor:$('#primary-color-input').val()}},true,function (data){}); } }); document.getElementById('primary-color').addEventListener('input',function(){ $('#primary-color-input').val(this.value); }); }); }, modal: function(cb){ if($('#modal-script').length==0){ var modal_script = document.createElement('script'); modal_script.src = cdnUrl+'/assets/v1/js/modal.js?v=0.0.2'; modal_script.onload = cb; document.head.appendChild(modal_script); }else{ cb(); } }, isSignedIn: function(){ if(userData==false) return false; return true; }, Storage: locStorage } }(); document.addEventListener('DOMContentLoaded', function() { Main.init(); }); //genres = JSON.parse('{"1":{"name":"Huy\u1ec1n Huy\u1ec5n","slug":"huyen-huyen"},"2":{"name":"Ti\u00ean Hi\u1ec7p","slug":"tien-hiep"},"3":{"name":"H\u1ec7 Th\u1ed1ng","slug":"he-thong"},"4":{"name":"Ng\u00f4n T\u00ecnh","slug":"ngon-tinh"},"5":{"name":"Xuy\u00ean Kh\u00f4ng","slug":"xuyen-khong"},"6":{"name":"D\u1ecb N\u0103ng","slug":"di-nang"},"7":{"name":"\u0110am M\u1ef9","slug":"dam-my"},"8":{"name":"B\u00e1ch H\u1ee3p","slug":"bach-hop"},"9":{"name":"V\u00f5ng Du","slug":"vong-du"},"10":{"name":"Ki\u1ebfm Hi\u1ec7p","slug":"kiem-hiep"},"11":{"name":"\u0110\u00f4 Th\u1ecb","slug":"do-thi"},"12":{"name":"LGBT+","slug":"truyen-lgbt"},"13":{"name":"Truy\u1ec7n FanFic","slug":"truyen-fanfic"},"14":{"name":"N\u1eef Ph\u1ee5","slug":"nu-phu"},"15":{"name":"Phi\u00eau L\u01b0u","slug":"phieu-luu"},"16":{"name":"V\u00f5 Thu\u1eadt","slug":"vo-thuat"},"17":{"name":"Ti\u1ec3u Thuy\u1ebft","slug":"tieu-thuyet"},"18":{"name":"H\u00e0i H\u01b0\u1edbc","slug":"hai-huoc"},"19":{"name":" Truy\u1ec7n Teen","slug":"truyen-teen"},"20":{"name":" Truy\u1ec7n Ng\u1eafn","slug":"truyen-ngan"},"21":{"name":" Truy\u1ec7n Ma","slug":"truyen-ma"},"22":{"name":"\u0110o\u1ea3n V\u0103n","slug":"doan-van"},"23":{"name":"\u0110i\u1ec1n V\u0103n","slug":"dien-van"},"24":{"name":"Cung \u0110\u1ea5u","slug":"cung-dau"},"25":{"name":"C\u1ea1nh K\u1ef9","slug":"canh-ky"},"26":{"name":"Hi\u1ec7n \u0110\u1ea1i","slug":"hien-dai"},"27":{"name":"Light Novel","slug":"light-novel"},"28":{"name":"Huy\u1ec1n B\u00ed","slug":"huyen-bi"},"29":{"name":"Linh D\u1ecb","slug":"linh-di"},"30":{"name":"M\u1ea1t Th\u1ebf","slug":"mat-the"},"31":{"name":"Khoa Huy\u1ec5n","slug":"khoa-huyen"},"32":{"name":"Tu Ch\u00e2n","slug":"tu-chan"},"33":{"name":"Tr\u1ecdng Sinh","slug":"trong-sinh"},"34":{"name":"Huy\u1ec1n \u1ea2o","slug":"huyen-ao"},"35":{"name":"C\u1ed5 \u0110\u1ea1i","slug":"co-dai"},"36":{"name":"\u0110\u00f4ng Ph\u01b0\u01a1ng","slug":"dong-phuong"},"37":{"name":"Quan Tr\u01b0\u1eddng","slug":"quan-truong"},"38":{"name":"K\u1ef3 Huy\u1ec5n","slug":"ky-huyen"},"39":{"name":"Truy\u1ec7n Ng\u01b0\u1ee3c","slug":"truyen-nguoc"},"40":{"name":"B\u00ecnh \u0110\u1ea1m","slug":"binh-dam"},"41":{"name":"D\u1ecb Gi\u1edbi","slug":"di-gioi"},"42":{"name":"L\u1ecbch S\u1eed","slug":"lich-su"},"43":{"name":"Ma Ph\u00e1p","slug":"ma-phap"},"44":{"name":"Trinh Th\u00e1m","slug":"trinh-tham"},"45":{"name":"Th\u01b0\u01a1ng Nghi\u1ec7p","slug":"thuong-nghiep"},"46":{"name":"Th\u00e1m Hi\u1ec3m","slug":"tham-hiem"},"47":{"name":"Truy\u1ec7n S\u1ee7ng","slug":"truyen-sung"},"48":{"name":"N\u1eef Hi\u1ec7p","slug":"nu-hiep"},"49":{"name":"Qu\u00e2n S\u1ef1","slug":"quan-su"},"50":{"name":"N\u1eef C\u01b0\u1eddng","slug":"nu-cuong"},"51":{"name":"T\u00ecnh C\u1ea3m","slug":"tinh-cam"},"52":{"name":"\u1ea8m Th\u1ef1c","slug":"am-thuc"},"53":{"name":"Th\u1ec3 Thao","slug":"the-thao"},"54":{"name":"T\u1ed5ng h\u1ee3p","slug":"tong-hop"},"55":{"name":"Gia \u0110\u1ea5u","slug":"gia-dau"},"56":{"name":"Kinh D\u1ecb","slug":"kinh-di"},"57":{"name":"T\u1ea3n V\u0103n","slug":"tan-van"},"58":{"name":"H\u1ecdc \u0110\u01b0\u1eddng","slug":"hoc-duong"},"60":{"name":"\u0110\u1ed3ng Nh\u00e2n","slug":"dong-nhan"},"61":{"name":"H\u00e0nh \u0110\u1ed9ng","slug":"hanh-dong"},"62":{"name":"Thi\u1ebfu Nhi","slug":"thieu-nhi"},"63":{"name":"D\u00e3 S\u1eed","slug":"da-su"},"64":{"name":"Xuy\u00ean Nhanh","slug":"xuyen-nhanh"},"65":{"name":"Th\u00fa Nh\u00e2n","slug":"thu-nhan"},"66":{"name":"Song T\u00ednh","slug":"song-tinh"},"67":{"name":"Showbiz","slug":"showbiz"},"68":{"name":"Zombie","slug":"zombie"},"69":{"name":"Tr\u00f2 Ch\u01a1i","slug":"cho-choi"}}'); function getCookie(cname) { var name = cname + "="; var decodedCookie = document.cookie; var ca = decodedCookie.split(';'); for(var i = 0; i <ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function setCookie(cname, cvalue, exhours) { var d = new Date(); d.setTime(d.getTime() + (exhours*60*60*1000)); var expires = "expires="+ d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } function str2url(str){ if(str!="") { str= str.toLowerCase(); str= str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g,"a"); str= str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g,"e"); str= str.replace(/ì|í|ị|ỉ|ĩ/g,"i"); str= str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g,"o"); str= str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g,"u"); str= str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g,"y"); str= str.replace(/đ/g,"d"); str= str.replace(/!|@|%|\^|\*|\(|\)|\+|\=|\<|\>|\?|\/|,|\.|\:|\;|\'| |\"|\&|\#|\[|\]|\“|\”|~|$|_/g,"-"); str= str.replace(/-+-/g,"-"); str= str.replace(/^\-+|\-+$/g,""); str = str.replace('/^[a-z0-9\-]/',''); return str; } } function signOut() { gapi.load('auth2', function() { gapi.auth2.init().then(function(){ var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { }); }); }); } var Toast = function(){ var show = function(message,title,type,option){ if(typeof type == 'undefined') type = 'error'; var elm = document.createElement('div'); elm.className = 'toast'; var html = '<div class="message '+type+'">'; if(typeof option !="undefined" && typeof option.icon != "undefined") html += '<span class="icon" style="background-image:url('+option.icon+')"></span>'; html += '<span class="title">'+title+'</span><p>'+message+'</p>'; if(typeof option != "undefined" && typeof option.close_style != "undefined") html += '<button class="close" type="button" style="'+option.close_style+'">'+langs.actions.close+'</a>'; else html += '<button class="close" type="button">'+langs.actions.close+'</a>'; html += '</div>'; elm.innerHTML = html; document.body.appendChild(elm); elm.getElementsByClassName('close')[0].addEventListener('click',function(e){ e.preventDefault(); document.body.removeChild(this.parentNode.parentNode); }); }; return { error: function(message){show(message,langs.labels.error,'error');}, success: function(message){show(message,langs.labels.success,'success');}, alert: function(message){show(message,langs.labels.alert,'default');}, custom: function(message,option){show(message,option.title,'custom',option)} } }(); function initImageLazy(){ if(typeof isSuportWebp == "undefined"){ var elem = document.createElement('canvas'); isSuportWebp = elem.toDataURL('image/webp').indexOf('data:image/webp') == 0; } var lazyImages = [].slice.call(document.querySelectorAll("img[data-layzr]")); if ("IntersectionObserver" in window) { var lazyImageObserver = new IntersectionObserver(function(entries, observer) { entries.forEach(function(entry) { if (entry.isIntersecting) { var lazyImage = entry.target; var src = lazyImage.getAttribute('data-layzr'); var ext = src.split('.');ext = ext[ext.length-1]; ext = ext.split('?')[0]; if(ext=='webp' && !isSuportWebp) src = src.replace('.webp','.jpg'); lazyImage.src = src; lazyImageObserver.unobserve(lazyImage); } }); }); lazyImages.forEach(function(lazyImage) { lazyImageObserver.observe(lazyImage); }); } else { var active = false; var lazyLoad_fnc = function() { if (active === false) { active = true; setTimeout(function() { lazyImages.forEach(function(lazyImage) { if ((lazyImage.getBoundingClientRect().top <= window.innerHeight && lazyImage.getBoundingClientRect().bottom >= 0) && getComputedStyle(lazyImage).display !== "none") { var src = lazyImage.getAttribute('data-layzr'); var ext = src.split('.');ext = ext[ext.length-1]; ext = ext.split('?')[0]; if(ext=='webp' && !isSuportWebp) src = src.replace('.webp','.jpg'); lazyImage.src = src; lazyImages = lazyImages.filter(function(image) { return image !== lazyImage; }); if (lazyImages.length === 0) { document.removeEventListener("scroll", lazyLoad_fnc,{passive: true}); window.removeEventListener("resize", lazyLoad_fnc); window.removeEventListener("orientationchange", lazyLoad_fnc); } } }); active = false; }, 200); } }; document.addEventListener("scroll", lazyLoad_fnc,{passive: true}); window.addEventListener("resize", lazyLoad_fnc); window.addEventListener("orientationchange", lazyLoad_fnc); lazyLoad_fnc(); } } initImageLazy(); if ('serviceWorker' in navigator) { window.addEventListener('load', function() { var sw = location.origin+'/sw.js'; navigator.serviceWorker.register(sw).then(function(reg) { swRegistration = reg; reg.onupdatefound = function() { var installingWorker = reg.installing; installingWorker.onstatechange = function() { switch (installingWorker.state) { case 'installed': if (navigator.serviceWorker.controller) { console.log('New or updated content is available.'); } else { console.log('Content is now available offline!'); } break; case 'redundant': console.error('The installing service worker became redundant.'); break; } }; }; }).catch(function(e) { console.error('Error during service worker registration:', e); }); }); }