{"version":3,"file":"layout-page-sidenav-calendar.bundle.js","mappings":"82BAKA,WACE,IAEuBA,SAASC,cAC5B,kDACAC,QAFMC,W,EAO2BH,SAASI,iBACxC,gC,knBAK4BC,KAAI,SAAUC,GAC1C,MAMIA,EAAGJ,QALLK,EAAS,EAATA,UACAC,EAAO,EAAPA,QACAC,EAAmB,EAAnBA,oBACAC,EAAgB,EAAhBA,iBACAC,EAAa,EAAbA,cAGIC,EAA4BN,EAAGL,cACnC,2BAEF,ECXD,SAA0CM,EAAWC,EAASK,GACnE,IAAMC,EAAc,IAAIC,KAClBC,EAAsB,IAAID,KAAKP,GAC/BS,EAAwB,IAAIF,KAAKR,GAEvC,QAAQ,GACN,KAAKU,EAAwBH,EAE3B,OADID,GAASA,EAAQK,aAAa,oBAAqB,kBAChD,CAAEC,OAAQ,WAAYC,gBAAiB,WAEhD,KAAKH,GAAyBH,GAC5BE,GAAuBF,EAEvB,OADID,GAASA,EAAQK,aAAa,oBAAqB,kBAChD,CAAEC,OAAQ,MAAOC,gBAAiB,WAE3C,KAAKN,EAAcE,EAEjB,OADIH,GAASA,EAAQK,aAAa,oBAAqB,cAChD,CAAEC,OAAQ,OAAQC,gBAAiB,WAEhD,CDR4CC,CAClCd,EACAC,EACAF,GAHMa,EAAM,EAANA,OAYR,OCFD,SACLN,EACAM,EACAC,GAEA,EAAIP,EAAQT,iBAAiB,kBAAkBkB,SAAQ,SAAAC,GACrDA,EAAKC,YAAcL,EAAOM,aAC5B,IACA,EAAIZ,EAAQT,iBAAiB,4BAA4BkB,SAAQ,SAAAC,GAC/DA,EAAKG,MAAMN,gBAAkBA,CAC/B,GACF,CDXQO,CAAiCrB,EAAIa,EAVN,EAAfC,kBAYR,GACN,IAAgB,aAAXD,GAAoC,QAAXA,EAI5B,GAAI,IAAIJ,KAAS,IAAIA,KAAKN,GAAsB,CAC9CG,EAA0BY,YAAc,sBACxCZ,EAA0Bc,MAAMN,gBAAkB,UAClDR,EAA0Bc,MAAME,OAAS,cACzChB,EAA0Bc,MAAMG,cAAgB,OAChD,KACF,CAET,GAAyB,KAArBnB,EAAyB,CAClBE,EAA0BY,YAAc,eACxCZ,EAA0Bc,MAAMN,gBAAkB,UAClDR,EAA0Bc,MAAME,OAAS,cACzChB,EAA0Bc,MAAMG,cAAgB,OAChD,KACF,CAEAjB,EAA0BkB,KAAOpB,EACjCE,EAA0BY,YAAc,eACxCZ,EAA0Bc,MAAMN,gBAAkB,UAEzB,KAArBV,IACFE,EAA0BM,aAAa,YAAY,GACnDN,EAA0Bc,MAAMN,gBAAkB,UAClDR,EAA0Bc,MAAME,OAAS,cACzChB,EAA0Bc,MAAMG,cAAgB,QAGlD,MACF,IAAgB,SAAXV,EACH,GAAIR,EAAe,CACjBC,EAA0BkB,KAAOnB,EACjCC,EAA0BY,YAAc,iBACxCZ,EAA0Bc,MAAMN,gBAAkB,UAClD,KACF,CAGAR,EAA0BY,YAAc,iBACxCZ,EAA0Bc,MAAME,OAAS,cACzChB,EAA0Bc,MAAMG,cAAgB,OAChDjB,EAA0Bc,MAAMN,gBAAkB,UAGxD,GAIJ,CAFE,MAAOW,GACPC,QAAQC,MAAMF,EAChB,C,KACD,CA7FD,E","sources":["webpack://developer.gov.sg/./apps/src/communities/layout-page-sidenav-calendar.js","webpack://developer.gov.sg/./apps/src/lib/communities.js"],"sourcesContent":["import {\n getEventStatusAndBackgroundColor,\n setEventStatusAndBackgroundColor,\n} from \"../lib/communities\";\n\n(() => {\n try {\n // Variables\n const { navLevel } = document.querySelector(\n 'script[data-id=\"layout-page-sidenav-calendar\"]'\n ).dataset;\n\n // Since the script is only run on the layout-page-sidenav-calendar page, we can assume that page.multi_level_layout is present\n if (navLevel) {\n // Selectors\n const sgdsCardEventInformation = document.querySelectorAll(\n \".sgds-card-event-information\"\n );\n\n // 1. Set the event status and background color\n // 2. Programatically set the anchor tag, event-information-link to the event recording link if the event has ended\n [...sgdsCardEventInformation].map(function (el) {\n const {\n startDate,\n endDate,\n registrationEndDate,\n registrationLink,\n recordingLink,\n } = el.dataset;\n\n const eventInformationAnchorTag = el.querySelector(\n \"#event-information-link\"\n );\n const { status, backgroundColor } = getEventStatusAndBackgroundColor(\n startDate,\n endDate,\n el\n );\n\n // There are three cases:\n // 1. The event has not started yet\n // 2. The event is currently happening (Now)\n // 3. The event has ended\n setEventStatusAndBackgroundColor(el, status, backgroundColor);\n\n switch (true) {\n case status === \"upcoming\" || status === \"now\":\n // Compare the registration end date with the current date\n // For status === \"now\", the organisers may allow people to join even when the program has started\n // As such, i accounted for this rare possibility\n if (new Date() > new Date(registrationEndDate)) {\n eventInformationAnchorTag.textContent = \"Registration Closed\";\n eventInformationAnchorTag.style.backgroundColor = \"#C6C6C6\";\n eventInformationAnchorTag.style.cursor = \"not-allowed\";\n eventInformationAnchorTag.style.pointerEvents = \"none\";\n break;\n }\n\t\t\t\n\t\t\tif (registrationLink === \"\") {\n eventInformationAnchorTag.textContent = \"Register Now\";\n eventInformationAnchorTag.style.backgroundColor = \"#C6C6C6\";\n eventInformationAnchorTag.style.cursor = \"not-allowed\";\n eventInformationAnchorTag.style.pointerEvents = \"none\";\n break;\n }\n\n eventInformationAnchorTag.href = registrationLink;\n eventInformationAnchorTag.textContent = \"Register Now\";\n eventInformationAnchorTag.style.backgroundColor = \"#0161AF\";\n\n if (registrationLink === \"\") {\n eventInformationAnchorTag.setAttribute(\"disabled\", true);\n eventInformationAnchorTag.style.backgroundColor = \"#C6C6C6\";\n eventInformationAnchorTag.style.cursor = \"not-allowed\";\n eventInformationAnchorTag.style.pointerEvents = \"none\";\n }\n \n break;\n case status === \"past\":\n if (recordingLink) {\n eventInformationAnchorTag.href = recordingLink;\n eventInformationAnchorTag.textContent = \"View Recording\";\n eventInformationAnchorTag.style.backgroundColor = \"#0161AF\";\n break;\n }\n\n // Disable the anchor tag\n eventInformationAnchorTag.textContent = \"Pending upload\";\n eventInformationAnchorTag.style.cursor = \"not-allowed\";\n eventInformationAnchorTag.style.pointerEvents = \"none\";\n eventInformationAnchorTag.style.backgroundColor = \"#C6C6C6\";\n break;\n }\n });\n }\n } catch (e) {\n console.error(e);\n }\n})();\n","export function debounce(func, wait, immediate) {\n var timeout;\n\n return function executedFunction() {\n var context = this;\n var args = arguments;\n\n var later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n\n var callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) func.apply(context, args);\n };\n}\n\nexport function getEventStatusAndBackgroundColor(startDate, endDate, element) {\n const currentDate = new Date();\n const eventEndDateAndTime = new Date(endDate);\n const eventStartDateAndTime = new Date(startDate);\n\n switch (true) {\n case eventStartDateAndTime > currentDate:\n if (element) element.setAttribute(\"data-event-status\", \"upcoming-event\");\n return { status: \"upcoming\", backgroundColor: \"#0161AF\" };\n\n case eventStartDateAndTime <= currentDate &&\n eventEndDateAndTime >= currentDate:\n if (element) element.setAttribute(\"data-event-status\", \"upcoming-event\");\n return { status: \"now\", backgroundColor: \"#D0021B\" };\n\n case currentDate > eventEndDateAndTime:\n if (element) element.setAttribute(\"data-event-status\", \"past-event\");\n return { status: \"past\", backgroundColor: \"#323232\" };\n }\n}\n\nexport function setEventStatusAndBackgroundColor(\n element,\n status,\n backgroundColor\n) {\n [...element.querySelectorAll(\".event-status\")].forEach(item => {\n item.textContent = status.toUpperCase();\n });\n [...element.querySelectorAll(\".event-status-container\")].forEach(item => {\n item.style.backgroundColor = backgroundColor;\n });\n}\n"],"names":["document","querySelector","dataset","navLevel","querySelectorAll","map","el","startDate","endDate","registrationEndDate","registrationLink","recordingLink","eventInformationAnchorTag","element","currentDate","Date","eventEndDateAndTime","eventStartDateAndTime","setAttribute","status","backgroundColor","getEventStatusAndBackgroundColor","forEach","item","textContent","toUpperCase","style","setEventStatusAndBackgroundColor","cursor","pointerEvents","href","e","console","error"],"sourceRoot":""}