389 lines
No EOL
13 KiB
JavaScript
389 lines
No EOL
13 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
require("../../../src/components/VNavigationDrawer/VNavigationDrawer.sass");
|
|
|
|
var _VImg = _interopRequireDefault(require("../VImg/VImg"));
|
|
|
|
var _applicationable = _interopRequireDefault(require("../../mixins/applicationable"));
|
|
|
|
var _colorable = _interopRequireDefault(require("../../mixins/colorable"));
|
|
|
|
var _dependent = _interopRequireDefault(require("../../mixins/dependent"));
|
|
|
|
var _overlayable = _interopRequireDefault(require("../../mixins/overlayable"));
|
|
|
|
var _ssrBootable = _interopRequireDefault(require("../../mixins/ssr-bootable"));
|
|
|
|
var _themeable = _interopRequireDefault(require("../../mixins/themeable"));
|
|
|
|
var _clickOutside = _interopRequireDefault(require("../../directives/click-outside"));
|
|
|
|
var _resize = _interopRequireDefault(require("../../directives/resize"));
|
|
|
|
var _touch = _interopRequireDefault(require("../../directives/touch"));
|
|
|
|
var _helpers = require("../../util/helpers");
|
|
|
|
var _mixins = _interopRequireDefault(require("../../util/mixins"));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
|
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
|
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
|
|
var baseMixins = (0, _mixins.default)((0, _applicationable.default)('left', ['isActive', 'isMobile', 'miniVariant', 'expandOnHover', 'permanent', 'right', 'temporary', 'width']), _colorable.default, _dependent.default, _overlayable.default, _ssrBootable.default, _themeable.default);
|
|
/* @vue/component */
|
|
|
|
var _default2 = baseMixins.extend({
|
|
name: 'v-navigation-drawer',
|
|
provide: function provide() {
|
|
return {
|
|
isInNav: this.tag === 'nav'
|
|
};
|
|
},
|
|
directives: {
|
|
ClickOutside: _clickOutside.default,
|
|
Resize: _resize.default,
|
|
Touch: _touch.default
|
|
},
|
|
props: {
|
|
bottom: Boolean,
|
|
clipped: Boolean,
|
|
disableResizeWatcher: Boolean,
|
|
disableRouteWatcher: Boolean,
|
|
expandOnHover: Boolean,
|
|
floating: Boolean,
|
|
height: {
|
|
type: [Number, String],
|
|
default: function _default() {
|
|
return this.app ? '100vh' : '100%';
|
|
}
|
|
},
|
|
miniVariant: Boolean,
|
|
miniVariantWidth: {
|
|
type: [Number, String],
|
|
default: 80
|
|
},
|
|
mobileBreakPoint: {
|
|
type: [Number, String],
|
|
default: 1264
|
|
},
|
|
permanent: Boolean,
|
|
right: Boolean,
|
|
src: {
|
|
type: [String, Object],
|
|
default: ''
|
|
},
|
|
stateless: Boolean,
|
|
tag: {
|
|
type: String,
|
|
default: function _default() {
|
|
return this.app ? 'nav' : 'aside';
|
|
}
|
|
},
|
|
temporary: Boolean,
|
|
touchless: Boolean,
|
|
width: {
|
|
type: [Number, String],
|
|
default: 256
|
|
},
|
|
value: {
|
|
required: false
|
|
}
|
|
},
|
|
data: function data() {
|
|
return {
|
|
isMouseover: false,
|
|
touchArea: {
|
|
left: 0,
|
|
right: 0
|
|
}
|
|
};
|
|
},
|
|
computed: {
|
|
/**
|
|
* Used for setting an app value from a dynamic
|
|
* property. Called from applicationable.js
|
|
*/
|
|
applicationProperty: function applicationProperty() {
|
|
return this.right ? 'right' : 'left';
|
|
},
|
|
classes: function classes() {
|
|
return _objectSpread({
|
|
'v-navigation-drawer': true,
|
|
'v-navigation-drawer--absolute': this.absolute,
|
|
'v-navigation-drawer--bottom': this.bottom,
|
|
'v-navigation-drawer--clipped': this.clipped,
|
|
'v-navigation-drawer--close': !this.isActive,
|
|
'v-navigation-drawer--fixed': !this.absolute && (this.app || this.fixed),
|
|
'v-navigation-drawer--floating': this.floating,
|
|
'v-navigation-drawer--is-mobile': this.isMobile,
|
|
'v-navigation-drawer--is-mouseover': this.isMouseover,
|
|
'v-navigation-drawer--mini-variant': this.miniVariant || this.expandOnHover && !this.isMouseover,
|
|
'v-navigation-drawer--open': this.isActive,
|
|
'v-navigation-drawer--open-on-hover': this.expandOnHover,
|
|
'v-navigation-drawer--right': this.right,
|
|
'v-navigation-drawer--temporary': this.temporary
|
|
}, this.themeClasses);
|
|
},
|
|
computedMaxHeight: function computedMaxHeight() {
|
|
if (!this.hasApp) return null;
|
|
var computedMaxHeight = this.$vuetify.application.bottom + this.$vuetify.application.footer + this.$vuetify.application.bar;
|
|
if (!this.clipped) return computedMaxHeight;
|
|
return computedMaxHeight + this.$vuetify.application.top;
|
|
},
|
|
computedTop: function computedTop() {
|
|
if (!this.hasApp) return 0;
|
|
var computedTop = this.$vuetify.application.bar;
|
|
computedTop += this.clipped ? this.$vuetify.application.top : 0;
|
|
return computedTop;
|
|
},
|
|
computedTransform: function computedTransform() {
|
|
if (this.isActive) return 0;
|
|
if (this.isBottom) return 100;
|
|
return this.right ? 100 : -100;
|
|
},
|
|
computedWidth: function computedWidth() {
|
|
if (this.expandOnHover && !this.isMouseover || this.miniVariant) return this.miniVariantWidth;
|
|
return this.width;
|
|
},
|
|
hasApp: function hasApp() {
|
|
return this.app && !this.isMobile && !this.temporary;
|
|
},
|
|
isBottom: function isBottom() {
|
|
return this.bottom && this.isMobile;
|
|
},
|
|
isMobile: function isMobile() {
|
|
return !this.stateless && !this.permanent && this.$vuetify.breakpoint.width < parseInt(this.mobileBreakPoint, 10);
|
|
},
|
|
reactsToClick: function reactsToClick() {
|
|
return !this.stateless && !this.permanent && (this.isMobile || this.temporary);
|
|
},
|
|
reactsToMobile: function reactsToMobile() {
|
|
return this.app && !this.disableResizeWatcher && !this.permanent && !this.stateless && !this.temporary;
|
|
},
|
|
reactsToResize: function reactsToResize() {
|
|
return !this.disableResizeWatcher && !this.stateless;
|
|
},
|
|
reactsToRoute: function reactsToRoute() {
|
|
return !this.disableRouteWatcher && !this.stateless && (this.temporary || this.isMobile);
|
|
},
|
|
showOverlay: function showOverlay() {
|
|
return this.isActive && (this.isMobile || this.temporary);
|
|
},
|
|
styles: function styles() {
|
|
var translate = this.isBottom ? 'translateY' : 'translateX';
|
|
var styles = {
|
|
height: (0, _helpers.convertToUnit)(this.height),
|
|
top: !this.isBottom ? (0, _helpers.convertToUnit)(this.computedTop) : 'auto',
|
|
maxHeight: this.computedMaxHeight != null ? "calc(100% - ".concat((0, _helpers.convertToUnit)(this.computedMaxHeight), ")") : undefined,
|
|
transform: "".concat(translate, "(").concat((0, _helpers.convertToUnit)(this.computedTransform, '%'), ")"),
|
|
width: (0, _helpers.convertToUnit)(this.computedWidth)
|
|
};
|
|
return styles;
|
|
}
|
|
},
|
|
watch: {
|
|
$route: 'onRouteChange',
|
|
isActive: function isActive(val) {
|
|
this.$emit('input', val);
|
|
},
|
|
|
|
/**
|
|
* When mobile changes, adjust the active state
|
|
* only when there has been a previous value
|
|
*/
|
|
isMobile: function isMobile(val, prev) {
|
|
!val && this.isActive && !this.temporary && this.removeOverlay();
|
|
if (prev == null || !this.reactsToResize || !this.reactsToMobile) return;
|
|
this.isActive = !val;
|
|
},
|
|
permanent: function permanent(val) {
|
|
// If enabling prop enable the drawer
|
|
if (val) this.isActive = true;
|
|
},
|
|
showOverlay: function showOverlay(val) {
|
|
if (val) this.genOverlay();else this.removeOverlay();
|
|
},
|
|
value: function value(val) {
|
|
if (this.permanent) return;
|
|
|
|
if (val == null) {
|
|
this.init();
|
|
return;
|
|
}
|
|
|
|
if (val !== this.isActive) this.isActive = val;
|
|
}
|
|
},
|
|
beforeMount: function beforeMount() {
|
|
this.init();
|
|
},
|
|
methods: {
|
|
calculateTouchArea: function calculateTouchArea() {
|
|
var parent = this.$el.parentNode;
|
|
if (!parent) return;
|
|
var parentRect = parent.getBoundingClientRect();
|
|
this.touchArea = {
|
|
left: parentRect.left + 50,
|
|
right: parentRect.right - 50
|
|
};
|
|
},
|
|
closeConditional: function closeConditional() {
|
|
return this.isActive && this.reactsToClick;
|
|
},
|
|
genAppend: function genAppend() {
|
|
return this.genPosition('append');
|
|
},
|
|
genBackground: function genBackground() {
|
|
var props = {
|
|
height: '100%',
|
|
width: '100%',
|
|
src: this.src
|
|
};
|
|
var image = this.$scopedSlots.img ? this.$scopedSlots.img(props) : this.$createElement(_VImg.default, {
|
|
props: props
|
|
});
|
|
return this.$createElement('div', {
|
|
staticClass: 'v-navigation-drawer__image'
|
|
}, [image]);
|
|
},
|
|
genDirectives: function genDirectives() {
|
|
var _this = this;
|
|
|
|
var directives = [{
|
|
name: 'click-outside',
|
|
value: function value() {
|
|
return _this.isActive = false;
|
|
},
|
|
args: {
|
|
closeConditional: this.closeConditional,
|
|
include: this.getOpenDependentElements
|
|
}
|
|
}];
|
|
|
|
if (!this.touchless && !this.stateless) {
|
|
directives.push({
|
|
name: 'touch',
|
|
value: {
|
|
parent: true,
|
|
left: this.swipeLeft,
|
|
right: this.swipeRight
|
|
}
|
|
});
|
|
}
|
|
|
|
return directives;
|
|
},
|
|
genListeners: function genListeners() {
|
|
var _this2 = this;
|
|
|
|
var on = {
|
|
transitionend: function transitionend(e) {
|
|
if (e.target !== e.currentTarget) return;
|
|
|
|
_this2.$emit('transitionend', e); // IE11 does not support new Event('resize')
|
|
|
|
|
|
var resizeEvent = document.createEvent('UIEvents');
|
|
resizeEvent.initUIEvent('resize', true, false, window, 0);
|
|
window.dispatchEvent(resizeEvent);
|
|
}
|
|
};
|
|
|
|
if (this.miniVariant) {
|
|
on.click = function () {
|
|
return _this2.$emit('update:mini-variant', false);
|
|
};
|
|
}
|
|
|
|
if (this.expandOnHover) {
|
|
on.mouseenter = function () {
|
|
return _this2.isMouseover = true;
|
|
};
|
|
|
|
on.mouseleave = function () {
|
|
return _this2.isMouseover = false;
|
|
};
|
|
}
|
|
|
|
return on;
|
|
},
|
|
genPosition: function genPosition(name) {
|
|
var slot = (0, _helpers.getSlot)(this, name);
|
|
if (!slot) return slot;
|
|
return this.$createElement('div', {
|
|
staticClass: "v-navigation-drawer__".concat(name)
|
|
}, slot);
|
|
},
|
|
genPrepend: function genPrepend() {
|
|
return this.genPosition('prepend');
|
|
},
|
|
genContent: function genContent() {
|
|
return this.$createElement('div', {
|
|
staticClass: 'v-navigation-drawer__content'
|
|
}, this.$slots.default);
|
|
},
|
|
genBorder: function genBorder() {
|
|
return this.$createElement('div', {
|
|
staticClass: 'v-navigation-drawer__border'
|
|
});
|
|
},
|
|
init: function init() {
|
|
if (this.permanent) {
|
|
this.isActive = true;
|
|
} else if (this.stateless || this.value != null) {
|
|
this.isActive = this.value;
|
|
} else if (!this.temporary) {
|
|
this.isActive = !this.isMobile;
|
|
}
|
|
},
|
|
onRouteChange: function onRouteChange() {
|
|
if (this.reactsToRoute && this.closeConditional()) {
|
|
this.isActive = false;
|
|
}
|
|
},
|
|
swipeLeft: function swipeLeft(e) {
|
|
if (this.isActive && this.right) return;
|
|
this.calculateTouchArea();
|
|
if (Math.abs(e.touchendX - e.touchstartX) < 100) return;
|
|
if (this.right && e.touchstartX >= this.touchArea.right) this.isActive = true;else if (!this.right && this.isActive) this.isActive = false;
|
|
},
|
|
swipeRight: function swipeRight(e) {
|
|
if (this.isActive && !this.right) return;
|
|
this.calculateTouchArea();
|
|
if (Math.abs(e.touchendX - e.touchstartX) < 100) return;
|
|
if (!this.right && e.touchstartX <= this.touchArea.left) this.isActive = true;else if (this.right && this.isActive) this.isActive = false;
|
|
},
|
|
|
|
/**
|
|
* Update the application layout
|
|
*/
|
|
updateApplication: function updateApplication() {
|
|
if (!this.isActive || this.isMobile || this.temporary || !this.$el) return 0;
|
|
var width = Number(this.computedWidth);
|
|
return isNaN(width) ? this.$el.clientWidth : width;
|
|
}
|
|
},
|
|
render: function render(h) {
|
|
var children = [this.genPrepend(), this.genContent(), this.genAppend(), this.genBorder()];
|
|
if (this.src || (0, _helpers.getSlot)(this, 'img')) children.unshift(this.genBackground());
|
|
return h(this.tag, this.setBackgroundColor(this.color, {
|
|
class: this.classes,
|
|
style: this.styles,
|
|
directives: this.genDirectives(),
|
|
on: this.genListeners()
|
|
}), children);
|
|
}
|
|
});
|
|
|
|
exports.default = _default2;
|
|
//# sourceMappingURL=VNavigationDrawer.js.map
|