Files
lucent-laravel/front/js/main.js
T

49 lines
1.2 KiB
JavaScript
Raw Normal View History

2023-10-02 23:10:49 +03:00
import "../sass/app.scss";
import Account from "./svelte/Account.svelte";
import Channel from "./svelte/Channel.svelte";
2026-05-06 23:16:09 +03:00
// import Mustache from "mustache";
2023-10-02 23:10:49 +03:00
2026-05-06 23:16:09 +03:00
// Mustache.escape = function (value) {
// return value;
// };
2023-10-02 23:10:49 +03:00
// Define all components
const entryComponents = {
2026-05-06 23:16:09 +03:00
account: Account,
channel: Channel,
2023-10-02 23:10:49 +03:00
};
let loadedComponents = [];
let loadSvelte = function () {
2026-05-06 23:16:09 +03:00
loadedComponents.map((comp) => comp.$destroy());
loadedComponents = [];
const elements = document.body.querySelectorAll(".lucent-component");
if (elements.length === 0) {
return;
}
const loadElement = function (element) {
const componentId = element.attributes["data-layout"].value;
const [_, component] = Object.entries(entryComponents).find(
([key, _]) => componentId === key,
);
if (!component) {
return [];
2023-10-02 23:10:49 +03:00
}
2026-05-06 23:16:09 +03:00
const jsonData = document.getElementById("json-" + componentId).innerHTML;
const props = JSON.parse(jsonData);
const compOptions = {
target: element,
props: props,
2023-10-02 23:10:49 +03:00
};
2026-05-06 23:16:09 +03:00
loadedComponents = [...loadedComponents, new component(compOptions)];
};
Array.from(elements).map(loadElement);
2023-10-02 23:10:49 +03:00
};
// document.addEventListener("turbo:load", loadSvelte);
document.addEventListener("DOMContentLoaded", loadSvelte);