Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo-mod-jslibs-dist.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'alpinejs/packages/alpinejs/src/magics.js')
-rw-r--r--alpinejs/packages/alpinejs/src/magics.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/alpinejs/packages/alpinejs/src/magics.js b/alpinejs/packages/alpinejs/src/magics.js
new file mode 100644
index 0000000..5c95bb4
--- /dev/null
+++ b/alpinejs/packages/alpinejs/src/magics.js
@@ -0,0 +1,36 @@
+import Alpine from './alpine'
+import { getElementBoundUtilities } from './directives'
+import { interceptor } from './interceptor'
+import { onElRemoved } from './mutation'
+
+let magics = {}
+
+export function magic(name, callback) {
+ magics[name] = callback
+}
+
+export function injectMagics(obj, el) {
+ Object.entries(magics).forEach(([name, callback]) => {
+ Object.defineProperty(obj, `$${name}`, {
+ get() {
+ let [utilities, cleanup] = getElementBoundUtilities(el)
+
+ utilities = {interceptor, ...utilities}
+
+ onElRemoved(el, cleanup)
+
+ return callback(el, utilities)
+ },
+
+ enumerable: false,
+ })
+ })
+
+ return {
+ obj,
+ cleanup: () => {
+ // MemLeak1: Issue #2140
+ el = null;
+ }
+ };
+}