vuetify
Version:
Vue.js 2 Semantic Component Framework
152 lines (123 loc) • 4.48 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
require('../../../src/stylus/components/_buttons.styl');
var _colorable = require('../../mixins/colorable');
var _colorable2 = _interopRequireDefault(_colorable);
var _positionable = require('../../mixins/positionable');
var _positionable2 = _interopRequireDefault(_positionable);
var _routable = require('../../mixins/routable');
var _routable2 = _interopRequireDefault(_routable);
var _themeable = require('../../mixins/themeable');
var _themeable2 = _interopRequireDefault(_themeable);
var _toggleable = require('../../mixins/toggleable');
var _registrable = require('../../mixins/registrable');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = {
name: 'v-btn',
mixins: [_colorable2.default, _routable2.default, _positionable2.default, _themeable2.default, (0, _toggleable.factory)('inputValue'), (0, _registrable.inject)('buttonGroup')],
props: {
activeClass: {
type: String,
default: 'btn--active'
},
block: Boolean,
depressed: Boolean,
fab: Boolean,
flat: Boolean,
icon: Boolean,
large: Boolean,
loading: Boolean,
outline: Boolean,
ripple: {
type: [Boolean, Object],
default: true
},
round: Boolean,
small: Boolean,
tag: {
type: String,
default: 'button'
},
type: {
type: String,
default: 'button'
},
value: null
},
computed: {
classes: function classes() {
var classes = _extends({
'btn': true,
'btn--active': this.isActive,
'btn--absolute': this.absolute,
'btn--block': this.block,
'btn--bottom': this.bottom,
'btn--disabled': this.disabled,
'btn--flat': this.flat,
'btn--floating': this.fab,
'btn--fixed': this.fixed,
'btn--hover': this.hover,
'btn--icon': this.icon,
'btn--large': this.large,
'btn--left': this.left,
'btn--loader': this.loading,
'btn--outline': this.outline,
'btn--depressed': this.depressed && !this.flat || this.outline,
'btn--right': this.right,
'btn--round': this.round,
'btn--router': this.to,
'btn--small': this.small,
'btn--top': this.top
}, this.themeClasses);
return !this.outline && !this.flat ? this.addBackgroundColorClassChecks(classes) : this.addTextColorClassChecks(classes);
}
},
methods: {
// Prevent focus to match md spec
click: function click(e) {
!this.fab && e.detail && this.$el.blur();
this.$emit('click', e);
},
genContent: function genContent() {
return this.$createElement('div', { 'class': 'btn__content' }, [this.$slots.default]);
},
genLoader: function genLoader() {
var children = [];
if (!this.$slots.loader) {
children.push(this.$createElement('v-progress-circular', {
props: {
indeterminate: true,
size: 26
}
}));
} else {
children.push(this.$slots.loader);
}
return this.$createElement('span', { 'class': 'btn__loading' }, children);
}
},
mounted: function mounted() {
if (this.buttonGroup) {
this.buttonGroup.register(this);
}
},
beforeDestroy: function beforeDestroy() {
if (this.buttonGroup) {
this.buttonGroup.unregister(this);
}
},
render: function render(h) {
var _generateRouteLink = this.generateRouteLink(),
tag = _generateRouteLink.tag,
data = _generateRouteLink.data;
var children = [this.genContent()];
tag === 'button' && (data.attrs.type = this.type);
this.loading && children.push(this.genLoader());
data.attrs.value = ['string', 'number'].includes(_typeof(this.value)) ? this.value : JSON.stringify(this.value);
return h(tag, data, children);
}
};