This repository has been archived on 2024-07-27. You can view files and clone it, but cannot push or open issues or pull requests.
keksAccountGUI/node_modulesOLD/vuetify/lib/components/VWindow/VWindowItem.js
2019-08-11 20:48:02 +02:00

142 lines
No EOL
3.4 KiB
JavaScript

// Mixins
import Bootable from '../../mixins/bootable';
import { factory as GroupableFactory } from '../../mixins/groupable'; // Directives
import Touch from '../../directives/touch'; // Utilities
import { convertToUnit } from '../../util/helpers';
import mixins from '../../util/mixins';
const baseMixins = mixins(Bootable, GroupableFactory('windowGroup', 'v-window-item', 'v-window'));
export default baseMixins.extend().extend().extend({
name: 'v-window-item',
directives: {
Touch
},
props: {
disabled: Boolean,
reverseTransition: {
type: [Boolean, String],
default: undefined
},
transition: {
type: [Boolean, String],
default: undefined
},
value: {
required: false
}
},
data() {
return {
done: null,
isActive: false,
wasCancelled: false
};
},
computed: {
classes() {
return this.groupClasses;
},
computedTransition() {
if (!this.windowGroup.internalReverse) {
return typeof this.transition !== 'undefined' ? this.transition || '' : this.windowGroup.computedTransition;
}
return typeof this.reverseTransition !== 'undefined' ? this.reverseTransition || '' : this.windowGroup.computedTransition;
}
},
mounted() {
this.$el.addEventListener('transitionend', this.onTransitionEnd, false);
},
beforeDestroy() {
this.$el.removeEventListener('transitionend', this.onTransitionEnd, false);
},
methods: {
genDefaultSlot() {
return this.$slots.default;
},
genWindowItem() {
return this.$createElement('div', {
staticClass: 'v-window-item',
class: this.classes,
directives: [{
name: 'show',
value: this.isActive
}],
on: this.$listeners
}, this.showLazyContent(this.genDefaultSlot()));
},
onAfterEnter() {
if (this.wasCancelled) {
this.wasCancelled = false;
return;
}
requestAnimationFrame(() => {
this.windowGroup.internalHeight = undefined;
this.windowGroup.isActive = false;
});
},
onBeforeEnter() {
this.windowGroup.isActive = true;
},
onBeforeLeave(el) {
this.windowGroup.internalHeight = convertToUnit(el.clientHeight);
},
onEnterCancelled() {
this.wasCancelled = true;
},
onEnter(el, done) {
const isBooted = this.windowGroup.isBooted;
if (isBooted) this.done = done;
this.$nextTick(() => {
if (!this.computedTransition) return done();
this.windowGroup.internalHeight = convertToUnit(el.clientHeight); // On initial render, there is no transition
// Vue leaves a `enter` transition class
// if done is called too fast
!isBooted && setTimeout(done, 100);
});
},
onTransitionEnd(e) {
// This ensures we only call done
// when the element transform
// completes
if (e.propertyName !== 'transform' || e.target !== this.$el || !this.done) return;
this.done();
this.done = null;
}
},
render(h) {
return h('transition', {
props: {
name: this.computedTransition
},
on: {
afterEnter: this.onAfterEnter,
beforeEnter: this.onBeforeEnter,
beforeLeave: this.onBeforeLeave,
enter: this.onEnter,
enterCancelled: this.onEnterCancelled
}
}, [this.genWindowItem()]);
}
});
//# sourceMappingURL=VWindowItem.js.map