{"version":3,"sources":["webpack:///./src/appConfig.ts","webpack:///./src/module/dom.ts","webpack:///./src/image/googleMapMarkerIcon.png","webpack:///./Web/Shared/layout.ts","webpack:///./Web/Shared/Component/SocialMedia/social-media.ts","webpack:///./src/module/facebook-page-and-messager.ts","webpack:///./Web/Franchise/franchise.ts","webpack:///./Web/Shared/Component/EnquiryForm/enquiry-form.ts","webpack:///./src/module/form.ts","webpack:///./src/module/google-map.ts"],"names":["appConfig","JSON","parse","document","getElementById","value","slideDown","element","style","overflow","display","animate","height","offsetHeight","duration","easing","addEventListener","removeProperty","slideToggle","window","getComputedStyle","slideUp","setupLayout","querySelector","gtag","send_to","googleAnalyticsId","event_category","googleAnalytics4Id","fbq","facebookAppId","fbAsyncInit","FB","init","appId","autoLogAppEvents","xfbml","version","Event","subscribe","script","createElement","type","src","crossOrigin","getElementsByTagName","appendChild","setupFacebookPageAndMessager","location","host","startsWith","querySelectorAll","forEach","elem","innerWidth","classList","contains","nextElementSibling","el","event_label","branch","apiKey","googleMapApiKey","languageIsoCode","styles","googleMapStyles","Franchise","EnquiryFormType","setupEnquiryForm","elementId","beforeSend","error","errorText","console","log","processing","success","reset","finally","ajaxForm","config","combineToFormData","e","preventDefault","formElement","target","xhr","XMLHttpRequest","readyState","status","responseText","onprogress","event","Math","round","loaded","total","toFixed","open","action","formData","FormData","length","obj","Object","keys","key","append","send","mapIcon","setupGoogleMap","async","defer","initMap","mapElement","markerElements","Array","from","map","google","maps","Map","zoom","dataset","center","lat","centerLat","lng","centerLng","scrollwheel","markerElement","marker","Marker","position","positionLat","positionLng","icon","default","url","addListener"],"mappings":"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","file":"14.ec704dc6b235463eacdc.bundle.js","sourcesContent":["export const appConfig: {\r\n facebookAppId: string;\r\n facebookPixelId: string;\r\n googleAnalyticsId: string;\r\n googleAnalytics4Id: string;\r\n sessionRecordId: string;\r\n googleAdsId: string;\r\n googleMapApiKey: string;\r\n googleMapStyles: any[];\r\n addThisId: string;\r\n} = {\r\n ...JSON.parse((document.getElementById('inputHiddenForAppConfig') as HTMLInputElement).value)\r\n}\r\n\r\n","export function scrollToTop() {\r\n const c = document.documentElement.scrollTop || document.body.scrollTop;\r\n if (c > 0) {\r\n window.requestAnimationFrame(scrollToTop);\r\n window.scrollTo(0, c - c / 8);\r\n }\r\n}\r\n\r\nexport function slideUp(element: HTMLElement) {\r\n element.style.overflow = 'hidden';\r\n\r\n const elemAnimation = element.animate([\r\n { height: `${element.offsetHeight}px` },\r\n { height: 0 }\r\n ], {\r\n duration: 500,\r\n easing: 'ease'\r\n });\r\n\r\n elemAnimation.addEventListener('finish', () => {\r\n element.style.display = 'none';\r\n element.style.removeProperty('overflow');\r\n });\r\n}\r\n\r\nexport function slideDown(element: HTMLElement) {\r\n element.style.overflow = 'hidden';\r\n element.style.display = 'block';\r\n\r\n const elemAnimation = element.animate([\r\n { height: 0 },\r\n { height: `${element.offsetHeight}px` }\r\n ], {\r\n duration: 500,\r\n easing: 'ease'\r\n });\r\n\r\n elemAnimation.addEventListener('finish', () => {\r\n element.style.removeProperty('overflow');\r\n });\r\n}\r\n\r\nexport function slideToggle(element: HTMLElement) {\r\n window.getComputedStyle(element).display === 'none' ? slideDown(element) : slideUp(element);\r\n}\r\n\r\n","export default \"/assets/47bee881316cc24ed9305be7275217fc.png\";","//import { setupGA } from '../../src/module/google-analytics';\r\nimport { appConfig } from '../../src/appConfig';\r\nimport { setupFacebookPageAndMessager } from '../../src/module/facebook-page-and-messager';\r\n//import { setupPixel } from '../../src/module/facebook-pixel';\r\nimport { setTimeout } from 'timers';\r\nimport { slideToggle, slideDown } from '../../src/module/dom';\r\nimport './Component/SocialMedia/social-media';\r\n//import { setupSessionRecord } from '../../src/module/session-record';\r\nimport { setupSocialMedia } from './Component/SocialMedia/social-media';\r\n\r\ndeclare global {\r\n let fbq: (...args: any[]) => void\r\n}\r\n\r\nexport function setupLayout() {\r\n\r\n setupSocialMedia();\r\n\r\n //setupGA(appConfig.googleAnalyticsId, {\r\n // Id: appConfig.googleAdsId,\r\n // convertor: {\r\n // 'phoneLink': 'ffOKCPeL7tIBEKWb9voC',\r\n // 'whatsAppLink': '1n0yCMyN7tIBEKWb9voC',\r\n // 'mapLink': 'Ss2cCMzojtMBEKWb9voC',\r\n // 'emailLink': 'UaQfCM3w_tIBEKWb9voC',\r\n // 'liveChat': 'LBmQCMvqjtMBEKWb9voC',\r\n // 'careerOpportunityApplicationForm': 'W9csCNbn_tIBEKWb9voC',\r\n // 'generalEnquiry': 't1rSCJGHj9MBEKWb9voC', \r\n // 'courseEnquiry': 'KeGoCO2l7tIBEKWb9voC',\r\n // 'franchiseEnquiry': 'n2InCLe4htQBEKWb9voC',\r\n // 'campEnquiry': 'JbyxCPHJ0tQBEKWb9voC'\r\n // }\r\n //});\r\n //setupPixel(appConfig.facebookPixelId);\r\n\r\n // delay facebook page due to google speed score \r\n setTimeout(() => {\r\n setupFacebookPageAndMessager(appConfig.facebookAppId);\r\n }, 2000);\r\n\r\n if (location.host.startsWith('192.168') || location.host.startsWith('localhost')) {\r\n // skip\r\n }\r\n else {\r\n // setupSessionRecord(appConfig.sessionRecordId);\r\n }\r\n\r\n document.addEventListener(\"DOMContentLoaded\", () => {\r\n document.querySelectorAll('.parentNav').forEach(elem => {\r\n if (window.innerWidth <= 1024) {\r\n if (elem.classList.contains('active')) {\r\n slideDown(elem.nextElementSibling as HTMLElement)\r\n }\r\n }\r\n elem.addEventListener('click', () => {\r\n if (window.innerWidth <= 1024) {\r\n slideToggle(elem.nextElementSibling as HTMLElement);\r\n }\r\n });\r\n });\r\n });\r\n\r\n document.getElementById('js-menuButton').addEventListener('click', () => {\r\n slideToggle(document.getElementById('js-navList'));\r\n });\r\n\r\n document.querySelectorAll('#js-headerPhoneLink, #js-footerPhoneLink').forEach(el => {\r\n el.addEventListener('click', () => {\r\n gtag('event', 'call', {\r\n send_to: appConfig.googleAnalyticsId,\r\n event_category: 'engagement',\r\n event_label: 'Taman Molek'\r\n });\r\n gtag('event', 'generate_lead', {\r\n send_to: appConfig.googleAnalytics4Id\r\n });\r\n gtag('event', 'call', {\r\n send_to: appConfig.googleAnalytics4Id,\r\n branch: 'Taman Molek'\r\n });\r\n fbq('track', 'Contact');\r\n });\r\n });\r\n\r\n document.querySelectorAll('#js-headerEmailLink, #js-footerEmailLink').forEach(el => {\r\n el.addEventListener('click', () => {\r\n gtag('event', 'email', {\r\n send_to: appConfig.googleAnalyticsId,\r\n event_category: 'engagement'\r\n });\r\n gtag('event', 'generate_lead', {\r\n send_to: appConfig.googleAnalytics4Id\r\n });\r\n gtag('event', 'email', {\r\n send_to: appConfig.googleAnalytics4Id\r\n });\r\n fbq('track', 'Contact');\r\n });\r\n });\r\n document.querySelector('#js-footerLocationLink').addEventListener('click', () => {\r\n gtag('event', 'find_location', {\r\n send_to: appConfig.googleAnalyticsId,\r\n event_category: 'engagement',\r\n event_label: 'Taman Molek'\r\n });\r\n gtag('event', 'generate_lead', {\r\n send_to: appConfig.googleAnalytics4Id\r\n });\r\n gtag('event', 'find_location', {\r\n send_to: appConfig.googleAnalytics4Id,\r\n branch: 'Taman Molek'\r\n });\r\n fbq('track', 'FindLocation');\r\n });\r\n\r\n \r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import '@fancyapps/fancybox';\r\nimport { appConfig } from '../../../../src/appConfig';\r\n\r\nexport function setupSocialMedia() {\r\n document.querySelector('#js-whatsAppLink').addEventListener('click', () => {\r\n gtag('event', 'whatsapp', {\r\n send_to: appConfig.googleAnalyticsId,\r\n event_category: 'engagement'\r\n });\r\n gtag('event', 'generate_lead', {\r\n send_to: appConfig.googleAnalytics4Id\r\n });\r\n gtag('event', 'whatsapp', {\r\n send_to: appConfig.googleAnalytics4Id\r\n });\r\n fbq('track', 'Contact');\r\n });\r\n}\r\n\r\n\r\n","\r\ndeclare global {\r\n interface Window {\r\n fbAsyncInit: any\r\n }\r\n}\r\ndeclare let FB: any;\r\n\r\nexport function setupFacebookPageAndMessager(facebookAppId : string) {\r\n window.fbAsyncInit = () => {\r\n FB.init({\r\n appId: facebookAppId,\r\n autoLogAppEvents: true,\r\n xfbml: true,\r\n version: 'v7.0'\r\n });\r\n // TODO now: \r\n // Ŀǰÿһ�δ򿪶��ᴥ��, ��Ӱ�� tracking, ֮�� fixed\r\n FB.Event.subscribe('customerchat.dialogShow', () => {\r\n // tracking\r\n gtag('event', 'live_chat', {\r\n event_category: 'engagement'\r\n });\r\n fbq('track', 'Contact');\r\n });\r\n };\r\n\r\n let script = document.createElement('script') as HTMLScriptElement;\r\n script.type = 'text/javascript'; \r\n script.src = 'https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js';\r\n script.crossOrigin = 'anonymous'; \r\n document.getElementsByTagName('body')[0].appendChild(script);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import './franchise.scss';\r\nimport { setupLayout } from '../Shared/layout';\r\nimport { setupEnquiryForm, EnquiryFormType } from '../Shared/Component/EnquiryForm/enquiry-form';\r\nimport { appConfig } from '../../src/appConfig';\r\nimport { setupGoogleMap } from '../../src/module/google-map';\r\n\r\nsetupLayout();\r\n\r\nsetupGoogleMap({\r\n apiKey: appConfig.googleMapApiKey,\r\n languageIsoCode: (document.getElementById('inputHiddenForPageLanguageIsoCode') as HTMLInputElement).value,\r\n styles: appConfig.googleMapStyles\r\n});\r\n\r\nsetupEnquiryForm(EnquiryFormType.Franchise);","import { ajaxForm } from \"../../../../src/module/form\";\r\nimport { appConfig } from '../../../../src/appConfig';\r\n\r\ndeclare let fbq: (...args: any[]) => void\r\n\r\nexport enum EnquiryFormType {\r\n General = 'General',\r\n Course = 'Course',\r\n Franchise = 'Franchise',\r\n Camp = 'Camp'\r\n}\r\n\r\nexport function setupEnquiryForm(type: EnquiryFormType) {\r\n const elementId = 'enquiryForm';\r\n\r\n ajaxForm({\r\n elementId: elementId,\r\n beforeSend: () => {\r\n document.querySelector(`#${elementId} .buttonSubmit`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonLoading`).style.display = 'block';\r\n document.querySelector(`#${elementId} .buttonError`).style.display = 'none';\r\n },\r\n error: (errorText) => {\r\n document.querySelector(`#${elementId} .buttonSubmit`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonLoading`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonError`).style.display = 'block';\r\n console.log(errorText);\r\n },\r\n processing: () => {\r\n //upload percentage\r\n },\r\n success: () => {\r\n document.querySelector(`#${elementId} .buttonSubmit`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonLoading`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonError`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonSuccess`).style.display = 'block';\r\n (document.getElementById(elementId) as HTMLFormElement).reset();\r\n gtag('event', 'enquiry', {\r\n send_to: appConfig.googleAnalyticsId,\r\n event_category: 'engagement',\r\n event_label: type\r\n });\r\n gtag('event', 'generate_lead', {\r\n send_to: appConfig.googleAnalytics4Id\r\n });\r\n gtag('event', 'enquiry', {\r\n send_to: appConfig.googleAnalytics4Id,\r\n type\r\n });\r\n fbq('trackCustom', `${type}Enquiry`);\r\n },\r\n finally: () => {\r\n //finish all job\r\n }\r\n });\r\n}\r\n\r\n","\r\n// note : 不支持 input file 哦\r\nexport function localStorageForm(config: {\r\n elementId: string,\r\n localStorageKey: string,\r\n redirectUrl: string\r\n}): void {\r\n const { elementId, localStorageKey, redirectUrl } = config;\r\n const form = document.getElementById(elementId);\r\n form.addEventListener('submit', (e: Event) => {\r\n e.preventDefault();\r\n const formElement = e.target as HTMLFormElement;\r\n const formData = new FormData(formElement)\r\n let store: any = {};\r\n formData.forEach((value, key) => {\r\n store[key] = value;\r\n });\r\n localStorage.setItem(localStorageKey, JSON.stringify(store));\r\n location.href = redirectUrl;\r\n });\r\n}\r\n\r\nexport function formDataToObject(formElement: HTMLFormElement): any {\r\n const formData = new FormData(formElement);\r\n let result: any = {};\r\n formData.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n return result;\r\n}\r\n\r\n\r\nexport function ajaxForm(config: {\r\n elementId: string\r\n beforeSend: () => void\r\n success: (responseText: string) => void\r\n error: (responseText: string) => void\r\n finally: () => void\r\n processing?: (percent: number) => void\r\n combineToFormData?: { [propName : string] : any }[]\r\n}): void {\r\n config.processing = config.processing || function () { };\r\n config.combineToFormData = config.combineToFormData || [];\r\n const { elementId, error, beforeSend, success, processing, combineToFormData } = config;\r\n const form = document.getElementById(elementId);\r\n form.addEventListener('submit', (e: Event) => {\r\n e.preventDefault();\r\n const formElement = e.target as HTMLFormElement;\r\n beforeSend();\r\n var xhr = new XMLHttpRequest();\r\n xhr.addEventListener('readystatechange', () => {\r\n if (xhr.readyState === 4) {\r\n if (xhr.status === 200) {\r\n success(xhr.responseText);\r\n }\r\n else {\r\n console.error({\r\n status: xhr.status,\r\n responseText: xhr.responseText\r\n });\r\n error(xhr.responseText);\r\n }\r\n config.finally();\r\n }\r\n });\r\n xhr.onprogress = function (event) {\r\n processing(+Math.round(event.loaded / event.total * 100).toFixed(0));\r\n };\r\n xhr.open(\"POST\", formElement.action, true);\r\n let formData = new FormData(formElement);\r\n if (combineToFormData.length > 0) {\r\n console.log(combineToFormData)\r\n combineToFormData.forEach(obj => {\r\n Object.keys(obj).forEach(key => {\r\n formData.append(key, obj[key]);\r\n });\r\n });\r\n }\r\n formData.forEach((value, key) => {\r\n console.log(key, value);\r\n });\r\n xhr.send(formData);\r\n });\r\n}\r\n","const mapIcon = require('../image/googleMapMarkerIcon.png');\r\n\r\ndeclare global {\r\n interface Window {\r\n initMap: () => void\r\n }\r\n let google: any\r\n}\r\n\r\nexport function setupGoogleMap(config: {\r\n apiKey: string,\r\n languageIsoCode: string,\r\n //locations: {\r\n // position: {\r\n // lat: number,\r\n // lng: number\r\n // },\r\n // url: string\r\n //}[],\r\n //zoom: number,\r\n //center: {\r\n // lat: number,\r\n // lng: number\r\n //},\r\n styles: any[]\r\n}) {\r\n let script = document.createElement('script') as HTMLScriptElement;\r\n script.type = 'text/javascript';\r\n script.async = true;\r\n script.defer = true;\r\n script.src = `https://maps.googleapis.com/maps/api/js?key=${config.apiKey}&callback=initMap&language=${config.languageIsoCode}`;\r\n document.getElementsByTagName('body')[0].appendChild(script);\r\n\r\n window.initMap = () => {\r\n document.querySelectorAll('.sGoogleMap').forEach(mapElement => {\r\n // note ����: ΪʲôҪ��ǰ�ó� element ����Ϊ google map ��ִ��ʱ�Ḳ�� child element\r\n const markerElements = Array.from(mapElement.querySelectorAll('.sGoogleMapMarker')); \r\n\r\n const map = new google.maps.Map(mapElement, {\r\n zoom: +mapElement.dataset.zoom,\r\n center: {\r\n lat: +mapElement.dataset.centerLat,\r\n lng: +mapElement.dataset.centerLng\r\n },\r\n scrollwheel: false,\r\n styles: config.styles\r\n });\r\n\r\n markerElements.forEach(markerElement => {\r\n let marker = new google.maps.Marker({\r\n position: {\r\n lat: +markerElement.dataset.positionLat,\r\n lng: +markerElement.dataset.positionLng\r\n },\r\n map: map,\r\n icon: mapIcon.default,\r\n url: markerElement.dataset.url\r\n });\r\n\r\n marker.addListener('click', () => {\r\n window.open(marker.url, '_blank');\r\n });\r\n });\r\n });\r\n }\r\n}\r\n"],"sourceRoot":""}