mirror of
https://github.com/Theodor-Springmann-Stiftung/lenz-web.git
synced 2025-10-29 17:25:32 +00:00
98 lines
3.0 KiB
JavaScript
98 lines
3.0 KiB
JavaScript
(function() {
|
|
function splitOnWhitespace(trigger) {
|
|
return trigger.split(/\s+/)
|
|
}
|
|
|
|
function parseClassOperation(trimmedValue) {
|
|
var split = splitOnWhitespace(trimmedValue)
|
|
if (split.length > 1) {
|
|
var operation = split[0]
|
|
var classDef = split[1].trim()
|
|
var cssClass
|
|
var delay
|
|
if (classDef.indexOf(':') > 0) {
|
|
var splitCssClass = classDef.split(':')
|
|
cssClass = splitCssClass[0]
|
|
delay = htmx.parseInterval(splitCssClass[1])
|
|
} else {
|
|
cssClass = classDef
|
|
delay = 100
|
|
}
|
|
return {
|
|
operation,
|
|
cssClass,
|
|
delay
|
|
}
|
|
} else {
|
|
return null
|
|
}
|
|
}
|
|
|
|
function performOperation(elt, classOperation, classList, currentRunTime) {
|
|
setTimeout(function() {
|
|
elt.classList[classOperation.operation].call(elt.classList, classOperation.cssClass)
|
|
}, currentRunTime)
|
|
}
|
|
|
|
function toggleOperation(elt, classOperation, classList, currentRunTime) {
|
|
setTimeout(function() {
|
|
setInterval(function() {
|
|
elt.classList[classOperation.operation].call(elt.classList, classOperation.cssClass)
|
|
}, classOperation.delay)
|
|
}, currentRunTime)
|
|
}
|
|
|
|
function processClassList(elt, classList) {
|
|
var runs = classList.split('&')
|
|
for (var i = 0; i < runs.length; i++) {
|
|
var run = runs[i]
|
|
var currentRunTime = 0
|
|
var classOperations = run.split(',')
|
|
for (var j = 0; j < classOperations.length; j++) {
|
|
var value = classOperations[j]
|
|
var trimmedValue = value.trim()
|
|
var classOperation = parseClassOperation(trimmedValue)
|
|
if (classOperation) {
|
|
if (classOperation.operation === 'toggle') {
|
|
toggleOperation(elt, classOperation, classList, currentRunTime)
|
|
currentRunTime = currentRunTime + classOperation.delay
|
|
} else {
|
|
currentRunTime = currentRunTime + classOperation.delay
|
|
performOperation(elt, classOperation, classList, currentRunTime)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function maybeProcessClasses(elt) {
|
|
if (elt.getAttribute) {
|
|
var classList = elt.getAttribute('classes') || elt.getAttribute('data-classes')
|
|
if (classList) {
|
|
processClassList(elt, classList)
|
|
}
|
|
}
|
|
}
|
|
|
|
htmx.defineExtension('class-tools', {
|
|
onEvent: function(name, evt) {
|
|
if (name === 'htmx:afterProcessNode') {
|
|
var elt = evt.detail.elt
|
|
maybeProcessClasses(elt)
|
|
var classList = elt.getAttribute("apply-parent-classes") || elt.getAttribute("data-apply-parent-classes");
|
|
if (classList) {
|
|
var parent = elt.parentElement;
|
|
parent.removeChild(elt);
|
|
parent.setAttribute("classes", classList);
|
|
maybeProcessClasses(parent);
|
|
} else if (elt.querySelectorAll) {
|
|
var children = elt.querySelectorAll('[classes], [data-classes]')
|
|
for (var i = 0; i < children.length; i++) {
|
|
maybeProcessClasses(children[i])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})
|
|
})()
|