UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

1 lines 6.6 kB
{"version":3,"file":"transfer-dom.mjs","sources":["../../../../../src/utils/directives/transfer-dom.ts"],"sourcesContent":["// Thanks to: https://github.com/airyland/vux/blob/v2/src/directives/transfer-dom/index.js\r\n// Thanks to: https://github.com/calebroseland/vue-dom-portal\r\n\r\n/**\r\n * Get target DOM Node\r\n * @param {(Node|string|Boolean)} [node=document.body] DOM Node, CSS selector, or Boolean\r\n * @return {Node} The target that the el will be appended to\r\n */\r\nfunction getTarget(node) {\r\n if (node === void 0) {\r\n node = document.body;\r\n }\r\n if (node === true) {\r\n return document.body;\r\n }\r\n return node instanceof window.Node ? node : document.querySelector(node);\r\n}\r\n\r\n// 指令定义\r\nfunction beforeMount(el: any, { value }) {\r\n if (el.dataset && el.dataset.transfer !== 'true') {\r\n return false;\r\n }\r\n\r\n el.className = el.className\r\n ? el.className + ' v-transfer-dom'\r\n : 'v-transfer-dom';\r\n const parentNode = el.parentNode;\r\n\r\n // 没有父节点\r\n if (!parentNode) {\r\n return;\r\n }\r\n\r\n const home = document.createComment('');\r\n let hasMovedOut = false;\r\n\r\n if (value !== false) {\r\n // moving out, el is no longer in the document\r\n parentNode.replaceChild(home, el);\r\n // 移动到新的地方\r\n getTarget(value).appendChild(el);\r\n\r\n hasMovedOut = true;\r\n }\r\n\r\n if (!el.__transferDomData) {\r\n el.__transferDomData = {\r\n parentNode: parentNode,\r\n home: home,\r\n target: getTarget(value),\r\n hasMovedOut: hasMovedOut,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 所在组件的 VNode 更新时调用\r\n *\r\n * el: HTMLElement, binding: VNodeDirective\r\n */\r\nfunction updated(el: Record<string, any>, { value }) {\r\n if (el.dataset && el.dataset.transfer !== 'true') {\r\n return false;\r\n }\r\n\r\n // need to make sure children are done updating (vs. `update`)\r\n // 需要确保孩子完成更新(相对于 `update`)\r\n const ref$1 = el.__transferDomData;\r\n\r\n // 没有创建节点初始化创建\r\n if (!ref$1) {\r\n beforeMount(el, { value });\r\n return;\r\n }\r\n\r\n // homes.get(el)\r\n const parentNode = ref$1.parentNode;\r\n const home = ref$1.home;\r\n\r\n // recall where home is\r\n const hasMovedOut = ref$1.hasMovedOut;\r\n\r\n if (!hasMovedOut && value) {\r\n // remove from document and leave placeholder\r\n parentNode.replaceChild(home, el);\r\n // append to target\r\n getTarget(value).appendChild(el);\r\n\r\n // 从文档中删除并留下占位符\r\n el.__transferDomData = Object.assign({}, el.__transferDomData, {\r\n hasMovedOut: true,\r\n target: getTarget(value),\r\n });\r\n } else if (hasMovedOut && value === false) {\r\n // previously moved, coming back home\r\n parentNode.replaceChild(el, home);\r\n\r\n el.__transferDomData = Object.assign({}, el.__transferDomData, {\r\n hasMovedOut: false,\r\n target: getTarget(value),\r\n });\r\n } else if (value) {\r\n // already moved, going somewhere else\r\n getTarget(value).appendChild(el);\r\n }\r\n}\r\n\r\n// 指令与元素解绑时调用\r\nfunction unmounted(el) {\r\n if (el.dataset && el.dataset.transfer !== 'true') {\r\n return false;\r\n }\r\n\r\n el.className = el.className.replace('v-transfer-dom', '');\r\n\r\n const ref$1 = el.__transferDomData;\r\n if (!ref$1) {\r\n return;\r\n }\r\n\r\n // 移除节点\r\n if (el.__transferDomData.hasMovedOut === true) {\r\n el.__transferDomData.parentNode &&\r\n el.__transferDomData.parentNode.appendChild(el);\r\n }\r\n\r\n el.__transferDomData = null;\r\n}\r\n\r\nexport default {\r\n beforeMount,\r\n unmounted,\r\n updated,\r\n};\r\n"],"names":[],"mappings":"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"}