{"version":3,"sources":["main.min.js","node_modules/lozad/dist/lozad.es.js","src/pages/index/scripts/helper.js","src/pages/index/scripts/header.js","src/pages/blog-detail/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","detectCloseElement","ele","ele2","funcRemove","$","on","e","target","closest","hasClass","keyup","key","header","scrollActive","height","window","scrollTop","addClass","removeClass","hambuger","toggleClass","closeMenu","clickMenu","isMobileOrTablet","userAgent","navigator","_i","_mobileKeywords","keyword","includes","_i2","_tabletKeywords","clickCounts","elementId","this","attr","next","Object","keys","forEach","init","buttonToTop","windowHeight","scrollTo","top","behavior","addEventListener","ready","ToggleItem","find","slideToggle","siblings","slideUp","makeIds","headings","headingMap","Array","prototype","call","heading","id","textContent","trim","replace","isNaN","generateToc","tocbot","tocSelector","contentSelector","headingSelector","scrollSmooth","activeLinkClass","scrollSmoothOffset","scrollSmoothDuration","headingsOffset","orderedList","handleTocFixed","matchMedia","matches","lozad","options","assign","observer","IntersectionObserver","onIntersection","entries","entry","intersectionRatio","isIntersecting","unobserve","elements","background","observe","triggerLoad","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","\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}","// 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","import lozad from 'lozad'\nimport {header} from '../index/scripts/header'\nimport {ToggleItem, detectCloseElement} from '../index/scripts/helper'\n$(document).ready(function () {\n\theader.init()\n\tToggleItem()\n\tmakeIds()\n\tgenerateToc()\n\thandleTocFixed()\n})\n/*==================== TOC ====================*/\nfunction makeIds() {\n\t// eslint-disable-line\n\tvar content = document.querySelector('#main-content')\n\tvar headings = content.querySelectorAll('h1, h2, h3, h4, h5, h6, h7')\n\tvar headingMap = {}\n\n\tArray.prototype.forEach.call(headings, function (heading) {\n\t\tvar id = heading.id\n\t\t\t? heading.id\n\t\t\t: heading.textContent\n\t\t\t\t\t.trim()\n\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t.replace(/\\s+/g, '-')\n\t\t\t\t\t.replace(/[^a-z0-9-]/g, '')\n\t\theadingMap[id] = !isNaN(headingMap[id]) ? ++headingMap[id] : 0\n\t\tif (headingMap[id]) {\n\t\t\theading.id = id + '-' + headingMap[id]\n\t\t} else {\n\t\t\theading.id = id\n\t\t}\n\t})\n\t$(\"body\").on(\"click\", \".toc .title\", function () {\n\t\t$(this).toggleClass('active');\n\t\t$(this).closest('.toc').find('.js-toc').slideToggle();\n\t});\n}\n\nfunction generateToc() {\n\ttocbot.init({\n\t\ttocSelector: '.js-toc',\n\t\tcontentSelector: '.js-toc-content',\n\t\theadingSelector: 'h1, h2, h3,h4,h5',\n\t\t// hasInnerContainers: true,\n\t\tscrollSmooth: true,\n\t\tactiveLinkClass: 'is-active-link',\n\t\tscrollSmoothOffset: -90,\n\t\tscrollSmoothDuration: 420,\n\t\theadingsOffset: 90,\n\t\torderedList: false,\n\t})\n\ttocbot.init({\n\t\ttocSelector: '.js-toc-fixed',\n\t\tactiveLinkClass: 'is-active-link',\n\t\tcontentSelector: '.js-toc-content',\n\t\theadingSelector: 'h1, h2, h3,h4,h5',\n\t\t// hasInnerContainers: true,\n\t\tscrollSmooth: true,\n\t\theadingsOffset: 90,\n\t\tscrollSmoothOffset: -90,\n\t\tscrollSmoothDuration: 420,\n\t\torderedList: true,\n\t})\n}\n\nfunction handleTocFixed() {\n\t$('.toc-button').on('click', function () {\n\t\t$('.wrap-toc-fixed').toggleClass('active')\n\t})\n\t//\n\tdetectCloseElement('.wrap-toc-fixed', 'toc-button', () => {\n\t\t$('.wrap-toc-fixed').removeClass('active')\n\t})\n\tif (window.matchMedia('(max-width: 767.98px)').matches) {\n\t\t$('.wrap-toc-fixed a').on('click', function () {\n\t\t\t$('.wrap-toc-fixed').removeClass('active')\n\t\t})\n\t}\n\t//\n\tdocument.addEventListener(\n\t\t'scroll',\n\t\tfunction (e) {\n\t\t\tif ($(window).scrollTop() > 250) {\n\t\t\t\t$('.wrap-toc-fixed').addClass('show')\n\t\t\t} else {\n\t\t\t\t$('.wrap-toc-fixed').removeClass('show')\n\t\t\t}\n\t\t},\n\t\ttrue\n\t)\n}\n/*==================== Lazyload JS ====================*/\nconst observer = lozad() // lazy loads elements with default selector as '.lozad'\nobserver.observe()\n"]}