aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vue/src/platforms/web/runtime/directives/show.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/vue/src/platforms/web/runtime/directives/show.js')
-rw-r--r--node_modules/vue/src/platforms/web/runtime/directives/show.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/node_modules/vue/src/platforms/web/runtime/directives/show.js b/node_modules/vue/src/platforms/web/runtime/directives/show.js
new file mode 100644
index 00000000..17fb5dec
--- /dev/null
+++ b/node_modules/vue/src/platforms/web/runtime/directives/show.js
@@ -0,0 +1,60 @@
+/* @flow */
+
+import { enter, leave } from '../modules/transition'
+
+// recursively search for possible transition defined inside the component root
+function locateNode (vnode: VNode): VNodeWithData {
+ return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
+ ? locateNode(vnode.componentInstance._vnode)
+ : vnode
+}
+
+export default {
+ bind (el: any, { value }: VNodeDirective, vnode: VNodeWithData) {
+ vnode = locateNode(vnode)
+ const transition = vnode.data && vnode.data.transition
+ const originalDisplay = el.__vOriginalDisplay =
+ el.style.display === 'none' ? '' : el.style.display
+ if (value && transition) {
+ vnode.data.show = true
+ enter(vnode, () => {
+ el.style.display = originalDisplay
+ })
+ } else {
+ el.style.display = value ? originalDisplay : 'none'
+ }
+ },
+
+ update (el: any, { value, oldValue }: VNodeDirective, vnode: VNodeWithData) {
+ /* istanbul ignore if */
+ if (!value === !oldValue) return
+ vnode = locateNode(vnode)
+ const transition = vnode.data && vnode.data.transition
+ if (transition) {
+ vnode.data.show = true
+ if (value) {
+ enter(vnode, () => {
+ el.style.display = el.__vOriginalDisplay
+ })
+ } else {
+ leave(vnode, () => {
+ el.style.display = 'none'
+ })
+ }
+ } else {
+ el.style.display = value ? el.__vOriginalDisplay : 'none'
+ }
+ },
+
+ unbind (
+ el: any,
+ binding: VNodeDirective,
+ vnode: VNodeWithData,
+ oldVnode: VNodeWithData,
+ isDestroy: boolean
+ ) {
+ if (!isDestroy) {
+ el.style.display = el.__vOriginalDisplay
+ }
+ }
+}