{"version":3,"sources":["main.min.js","node_modules/lozad/dist/lozad.es.js","src/pages/index/scripts/header.js","src/pages/index/scripts/helper.js","src/pages/index/scripts/ajaxLoadMore.js","src/pages/blog/index.js"],"names":["factory","isIE","document","documentMode","defaultConfig","rootMargin","threshold","load","element","nodeName","toLowerCase","img","querySelector","append","createElement","getAttribute","src","alt","children","childs","childSrc","i","length","poster","setAttribute","backgroundImageDelimiter","style","backgroundImage","split","join","imageSetLinks","firstUrlLink","substr","indexOf","classList","toggle","loaded","markAsLoaded","isLoaded","getElements","selector","root","Element","NodeList","querySelectorAll","lozad","options","Object","assign","observer","window","IntersectionObserver","onIntersection","entries","forEach","entry","intersectionRatio","isIntersecting","unobserve","target","elements","background","observe","triggerLoad","header","scrollActive","height","$","scrollTop","addClass","removeClass","hambuger","on","toggleClass","detectCloseElement","ele","ele2","funcRemove","e","closest","hasClass","keyup","key","closeMenu","clickMenu","isMobileOrTablet","userAgent","navigator","_i","_mobileKeywords","keyword","includes","_i2","_tabletKeywords","clickCounts","elementId","this","attr","next","keys","init","buttonToTop","windowHeight","scrollTo","top","behavior","addEventListener","ajaxLoadMore","appendAjax","processAjax","pageUrl","ajax","type","url","dataType","beforeSend","success","data","html","find","remove","complete","location","history","pushState","path","handleLoadMore","self","preventDefault","linkNext","console","log","ready","define","amd"],"mappings":"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","file":"main.min.js","sourcesContent":[null,"/*! lozad.js - v1.16.0 - 2020-09-06\n* https://github.com/ApoorvSaxena/lozad.js\n* Copyright (c) 2020 Apoorv Saxena; Licensed MIT */\n\n\n/**\n * Detect IE browser\n * @const {boolean}\n * @private\n */\nconst isIE = typeof document !== 'undefined' && document.documentMode;\n\nconst defaultConfig = {\n rootMargin: '0px',\n threshold: 0,\n load(element) {\n if (element.nodeName.toLowerCase() === 'picture') {\n let img = element.querySelector('img');\n let append = false;\n\n if (img === null) {\n img = document.createElement('img');\n append = true;\n }\n\n if (isIE && element.getAttribute('data-iesrc')) {\n img.src = element.getAttribute('data-iesrc');\n }\n\n if (element.getAttribute('data-alt')) {\n img.alt = element.getAttribute('data-alt');\n }\n\n if (append) {\n element.append(img);\n }\n }\n\n if (element.nodeName.toLowerCase() === 'video' && !element.getAttribute('data-src')) {\n if (element.children) {\n const childs = element.children;\n let childSrc;\n for (let i = 0; i <= childs.length - 1; i++) {\n childSrc = childs[i].getAttribute('data-src');\n if (childSrc) {\n childs[i].src = childSrc;\n }\n }\n\n element.load();\n }\n }\n\n if (element.getAttribute('data-poster')) {\n element.poster = element.getAttribute('data-poster');\n }\n\n if (element.getAttribute('data-src')) {\n element.src = element.getAttribute('data-src');\n }\n\n if (element.getAttribute('data-srcset')) {\n element.setAttribute('srcset', element.getAttribute('data-srcset'));\n }\n\n let backgroundImageDelimiter = ',';\n if (element.getAttribute('data-background-delimiter')) {\n backgroundImageDelimiter = element.getAttribute('data-background-delimiter');\n }\n\n if (element.getAttribute('data-background-image')) {\n element.style.backgroundImage = `url('${element.getAttribute('data-background-image').split(backgroundImageDelimiter).join('\\'),url(\\'')}')`;\n } else if (element.getAttribute('data-background-image-set')) {\n const imageSetLinks = element.getAttribute('data-background-image-set').split(backgroundImageDelimiter);\n let firstUrlLink = (imageSetLinks[0].substr(0, imageSetLinks[0].indexOf(' ')) || imageSetLinks[0]); // Substring before ... 1x\n firstUrlLink = firstUrlLink.indexOf('url(') === -1 ? `url(${firstUrlLink})` : firstUrlLink;\n if (imageSetLinks.length === 1) {\n element.style.backgroundImage = firstUrlLink;\n } else {\n element.setAttribute('style', (element.getAttribute('style') || '') + `background-image: ${firstUrlLink}; background-image: -webkit-image-set(${imageSetLinks}); background-image: image-set(${imageSetLinks})`);\n }\n }\n\n if (element.getAttribute('data-toggle-class')) {\n element.classList.toggle(element.getAttribute('data-toggle-class'));\n }\n },\n loaded() {}\n};\n\nfunction markAsLoaded(element) {\n element.setAttribute('data-loaded', true);\n}\n\nfunction preLoad(element) {\n if (element.getAttribute('data-placeholder-background')) {\n element.style.background = element.getAttribute('data-placeholder-background');\n }\n}\n\nconst isLoaded = element => element.getAttribute('data-loaded') === 'true';\n\nconst onIntersection = (load, loaded) => (entries, observer) => {\n entries.forEach(entry => {\n if (entry.intersectionRatio > 0 || entry.isIntersecting) {\n observer.unobserve(entry.target);\n\n if (!isLoaded(entry.target)) {\n load(entry.target);\n markAsLoaded(entry.target);\n loaded(entry.target);\n }\n }\n });\n};\n\nconst getElements = (selector, root = document) => {\n if (selector instanceof Element) {\n return [selector]\n }\n\n if (selector instanceof NodeList) {\n return selector\n }\n\n return root.querySelectorAll(selector)\n};\n\nfunction lozad (selector = '.lozad', options = {}) {\n const {root, rootMargin, threshold, load, loaded} = Object.assign({}, defaultConfig, options);\n let observer;\n\n if (typeof window !== 'undefined' && window.IntersectionObserver) {\n observer = new IntersectionObserver(onIntersection(load, loaded), {\n root,\n rootMargin,\n threshold\n });\n }\n\n const elements = getElements(selector, root);\n for (let i = 0; i < elements.length; i++) {\n preLoad(elements[i]);\n }\n\n return {\n observe() {\n const elements = getElements(selector, root);\n\n for (let i = 0; i < elements.length; i++) {\n if (isLoaded(elements[i])) {\n continue\n }\n\n if (observer) {\n observer.observe(elements[i]);\n continue\n }\n\n load(elements[i]);\n markAsLoaded(elements[i]);\n loaded(elements[i]);\n }\n },\n triggerLoad(element) {\n if (isLoaded(element)) {\n return\n }\n\n load(element);\n markAsLoaded(element);\n loaded(element);\n },\n observer\n }\n}\n\nexport default lozad;\n","// export function appendFineAnt() {\n// \tconst script = document.createElement(\"script\");\n// \tscript.src = \"https://www.fireant.vn/Scripts/web/widgets.js\";\n// \tscript.defer = true;\n// \tscript.onload = () => {\n// \t\tnew FireAnt.QuoteWidget({\n// \t\t\tcontainer_id: \"fan-quote-373\",\n// \t\t\tsymbols: \"IJC\",\n// \t\t\tlocale: \"vi\",\n// \t\t\tprice_line_color: \"#71BDDF\",\n// \t\t\tgrid_color: \"#999999\",\n// \t\t\tlabel_color: \"#999999\",\n// \t\t\twidth: \"100%\",\n// \t\t\theight: \"200px\",\n// \t\t});\n// \t};\n// \tdocument.querySelector(\".iframe-fineant\").appendChild(script);\n// \tconsole.log(\"🟢 Fineant is added!\");\n// }\n\n/*==================== Header ====================*/\n\nimport { buttonToTop, detectCloseElement } from \"./helper\";\n\n/**\n * @param header\n */\nfunction isMobileOrTablet() {\n\tconst userAgent = navigator.userAgent.toLowerCase();\n\tconst mobileKeywords = [\"mobile\", \"android\", \"iphone\", \"ipad\", \"ipod\"];\n\tconst tabletKeywords = [\"tablet\", \"ipad\"];\n\n\tfor (const keyword of mobileKeywords) {\n\t\tif (userAgent.includes(keyword)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfor (const keyword of tabletKeywords) {\n\t\tif (userAgent.includes(keyword)) {\n\t\t\treturn true;\n\t\t}\n\t}\n}\n\nexport const header = {\n\tscrollActive: function () {\n\t\tlet height = $(\"header\").height();\n\t\tif ($(window).scrollTop() > height) {\n\t\t\t$(\"header\").addClass(\"active\");\n\t\t\t$(\"header\").removeClass(\"slideUp\");\n\t\t} else {\n\t\t\t$(\"header\").removeClass(\"active\");\n\t\t\t$(\"header\").removeClass(\"slideUp\");\n\t\t}\n\t},\n\thambuger: function () {\n\t\t$(\".header-hambuger\").on(\"click\", function () {\n\t\t\t$(\"body\").toggleClass(\"isOpenMenu\");\n\t\t});\n\t\tfunction closeMenu() {\n\t\t\t$(\"body\").removeClass(\"isOpenMenu\");\n\t\t}\n\t\tdetectCloseElement(\".header-menu\", \"header-hambuger\", closeMenu);\n\t},\n\tclickMenu: function () {\n\t\tif (isMobileOrTablet()) {\n\t\t\tlet clickCounts = {};\n\t\t\t$(\".header-menu a\").on(\"click\", function (e) {\n\t\t\t\tconst elementId = $(this).attr(\"href\");\n\t\t\t\tif (!$(this).next(\"ul\").length) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// Reset click count for all elements except the current one\n\t\t\t\tObject.keys(clickCounts).forEach((key) => {\n\t\t\t\t\tif (key !== elementId) {\n\t\t\t\t\t\tclickCounts[key] = 0;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (!clickCounts[elementId]) {\n\t\t\t\t\tclickCounts[elementId] = 1;\n\t\t\t\t} else {\n\t\t\t\t\tclickCounts[elementId]++;\n\t\t\t\t}\n\t\t\t\tif (clickCounts[elementId] > 1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t},\n\tinit: function () {\n\t\tbuttonToTop();\n\t\theader.scrollActive();\n\t\theader.clickMenu();\n\t\theader.hambuger();\n\t},\n};\ndocument.addEventListener(\n\t\"scroll\",\n\tfunction (e) {\n\t\theader.scrollActive();\n\t},\n\ttrue\n);\n","\nexport function setBackgroundElement () {\n\t$('[setBackground]').each(function () {\n\t\tvar background = $(this).attr('setBackground')\n\t\t$(this).css({\n\t\t\t'background-image': 'url(' + background + ')',\n\t\t\t'background-size': 'cover',\n\t\t\t'background-position': 'center center',\n\t\t})\n\t})\n}\nexport function indicatorSlide() {\n\tif ($('.indicator-swipe').length > 0) {\n\t\tvar callback = function (entries) {\n\t\t\tentries.forEach(function (entry) {\n\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\tentry.target.classList.add('active')\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tentry.target.classList.remove('active')\n\t\t\t\t\t}, 3000)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tvar observer = new IntersectionObserver(callback)\n\t\tvar animationItems = document.querySelectorAll('.indicator-swipe')\n\t\tanimationItems.forEach(function (item) {\n\t\t\tobserver.observe(item)\n\t\t})\n\t}\n}\nexport function detectCloseElement(ele, ele2, funcRemove) {\n\t// close\n\t$(document).on('click', function (e) {\n\t\tif (!$(e.target).closest(ele).length && !$(e.target).hasClass(ele2)) {\n\t\t\tfuncRemove()\n\t\t}\n\t})\n\t// esc\n\t$(document).keyup(function (e) {\n\t\tif (e.key === 'Escape') {\n\t\t\tfuncRemove()\n\t\t}\n\t})\n\t// overlay-blur\n}\nexport function buttonToTop() {\n\tlet windowHeight = $(window).height()\n\t$(document).on('scroll', function () {\n\t\tlet scrollTop = $(window).scrollTop()\n\t\tlet documentHeight = $(document).height()\n\t\tif (scrollTop + windowHeight > windowHeight + 400) {\n\t\t\t$('.button-to-top').addClass('active')\n\t\t} else {\n\t\t\t$('.button-to-top').removeClass('active')\n\t\t}\n\t})\n\t$(document).on('click', '.button-to-top', function () {\n\t\twindow.scrollTo({\n\t\t\ttop: 0,\n\t\t\tbehavior: 'smooth',\n\t\t})\n\t})\n}\n\nexport function ToggleItem() {\n\tconst nodeParent = $('.wrap-item-toggle')\n\tconst nodeItem = nodeParent.find('.item-toggle')\n\tconst nodeTitle = nodeItem.find('.title')\n\tnodeTitle.on('click', function () {\n\t\t$(this)\n\t\t\t.toggleClass('active')\n\t\t\t.next()\n\t\t\t.slideToggle()\n\t\t\t.closest('.item-toggle')\n\t\t\t.siblings()\n\t\t\t.find('.title')\n\t\t\t.removeClass('active')\n\t\t\t.next()\n\t\t\t.slideUp()\n\t})\n}\n\n/**\n * parent, children, item, button, initItem\n * @param { parent, children, item, button, initItem} listNode\n */\nexport function funcExpandContent(listNode) {\n\tconst {parent, children, item, button, initItem, gap = 0} = listNode\n\tif (!$(parent).length) return\n\tlet itemHeight = $(item).outerHeight()\n\tlet gapCalculate = gap\n\t\t? Number($(parent).find(children).css('column-gap').slice(0, -2)) * gap\n\t\t: 0\n\tlet initHeight = itemHeight * initItem + gapCalculate\n\tlet originalHeight = $(parent).find(children).outerHeight()\n\tif (originalHeight < initHeight) {\n\t\t$(button).remove()\n\t} else {\n\t\t$(parent).css('height', initHeight)\n\t}\n\t;``\n\t$(button).on('click', function () {\n\t\tif ($(this).hasClass('expand')) {\n\t\t\t$(parent).css('height', initHeight)\n\t\t\t$(this).find('span').text('Xem thêm')\n\t\t} else {\n\t\t\t$(parent).css('height', originalHeight)\n\t\t\t// setTimeout(() => {\n\t\t\t// \t$(parent).css(\"height\", \"auto\");\n\t\t\t// }, 1000);\n\t\t\t$(this).find('span').text('Rút gọn')\n\t\t}\n\t\t$(this).toggleClass('expand')\n\t})\n}\n\nexport function clickScrollToDiv(nodeEle, heightSpacing = () => {}) {\n\t$(nodeEle).on('click', function (event) {\n\t\tlet height = 0\n\t\t$(this).addClass('active').siblings().removeClass('active')\n\t\tif (heightSpacing) {\n\t\t\theight = heightSpacing()\n\t\t} else {\n\t\t\theight = 0\n\t\t}\n\t\tif (this.hash !== '') {\n\t\t\tevent.preventDefault()\n\t\t\tvar hash = this.hash\n\t\t\t$('html, body').animate(\n\t\t\t\t{\n\t\t\t\t\tscrollTop: $(hash).offset().top - height,\n\t\t\t\t},\n\t\t\t\t800\n\t\t\t)\n\t\t}\n\t})\n}\n\nexport function appendCaptchaASP() {\n\tif (!$('#ctl00_mainContent_ctl01_pnlFormWizard').length) return\n\t// Select the div element you want to observe\n\tconst myDiv = document.querySelector(\n\t\t'#ctl00_mainContent_ctl01_pnlFormWizard'\n\t)\n\t// Create a new MutationObserver object\n\tconst observer = new MutationObserver(function (mutations) {\n\t\tmutations.forEach(function (mutation) {\n\t\t\tconsole.log('Run')\n\t\t\tappendCaptcha()\n\t\t})\n\t})\n\t// Configure the observer to listen for changes to the \"class\" attribute\n\tconst config = {attributes: true, characterData: true, childList: true}\n\t// Start observing the target div element\n\tobserver.observe(myDiv, config)\n\tfunction appendCaptcha() {\n\t\t$('.form-group.frm-captcha').appendTo('.wrap-form-submit')\n\t\t$('.form-group.frm-btnwrap').appendTo('.wrap-form-submit')\n\t}\n\tappendCaptcha()\n}\nexport function scrollAnimation() {\n\tif (\n\t\t$('.animate').length > 0 &&\n\t\twindow.matchMedia('(min-width: 1200px)').matches\n\t) {\n\t\tvar callback = function (e) {\n\t\t\t\te.forEach(function (e) {\n\t\t\t\t\te.isIntersecting &&\n\t\t\t\t\t\t(e.target.style.animation = e.target.dataset.animate)\n\t\t\t\t})\n\t\t\t},\n\t\t\tobserver = new IntersectionObserver(callback, {}),\n\t\t\tanimationItems = document.querySelectorAll('.animate')\n\t\tanimationItems.forEach(function (e) {\n\t\t\tobserver.observe(e)\n\t\t})\n\t}\n}\n\nexport function scrollTo(offset, callback) {\n const fixedOffset = offset.toFixed();\n console.log(\"🚀 ~ file: helper.js:183 ~ scrollTo ~ fixedOffset:\", fixedOffset)\n const onScroll = function () {\n if (window.pageYOffset.toFixed() === fixedOffset) {\n window.removeEventListener('scroll', onScroll)\n callback()\n }\n }\n\n window.addEventListener('scroll', onScroll)\n onScroll()\n window.scrollTo({\n top: offset,\n behavior: 'smooth'\n })\n}","import lozad from 'lozad'\nexport const ajaxLoadMore = {\n\tappendAjax: function () {\n\t\t$('.ajaxResponseWrap').append('
')\n\t},\n\tprocessAjax: function (pageUrl) {\n\t\tconst observer = lozad()\n\t\t$.ajax({\n\t\t\ttype: 'GET',\n\t\t\turl: pageUrl,\n\t\t\tdataType: 'html',\n\t\t\tbeforeSend: function () {\n\t\t\t\t$('.loading-ajax').addClass('active')\n\t\t\t},\n\t\t\tsuccess: function (data) {\n\t\t\t\t$('.ajaxResponse').html(\n\t\t\t\t\t$(data).find('.ajaxResponse').html()\n\t\t\t\t)\n\t\t\t\t// Check Pagination exists ?\n\t\t\t\tif ($(data).find('.pagination li:last-child').hasClass('disabled')) {\n\t\t\t\t\t$('.btn-show-more').remove();\n\t\t\t\t} else {\n\t\t\t\t\t$('.pagination').html($(data).find('pagination').html());\n\t\t\t\t}\n\t\t\t},\n\t\t\tcomplete: function (data) {\n\t\t\t\t$('.loading-ajax').removeClass('active')\n\t\t\t\tif (pageUrl != window.location) {\n\t\t\t\t\twindow.history.pushState({path: pageUrl}, '', pageUrl)\n\t\t\t\t}\n\t\t\t\tobserver.observe();\n\t\t\t},\n\t\t})\n\t},\n\thandleLoadMore: function () {\n\t\tconst self = this;\n\t\t$('.btn-show-more').on('click', function (e) {\n\t\t\te.preventDefault()\n\t\t\tconst linkNext = $('.pagination li:last-child a').attr('href');\n\t\t\tconsole.log(\"🚀 ~ file: ajaxLoadMore.js:37 ~ linkNext:\", linkNext)\n\t\t\tself.processAjax(linkNext) // How to use function processAjax in scope ajaxLoadMore\n\t\t})\n\t},\n\tinit: function () {\n\t\tajaxLoadMore.appendAjax()\n\t\tajaxLoadMore.handleLoadMore()\n\t},\n}\n","import lozad from 'lozad'\nimport { header } from '../index/scripts/header';\nimport { ajaxLoadMore } from '../index/scripts/ajaxLoadMore';\n$(document).ready(function () {\n\theader.init();\n\tajaxLoadMore.init();\n})\n/*==================== Workflow ====================*/\n\n/*==================== Lazyload JS ====================*/\nconst observer = lozad() // lazy loads elements with default selector as '.lozad'\nobserver.observe()\n"]}