{ "version": 3, "sources": ["intermission_controller-cac6852c.js"], "sourcesContent": ["// Borrowed from here:\n// https://github.com/gorails-screencasts/423-stimulus-values-api-defaults/blob/master/app/javascript/controllers/countdown_controller.js\n\nimport { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static classes = [ \"base\", \"hidden\", \"warning\", \"expired\" ]\n static targets = [ \"hideWhenExpired\", \"countdown\", \"progressBar\" ]\n \n static values = {\n endDate: String,\n startDate: String,\n warningInterval: { type: Number, default: 60 },\n refreshInterval: { type: Number, default: 1000 },\n expiredMessage: { type: String, default: \"Ending now...\" },\n message: { type: String, default: \"${minutes}m ${seconds}s\" }\n }\n\n connect() {\n this.warningClassApplied = false\n this.intermissionRuntimeComplete = false\n \n if (this.hasEndDateValue && this.hasStartDateValue) {\n this.startTime = new Date(this.startDateValue).getTime()\n this.endTime = new Date(this.endDateValue).getTime()\n this.totalTime = (this.endTime - this.startTime)\n\n this.update()\n \n this.timer = setInterval(() => {\n this.update()\n }, this.refreshIntervalValue)\n } else {\n console.error(\"Missing data-intermission-end-date-value attribute\", this.element)\n }\n }\n\n disconnect() {\n this.stopTimer()\n }\n\n stopTimer() {\n if (this.timer) {\n clearInterval(this.timer)\n }\n }\n \n getDifferenceBetweenTimes(startTime, endTime) {\n return (endTime - startTime)\n }\n\n applyWarningClass() {\n this.element.classList.add(this.warningClass)\n this.element.classList.remove(this.baseClass)\n this.warningClassApplied = true\n }\n\n removeWarningClass() {\n this.element.classList.add(this.baseClass)\n this.element.classList.remove(this.warningClass)\n this.warningClassApplied = false\n }\n\n applyExpiredClass() {\n this.element.classList.remove(this.baseClass)\n this.element.classList.add(this.expiredClass)\n }\n\n update() {\n const difference = this.timeDifference()\n \n if (!this.intermissionRuntimeComplete) {\n const intermissionTimeCompleted = (this.endTime - this.startTime) - difference\n const percentageComplete = (intermissionTimeCompleted/this.totalTime)*100.0\n // console.log(`intermission time completed: ${percentageComplete}`)\n \n if (percentageComplete >= 100) {\n this.progressBarTarget.setAttribute(\"value\", 100)\n this.intermissionRuntimeComplete = true\n } else {\n this.progressBarTarget.setAttribute(\"value\", percentageComplete)\n }\n }\n \n if (this.hasWarningClass && (difference <= this.warningIntervalValue*1000) && (difference > 0) && !this.warningClassApplied) {\n this.applyWarningClass()\n }\n\n if (difference < 0) {\n if (this.warningClassApplied) {\n this.removeWarningClass()\n }\n \n if (this.hasExpiredClass) {\n this.applyExpiredClass()\n }\n \n this.countdownTarget.textContent = this.expiredMessageValue\n this.stopTimer()\n \n if (this.hasHideWhenExpiredTarget) {\n this.hideHideTargets()\n }\n \n return\n }\n\n const minutes = Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60))\n const seconds = Math.floor((difference % (1000 * 60)) / 1000)\n\n this.countdownTarget.textContent = this.messageValue\n .replace(\"${minutes}\", minutes)\n .replace(\"${seconds}\", seconds)\n }\n\n timeDifference() {\n const now = new Date().getTime()\n return this.getDifferenceBetweenTimes(now, this.endTime)\n }\n \n hideHideTargets() {\n this.hideWhenExpiredTargets.forEach((hideTarget) => {\n hideTarget.classList.add(this.hiddenClass)\n })\n }\n}"], "mappings": "wKAGA,gDAEA,qBAAO,SAAsB,EAAW,CAatC,SAAU,CACR,KAAK,oBAAsB,GAC3B,KAAK,4BAA8B,GAEnC,AAAI,KAAK,iBAAmB,KAAK,kBAC/B,MAAK,UAAY,GAAI,MAAK,KAAK,cAAc,EAAE,QAAQ,EACvD,KAAK,QAAU,GAAI,MAAK,KAAK,YAAY,EAAE,QAAQ,EACnD,KAAK,UAAa,KAAK,QAAU,KAAK,UAEtC,KAAK,OAAO,EAEZ,KAAK,MAAQ,YAAY,IAAM,CAC7B,KAAK,OAAO,CACd,EAAG,KAAK,oBAAoB,GAE5B,QAAQ,MAAM,qDAAsD,KAAK,OAAO,CAEpF,CAEA,YAAa,CACX,KAAK,UAAU,CACjB,CAEA,WAAY,CACV,AAAI,KAAK,OACP,cAAc,KAAK,KAAK,CAE5B,CAEA,0BAA0B,EAAW,EAAS,CAC5C,MAAQ,GAAU,CACpB,CAEA,mBAAoB,CAClB,KAAK,QAAQ,UAAU,IAAI,KAAK,YAAY,EAC5C,KAAK,QAAQ,UAAU,OAAO,KAAK,SAAS,EAC5C,KAAK,oBAAsB,EAC7B,CAEA,oBAAqB,CACnB,KAAK,QAAQ,UAAU,IAAI,KAAK,SAAS,EACzC,KAAK,QAAQ,UAAU,OAAO,KAAK,YAAY,EAC/C,KAAK,oBAAsB,EAC7B,CAEA,mBAAoB,CAClB,KAAK,QAAQ,UAAU,OAAO,KAAK,SAAS,EAC5C,KAAK,QAAQ,UAAU,IAAI,KAAK,YAAY,CAC9C,CAEA,QAAS,CACP,KAAM,GAAa,KAAK,eAAe,EAEvC,GAAI,CAAC,KAAK,4BAA6B,CAErC,KAAM,GAAsB,AADO,MAAK,QAAU,KAAK,UAAa,GACd,KAAK,UAAW,IAGtE,AAAI,GAAsB,IACxB,MAAK,kBAAkB,aAAa,QAAS,GAAG,EAChD,KAAK,4BAA8B,IAEnC,KAAK,kBAAkB,aAAa,QAAS,CAAkB,CAEnE,CAMA,GAJI,KAAK,iBAAoB,GAAc,KAAK,qBAAqB,KAAU,EAAa,GAAM,CAAC,KAAK,qBACtG,KAAK,kBAAkB,EAGrB,EAAa,EAAG,CAClB,AAAI,KAAK,qBACP,KAAK,mBAAmB,EAGtB,KAAK,iBACP,KAAK,kBAAkB,EAGzB,KAAK,gBAAgB,YAAc,KAAK,oBACxC,KAAK,UAAU,EAEX,KAAK,0BACP,KAAK,gBAAgB,EAGvB,MACF,CAEA,KAAM,GAAU,KAAK,MAAO,EAAc,KAAO,GAAK,IAAQ,KAAO,GAAG,EAClE,EAAU,KAAK,MAAO,EAAc,KAAO,IAAO,GAAI,EAE5D,KAAK,gBAAgB,YAAc,KAAK,aACrC,QAAQ,aAAc,CAAO,EAC7B,QAAQ,aAAc,CAAO,CAClC,CAEA,gBAAiB,CACf,KAAM,GAAM,GAAI,MAAK,EAAE,QAAQ,EAC/B,MAAO,MAAK,0BAA0B,EAAK,KAAK,OAAO,CACzD,CAEA,iBAAkB,CAChB,KAAK,uBAAuB,QAAQ,AAAC,GAAe,CAClD,EAAW,UAAU,IAAI,KAAK,WAAW,CAC3C,CAAC,CACH,CACF,CAvHS,EADT,EACS,UAAU,CAAE,OAAQ,SAAU,UAAW,SAAU,GACnD,EAFT,EAES,UAAU,CAAE,kBAAmB,YAAa,aAAc,GAE1D,EAJT,EAIS,SAAS,CACd,QAAS,OACT,UAAW,OACX,gBAAiB,CAAE,KAAM,OAAQ,QAAS,EAAG,EAC7C,gBAAiB,CAAE,KAAM,OAAQ,QAAS,GAAK,EAC/C,eAAgB,CAAE,KAAM,OAAQ,QAAS,eAAgB,EACzD,QAAS,CAAE,KAAM,OAAQ,QAAS,yBAA0B,CAC9D", "names": [] }