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/reactivity.js')
-rw-r--r--alpinejs/packages/alpinejs/src/reactivity.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/alpinejs/packages/alpinejs/src/reactivity.js b/alpinejs/packages/alpinejs/src/reactivity.js
new file mode 100644
index 0000000..b233d06
--- /dev/null
+++ b/alpinejs/packages/alpinejs/src/reactivity.js
@@ -0,0 +1,62 @@
+
+import { scheduler } from './scheduler'
+
+let reactive, effect, release, raw
+
+let shouldSchedule = true
+export function disableEffectScheduling(callback) {
+ shouldSchedule = false
+
+ callback()
+
+ shouldSchedule = true
+}
+
+export function setReactivityEngine(engine) {
+ reactive = engine.reactive
+ release = engine.release
+ effect = (callback) => engine.effect(callback, { scheduler: task => {
+ if (shouldSchedule) {
+ scheduler(task)
+ } else {
+ task()
+ }
+ } })
+ raw = engine.raw
+}
+
+export function overrideEffect(override) { effect = override }
+
+export function elementBoundEffect(el) {
+ let cleanup = () => {}
+
+ let wrappedEffect = (callback) => {
+ let effectReference = effect(callback)
+
+ if (! el._x_effects) {
+ el._x_effects = new Set
+
+ // Livewire depends on el._x_runEffects.
+ el._x_runEffects = () => { el._x_effects.forEach(i => i()) }
+ }
+
+ el._x_effects.add(effectReference)
+
+ cleanup = () => {
+ if (effectReference === undefined) return
+
+ el._x_effects.delete(effectReference)
+
+ release(effectReference)
+ }
+ }
+
+ return [wrappedEffect, () => { cleanup() }]
+}
+
+export {
+ release,
+ reactive,
+ effect,
+ raw,
+}