123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- 'use strict';
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
-
- require('../../../src/stylus/components/_tabs.styl');
-
- var _VItemGroup = require('../VItemGroup/VItemGroup');
-
- var _tabsComputed = require('./mixins/tabs-computed');
-
- var _tabsComputed2 = _interopRequireDefault(_tabsComputed);
-
- var _tabsGenerators = require('./mixins/tabs-generators');
-
- var _tabsGenerators2 = _interopRequireDefault(_tabsGenerators);
-
- var _tabsProps = require('./mixins/tabs-props');
-
- var _tabsProps2 = _interopRequireDefault(_tabsProps);
-
- var _tabsTouch = require('./mixins/tabs-touch');
-
- var _tabsTouch2 = _interopRequireDefault(_tabsTouch);
-
- var _tabsWatchers = require('./mixins/tabs-watchers');
-
- var _tabsWatchers2 = _interopRequireDefault(_tabsWatchers);
-
- var _colorable = require('../../mixins/colorable');
-
- var _colorable2 = _interopRequireDefault(_colorable);
-
- var _ssrBootable = require('../../mixins/ssr-bootable');
-
- var _ssrBootable2 = _interopRequireDefault(_ssrBootable);
-
- var _themeable = require('../../mixins/themeable');
-
- var _themeable2 = _interopRequireDefault(_themeable);
-
- var _resize = require('../../directives/resize');
-
- var _resize2 = _interopRequireDefault(_resize);
-
- var _touch = require('../../directives/touch');
-
- var _touch2 = _interopRequireDefault(_touch);
-
- var _console = require('../../util/console');
-
- var _ThemeProvider = require('../../util/ThemeProvider');
-
- var _ThemeProvider2 = _interopRequireDefault(_ThemeProvider);
-
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
- /* @vue/component */
-
- // Directives
-
- // Component level mixins
- // Styles
- exports.default = _VItemGroup.BaseItemGroup.extend({
- name: 'v-tabs',
- directives: {
- Resize: _resize2.default,
- Touch: _touch2.default
- },
- mixins: [_colorable2.default, _ssrBootable2.default, _tabsComputed2.default, _tabsProps2.default, _tabsGenerators2.default, _tabsTouch2.default, _tabsWatchers2.default, _themeable2.default],
- provide: function provide() {
- return {
- tabGroup: this,
- tabProxy: this.tabProxy,
- registerItems: this.registerItems,
- unregisterItems: this.unregisterItems
- };
- },
- data: function data() {
- return {
- bar: [],
- content: [],
- isOverflowing: false,
- nextIconVisible: false,
- prevIconVisible: false,
- resizeTimeout: null,
- scrollOffset: 0,
- sliderWidth: null,
- sliderLeft: null,
- startX: 0,
- tabItems: null,
- transitionTime: 300,
- widths: {
- bar: 0,
- container: 0,
- wrapper: 0
- }
- };
- },
-
- watch: {
- items: 'onResize',
- tabs: 'onResize'
- },
- mounted: function mounted() {
- this.init();
- },
-
- methods: {
- checkIcons: function checkIcons() {
- this.prevIconVisible = this.checkPrevIcon();
- this.nextIconVisible = this.checkNextIcon();
- },
- checkPrevIcon: function checkPrevIcon() {
- return this.scrollOffset > 0;
- },
- checkNextIcon: function checkNextIcon() {
- // Check one scroll ahead to know the width of right-most item
- return this.widths.container > this.scrollOffset + this.widths.wrapper;
- },
- callSlider: function callSlider() {
- var _this = this;
-
- if (this.hideSlider || !this.activeTab) return false;
- // Give screen time to paint
- var activeTab = this.activeTab;
- this.$nextTick(function () {
- /* istanbul ignore if */
- if (!activeTab || !activeTab.$el) return;
- _this.sliderWidth = activeTab.$el.scrollWidth;
- _this.sliderLeft = activeTab.$el.offsetLeft;
- });
- },
-
- // Do not process
- // until DOM is
- // painted
- init: function init() {
- /* istanbul ignore next */
- if (this.$listeners['input']) {
- (0, _console.deprecate)('@input', '@change', this);
- }
- },
-
- /**
- * When v-navigation-drawer changes the
- * width of the container, call resize
- * after the transition is complete
- */
- onResize: function onResize() {
- if (this._isDestroyed) return;
- this.setWidths();
- var delay = this.isBooted ? this.transitionTime : 0;
- clearTimeout(this.resizeTimeout);
- this.resizeTimeout = setTimeout(this.updateTabsView, delay);
- },
- overflowCheck: function overflowCheck(e, fn) {
- this.isOverflowing && fn(e);
- },
- scrollTo: function scrollTo(direction) {
- this.scrollOffset = this.newOffset(direction);
- },
- setOverflow: function setOverflow() {
- this.isOverflowing = this.widths.bar < this.widths.container;
- },
- setWidths: function setWidths() {
- var bar = this.$refs.bar ? this.$refs.bar.clientWidth : 0;
- var container = this.$refs.container ? this.$refs.container.clientWidth : 0;
- var wrapper = this.$refs.wrapper ? this.$refs.wrapper.clientWidth : 0;
- this.widths = { bar: bar, container: container, wrapper: wrapper };
- this.setOverflow();
- },
- parseNodes: function parseNodes() {
- var item = [];
- var items = [];
- var slider = [];
- var tab = [];
- var length = (this.$slots.default || []).length;
- for (var i = 0; i < length; i++) {
- var vnode = this.$slots.default[i];
- if (vnode.componentOptions) {
- switch (vnode.componentOptions.Ctor.options.name) {
- case 'v-tabs-slider':
- slider.push(vnode);
- break;
- case 'v-tabs-items':
- items.push(vnode);
- break;
- case 'v-tab-item':
- item.push(vnode);
- break;
- // case 'v-tab' - intentionally omitted
- default:
- tab.push(vnode);
- }
- } else {
- tab.push(vnode);
- }
- }
- return { tab: tab, slider: slider, items: items, item: item };
- },
- registerItems: function registerItems(fn) {
- this.tabItems = fn;
- fn(this.internalValue);
- },
- unregisterItems: function unregisterItems() {
- this.tabItems = null;
- },
- updateTabsView: function updateTabsView() {
- this.callSlider();
- this.scrollIntoView();
- this.checkIcons();
- },
- scrollIntoView: function scrollIntoView() {
- /* istanbul ignore next */
- if (!this.activeTab) return;
- if (!this.isOverflowing) return this.scrollOffset = 0;
- var totalWidth = this.widths.wrapper + this.scrollOffset;
- var _activeTab$$el = this.activeTab.$el,
- clientWidth = _activeTab$$el.clientWidth,
- offsetLeft = _activeTab$$el.offsetLeft;
-
- var itemOffset = clientWidth + offsetLeft;
- var additionalOffset = clientWidth * 0.3;
- if (this.activeTab === this.items[this.items.length - 1]) {
- additionalOffset = 0; // don't add an offset if selecting the last tab
- }
- /* istanbul ignore else */
- if (offsetLeft < this.scrollOffset) {
- this.scrollOffset = Math.max(offsetLeft - additionalOffset, 0);
- } else if (totalWidth < itemOffset) {
- this.scrollOffset -= totalWidth - itemOffset - additionalOffset;
- }
- },
- tabProxy: function tabProxy(val) {
- this.internalValue = val;
- }
- },
- render: function render(h) {
- var _parseNodes = this.parseNodes(),
- tab = _parseNodes.tab,
- slider = _parseNodes.slider,
- items = _parseNodes.items,
- item = _parseNodes.item;
-
- return h('div', {
- staticClass: 'v-tabs',
- directives: [{
- name: 'resize',
- modifiers: { quiet: true },
- value: this.onResize
- }]
- }, [this.genBar([this.hideSlider ? null : this.genSlider(slider), tab]), h(_ThemeProvider2.default, {
- props: { dark: this.theme.isDark, light: !this.theme.isDark }
- }, [this.genItems(items, item)])]);
- }
- });
- // Utils
-
- // Mixins
-
- // Extensions
- //# sourceMappingURL=VTabs.js.map
|