mirror of
https://github.com/sissbruecker/linkding.git
synced 2025-08-07 10:58:25 +02:00

* Add basic HTML snapshots * Implement asset list * Add snapshot creation tests * Add deletion tests * Show file size * Remove snapshots * Create new snapshots * Switch to single-file * CSS tweak * Remove auto refresh * Show delete link when there is no file yet * Add current date to display name * Add flag for snapshot support * Add option for disabling automatic snapshots * Make snapshots sharable * Document image variants * Update README.md * Add migrations * Fix tests
51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
const behaviorRegistry = {};
|
|
|
|
export function registerBehavior(name, behavior) {
|
|
behaviorRegistry[name] = behavior;
|
|
applyBehaviors(document, [name]);
|
|
}
|
|
|
|
export function applyBehaviors(container, behaviorNames = null) {
|
|
if (!behaviorNames) {
|
|
behaviorNames = Object.keys(behaviorRegistry);
|
|
}
|
|
|
|
behaviorNames.forEach((behaviorName) => {
|
|
const behavior = behaviorRegistry[behaviorName];
|
|
const elements = Array.from(
|
|
container.querySelectorAll(`[${behaviorName}]`),
|
|
);
|
|
|
|
// Include the container element if it has the behavior
|
|
if (container.hasAttribute && container.hasAttribute(behaviorName)) {
|
|
elements.push(container);
|
|
}
|
|
|
|
elements.forEach((element) => {
|
|
element.__behaviors = element.__behaviors || [];
|
|
const hasBehavior = element.__behaviors.some(
|
|
(b) => b instanceof behavior,
|
|
);
|
|
|
|
if (hasBehavior) {
|
|
return;
|
|
}
|
|
|
|
const behaviorInstance = new behavior(element);
|
|
element.__behaviors.push(behaviorInstance);
|
|
});
|
|
});
|
|
}
|
|
|
|
export function swap(element, html) {
|
|
const dom = new DOMParser().parseFromString(html, "text/html");
|
|
const newElement = dom.body.firstChild;
|
|
element.replaceWith(newElement);
|
|
applyBehaviors(newElement);
|
|
}
|
|
|
|
export function swapContent(element, html) {
|
|
element.innerHTML = html;
|
|
applyBehaviors(element);
|
|
}
|