{"version":3,"sources":["../../src/mixins/detachable.js"],"names":[],"mappings":"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","sourcesContent":["import Bootable from './bootable'\nimport { consoleWarn } from '../util/console'\n\nfunction validateAttachTarget (val) {\n const type = typeof val\n\n if (type === 'boolean' || type === 'string') return true\n\n return val.nodeType === Node.ELEMENT_NODE\n}\n\n/* @vue/component */\nexport default {\n name: 'detachable',\n\n mixins: [Bootable],\n\n props: {\n attach: {\n type: null,\n default: false,\n validator: validateAttachTarget\n },\n contentClass: {\n default: ''\n }\n },\n\n data: () => ({\n hasDetached: false\n }),\n\n watch: {\n attach () {\n this.hasDetached = false\n this.initDetach()\n },\n hasContent: 'initDetach'\n },\n\n beforeMount () {\n this.$nextTick(() => {\n if (this.activatorNode) {\n const activator = Array.isArray(this.activatorNode) ? this.activatorNode : [this.activatorNode]\n activator.forEach(node => {\n node.elm && this.$el.parentNode.insertBefore(node.elm, this.$el)\n })\n }\n })\n },\n\n mounted () {\n !this.lazy && this.initDetach()\n },\n\n deactivated () {\n this.isActive = false\n },\n\n beforeDestroy () {\n // IE11 Fix\n try {\n if (this.$refs.content) {\n this.$refs.content.parentNode.removeChild(this.$refs.content)\n }\n\n if (this.activatorNode) {\n const activator = Array.isArray(this.activatorNode) ? this.activatorNode : [this.activatorNode]\n activator.forEach(node => {\n node.elm && node.elm.parentNode.removeChild(node.elm)\n })\n }\n } catch (e) { console.log(e) }\n },\n\n methods: {\n getScopeIdAttrs () {\n const scopeId = this.$vnode && this.$vnode.context.$options._scopeId\n return scopeId && {\n [scopeId]: ''\n }\n },\n initDetach () {\n if (this._isDestroyed ||\n !this.$refs.content ||\n this.hasDetached ||\n // Leave menu in place if attached\n // and dev has not changed target\n this.attach === '' || // If used as a boolean prop ()\n this.attach === true || // If bound to a boolean ()\n this.attach === 'attach' // If bound as boolean prop in pug (v-menu(attach))\n ) return\n\n let target\n if (this.attach === false) {\n // Default, detach to app\n target = document.querySelector('[data-app]')\n } else if (typeof this.attach === 'string') {\n // CSS selector\n target = document.querySelector(this.attach)\n } else {\n // DOM Element\n target = this.attach\n }\n\n if (!target) {\n consoleWarn(`Unable to locate target ${this.attach || '[data-app]'}`, this)\n return\n }\n\n target.insertBefore(\n this.$refs.content,\n target.firstChild\n )\n\n this.hasDetached = true\n }\n }\n}\n"],"sourceRoot":""}