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/directives/x-data.js')
-rw-r--r--alpinejs/packages/alpinejs/src/directives/x-data.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/alpinejs/packages/alpinejs/src/directives/x-data.js b/alpinejs/packages/alpinejs/src/directives/x-data.js
new file mode 100644
index 0000000..e88802c
--- /dev/null
+++ b/alpinejs/packages/alpinejs/src/directives/x-data.js
@@ -0,0 +1,43 @@
+import { directive, prefix } from '../directives'
+import { initInterceptors } from '../interceptor'
+import { injectDataProviders } from '../datas'
+import { addRootSelector } from '../lifecycle'
+import { skipDuringClone } from '../clone'
+import { addScopeToNode } from '../scope'
+import { injectMagics, magic } from '../magics'
+import { reactive } from '../reactivity'
+import { evaluate } from '../evaluator'
+
+addRootSelector(() => `[${prefix('data')}]`)
+
+directive('data', skipDuringClone((el, { expression }, { cleanup }) => {
+ expression = expression === '' ? '{}' : expression
+
+ let magicContext = {}
+ let cleanup1 = injectMagics(magicContext, el).cleanup
+
+ let dataProviderContext = {}
+ injectDataProviders(dataProviderContext, magicContext)
+
+ let data = evaluate(el, expression, { scope: dataProviderContext })
+
+ let cleanup2 = injectMagics(data, el).cleanup
+
+ let reactiveData = reactive(data)
+
+ initInterceptors(reactiveData)
+
+ let undo = addScopeToNode(el, reactiveData)
+
+ reactiveData['init'] && evaluate(el, reactiveData['init'])
+
+ cleanup(() => {
+ undo()
+
+ // MemLeak1: Issue #2140
+ cleanup1()
+ cleanup2()
+
+ reactiveData['destroy'] && evaluate(el, reactiveData['destroy'])
+ })
+}))