芝麻web文件管理V1.00
编辑当前文件:/home/digitalh/public_html/node_modules/alpinejs/src/directives/x-if.js
import { evaluateLater } from '../evaluator' import { addScopeToNode } from '../scope' import { directive } from '../directives' import { initTree } from '../lifecycle' import { mutateDom } from '../mutation' import { walk } from "../utils/walk" import { dequeueJob } from '../scheduler' directive('if', (el, { expression }, { effect, cleanup }) => { let evaluate = evaluateLater(el, expression) let show = () => { if (el._x_currentIfEl) return el._x_currentIfEl let clone = el.content.cloneNode(true).firstElementChild addScopeToNode(clone, {}, el) mutateDom(() => { el.after(clone) initTree(clone) }) el._x_currentIfEl = clone el._x_undoIf = () => { walk(clone, (node) => { if (!!node._x_effects) { node._x_effects.forEach(dequeueJob) } }) clone.remove(); delete el._x_currentIfEl } return clone } let hide = () => { if (! el._x_undoIf) return el._x_undoIf() delete el._x_undoIf } effect(() => evaluate(value => { value ? show() : hide() })) cleanup(() => el._x_undoIf && el._x_undoIf()) })