mirror of
https://github.com/bigskysoftware/htmx.git
synced 2026-03-05 13:39:12 +00:00
upgrade extension to be a prebuilt function map
This commit is contained in:
parent
6409d1dd69
commit
9bfdc8d1ba
21
src/htmx.js
21
src/htmx.js
@ -53,8 +53,8 @@ var htmx = (() => {
|
||||
|
||||
class Htmx {
|
||||
|
||||
#extensions = [];
|
||||
#approvedExtensions = new Set();
|
||||
#extMethods = new Map();
|
||||
#approvedExt = new Set();
|
||||
__mutationObserver = new MutationObserver((records) => this.__onMutation(records));
|
||||
__actionSelector = "[hx-action],[hx-get],[hx-post],[hx-put],[hx-patch],[hx-delete]";
|
||||
__boostSelector = "a,form";
|
||||
@ -124,15 +124,14 @@ var htmx = (() => {
|
||||
}
|
||||
}
|
||||
}
|
||||
this.#approvedExtensions = new Set(this.config.extensions.split(',').map(s => s.trim()).filter(Boolean));
|
||||
this.#approvedExt = new Set(this.config.extensions.split(',').map(s => s.trim()).filter(Boolean));
|
||||
}
|
||||
|
||||
defineExtension(name, extension) {
|
||||
if (!this.#approvedExtensions.delete(name)) {
|
||||
return false;
|
||||
}
|
||||
extension.init?.(this);
|
||||
this.#extensions.push(extension);
|
||||
if (!this.#approvedExt.delete(name)) return false;
|
||||
Object.entries(extension).forEach(([key, value]) => {
|
||||
if(!this.#extMethods.get(key)?.push(value)) this.#extMethods.set(key, [value]);
|
||||
});
|
||||
}
|
||||
|
||||
__ignore(elt) {
|
||||
@ -1392,9 +1391,9 @@ var htmx = (() => {
|
||||
|
||||
__triggerExtensions(elt, eventName, detail = {}) {
|
||||
detail.cancelled = false;
|
||||
let methodName = eventName.replace(/:/g, '_');
|
||||
for (const ext of this.#extensions) {
|
||||
if (ext[methodName]?.(elt, detail) === false || detail.cancelled) {
|
||||
const methods = this.#extMethods.get(eventName.replace(/:/g, '_')) ?? [];
|
||||
for (const fn of methods) {
|
||||
if (fn(elt, detail) === false || detail.cancelled) {
|
||||
detail.cancelled = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -211,7 +211,7 @@ describe('Unit Tests', function() {
|
||||
it("__parseTriggerSpecs throws on unterminated filter", function() {
|
||||
assert.throws(() => {
|
||||
htmx.__parseTriggerSpecs('click[ctrlKey');
|
||||
}, /Unterminated event filter/);
|
||||
}, /unterminated/);
|
||||
})
|
||||
|
||||
it("__parseTriggerSpecs handles complex real-world spec", function() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user