Files

601 lines
270 KiB
JavaScript
Raw Permalink Normal View History

2023-10-10 14:48:42 +07:00
/*! jQuery v2.2.4 | (c) jQuery Foundation | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"
}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=N.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function W(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&T.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var X=/^(?:checkbox|radio)$/i,Y=/<([\w:-]+)/,Z=/^$|\/(?:java|ecma)script/i,$={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push
void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):cb.test(a.nodeName)||db.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var eb=/[\t\r\n\f]/g;function fb(a){return a.getAttribute&&a.getAttribute("class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,fb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=fb(c),d=1===c.nodeType&&(" "+e+" ").replace(eb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,fb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=fb(c),d=1===c.nodeType&&(" "+e+" ").replace(eb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,fb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=fb(this),b&&N.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":N.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+fb(c)+" ").replace(eb," ").indexOf(b)>-1)return!0;return!1}});var gb=/\r/g,hb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(gb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(hb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(n.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var ib=/^(?:focusinfocus|focusoutblur)$/;n.extend(n.event,{trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!ib.test(q+n.event.triggered)&&(q.inde
/**
* Swiper 10.2.0
* Most modern mobile touch slider and framework with hardware accelerated transitions
* https://swiperjs.com
*
* Copyright 2014-2023 Vladimir Kharlampidi
*
* Released under the MIT License
*
* Released on: August 17, 2023
*/
var Swiper = function () { "use strict"; function e(e) { return null !== e && "object" == typeof e && "constructor" in e && e.constructor === Object } function t(s, a) { void 0 === s && (s = {}), void 0 === a && (a = {}), Object.keys(a).forEach((i => { void 0 === s[i] ? s[i] = a[i] : e(a[i]) && e(s[i]) && Object.keys(a[i]).length > 0 && t(s[i], a[i]) })) } const s = { body: {}, addEventListener() { }, removeEventListener() { }, activeElement: { blur() { }, nodeName: "" }, querySelector: () => null, querySelectorAll: () => [], getElementById: () => null, createEvent: () => ({ initEvent() { } }), createElement: () => ({ children: [], childNodes: [], style: {}, setAttribute() { }, getElementsByTagName: () => [] }), createElementNS: () => ({}), importNode: () => null, location: { hash: "", host: "", hostname: "", href: "", origin: "", pathname: "", protocol: "", search: "" } }; function a() { const e = "undefined" != typeof document ? document : {}; return t(e, s), e } const i = { document: s, navigator: { userAgent: "" }, location: { hash: "", host: "", hostname: "", href: "", origin: "", pathname: "", protocol: "", search: "" }, history: { replaceState() { }, pushState() { }, go() { }, back() { } }, CustomEvent: function () { return this }, addEventListener() { }, removeEventListener() { }, getComputedStyle: () => ({ getPropertyValue: () => "" }), Image() { }, Date() { }, screen: {}, setTimeout() { }, clearTimeout() { }, matchMedia: () => ({}), requestAnimationFrame: e => "undefined" == typeof setTimeout ? (e(), null) : setTimeout(e, 0), cancelAnimationFrame(e) { "undefined" != typeof setTimeout && clearTimeout(e) } }; function r() { const e = "undefined" != typeof window ? window : {}; return t(e, i), e } function n(e, t) { return void 0 === t && (t = 0), setTimeout(e, t) } function l() { return Date.now() } function o(e, t) { void 0 === t && (t = "x"); const s = r(); let a, i, n; const l = function (e) { const t = r(); let s; return t.getComputedStyle && (s = t.getComputedStyle(e, null)), !s && e.currentStyle && (s = e.currentStyle), s || (s = e.style), s }(e); return s.WebKitCSSMatrix ? (i = l.transform || l.webkitTransform, i.split(",").length > 6 && (i = i.split(", ").map((e => e.replace(",", "."))).join(", ")), n = new s.WebKitCSSMatrix("none" === i ? "" : i)) : (n = l.MozTransform || l.OTransform || l.MsTransform || l.msTransform || l.transform || l.getPropertyValue("transform").replace("translate(", "matrix(1, 0, 0, 1,"), a = n.toString().split(",")), "x" === t && (i = s.WebKitCSSMatrix ? n.m41 : 16 === a.length ? parseFloat(a[12]) : parseFloat(a[4])), "y" === t && (i = s.WebKitCSSMatrix ? n.m42 : 16 === a.length ? parseFloat(a[13]) : parseFloat(a[5])), i || 0 } function d(e) { return "object" == typeof e && null !== e && e.constructor && "Object" === Object.prototype.toString.call(e).slice(8, -1) } function c() { const e = Object(arguments.length <= 0 ? void 0 : arguments[0]), t = ["__proto__", "constructor", "prototype"]; for (let a = 1; a < arguments.length; a += 1) { const i = a < 0 || arguments.length <= a ? void 0 : arguments[a]; if (null != i && (s = i, !("undefined" != typeof window && void 0 !== window.HTMLElement ? s instanceof HTMLElement : s && (1 === s.nodeType || 11 === s.nodeType)))) { const s = Object.keys(Object(i)).filter((e => t.indexOf(e) < 0)); for (let t = 0, a = s.length; t < a; t += 1) { const a = s[t], r = Object.getOwnPropertyDescriptor(i, a); void 0 !== r && r.enumerable && (d(e[a]) && d(i[a]) ? i[a].__swiper__ ? e[a] = i[a] : c(e[a], i[a]) : !d(e[a]) && d(i[a]) ? (e[a] = {}, i[a].__swiper__ ? e[a] = i[a] : c(e[a], i[a])) : e[a] = i[a]) } } } var s; return e } function p(e, t, s) { e.style.setProperty(t, s) } function u(e) { let { swiper: t, targetPosition: s, side: a } = e; const i = r(), n = -t.translate; let l, o = null; const d = t.params.speed; t.wrapperEl.style.scrollSnapType = "none", i.cancelAnimationFrame(t.cssModeFrameID); const c = s > n ? "next" : "prev", p = (e, t) => "next" === c && e >= t || "prev" === c && e <= t, u = () => { l = (new Date).getTime(), null === o && (o = l
//# sourceMappingURL=swiper-bundle.min.js.map
/**
* LAZY LOADING
*/
function _extends() { return (_extends = Object.assign || function (t) { for (var e = 1; e < arguments.length; e++) { var n = arguments[e]; for (var o in n) Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]) } return t }).apply(this, arguments) } function _typeof(t) { return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) { return typeof t } : function (t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t })(t) } !function (t, e) { "object" === ("undefined" == typeof exports ? "undefined" : _typeof(exports)) && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : t.LazyLoad = e() }(this, function () { "use strict"; var t = "undefined" != typeof window, e = t && !("onscroll" in window) || "undefined" != typeof navigator && /(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent), n = t && "IntersectionObserver" in window, o = t && "classList" in document.createElement("p"), r = { elements_selector: "img", container: e || t ? document : null, threshold: 300, thresholds: null, data_src: "src", data_srcset: "srcset", data_sizes: "sizes", data_bg: "bg", class_loading: "loading", class_loaded: "loaded", class_error: "error", load_delay: 0, auto_unobserve: !0, callback_enter: null, callback_exit: null, callback_reveal: null, callback_loaded: null, callback_error: null, callback_finish: null }, a = function (t, e) { return t.getAttribute("data-" + e) }, s = function (t, e, n) { var o = "data-" + e; null !== n ? t.setAttribute(o, n) : t.removeAttribute(o) }, i = function (t) { return "true" === a(t, "was-processed") }, c = function (t, e) { return s(t, "ll-timeout", e) }, l = function (t) { return a(t, "ll-timeout") }, u = function (t, e) { var n, o = new t(e); try { n = new CustomEvent("LazyLoad::Initialized", { detail: { instance: o } }) } catch (t) { (n = document.createEvent("CustomEvent")).initCustomEvent("LazyLoad::Initialized", !1, !1, { instance: o }) } window.dispatchEvent(n) }; var d = function (t, e) { t && t(e) }, f = function (t, e) { t._loadingCount += e, 0 === t._elements.length && 0 === t._loadingCount && d(t._settings.callback_finish) }, _ = function (t) { for (var e, n = [], o = 0; e = t.children[o]; o += 1)"SOURCE" === e.tagName && n.push(e); return n }, v = function (t, e, n) { n && t.setAttribute(e, n) }, b = function (t, e) { v(t, "sizes", a(t, e.data_sizes)), v(t, "srcset", a(t, e.data_srcset)), v(t, "src", a(t, e.data_src)) }, g = { IMG: function (t, e) { var n = t.parentNode; n && "PICTURE" === n.tagName && _(n).forEach(function (t) { b(t, e) }); b(t, e) }, IFRAME: function (t, e) { v(t, "src", a(t, e.data_src)) }, VIDEO: function (t, e) { _(t).forEach(function (t) { v(t, "src", a(t, e.data_src)) }), v(t, "src", a(t, e.data_src)), t.load() } }, m = function (t, e) { var n, o, r = e._settings, s = t.tagName, i = g[s]; if (i) return i(t, r), f(e, 1), void (e._elements = (n = e._elements, o = t, n.filter(function (t) { return t !== o }))); !function (t, e) { var n = a(t, e.data_src), o = a(t, e.data_bg); n && (t.style.backgroundImage = 'url("'.concat(n, '")')), o && (t.style.backgroundImage = o) }(t, r) }, h = function (t, e) { o ? t.classList.add(e) : t.className += (t.className ? " " : "") + e }, p = function (t, e, n) { t.addEventListener(e, n) }, y = function (t, e, n) { t.removeEventListener(e, n) }, E = function (t, e, n) { y(t, "load", e), y(t, "loadeddata", e), y(t, "error", n) }, w = function (t, e, n) { var r = n._settings, a = e ? r.class_loaded : r.class_error, s = e ? r.callback_loaded : r.callback_error, i = t.target; !function (t, e) { o ? t.classList.remove(e) : t.className = t.className.replace(new RegExp("(^|\\s+)" + e + "(\\s+|$)"), " ").replace(/^\s+/, "").replace(/\s+$/, "") }(i, r.class_loading), h(i, a), d(s, i), f(n, -1) }, k = function (t, e) { var n = function n(r) { w(r, !0, e), E(t, n, o) }, o = function o(r) { w(r, !1, e), E(t, n, o) }; !function (t, e, n) { p(t, "load", e), p(t, "loadeddata", e), p(t,
//# sourceMappingURL=lazyload.min.js.map
/**
* Template literal for Hura 7
*/
!function (e) { "use strict"; function r(e, n) { var t = /[^\w\-.:]/.test(e) ? new Function(r.arg + ",tmpl", "var _e=tmpl.encode" + r.helper + ",_s='" + e.replace(r.regexp, r.func) + "';return _s;") : r.cache[e] = r.cache[e] || r(r.load(e)); return n ? t(n, r) : function (e) { return t(e, r) } } r.cache = {}, r.load = function (e) { return document.getElementById(e).innerHTML }, r.regexp = /([\s'\\])(?!(?:[^{]|\{(?!%))*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g, r.func = function (e, n, t, r, c, u) { return n ? { "\n": "\\n", "\r": "\\r", "\t": "\\t", " ": " " }[n] || "\\" + n : t ? "=" === t ? "'+_e(" + r + ")+'" : "'+(" + r + "==null?'':" + r + ")+'" : c ? "';" : u ? "_s+='" : void 0 }, r.encReg = /[<>&"'\x00]/g, r.encMap = { "<": "<", ">": ">", "&": "&", '"': '"', "'": "&#39;" }, r.encode = function (e) { return (null == e ? "" : "" + e).replace(r.encReg, function (e) { return r.encMap[e] || "" }) }, r.arg = "item", r.helper = ",print=function(s,e){_s+=e?(s==null?'':s):_e(s);},include=function(s,d){_s+=tmpl(s,d);}", "function" == typeof define && define.amd ? define(function () { return r }) : "object" == typeof module && module.exports ? module.exports = r : e.tmpl = r }(this);
//# sourceMappingURL=tmpl.min.js.map
function HuraRenderAjax(n, t, o) {
var r = "";
n.forEach(function (n) {
r += tmpl(t, n);
}),
$(o).html(r);
}
function formatCurrency(c) {
var a = parseFloat(c)
.toFixed(2)
.replace(/(\d)(?=(\d{3})+\.)/g, "$1.")
.toString(),
d = a.length;
return (a = a.substring(0, d - 3)), a;
}
function strToNumber(a) {
for (a += ""; 0 < a.indexOf(".");) a = a.replace(".", "");
var b = parseFloat(a);
return isNaN(b) ? 0 : b;
}
function formatDate(b) {
var b = new Date(1e3 * parseInt(b)),
c = b.getFullYear(),
d = b.getMonth() + 1,
e = b.getDate(),
f = b.getHours(),
g = b.getMinutes(),
h = b.getSeconds();
return e + "/" + d + "/" + c;
}
function convertToSlug(e) {
let r = e;
return r
.toLowerCase()
.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a")
.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e")
.replace(/ì|í|ị|ỉ|ĩ/g, "i")
.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o")
.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u")
.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y")
.replace(/đ/g, "d")
.replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, "")
.replace(/\u02C6|\u0306|\u031B/g, "")
.replace(/[^\w ]+/g, "")
.replace(/ +/g, "-");
}
function validateEmail(a) {
return /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/.test(
a
);
}
function validateTel(a) {
return (
(vnf_regex_tel = /((09|03|07|08|05|02)+([0-9]{8})\b)/g),
vnf_regex_tel.test(a)
);
}
function debounce(a, b, c) {
var d;
return function () {
var e = this,
f = arguments,
g = c && !d;
clearTimeout(d),
(d = setTimeout(function () {
(d = null), c || a.apply(e, f);
}, b)),
g && a.apply(e, f);
};
}
// LAZY LOADING IMAGE
function runLazyImageLoad() {
var lazyLoadInstance = new LazyLoad({
elements_selector: ".lazy"
});
}
// LAZY LOADING BLOCK
var lazy_load_group = [];
// IS ON SCREEN CHECK
function isOnScreen(j) {
if (0 != $(j).length) {
var a = jQuery(window),
b = a.scrollTop(),
c = a.height(),
d = b + c,
e = jQuery(j),
f = e.offset().top,
g = e.height(),
h = f + g;
return (
(f >= b && f < d) || (h > b && h <= d) || (g > c && f <= b && h >= d)
);
}
}
// IS ON SCREEN HANDLER ( isOnScreenHandler({id: "#id",loadFn: function () {function(params);},}); )
function isOnScreenHandler(a) {
isOnScreen(a.id) && !$(a.id).hasClass("loaded")
? (a.loadFn(), $(a.id).addClass("loaded"))
: lazy_load_group.push({
id: a.id,
callback: function () {
a.loadFn();
},
});
}
// LAZY GROUP (lazyLoadingGroupHandler(lazy_load_group);)
function lazyLoadingGroupHandler(a) {
$(window).scroll(function () {
a.length &&
a.forEach(function (b) {
const c = b.id,
d = b.callback;
if (isOnScreen(c) && !$(c).hasClass("loaded"))
d(), $(c).addClass("loaded");
else {
const b = a.filter(function (a) {
return !$(a.id).hasClass("loaded");
});
0 === b.length && (a = []);
}
});
});
}
// FADE TOGGLE
function fadeToggle(target) {
$(target).fadeToggle();
}
// SCROLL TO ELEMENT
function scrollElement(target) {
document.querySelector(target).scrollIntoView({ behavior: 'smooth' });
}
// CALL MODAL SUCCESS
function modalSuccess() {
const successForm = document.querySelector(".success-form");
successForm.classList.toggle("hide");
setTimeout(function () {
successForm.classList.toggle("hide");
}, 1200);
}
// VIEW MORE CONTENT HANDLER
function viewMoreHandler(target) {
if ($(target)) $(target).each(function () {
const block = this;
const type = $(this).attr('vm-type') ? $(this).attr('vm-type') : 'html';
const check = type === 'html' ? $(this).find('.vm-content').get(0).scrollHeight : $(this).find('.vm-list .vm-list-item').length;
const text = $(this).attr('vm-text') ? $(this).attr('vm-text') : 'Xem thêm';
const text_reverse = $(this).attr('vm-text-reverse') ? $(this).attr('vm-text-reverse') : 'Thu gọn';
const limited = parseInt($(this).attr('vm-limited')) ? parseInt($(this).attr('vm-limited')) : 500;
if (check <= limited) {
if (type === 'html') $(this).find('.vm-content').removeClass('blur')
$(this).find('.vm-btn').remove();
return;
}
if (type === 'list') $(this).find(`.vm-list .vm-list-item:nth-child(n + ${limited + 1})`).hide();
$(this).find('.vm-btn').on('click', function () {
viewMoreAction(block, type, text, text_reverse, limited);
})
})
}
function viewMoreAction(block, type, text, text_reverse, limited) {
const $btn = $(block).find('.vm-btn');
const $icon = $btn.find('.vm-btn-icon').length ? $btn.find('.vm-btn-icon')[0].outerHTML : '';
switch (type) {
case 'html':
const $content = $(block).find(".vm-content");
$content.toggleClass("max-height-none").toggleClass("blur");
if (!$($content).hasClass("max-height-none")) $(block).get(0).scrollIntoView({ behavior: 'smooth' });
break;
case 'list':
$(block).find(`.vm-list .vm-list-item:nth-child(n + ${limited + 1})`).fadeToggle();
break;
default:
break;
}
const btn_text = $btn.text().replace(/\s/g, '').toLocaleLowerCase();
const text_check = text.replace(/\s/g, '').toLocaleLowerCase();
btn_text.indexOf(text_check) !== -1 ? $btn.html(`${text_reverse} ${$icon}`).addClass('show-less') : $btn.html(`${text} ${$icon}`).removeClass('show-less');
}
// SEARCH HANDLER (type = "product/article")
function searchHandler(target, type) {
const $search_input = $(target).find(".search-bar-input");
const $search_result = $(target).find(".search-results");
const $search_result_list = $(target).find(".search-results-list");
$search_input.on("click", function () {
if ($search_result_list.children().length > 0) $search_result.show();
});
$search_input.on("keyup", debounce(function (e) {
let search_value = e.target.value;
if (search_value) searchPopup(search_value, type, target);
else {
$search_result.hide();
$search_result_list.children().remove();
}
}, 500));
}
function searchPopup(value, type, target) {
const params = {
action: "search",
action_type: 'search',
content: type,
sort: "order",
q: value,
};
$.get("/ajax/get_json.php", params, function (data) {
const rawData = JSON.parse(data);
const newData = rawData.slice(0, 10);
//console.log(newData);
const $search_result = $(target).find(".search-results");
const $search_result_list = $(target).find(".search-results-list");
const $search_result_total = $(target).find(".search-results-total");
const search_href = type === "product" ? `tim?q=${value}` : `/tim-bai?q=${value}`;
if (newData.length > 0) {
HuraRenderAjax(newData, search_results_tpl, $search_result_list);
$search_result_total.html(`Xem tất cả <b>${rawData.length}</b> kết quả tìm được`).attr('href', search_href);
} else {
$search_result_list.html(`
<div class="search-alert text-center color-red py-4 px-3">
<p>Không thể tìm thấy kết quả phù hợp.</p>
<p>Vui lòng thử với từ khóa khác...</p>
</div>
`);
$search_result_total.html('Không có kết quả').attr('href', 'javascript:;');
}
$search_result.show();
});
}
// CLICK OUTSIDE CLOSE SEARCH
function closeWhenClickOutside() {
$(document).on("click", function (e) {
const $search_block = $(".search-bar");
const $search_result = $(".search-results")
if (!$search_block.is(e.target) && $search_block.has(e.target).length === 0) $search_result.fadeOut();
});
}
// ADD ITEM TO CART SUCCESS FORM
function addCart(id) {
Hura.Cart.Product.add(id, 0, { quantity: 1 }).then(function (add_status) {
//console.log('addcart:', add_status);
if (add_status.status === "error") callModal("error", "Sản phẩm đã có sẵn trong giỏ hàng");
else {
modalSuccess();
getHeaderCartListProductNew(add_status);
}
});
}
// CART HEADER HANDLER
function headerCartHandler() {
headerCartPopup();
headerCartChange();
}
// CART HEADER POPUP
function headerCartPopup() {
$(".header-cart").on("mouseenter", function () {
const $target = $('#js-cart-ttip-container');
if (!$target.hasClass('loaded')) {
Hura.Cart.getCart().then(function (data) {
//console.log(data);
getHeaderCartListProductNew(data);
})
}
$target.addClass('loaded');
})
}
// CART HEADER CHANGE
function headerCartChange() {
Hura.Cart.getSummary().then(function (data) {
//console.log(data);
const $target = $("#js-header-cart-amount");
if (data.total_item > 0) $target.show().html(data.total_item);
else $target.hide();
});
}
// CART HEADER LIST
function getHeaderCartListProductNew(data) {
//console.log(data);
const target = "#js-cart-ttip-container";
if (data.length > 0) {
let header_cart_tpl = "";
let header_cart_total = 0;
let header_cart_quantity = 0;
data.forEach(function (item) {
header_cart_total += item.in_cart.total_price;
header_cart_quantity += item.in_cart.quantity;
const item_url = item.item_type == "combo" ? "javascript:;" : item.item_info.productUrl;
const item_image = item.item_type == "combo" ? "/media/banner/logo_logo.png" : item.item_info.productImage.large;
const item_name = item.item_type == "combo" ? item.item_info.title : item.item_info.productName
header_cart_tpl += `
<div class="compare-item js-compare-item">
<div class="compare-item-img">
<a href="${item_url}" class="style-img-block">
<img src="${item_image}" alt="${item_name}" class="style-img-content" />
</a>
</div>
<div class="compare-item-info">
<a href="${item_url}" class="compare-item-name line-clamp-2">${item_name}</a>
<div class="compare-item-price">
<b style="display:inline;color:#000">x ${item.in_cart.quantity}</b>
<b style="width:auto;color:#000">
${item.in_cart.total_price > 0 ? item.in_cart.total_price.toLocaleString() + ' VNĐ' : 'Liên hệ'}
</b>
</div>
</div>
</div>
`;
})
$(target).html(header_cart_tpl);
$("#js-cart-ttip-price-block").show();
$("#js-header-cart-quantity").html(`<i>(Số lượng: ${header_cart_quantity} sản phẩm)</i>`);
$("#js-header-cart-total-price").html(header_cart_total.toLocaleString() + " VNĐ");
$("#js-header-cart-amount").show().html(data.length);
}
}
// REVIEW
function convertAvatarUser() {
$(".js-avatar-name").each(function () {
var name = $(this).text().split("", 1);
$(this).html(name);
});
}
// REVIEW
function ratingHover() {
$('.rating-star').hover(function () {
$(this).addClass('hover');
//console.log($(this).attr('data-title'))
$('#star_tip').html($(this).attr('data-title'))
},
function () {
$(this).removeClass('hover');
$('#star_tip').html($('.rating-comment input:checked').attr('data-title'));
})
}
// POST REVIEW COMMENT
function postComment(id, reply, type) {
const checkForm = checkFormGlobal(`#js-${type}-form-${id}`, '#d9d9d9');
if (!checkForm.result) return false;
var item_type = $("[name='user_post[item_type]']").val();
var item_id = $("[name='user_post[item_id]']").val();
var item_title = $("[name='user_post[item_title]']").val();
var title = $("[name='user_post[title]']").val();
// var avatar = $("[name='user_post[user_avatar]']").val();
var rate = type === $(".rating-comment input:checked").val() ? $(".rating-comment input:checked").val() : 5;
var alert_title = type === "comment" ? "bình luận" : "đánh giá";
var alert_text = reply === "" ? "" : "phản hồi ";
var alert_html = `Bạn đã gửi ${alert_text}${alert_title} thành công!`;
var name = checkForm.values.name ? checkForm.values.name : '';
var email = checkForm.values.email ? checkForm.values.email : '';
var tel = checkForm.values.tel ? checkForm.values.tel : '';
var content = checkForm.values.content ? checkForm.values.content : '';
var params = {
'action': type,
'type': 'ajax',
'user_post[item_type]': item_type,
'user_post[item_id]': item_id,
'user_post[item_title]': item_title,
'user_post[rate]': rate,
'user_post[title]': title,
'user_post[user_avatar]': '',
'user_post[user_name]': name,
'user_post[user_mail]': email,
'user_post[content]': content
};
if (reply != "") params = {...params, 'user_post[reply_to]': id}
sendData(type, params, alert_html);
}
// SEND AJAX DATA
function sendData(type, params, alert_html) {
var ENDPOINT = "/ajax/post.php";
$.post(ENDPOINT, params, function (data) {
callModal("success", alert_html, "hideModalReLoad()");
});
}
// CHECK FORM WITH INPUT HAS ATTRIBUTE "check-type"
function checkFormGlobal(targetForm, borderColorDefault) {
const listTotalInputs = $(`${targetForm} [check-type]`);
const listcheckAlerts = $(`${targetForm} [check-alert]`);
let error = "";
let inputsCheckData = [];
let listErrorInputs = [];
let inputValueData = {};
// CREATE ARRAY DATA INPUT
listTotalInputs.each(function () {
let id = $(this).attr('id');
let type = $(this).attr('check-type');
inputsCheckData = [...inputsCheckData, { id: id, type: type }];
})
// RESET DEFAULT
listTotalInputs.css('border-color', borderColorDefault);
if (listcheckAlerts.length) listcheckAlerts.remove();
// CHECK INPUT AND CREATE ERROR
inputsCheckData.forEach(function (input) {
let inputEl = document.getElementById(input.id);
let inputValue = inputEl.value;
let inputType = input.type;
inputValueData = { ...inputValueData, [inputType]: inputValue };
switch (inputType) {
case 'email':
if (validateEmail(inputValue) == false) errorInputHandler(inputEl, 'Email không hợp lệ');
break;
case 'name':
if (inputValue.length < 2 && 1 < 2) errorInputHandler(inputEl, 'Tên quá ngắn (tối thiểu 2 ký tự)');
break;
case 'tel':
if (!validateTel(inputValue)) errorInputHandler(inputEl, 'Số điện thoại không hợp lệ');
break;
case 'address':
if (inputValue.length < 6 && 1 < 2) errorInputHandler(inputEl, 'Bạn chưa nhập địa chỉ (tối thiểu 6 ký tự)');
break;
case 'province':
if (inputValue === '') errorInputHandler(inputEl, 'Bạn chưa chọn Tỉnh/Thành phố');
break;
case 'district':
if (inputValue === '') errorInputHandler(inputEl, 'Bạn chưa chọn Quận/Huyện');
break;
case 'ward':
if (inputValue === '') errorInputHandler(inputEl, 'Bạn chưa chọn Phường/Xã');
break;
case 'content':
if (inputValue.length < 8 && 1 < 2) errorInputHandler(inputEl, 'Bạn chưa nhập nội dung (tối thiểu 8 ký tự)');
break;
case 'password':
if (inputValue.length < 6 && 1 < 2) errorInputHandler(inputEl, 'Bạn chưa nhập mật khẩu/ Mật khẩu quá yếu (tối thiểu 6 ký tự)');
break;
case 'password-repeat':
let passwordValue = document.querySelector('[check-type="password"]').value;
if (inputValue !== passwordValue) errorInputHandler(inputEl, 'Mật khẩu nhập lại chưa trùng khớp');
break;
default:
break;
}
})
// ERROR INPUT HANDLER
function errorInputHandler(inputEl, errorTitle) {
listErrorInputs = [...listErrorInputs, inputEl];
$(inputEl).after(`<p class="alert-text" check-alert>${errorTitle}</p>`);
error += `<li>${errorTitle}</li>`;
}
// SHOW ERROR
if (error !== '') {
$(listErrorInputs).css('border-color', '#e80000');
callModal("error", `<ul>${error}</ul>`);
return { result: false };
} else return { result: true, values: inputValueData };
}
// CALL GLOBAL ALERT MODAL
function callModal(type, content, callback) {
let modal_type, modal_title, modal_icon;
let modal_callback = callback ? callback : 'hideModal()';
let modal_btn = `<div class="global-popup-modal__button submit" onclick="${modal_callback}">Đóng</div>`;
switch (type) {
case 'success':
modal_type = 'success';
modal_title = 'Thành công!';
modal_icon = 'M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z';
break;
case 'error':
modal_type = 'error';
modal_title = 'Có lỗi xảy ra!';
modal_icon = 'M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24V264c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z';
break;
case 'warning':
modal_type = 'warning';
modal_title = 'Cảnh báo!';
modal_icon = 'M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480H40c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24V296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z';
modal_btn = `
<div class="global-popup-modal__button-box">
<div class="global-popup-modal__button cancel" onclick="hideModal()">Hủy bỏ</div>
<div class="global-popup-modal__button submit" onclick="${modal_callback}">Xác nhận</div>
</div>
`;
break;
default:
break;
}
const modal_html = `
<div class="global-popup-modal__container ${modal_type}">
<svg class="global-popup-modal__icon" xmlns="http://www.w3.org/2000/svg" height="2em" viewBox="0 0 512 512">
<path d="${modal_icon}" />
</svg>
<span class="global-popup-modal__title">${modal_title}</span>
<div class="global-popup-modal__noffy">${content}</div>
${modal_btn}
</div>
`;
$('.global-popup-modal').html(modal_html).removeClass('hide-modal');
$('.global-popup-frame').removeClass('hide-modal').fadeIn();
$('body').css('overflow', 'hidden');
}
// CLOSE GLOBAL ALERT MODAL
function hideModal() {
$('.global-popup-frame').addClass('hide-modal');
$('.global-popup-modal').addClass('hide-modal');
$('body').css('overflow', 'auto');
}
// CLOSE GLOBAL ALERT MODAL WITH PAGE RELOAD
function hideModalReLoad(href) {
hideModal();
setTimeout(function () {
if (href) window.location.href = href
else location.reload();
}, 1200);
}