{ "version": 3, "sources": ["../../javascript/src/announcement.js", "../../javascript/announcements.js"], "sourcesContent": ["class Announcement {\n // example options = { action: \"\", dismissable: true, onclose: ()=>{...} }\n constructor(subject, body, options) {\n this.subject = subject;\n this.body = body;\n this.options = options ?? {};\n this.options.onclose ??= () => this.hide();\n }\n\n get dismissable() {\n return this.options.dismissable;\n }\n\n set dismissable(value) {\n this.options.dismissable = value;\n }\n\n render() {\n const template = document.getElementById(\"js-announcement\");\n this.element = template.cloneNode(true).content.firstElementChild;\n this.element.querySelector(\".announcement-subject\").innerHTML = this.subject;\n this.element.querySelector(\".announcement-body\").innerHTML = this.body;\n if (this.options.action) {\n const action = this.element.querySelector(\".announcement-action\")\n action.innerHTML = this.options.action;\n action.parentElement.classList.remove(\"d-none\");\n }\n if (this.options.dismissable) {\n this.element.querySelector(\".btn-close\").classList.remove(\"d-none\");\n } else {\n this.element.querySelector(\".btn-close\").classList.add(\"d-none\");\n }\n if (this.options.icon) {\n this.element.querySelector(\".announcement-icon\").classList.remove(\"bi-exclamation-square\");\n this.element.querySelector(\".announcement-icon\").classList.add(this.options.icon);\n }\n this.element.querySelector(\".btn-close\").addEventListener(\"click\", () => this.options.onclose());\n return this.element;\n }\n\n onclose(handler) {\n this.options.onclose = handler;\n }\n\n show() {\n if (this.element) {\n this.element.classList.remove(\"d-none\");\n } else {\n const container = document.getElementById(\"js-announcement-container\");\n container.prepend(this.render());\n }\n }\n\n hide() {\n if (this.element) {\n this.element.classList.add(\"d-none\");\n }\n }\n}\n\nexport default Announcement;\n", "import Announcement from \"./src/announcement\";\n\n$(()=>{\n document.body.classList.add(\"announcements-loading\");\n fetch(\"/api/announcements\")\n .then(response => {\n const json = response.json();\n return json;\n })\n .then(announcements => {\n announcements.forEach(data => {\n var announcement = new Announcement(data.subject, data.body, data);\n announcement.dismissable = !!data.dismiss_path;\n announcement.onclose(() => {\n fetch(data.dismiss_path, { method: \"POST\" });\n announcement.hide();\n });\n announcement.show();\n });\n })\n .finally(() => {\n // signal that announcements have been loaded, so that tests can wait for it\n document.body.classList.remove(\"announcements-loading\");\n document.body.classList.add(\"announcements-loaded\");\n });\n});\n"], "mappings": ";AAAA,IAAM,eAAN,MAAmB;AAAA;AAAA,EAEjB,YAAY,SAAS,MAAM,SAAS;AAClC,SAAK,UAAU;AACf,SAAK,OAAO;AACZ,SAAK,UAAU,WAAW,CAAC;AAC3B,SAAK,QAAQ,YAAY,MAAM,KAAK,KAAK;AAAA,EAC3C;AAAA,EAEA,IAAI,cAAc;AAChB,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,IAAI,YAAY,OAAO;AACrB,SAAK,QAAQ,cAAc;AAAA,EAC7B;AAAA,EAEA,SAAS;AACP,UAAM,WAAW,SAAS,eAAe,iBAAiB;AAC1D,SAAK,UAAU,SAAS,UAAU,IAAI,EAAE,QAAQ;AAChD,SAAK,QAAQ,cAAc,uBAAuB,EAAE,YAAY,KAAK;AACrE,SAAK,QAAQ,cAAc,oBAAoB,EAAE,YAAY,KAAK;AAClE,QAAI,KAAK,QAAQ,QAAQ;AACvB,YAAM,SAAS,KAAK,QAAQ,cAAc,sBAAsB;AAChE,aAAO,YAAY,KAAK,QAAQ;AAChC,aAAO,cAAc,UAAU,OAAO,QAAQ;AAAA,IAChD;AACA,QAAI,KAAK,QAAQ,aAAa;AAC5B,WAAK,QAAQ,cAAc,YAAY,EAAE,UAAU,OAAO,QAAQ;AAAA,IACpE,OAAO;AACL,WAAK,QAAQ,cAAc,YAAY,EAAE,UAAU,IAAI,QAAQ;AAAA,IACjE;AACA,QAAI,KAAK,QAAQ,MAAM;AACrB,WAAK,QAAQ,cAAc,oBAAoB,EAAE,UAAU,OAAO,uBAAuB;AACzF,WAAK,QAAQ,cAAc,oBAAoB,EAAE,UAAU,IAAI,KAAK,QAAQ,IAAI;AAAA,IAClF;AACA,SAAK,QAAQ,cAAc,YAAY,EAAE,iBAAiB,SAAS,MAAM,KAAK,QAAQ,QAAQ,CAAC;AAC/F,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAQ,SAAS;AACf,SAAK,QAAQ,UAAU;AAAA,EACzB;AAAA,EAEA,OAAO;AACL,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,UAAU,OAAO,QAAQ;AAAA,IACxC,OAAO;AACL,YAAM,YAAY,SAAS,eAAe,2BAA2B;AACrE,gBAAU,QAAQ,KAAK,OAAO,CAAC;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,OAAO;AACL,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,UAAU,IAAI,QAAQ;AAAA,IACrC;AAAA,EACF;AACF;AAEA,IAAO,uBAAQ;;;AC1Df,EAAE,MAAI;AACJ,WAAS,KAAK,UAAU,IAAI,uBAAuB;AACnD,QAAM,oBAAoB,EACvB,KAAK,cAAY;AAChB,UAAM,OAAO,SAAS,KAAK;AAC3B,WAAO;AAAA,EACT,CAAC,EACA,KAAK,mBAAiB;AACrB,kBAAc,QAAQ,UAAQ;AAC5B,UAAI,eAAe,IAAI,qBAAa,KAAK,SAAS,KAAK,MAAM,IAAI;AACjE,mBAAa,cAAc,CAAC,CAAC,KAAK;AAClC,mBAAa,QAAQ,MAAM;AACzB,cAAM,KAAK,cAAc,EAAE,QAAQ,OAAO,CAAC;AAC3C,qBAAa,KAAK;AAAA,MACpB,CAAC;AACD,mBAAa,KAAK;AAAA,IACpB,CAAC;AAAA,EACH,CAAC,EACA,QAAQ,MAAM;AAEb,aAAS,KAAK,UAAU,OAAO,uBAAuB;AACtD,aAAS,KAAK,UAAU,IAAI,sBAAsB;AAAA,EACpD,CAAC;AACL,CAAC;", "names": [] }