Files
Claper/assets/js/app.js

655 lines
18 KiB
JavaScript
Raw Normal View History

// Include phoenix_html to handle method=PUT/DELETE in forms and buttons.
2024-04-14 12:38:48 +02:00
import "phoenix_html";
// Establish Phoenix Socket and LiveView configuration.
2024-04-14 12:38:48 +02:00
import { Socket, Presence } from "phoenix";
import { LiveSocket } from "phoenix_live_view";
import topbar from "../vendor/topbar";
import Alpine from "alpinejs";
import moment from "moment-timezone";
import AirDatepicker from "air-datepicker";
import airdatepickerLocaleEn from "air-datepicker/locale/en";
import airdatepickerLocaleFr from "air-datepicker/locale/fr";
import airdatepickerLocaleDe from "air-datepicker/locale/de";
import airdatepickerLocaleEs from "air-datepicker/locale/es";
2024-06-07 15:04:02 +02:00
import airdatepickerLocaleNl from "air-datepicker/locale/nl";
2024-10-19 11:13:19 +02:00
import airdatepickerLocaleIt from "air-datepicker/locale/it";
2024-04-14 12:38:48 +02:00
import "moment/locale/de";
import "moment/locale/fr";
import "moment/locale/es";
2024-06-07 15:04:02 +02:00
import "moment/locale/nl";
2024-10-19 11:13:19 +02:00
import "moment/locale/it";
2024-04-14 12:38:48 +02:00
import QRCodeStyling from "qr-code-styling";
import { Presenter } from "./presenter";
import { Manager } from "./manager";
import Split from "split-grid";
import { TourGuideClient } from "@sjmc11/tourguidejs/src/Tour";
window.moment = moment;
// Get supported locales from backend configuration or fallback to default list
const supportedLocales = window.claperConfig?.supportedLocales || ["en", "fr", "de", "es", "nl", "it"];
2024-05-20 18:50:56 +02:00
var locale =
2024-04-14 12:38:48 +02:00
document.querySelector("html").getAttribute("lang") ||
navigator.language.split("-")[0];
2024-05-20 18:50:56 +02:00
if (!supportedLocales.includes(locale)) {
locale = "en";
}
2024-04-14 12:38:48 +02:00
window.moment.locale("en");
window.moment.locale(locale);
window.Alpine = Alpine;
Alpine.start();
2024-04-06 11:48:47 +02:00
let airdatepickerLocale = {
en: airdatepickerLocaleEn,
fr: airdatepickerLocaleFr,
de: airdatepickerLocaleDe,
2024-04-14 12:38:48 +02:00
es: airdatepickerLocaleEs,
2024-06-07 15:04:02 +02:00
nl: airdatepickerLocaleNl,
2024-10-19 11:13:19 +02:00
it: airdatepickerLocaleIt,
2024-04-14 12:38:48 +02:00
};
let csrfToken = document
.querySelector("meta[name='csrf-token']")
.getAttribute("content");
let Hooks = {};
2024-04-06 11:48:47 +02:00
Hooks.EmbeddedBanner = {
mounted() {
if (window !== window.parent) {
2024-04-14 12:38:48 +02:00
this.el.classList.remove("hidden");
2024-04-06 11:48:47 +02:00
}
},
updated() {
if (window !== window.parent) {
2024-04-14 12:38:48 +02:00
this.el.classList.remove("hidden");
2024-04-06 11:48:47 +02:00
}
2024-04-14 12:38:48 +02:00
},
};
2024-04-06 11:48:47 +02:00
Hooks.TourGuide = {
mounted() {
Add quizz feature + improvements commit 705ea00064e552f482bff52c3c5b11d23fbd5b4c Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 21 10:08:42 2024 -0500 Change version commit 330173bd64bb18c5ea7e68a2122f66497981c3c3 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 21 10:01:52 2024 -0500 Fix layout commit 3cc075962e961f8a78b0c30eca9b79db6b9a5731 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Dec 19 14:20:59 2024 +0100 Update changelog commit 63b1fa7ee591d40e44005b7939f51c99cf3e119e Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 15 18:56:01 2024 +0100 Fix upper commit 8e7bb1990c58e343de5aa18036eb0916573fb4c6 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 15 18:49:20 2024 +0100 Add pagination for events commit 28beacd120f0a1081e670e4a06bbc185cc699beb Author: Alex Lion <dev@alexandrelion.com> Date: Mon Dec 9 21:03:13 2024 +0100 Add pagination commit c79d6cce947869b98795b9baf541a32952624969 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 8 21:24:23 2024 +0100 Fix tests commit caad25ad75b5937ca0906dca89dedaa4d58ae072 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 8 17:43:55 2024 +0100 Fix user registration bug commit 38c3eecc49d1397a8bb7a4a11203775396d00272 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 22:23:24 2024 +0100 Update changelog commit e648ef08a0f61cf4b554fcbf0a83e02a2249de0d Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 22:06:27 2024 +0100 Add obin commit 6925117818e117dbd60efea5ae6c81a26a57f76f Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 19:39:03 2024 +0100 WIP commit be9b2886d3b879452f5bae08b3cdd181cac254f8 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 16:19:09 2024 +0100 Add LTI AGS for quizzes commit 29a7c96de6d4e38b26dfaa61bfa5e689a16d4935 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Dec 5 13:30:49 2024 +0100 Add translations commit 249fdc9188c7613a6adafb0b983303c1ae7601bd Author: Alex Lion <dev@alexandrelion.com> Date: Tue Dec 3 21:37:27 2024 +0100 Add qti export commit c2d56e30cdb6c629e957c64e4393dfd9d5af7159 Author: Alex Lion <dev@alexandrelion.com> Date: Tue Dec 3 20:44:58 2024 +0100 Fix report embed commit a34c239f9014e53b079106f1935bc2b079d01eed Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 11:32:32 2024 +0100 Add export quiz commit 8d1f34b90635776ae40849bd75fd135693b116fb Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 00:56:50 2024 +0100 Improve design commit d9a7370419ed9e288eccf263c2715330831e45e4 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 00:43:27 2024 +0100 Add exports commit b374b7bbccfa655dfad7695d7a24c5ddd4a07b66 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Nov 28 15:22:41 2024 +0100 Remove presence on manager commit 404e759ae3d2f5e555ae20437204553bffdc5065 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Nov 28 15:22:33 2024 +0100 Improve engagement report commit 39dbec6692c2d3f74a97647a703993d6152bfa06 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 23 15:39:59 2024 +0100 Add translation commit 354c2e30aece5bc7d800893ce8dee3868a1c1f71 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 23 15:18:53 2024 +0100 Change product tour behavior commit 5f253812282fb11011694b8828580d886f1f5899 Author: Alex <dev@alexandrelion.com> Date: Tue Nov 19 19:59:32 2024 +0100 WIP commit f411180433a05b89fc9d029e2b313968985e5c3f Author: Alex <dev@alexandrelion.com> Date: Tue Nov 19 19:32:30 2024 +0100 WIP commit 2b5989774eeb839f7b7b2a49377aca9fe4d68c09 Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 19:31:27 2024 +0100 WIP commit c8750a667f131b68818859796670c3022c6d53fe Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 18:23:01 2024 +0100 WIP commit fdb9efecb5688423ed2c82cf445868040653d380 Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 17:55:57 2024 +0100 WIP commit 5d12b12ce33eb5c1ba2a3307ef4ac679b279f511 Author: Alex <dev@alexandrelion.com> Date: Sat Nov 16 21:22:12 2024 +0100 WIP commit 548b714fda61464517247910af7e3e1c2bdae8cf Author: Alex <dev@alexandrelion.com> Date: Fri Nov 15 15:34:00 2024 +0100 WIP commit f0c87f34ea2ac837b4b3b3d6fd51c32bd625371e Author: Alex <dev@alexandrelion.com> Date: Wed Nov 13 22:09:24 2024 +0100 WIP commit c0c8bf99a538653208e28300566cced3d444a764 Author: Alex <dev@alexandrelion.com> Date: Mon Nov 11 13:02:36 2024 +0100 WIP commit 245ea9b836c2e69c7269fc7d8c7fd2edd0032eed Author: Alex <dev@alexandrelion.com> Date: Sun Nov 10 19:07:36 2024 +0100 Add presenter commit 0cf50918d62a9ab5ea127698219e05f781c659bb Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 23:20:35 2024 +0100 Refactor reactions commit ef8ffefe56d5b19dd895be181437c461134176ab Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 22:21:13 2024 +0100 Add tests commit c4055142ed63d8ea1be921f527bcaf595a2b9268 Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 11:28:00 2024 +0100 WIP commit 779e6970f7ee7ca89aab2bdfcff6197895b9ce5e Author: Alex <dev@alexandrelion.com> Date: Fri Nov 8 17:21:11 2024 +0100 WIP commit 9d25c440b830ded7e6fc2e0bcc9353520ec4a951 Author: Alex <dev@alexandrelion.com> Date: Fri Nov 8 11:54:31 2024 +0100 WIP commit c0157487a9e20b6773e517553681915c12367851 Author: Alex <dev@alexandrelion.com> Date: Fri Nov 1 17:13:04 2024 +0100 Fix condition commit a64439fbf2d852e127deb00a11906fb86b0c9ece Author: Alex <dev@alexandrelion.com> Date: Fri Nov 1 12:16:21 2024 +0100 WIP commit a994d959afe20ee380d42feb5ca6da2ab832d569 Author: Alex <dev@alexandrelion.com> Date: Wed Oct 30 23:06:24 2024 +0100 Fix changeset commit 5b2935fc33577af21ccc2558b49d9a813f4835f3 Merge: cec1a97 7476269 Author: Alex <dev@alexandrelion.com> Date: Sun Oct 20 11:26:51 2024 +0200 Merge branch 'dev' into feature/quizz commit cec1a97650867da3a09d8e23d0756a3a573e1bc8 Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 22:52:00 2024 +0200 WIP commit f65854f638393ce80fd9d17642e8a90ee5c1a06e Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 16:55:42 2024 +0200 WIP commit 1e6429a386c56be6a8fdd2f083e273b50a6bc4c9 Merge: 1977959 6f8a2fd Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 13:49:22 2024 +0200 Merge branch 'dev' into feature/quizz # Conflicts: # lib/claper_web/live/event_live/manage.html.heex commit 1977959efb12b5fb2f1795a8547e501c02e62122 Author: Alex <dev@alexandrelion.com> Date: Sat Oct 5 12:57:09 2024 +0200 WIP
2024-12-21 10:09:29 -05:00
this.triggerDiv = document.querySelector(this.el.dataset.btnTrigger);
this.btnTrigger = this.triggerDiv.querySelector('.open');
this.closeBtnTrigger = this.triggerDiv.querySelector('.close');
2024-04-06 11:48:47 +02:00
this.tour = new TourGuideClient({
nextLabel: this.el.dataset.nextLabel,
prevLabel: this.el.dataset.prevLabel,
finishLabel: this.el.dataset.finishLabel,
completeOnFinish: true,
rememberStep: true,
2024-04-14 12:38:48 +02:00
});
2024-04-06 11:48:47 +02:00
if (!this.tour.isFinished(this.el.dataset.group)) {
Add quizz feature + improvements commit 705ea00064e552f482bff52c3c5b11d23fbd5b4c Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 21 10:08:42 2024 -0500 Change version commit 330173bd64bb18c5ea7e68a2122f66497981c3c3 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 21 10:01:52 2024 -0500 Fix layout commit 3cc075962e961f8a78b0c30eca9b79db6b9a5731 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Dec 19 14:20:59 2024 +0100 Update changelog commit 63b1fa7ee591d40e44005b7939f51c99cf3e119e Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 15 18:56:01 2024 +0100 Fix upper commit 8e7bb1990c58e343de5aa18036eb0916573fb4c6 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 15 18:49:20 2024 +0100 Add pagination for events commit 28beacd120f0a1081e670e4a06bbc185cc699beb Author: Alex Lion <dev@alexandrelion.com> Date: Mon Dec 9 21:03:13 2024 +0100 Add pagination commit c79d6cce947869b98795b9baf541a32952624969 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 8 21:24:23 2024 +0100 Fix tests commit caad25ad75b5937ca0906dca89dedaa4d58ae072 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 8 17:43:55 2024 +0100 Fix user registration bug commit 38c3eecc49d1397a8bb7a4a11203775396d00272 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 22:23:24 2024 +0100 Update changelog commit e648ef08a0f61cf4b554fcbf0a83e02a2249de0d Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 22:06:27 2024 +0100 Add obin commit 6925117818e117dbd60efea5ae6c81a26a57f76f Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 19:39:03 2024 +0100 WIP commit be9b2886d3b879452f5bae08b3cdd181cac254f8 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 16:19:09 2024 +0100 Add LTI AGS for quizzes commit 29a7c96de6d4e38b26dfaa61bfa5e689a16d4935 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Dec 5 13:30:49 2024 +0100 Add translations commit 249fdc9188c7613a6adafb0b983303c1ae7601bd Author: Alex Lion <dev@alexandrelion.com> Date: Tue Dec 3 21:37:27 2024 +0100 Add qti export commit c2d56e30cdb6c629e957c64e4393dfd9d5af7159 Author: Alex Lion <dev@alexandrelion.com> Date: Tue Dec 3 20:44:58 2024 +0100 Fix report embed commit a34c239f9014e53b079106f1935bc2b079d01eed Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 11:32:32 2024 +0100 Add export quiz commit 8d1f34b90635776ae40849bd75fd135693b116fb Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 00:56:50 2024 +0100 Improve design commit d9a7370419ed9e288eccf263c2715330831e45e4 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 00:43:27 2024 +0100 Add exports commit b374b7bbccfa655dfad7695d7a24c5ddd4a07b66 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Nov 28 15:22:41 2024 +0100 Remove presence on manager commit 404e759ae3d2f5e555ae20437204553bffdc5065 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Nov 28 15:22:33 2024 +0100 Improve engagement report commit 39dbec6692c2d3f74a97647a703993d6152bfa06 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 23 15:39:59 2024 +0100 Add translation commit 354c2e30aece5bc7d800893ce8dee3868a1c1f71 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 23 15:18:53 2024 +0100 Change product tour behavior commit 5f253812282fb11011694b8828580d886f1f5899 Author: Alex <dev@alexandrelion.com> Date: Tue Nov 19 19:59:32 2024 +0100 WIP commit f411180433a05b89fc9d029e2b313968985e5c3f Author: Alex <dev@alexandrelion.com> Date: Tue Nov 19 19:32:30 2024 +0100 WIP commit 2b5989774eeb839f7b7b2a49377aca9fe4d68c09 Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 19:31:27 2024 +0100 WIP commit c8750a667f131b68818859796670c3022c6d53fe Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 18:23:01 2024 +0100 WIP commit fdb9efecb5688423ed2c82cf445868040653d380 Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 17:55:57 2024 +0100 WIP commit 5d12b12ce33eb5c1ba2a3307ef4ac679b279f511 Author: Alex <dev@alexandrelion.com> Date: Sat Nov 16 21:22:12 2024 +0100 WIP commit 548b714fda61464517247910af7e3e1c2bdae8cf Author: Alex <dev@alexandrelion.com> Date: Fri Nov 15 15:34:00 2024 +0100 WIP commit f0c87f34ea2ac837b4b3b3d6fd51c32bd625371e Author: Alex <dev@alexandrelion.com> Date: Wed Nov 13 22:09:24 2024 +0100 WIP commit c0c8bf99a538653208e28300566cced3d444a764 Author: Alex <dev@alexandrelion.com> Date: Mon Nov 11 13:02:36 2024 +0100 WIP commit 245ea9b836c2e69c7269fc7d8c7fd2edd0032eed Author: Alex <dev@alexandrelion.com> Date: Sun Nov 10 19:07:36 2024 +0100 Add presenter commit 0cf50918d62a9ab5ea127698219e05f781c659bb Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 23:20:35 2024 +0100 Refactor reactions commit ef8ffefe56d5b19dd895be181437c461134176ab Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 22:21:13 2024 +0100 Add tests commit c4055142ed63d8ea1be921f527bcaf595a2b9268 Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 11:28:00 2024 +0100 WIP commit 779e6970f7ee7ca89aab2bdfcff6197895b9ce5e Author: Alex <dev@alexandrelion.com> Date: Fri Nov 8 17:21:11 2024 +0100 WIP commit 9d25c440b830ded7e6fc2e0bcc9353520ec4a951 Author: Alex <dev@alexandrelion.com> Date: Fri Nov 8 11:54:31 2024 +0100 WIP commit c0157487a9e20b6773e517553681915c12367851 Author: Alex <dev@alexandrelion.com> Date: Fri Nov 1 17:13:04 2024 +0100 Fix condition commit a64439fbf2d852e127deb00a11906fb86b0c9ece Author: Alex <dev@alexandrelion.com> Date: Fri Nov 1 12:16:21 2024 +0100 WIP commit a994d959afe20ee380d42feb5ca6da2ab832d569 Author: Alex <dev@alexandrelion.com> Date: Wed Oct 30 23:06:24 2024 +0100 Fix changeset commit 5b2935fc33577af21ccc2558b49d9a813f4835f3 Merge: cec1a97 7476269 Author: Alex <dev@alexandrelion.com> Date: Sun Oct 20 11:26:51 2024 +0200 Merge branch 'dev' into feature/quizz commit cec1a97650867da3a09d8e23d0756a3a573e1bc8 Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 22:52:00 2024 +0200 WIP commit f65854f638393ce80fd9d17642e8a90ee5c1a06e Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 16:55:42 2024 +0200 WIP commit 1e6429a386c56be6a8fdd2f083e273b50a6bc4c9 Merge: 1977959 6f8a2fd Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 13:49:22 2024 +0200 Merge branch 'dev' into feature/quizz # Conflicts: # lib/claper_web/live/event_live/manage.html.heex commit 1977959efb12b5fb2f1795a8547e501c02e62122 Author: Alex <dev@alexandrelion.com> Date: Sat Oct 5 12:57:09 2024 +0200 WIP
2024-12-21 10:09:29 -05:00
this.triggerDiv.classList.remove("hidden");
2024-04-06 11:48:47 +02:00
}
this.tour.onBeforeExit(() => {
2024-04-14 12:38:48 +02:00
this.tour.finishTour(true, this.el.dataset.group);
});
Add quizz feature + improvements commit 705ea00064e552f482bff52c3c5b11d23fbd5b4c Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 21 10:08:42 2024 -0500 Change version commit 330173bd64bb18c5ea7e68a2122f66497981c3c3 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 21 10:01:52 2024 -0500 Fix layout commit 3cc075962e961f8a78b0c30eca9b79db6b9a5731 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Dec 19 14:20:59 2024 +0100 Update changelog commit 63b1fa7ee591d40e44005b7939f51c99cf3e119e Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 15 18:56:01 2024 +0100 Fix upper commit 8e7bb1990c58e343de5aa18036eb0916573fb4c6 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 15 18:49:20 2024 +0100 Add pagination for events commit 28beacd120f0a1081e670e4a06bbc185cc699beb Author: Alex Lion <dev@alexandrelion.com> Date: Mon Dec 9 21:03:13 2024 +0100 Add pagination commit c79d6cce947869b98795b9baf541a32952624969 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 8 21:24:23 2024 +0100 Fix tests commit caad25ad75b5937ca0906dca89dedaa4d58ae072 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 8 17:43:55 2024 +0100 Fix user registration bug commit 38c3eecc49d1397a8bb7a4a11203775396d00272 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 22:23:24 2024 +0100 Update changelog commit e648ef08a0f61cf4b554fcbf0a83e02a2249de0d Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 22:06:27 2024 +0100 Add obin commit 6925117818e117dbd60efea5ae6c81a26a57f76f Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 19:39:03 2024 +0100 WIP commit be9b2886d3b879452f5bae08b3cdd181cac254f8 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 16:19:09 2024 +0100 Add LTI AGS for quizzes commit 29a7c96de6d4e38b26dfaa61bfa5e689a16d4935 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Dec 5 13:30:49 2024 +0100 Add translations commit 249fdc9188c7613a6adafb0b983303c1ae7601bd Author: Alex Lion <dev@alexandrelion.com> Date: Tue Dec 3 21:37:27 2024 +0100 Add qti export commit c2d56e30cdb6c629e957c64e4393dfd9d5af7159 Author: Alex Lion <dev@alexandrelion.com> Date: Tue Dec 3 20:44:58 2024 +0100 Fix report embed commit a34c239f9014e53b079106f1935bc2b079d01eed Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 11:32:32 2024 +0100 Add export quiz commit 8d1f34b90635776ae40849bd75fd135693b116fb Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 00:56:50 2024 +0100 Improve design commit d9a7370419ed9e288eccf263c2715330831e45e4 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 00:43:27 2024 +0100 Add exports commit b374b7bbccfa655dfad7695d7a24c5ddd4a07b66 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Nov 28 15:22:41 2024 +0100 Remove presence on manager commit 404e759ae3d2f5e555ae20437204553bffdc5065 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Nov 28 15:22:33 2024 +0100 Improve engagement report commit 39dbec6692c2d3f74a97647a703993d6152bfa06 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 23 15:39:59 2024 +0100 Add translation commit 354c2e30aece5bc7d800893ce8dee3868a1c1f71 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 23 15:18:53 2024 +0100 Change product tour behavior commit 5f253812282fb11011694b8828580d886f1f5899 Author: Alex <dev@alexandrelion.com> Date: Tue Nov 19 19:59:32 2024 +0100 WIP commit f411180433a05b89fc9d029e2b313968985e5c3f Author: Alex <dev@alexandrelion.com> Date: Tue Nov 19 19:32:30 2024 +0100 WIP commit 2b5989774eeb839f7b7b2a49377aca9fe4d68c09 Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 19:31:27 2024 +0100 WIP commit c8750a667f131b68818859796670c3022c6d53fe Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 18:23:01 2024 +0100 WIP commit fdb9efecb5688423ed2c82cf445868040653d380 Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 17:55:57 2024 +0100 WIP commit 5d12b12ce33eb5c1ba2a3307ef4ac679b279f511 Author: Alex <dev@alexandrelion.com> Date: Sat Nov 16 21:22:12 2024 +0100 WIP commit 548b714fda61464517247910af7e3e1c2bdae8cf Author: Alex <dev@alexandrelion.com> Date: Fri Nov 15 15:34:00 2024 +0100 WIP commit f0c87f34ea2ac837b4b3b3d6fd51c32bd625371e Author: Alex <dev@alexandrelion.com> Date: Wed Nov 13 22:09:24 2024 +0100 WIP commit c0c8bf99a538653208e28300566cced3d444a764 Author: Alex <dev@alexandrelion.com> Date: Mon Nov 11 13:02:36 2024 +0100 WIP commit 245ea9b836c2e69c7269fc7d8c7fd2edd0032eed Author: Alex <dev@alexandrelion.com> Date: Sun Nov 10 19:07:36 2024 +0100 Add presenter commit 0cf50918d62a9ab5ea127698219e05f781c659bb Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 23:20:35 2024 +0100 Refactor reactions commit ef8ffefe56d5b19dd895be181437c461134176ab Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 22:21:13 2024 +0100 Add tests commit c4055142ed63d8ea1be921f527bcaf595a2b9268 Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 11:28:00 2024 +0100 WIP commit 779e6970f7ee7ca89aab2bdfcff6197895b9ce5e Author: Alex <dev@alexandrelion.com> Date: Fri Nov 8 17:21:11 2024 +0100 WIP commit 9d25c440b830ded7e6fc2e0bcc9353520ec4a951 Author: Alex <dev@alexandrelion.com> Date: Fri Nov 8 11:54:31 2024 +0100 WIP commit c0157487a9e20b6773e517553681915c12367851 Author: Alex <dev@alexandrelion.com> Date: Fri Nov 1 17:13:04 2024 +0100 Fix condition commit a64439fbf2d852e127deb00a11906fb86b0c9ece Author: Alex <dev@alexandrelion.com> Date: Fri Nov 1 12:16:21 2024 +0100 WIP commit a994d959afe20ee380d42feb5ca6da2ab832d569 Author: Alex <dev@alexandrelion.com> Date: Wed Oct 30 23:06:24 2024 +0100 Fix changeset commit 5b2935fc33577af21ccc2558b49d9a813f4835f3 Merge: cec1a97 7476269 Author: Alex <dev@alexandrelion.com> Date: Sun Oct 20 11:26:51 2024 +0200 Merge branch 'dev' into feature/quizz commit cec1a97650867da3a09d8e23d0756a3a573e1bc8 Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 22:52:00 2024 +0200 WIP commit f65854f638393ce80fd9d17642e8a90ee5c1a06e Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 16:55:42 2024 +0200 WIP commit 1e6429a386c56be6a8fdd2f083e273b50a6bc4c9 Merge: 1977959 6f8a2fd Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 13:49:22 2024 +0200 Merge branch 'dev' into feature/quizz # Conflicts: # lib/claper_web/live/event_live/manage.html.heex commit 1977959efb12b5fb2f1795a8547e501c02e62122 Author: Alex <dev@alexandrelion.com> Date: Sat Oct 5 12:57:09 2024 +0200 WIP
2024-12-21 10:09:29 -05:00
this.btnTrigger.addEventListener("click", () => {
this.startTour();
});
this.closeBtnTrigger.addEventListener("click", (e) => {
this.triggerDiv.classList.add("hidden");
this.tour.finishTour(true, this.el.dataset.group);
});
},
startTour() {
this.triggerDiv.classList.add("hidden");
this.tour.start(this.el.dataset.group);
},
destroyed() {
this.btnTrigger.removeEventListener("click", () => {
this.startTour();
});
this.closeBtnTrigger.removeEventListener("click", () => {
this.triggerDiv.classList.add("hidden");
this.tour.finishTour(true, this.el.dataset.group);
});
2024-04-14 12:38:48 +02:00
},
};
2024-04-06 11:48:47 +02:00
Hooks.Split = {
mounted() {
2024-04-14 12:38:48 +02:00
const type = this.el.dataset.type;
2024-06-08 16:31:59 +02:00
const id = this.el.id;
2024-04-14 12:38:48 +02:00
const gutter = this.el.dataset.gutter;
2024-06-08 16:31:59 +02:00
const forceLayout = this.el.classList.contains("grid-cols-[1fr]");
2024-04-14 12:38:48 +02:00
const columnSlitValue =
2024-06-08 16:31:59 +02:00
localStorage.getItem(`column-split-${id}`) || "1fr 10px 1fr";
const rowSlitValue =
Add quizz feature + improvements commit 705ea00064e552f482bff52c3c5b11d23fbd5b4c Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 21 10:08:42 2024 -0500 Change version commit 330173bd64bb18c5ea7e68a2122f66497981c3c3 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 21 10:01:52 2024 -0500 Fix layout commit 3cc075962e961f8a78b0c30eca9b79db6b9a5731 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Dec 19 14:20:59 2024 +0100 Update changelog commit 63b1fa7ee591d40e44005b7939f51c99cf3e119e Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 15 18:56:01 2024 +0100 Fix upper commit 8e7bb1990c58e343de5aa18036eb0916573fb4c6 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 15 18:49:20 2024 +0100 Add pagination for events commit 28beacd120f0a1081e670e4a06bbc185cc699beb Author: Alex Lion <dev@alexandrelion.com> Date: Mon Dec 9 21:03:13 2024 +0100 Add pagination commit c79d6cce947869b98795b9baf541a32952624969 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 8 21:24:23 2024 +0100 Fix tests commit caad25ad75b5937ca0906dca89dedaa4d58ae072 Author: Alex Lion <dev@alexandrelion.com> Date: Sun Dec 8 17:43:55 2024 +0100 Fix user registration bug commit 38c3eecc49d1397a8bb7a4a11203775396d00272 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 22:23:24 2024 +0100 Update changelog commit e648ef08a0f61cf4b554fcbf0a83e02a2249de0d Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 22:06:27 2024 +0100 Add obin commit 6925117818e117dbd60efea5ae6c81a26a57f76f Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 19:39:03 2024 +0100 WIP commit be9b2886d3b879452f5bae08b3cdd181cac254f8 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Dec 7 16:19:09 2024 +0100 Add LTI AGS for quizzes commit 29a7c96de6d4e38b26dfaa61bfa5e689a16d4935 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Dec 5 13:30:49 2024 +0100 Add translations commit 249fdc9188c7613a6adafb0b983303c1ae7601bd Author: Alex Lion <dev@alexandrelion.com> Date: Tue Dec 3 21:37:27 2024 +0100 Add qti export commit c2d56e30cdb6c629e957c64e4393dfd9d5af7159 Author: Alex Lion <dev@alexandrelion.com> Date: Tue Dec 3 20:44:58 2024 +0100 Fix report embed commit a34c239f9014e53b079106f1935bc2b079d01eed Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 11:32:32 2024 +0100 Add export quiz commit 8d1f34b90635776ae40849bd75fd135693b116fb Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 00:56:50 2024 +0100 Improve design commit d9a7370419ed9e288eccf263c2715330831e45e4 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 30 00:43:27 2024 +0100 Add exports commit b374b7bbccfa655dfad7695d7a24c5ddd4a07b66 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Nov 28 15:22:41 2024 +0100 Remove presence on manager commit 404e759ae3d2f5e555ae20437204553bffdc5065 Author: Alex Lion <dev@alexandrelion.com> Date: Thu Nov 28 15:22:33 2024 +0100 Improve engagement report commit 39dbec6692c2d3f74a97647a703993d6152bfa06 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 23 15:39:59 2024 +0100 Add translation commit 354c2e30aece5bc7d800893ce8dee3868a1c1f71 Author: Alex Lion <dev@alexandrelion.com> Date: Sat Nov 23 15:18:53 2024 +0100 Change product tour behavior commit 5f253812282fb11011694b8828580d886f1f5899 Author: Alex <dev@alexandrelion.com> Date: Tue Nov 19 19:59:32 2024 +0100 WIP commit f411180433a05b89fc9d029e2b313968985e5c3f Author: Alex <dev@alexandrelion.com> Date: Tue Nov 19 19:32:30 2024 +0100 WIP commit 2b5989774eeb839f7b7b2a49377aca9fe4d68c09 Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 19:31:27 2024 +0100 WIP commit c8750a667f131b68818859796670c3022c6d53fe Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 18:23:01 2024 +0100 WIP commit fdb9efecb5688423ed2c82cf445868040653d380 Author: Alex <dev@alexandrelion.com> Date: Sun Nov 17 17:55:57 2024 +0100 WIP commit 5d12b12ce33eb5c1ba2a3307ef4ac679b279f511 Author: Alex <dev@alexandrelion.com> Date: Sat Nov 16 21:22:12 2024 +0100 WIP commit 548b714fda61464517247910af7e3e1c2bdae8cf Author: Alex <dev@alexandrelion.com> Date: Fri Nov 15 15:34:00 2024 +0100 WIP commit f0c87f34ea2ac837b4b3b3d6fd51c32bd625371e Author: Alex <dev@alexandrelion.com> Date: Wed Nov 13 22:09:24 2024 +0100 WIP commit c0c8bf99a538653208e28300566cced3d444a764 Author: Alex <dev@alexandrelion.com> Date: Mon Nov 11 13:02:36 2024 +0100 WIP commit 245ea9b836c2e69c7269fc7d8c7fd2edd0032eed Author: Alex <dev@alexandrelion.com> Date: Sun Nov 10 19:07:36 2024 +0100 Add presenter commit 0cf50918d62a9ab5ea127698219e05f781c659bb Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 23:20:35 2024 +0100 Refactor reactions commit ef8ffefe56d5b19dd895be181437c461134176ab Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 22:21:13 2024 +0100 Add tests commit c4055142ed63d8ea1be921f527bcaf595a2b9268 Author: Alex <dev@alexandrelion.com> Date: Sat Nov 9 11:28:00 2024 +0100 WIP commit 779e6970f7ee7ca89aab2bdfcff6197895b9ce5e Author: Alex <dev@alexandrelion.com> Date: Fri Nov 8 17:21:11 2024 +0100 WIP commit 9d25c440b830ded7e6fc2e0bcc9353520ec4a951 Author: Alex <dev@alexandrelion.com> Date: Fri Nov 8 11:54:31 2024 +0100 WIP commit c0157487a9e20b6773e517553681915c12367851 Author: Alex <dev@alexandrelion.com> Date: Fri Nov 1 17:13:04 2024 +0100 Fix condition commit a64439fbf2d852e127deb00a11906fb86b0c9ece Author: Alex <dev@alexandrelion.com> Date: Fri Nov 1 12:16:21 2024 +0100 WIP commit a994d959afe20ee380d42feb5ca6da2ab832d569 Author: Alex <dev@alexandrelion.com> Date: Wed Oct 30 23:06:24 2024 +0100 Fix changeset commit 5b2935fc33577af21ccc2558b49d9a813f4835f3 Merge: cec1a97 7476269 Author: Alex <dev@alexandrelion.com> Date: Sun Oct 20 11:26:51 2024 +0200 Merge branch 'dev' into feature/quizz commit cec1a97650867da3a09d8e23d0756a3a573e1bc8 Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 22:52:00 2024 +0200 WIP commit f65854f638393ce80fd9d17642e8a90ee5c1a06e Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 16:55:42 2024 +0200 WIP commit 1e6429a386c56be6a8fdd2f083e273b50a6bc4c9 Merge: 1977959 6f8a2fd Author: Alex <dev@alexandrelion.com> Date: Sat Oct 19 13:49:22 2024 +0200 Merge branch 'dev' into feature/quizz # Conflicts: # lib/claper_web/live/event_live/manage.html.heex commit 1977959efb12b5fb2f1795a8547e501c02e62122 Author: Alex <dev@alexandrelion.com> Date: Sat Oct 5 12:57:09 2024 +0200 WIP
2024-12-21 10:09:29 -05:00
localStorage.getItem(`row-split-${id}`) || "0.5fr 10px 1fr";
2024-04-06 11:48:47 +02:00
if (type === "column") {
this.columnSplit = Split({
2024-04-14 12:38:48 +02:00
columnGutters: [
{
track: 1,
element: this.el.querySelector(gutter),
},
],
2024-04-06 11:48:47 +02:00
onDragEnd: () => {
2024-04-14 12:38:48 +02:00
const currentPosition = this.el.style["grid-template-columns"];
2024-06-08 16:31:59 +02:00
localStorage.setItem(`column-split-${id}`, currentPosition);
2024-04-06 11:48:47 +02:00
},
2024-04-14 12:38:48 +02:00
});
2024-06-08 16:31:59 +02:00
if (!forceLayout) {
this.el.style["grid-template-columns"] = columnSlitValue;
}
2024-04-06 11:48:47 +02:00
} else {
this.rowSplit = Split({
2024-04-14 12:38:48 +02:00
rowGutters: [
{
track: 1,
element: this.el.querySelector(gutter),
},
],
2024-04-06 11:48:47 +02:00
onDragEnd: () => {
2024-04-14 12:38:48 +02:00
const value = this.el.style["grid-template-rows"];
2024-06-08 16:31:59 +02:00
localStorage.setItem(`row-split-${id}`, value);
2024-04-06 11:48:47 +02:00
},
2024-04-14 12:38:48 +02:00
});
2024-06-08 16:31:59 +02:00
if (!forceLayout) {
this.el.style["grid-template-rows"] = rowSlitValue;
}
2024-04-06 11:48:47 +02:00
}
},
updated() {
2024-06-08 16:31:59 +02:00
const id = this.el.id;
const forceLayout = this.el.classList.contains("grid-cols-[1fr]");
if (forceLayout) {
return;
2024-04-06 11:48:47 +02:00
}
2024-06-08 16:31:59 +02:00
this.mounted();
2024-04-06 11:48:47 +02:00
},
destroyed() {
if (this.columnSplit) {
2024-04-14 12:38:48 +02:00
this.columnSplit.destroy();
2024-04-06 11:48:47 +02:00
}
if (this.rowSplit) {
2024-04-14 12:38:48 +02:00
this.rowSplit.destroy();
2024-04-06 11:48:47 +02:00
}
2024-04-14 12:38:48 +02:00
},
};
2024-04-06 11:48:47 +02:00
Hooks.Scroll = {
mounted() {
2024-04-14 12:38:48 +02:00
if (this.el.dataset.postsNb > 4)
window.scrollTo({
top: document.querySelector(this.el.dataset.target).scrollHeight,
behavior: "smooth",
});
this.handleEvent("scroll", () => {});
2024-04-06 11:48:47 +02:00
},
updated() {
2024-04-14 12:38:48 +02:00
let t = document.querySelector(this.el.dataset.target);
if (
this.el.childElementCount > 4 &&
window.scrollY + window.innerHeight >= t.offsetHeight - 300
) {
window.scrollTo({ top: t.scrollHeight, behavior: "smooth" });
2024-04-06 11:48:47 +02:00
}
2024-04-14 12:38:48 +02:00
},
};
Hooks.ScrollIntoDiv = {
mounted() {
2024-10-13 20:57:00 +02:00
let useParent = this.el.dataset.useParent === "true";
this.scrollElement = this.el.dataset.useParent === "true" ? this.el.parentElement : this.el;
this.checkIfAtBottom();
this.scrollToBottom(true);
this.handleEvent("scroll", () => this.scrollToBottom());
this.scrollElement.addEventListener("scroll", () => this.checkIfAtBottom());
},
checkIfAtBottom() {
this.isAtBottom = this.scrollElement.scrollHeight - this.scrollElement.scrollTop - this.scrollElement.clientHeight <= 30;
},
scrollToBottom(force = false) {
if (force || this.isAtBottom) {
this.scrollElement.scrollTo({ top: this.scrollElement.scrollHeight, behavior: "smooth" });
2024-04-06 11:48:47 +02:00
}
2024-04-14 12:38:48 +02:00
},
2024-10-13 20:57:00 +02:00
updated() {
this.scrollToBottom();
},
destroyed() {
this.scrollElement.removeEventListener("scroll", () => this.checkIfAtBottom());
}
2024-04-14 12:38:48 +02:00
};
Hooks.NicknamePicker = {
mounted() {
2024-04-14 12:38:48 +02:00
let currentNickname = localStorage.getItem("nickname") || "";
if (currentNickname.length > 0) {
2024-04-14 12:38:48 +02:00
this.pushEvent("set-nickname", { nickname: currentNickname });
}
2024-04-14 12:38:48 +02:00
this.el.addEventListener("click", (e) => this.clicked(e));
},
2024-10-13 20:57:00 +02:00
reconnected() {
let currentNickname = localStorage.getItem("nickname") || "";
if (currentNickname.length > 0) {
this.pushEvent("set-nickname", { nickname: currentNickname });
}
},
2024-04-06 11:48:47 +02:00
destroyed() {
2024-04-14 12:38:48 +02:00
this.el.removeEventListener("click", (e) => this.clicked(e));
},
clicked(e) {
2024-04-14 12:38:48 +02:00
let nickname = prompt(
this.el.dataset.prompt,
localStorage.getItem("nickname") || ""
);
if (nickname) {
2024-04-14 12:38:48 +02:00
localStorage.setItem("nickname", nickname);
this.pushEvent("set-nickname", { nickname: nickname });
}
},
2024-04-14 12:38:48 +02:00
};
Hooks.EmptyNickname = {
mounted() {
2024-04-14 12:38:48 +02:00
this.el.addEventListener("click", (e) => this.clicked(e));
},
2024-04-06 11:48:47 +02:00
destroyed() {
2024-04-14 12:38:48 +02:00
this.el.removeEventListener("click", (e) => this.clicked(e));
},
clicked(e) {
2024-04-14 12:38:48 +02:00
localStorage.removeItem("nickname");
},
2024-04-14 12:38:48 +02:00
};
Hooks.PostForm = {
onPress(e, submitBtn, TA) {
if (e.key == "Enter" && !e.shiftKey) {
2024-04-14 12:38:48 +02:00
e.preventDefault();
submitBtn.click();
} else {
if (TA.value.length > 0 && TA.value.length < 256) {
2024-04-14 12:38:48 +02:00
submitBtn.classList.remove("opacity-50");
submitBtn.classList.add("opacity-100");
submitBtn.disabled = false;
} else {
2024-04-14 12:38:48 +02:00
submitBtn.classList.add("opacity-50");
submitBtn.classList.remove("opacity-100");
submitBtn.disabled = true;
}
}
},
onSubmit(e, TA) {
2024-04-14 12:38:48 +02:00
e.preventDefault();
document.getElementById("hiddenSubmit").click();
TA.value = "";
},
mounted() {
setTimeout(() => {
2024-04-14 12:38:48 +02:00
const submitBtn = document.getElementById("submitBtn");
const TA = document.getElementById("postFormTA");
if (submitBtn && TA) {
2024-04-14 12:38:48 +02:00
submitBtn.addEventListener("click", (e) => this.onSubmit(e, TA));
TA.addEventListener("keydown", (e) => this.onPress(e, submitBtn, TA));
}
2024-04-14 12:38:48 +02:00
}, 500);
// set nickname if present
2024-04-14 12:38:48 +02:00
let nickname = this.el.dataset.nickname;
if (nickname) {
2024-04-14 12:38:48 +02:00
localStorage.setItem("nickname", nickname);
}
},
updated() {
2024-04-14 12:38:48 +02:00
const submitBtn = document.getElementById("submitBtn");
const TA = document.getElementById("postFormTA");
if (TA.value.length > 0 && TA.value.length < 256) {
2024-04-14 12:38:48 +02:00
submitBtn.classList.remove("opacity-50");
submitBtn.classList.add("opacity-100");
submitBtn.disabled = false;
} else {
2024-04-14 12:38:48 +02:00
submitBtn.classList.add("opacity-50");
submitBtn.classList.remove("opacity-100");
submitBtn.disabled = true;
}
},
destroyed() {
2024-04-14 12:38:48 +02:00
const submitBtn = document.getElementById("submitBtn");
const TA = document.getElementById("postFormTA");
if (submitBtn && TA) {
2024-04-14 12:38:48 +02:00
TA.removeEventListener("keydown", (e) => this.onPress(e, submitBtn, TA));
submitBtn.removeEventListener("click", (e) => this.onSubmit(e, TA));
}
2024-04-14 12:38:48 +02:00
},
};
Hooks.CalendarLocalDate = {
mounted() {
2024-04-14 12:38:48 +02:00
this.el.innerHTML = moment.utc(this.el.dataset.date).local().calendar();
},
updated() {
2024-04-14 12:38:48 +02:00
this.el.innerHTML = moment.utc(this.el.dataset.date).local().calendar();
},
};
Hooks.Pickr = {
mounted() {
2024-04-14 12:38:48 +02:00
const localTime = this.el.querySelector("input[type=text]");
const utcTime = this.el.querySelector("input[type=hidden]");
localTime.value = moment
.utc(utcTime.value)
.local()
.format("DD-MM-YYYY HH:mm");
2024-04-06 11:48:47 +02:00
this.pickr = new AirDatepicker(localTime, {
dateFormat: "dd-MM-yyyy",
timepicker: true,
minutesStep: 5,
minDate: moment(),
timeFormat: "HH:mm",
selectedDates: [moment(localTime.value, "DD-MM-YYYY HH:mm").toDate()],
2024-04-14 12:38:48 +02:00
onSelect: ({ date }) => {
const utc = moment(date).utc().format("YYYY-MM-DDTHH:mm:ss");
utcTime.value = utc;
},
2024-04-14 12:38:48 +02:00
locale: airdatepickerLocale[locale],
});
},
2024-04-14 12:38:48 +02:00
updated() {},
destroyed() {
2024-04-14 12:38:48 +02:00
this.pickr.destroy();
},
};
Hooks.UpdateAttendees = {
mounted() {
this.handleEvent("update-attendees", ({ count }) => {
this.el.textContent = count;
});
},
};
Hooks.Presenter = {
mounted() {
2024-04-14 12:38:48 +02:00
this.presenter = new Presenter(this);
this.presenter.init();
},
2024-06-08 16:31:59 +02:00
updated() {
this.presenter.update();
},
2024-04-14 12:38:48 +02:00
};
Hooks.Manager = {
mounted() {
2024-04-14 12:38:48 +02:00
this.manager = new Manager(this);
this.manager.init();
},
updated() {
2024-04-14 12:38:48 +02:00
this.manager.update();
},
};
Hooks.OpenPresenter = {
open(e) {
2024-04-14 12:38:48 +02:00
e.preventDefault();
window.open(
this.el.dataset.url,
"newwindow",
"width=" + window.screen.width + ",height=" + window.screen.height
);
},
mounted() {
2024-04-14 12:38:48 +02:00
this.el.addEventListener("click", (e) => this.open(e));
},
updated() {
2024-04-14 12:38:48 +02:00
this.el.removeEventListener("click", (e) => this.open(e));
this.el.addEventListener("click", (e) => this.open(e));
},
destroyed() {
2024-04-14 12:38:48 +02:00
this.el.removeEventListener("click", (e) => this.open(e));
},
};
Hooks.GlobalReacts = {
2024-10-13 20:57:00 +02:00
svgCache: {},
mounted() {
2024-10-13 20:57:00 +02:00
this.preloadSVGs();
2024-04-14 12:38:48 +02:00
this.handleEvent("global-react", (data) => {
2024-10-13 20:57:00 +02:00
const svgContent = this.svgCache[data.type];
if (svgContent) {
const container = document.createElement("div");
container.innerHTML = svgContent;
const svgElement = container.firstChild;
svgElement.classList.add("react-animation", "absolute", "transform", "opacity-0");
svgElement.classList.add(...this.el.className.split(" "));
this.el.appendChild(svgElement);
}
2024-04-14 12:38:48 +02:00
});
this.handleEvent("reset-global-react", (data) => {
this.el.innerHTML = "";
});
},
2024-10-13 20:57:00 +02:00
preloadSVGs() {
const svgTypes = ["heart", "hundred", "clap", "raisehand"];
svgTypes.forEach(type => {
fetch(`/images/icons/${type}.svg`)
.then(response => response.text())
.then(svgContent => {
this.svgCache[type] = svgContent;
})
.catch(error => console.error(`Error loading SVG for ${type}:`, error));
});
}
2024-04-14 12:38:48 +02:00
};
Hooks.JoinEvent = {
mounted() {
2024-04-14 12:38:48 +02:00
const loading = document.getElementById("loading");
const submit = document.getElementById("submit");
const input = document.getElementById("input");
submit.addEventListener("click", (e) => {
if (input.value.length > 0) {
2024-04-14 12:38:48 +02:00
submit.style.display = "none";
loading.style.display = "block";
}
2024-04-14 12:38:48 +02:00
});
},
destroyed() {
2024-04-14 12:38:48 +02:00
const loading = document.getElementById("loading");
const submit = document.getElementById("submit");
const input = document.getElementById("input");
submit.removeEventListener("click", (e) => {
if (input.value.length > 0) {
2024-04-14 12:38:48 +02:00
submit.style.display = "none";
loading.style.display = "block";
}
2024-04-14 12:38:48 +02:00
});
},
};
Hooks.WelcomeEarly = {
mounted() {
if (localStorage.getItem("welcome-early") !== "false") {
2024-04-14 12:38:48 +02:00
this.el.style.display = "block";
this.el.children[0].addEventListener("click", (e) => {
2024-04-14 12:38:48 +02:00
e.preventDefault();
localStorage.setItem("welcome-early", "false");
this.el.style.display = "none";
});
}
},
destroyed() {
this.el.children[0].removeEventListener("click", (e) => {
2024-04-14 12:38:48 +02:00
e.preventDefault();
localStorage.setItem("welcome-early", "false");
this.el.style.display = "none";
});
},
};
Hooks.ClickFeedback = {
clicked(e) {
this.el.className = "animate__animated animate__rubberBand animate__faster";
setTimeout(() => {
this.el.className = "";
2024-04-14 12:38:48 +02:00
}, 500);
},
mounted() {
2024-04-14 12:38:48 +02:00
this.el.addEventListener("click", (e) => this.clicked(e));
},
2024-04-06 11:48:47 +02:00
destroyed() {
2024-04-14 12:38:48 +02:00
this.el.removeEventListener("click", (e) => this.clicked(e));
},
};
Hooks.QRCode = {
draw() {
2024-04-14 12:38:48 +02:00
var url = this.el.dataset.code
? window.location.protocol +
"//" +
window.location.host +
"/e/" +
this.el.dataset.code
: window.location.href;
this.el.style.width = document.documentElement.clientWidth * 0.27 + "px";
this.el.style.height = document.documentElement.clientWidth * 0.27 + "px";
if (this.qrCode == null) {
this.qrCode = new QRCodeStyling({
2024-04-14 12:38:48 +02:00
width: this.el.dataset.dynamic
? document.documentElement.clientWidth * 0.25
: 240,
height: this.el.dataset.dynamic
? document.documentElement.clientWidth * 0.25
: 240,
margin: 0,
data: url,
cornersSquareOptions: {
2024-04-14 12:38:48 +02:00
type: "square",
},
dotsOptions: {
type: "square",
2024-10-13 20:57:00 +02:00
color: "#000000",
2023-09-09 12:08:23 +02:00
},
backgroundOptions: {
2024-10-13 20:57:00 +02:00
color: "#ffffff",
},
imageOptions: {
crossOrigin: "anonymous",
imageSize: 0.6,
2024-04-14 12:38:48 +02:00
margin: 10,
},
});
this.qrCode.append(this.el);
} else {
this.qrCode.update({
2024-04-14 12:38:48 +02:00
width: this.el.dataset.dynamic
? document.documentElement.clientWidth * 0.25
: 240,
height: this.el.dataset.dynamic
? document.documentElement.clientWidth * 0.25
: 240,
});
}
},
mounted() {
window.addEventListener("resize", this.draw.bind(this));
2024-04-14 12:38:48 +02:00
this.draw();
if (this.el.dataset.getUrl) {
setTimeout(() => {
2024-04-14 12:38:48 +02:00
var dataURL = this.qrCode._canvas.toDataURL();
document.getElementById("qr-url").value = dataURL;
}, 500);
}
},
2024-04-14 12:38:48 +02:00
updated() {},
destroyed() {},
};
2024-04-06 11:48:47 +02:00
Hooks.Dropdown = {
mounted() {
this.el.addEventListener("click", (e) => {
2024-04-14 12:38:48 +02:00
this.el.classList.toggle("hidden");
});
},
};
let Uploaders = {};
Uploaders.S3 = function (entries, onViewError) {
entries.forEach((entry) => {
let formData = new FormData();
let { url, fields } = entry.meta;
Object.entries(fields).forEach(([key, val]) => formData.append(key, val));
formData.append("file", entry.file);
let xhr = new XMLHttpRequest();
onViewError(() => xhr.abort());
xhr.onload = () =>
xhr.status === 204 ? entry.progress(100) : entry.error();
xhr.onerror = () => entry.error();
xhr.upload.addEventListener("progress", (event) => {
2024-04-14 12:38:48 +02:00
if (event.lengthComputable) {
let percent = Math.round((event.loaded / event.total) * 100);
if (percent < 100) {
entry.progress(percent);
}
}
2024-04-14 12:38:48 +02:00
});
2024-04-14 12:38:48 +02:00
xhr.open("POST", url, true);
xhr.send(formData);
});
};
let liveSocket = new LiveSocket("/live", Socket, {
uploaders: Uploaders,
2024-04-14 12:38:48 +02:00
params: {
_csrf_token: csrfToken,
tz: Intl.DateTimeFormat().resolvedOptions().timeZone,
host: window.location.host,
},
hooks: Hooks,
dom: {
2024-04-14 12:38:48 +02:00
onBeforeElUpdated(from, to) {
if (from._x_dataStack) {
window.Alpine.clone(from, to);
window.Alpine.initTree(to);
}
2024-04-14 12:38:48 +02:00
},
},
});
// Show progress bar on live navigation and form submits
2024-04-14 12:38:48 +02:00
let topBarScheduled = undefined;
topbar.config({ barColors: { 0: "#fff" }, shadowColor: "rgba(0, 0, 0, .3)" });
window.addEventListener("phx:page-loading-start", (info) => {
if (!topBarScheduled) {
topBarScheduled = setTimeout(() => topbar.show(), 500);
}
2024-04-14 12:38:48 +02:00
});
window.addEventListener("phx:page-loading-stop", (info) => {
clearTimeout(topBarScheduled);
topBarScheduled = undefined;
topbar.hide();
});
2024-04-14 12:38:48 +02:00
const onlineUserTemplate = function (user) {
return `
<div id="online-user">
<strong class="text-secondary">aaa</strong>
</div>
2024-04-14 12:38:48 +02:00
`;
};
let presences = {};
2024-04-14 12:38:48 +02:00
liveSocket.on("presence_state", (state) => {
presences = Presence.syncState(presences, state);
});
// connect if there are any LiveViews on the page
2024-04-14 12:38:48 +02:00
liveSocket.connect();
// expose liveSocket on window for web console debug logs and latency simulation:
// >> liveSocket.enableDebug()
// >> liveSocket.enableLatencySim(1000) // enabled for duration of browser session
// >> liveSocket.disableLatencySim()
2024-04-14 12:38:48 +02:00
window.liveSocket = liveSocket;