vue-material/src/components/mdLayout/mdLayout.vue

103 lines
3.1 KiB
Vue
Raw Normal View History

2016-12-12 05:10:09 +00:00
<style lang="scss" src="./mdLayout.scss"></style>
<script>
export default {
2016-12-12 05:10:54 +00:00
props: {
mdTag: {
type: String,
default: 'div'
2016-12-12 07:26:21 +00:00
},
mdRow: Boolean,
mdRowXsmall: Boolean,
mdRowSmall: Boolean,
mdRowMedium: Boolean,
mdRowLarge: Boolean,
mdRowXlarge: Boolean,
mdColumn: Boolean,
mdColumnXsmall: Boolean,
mdColumnSmall: Boolean,
mdColumnMedium: Boolean,
mdColumnLarge: Boolean,
mdColumnXlarge: Boolean,
2016-12-13 04:39:29 +00:00
mdHideXsmall: Boolean,
mdHideSmall: Boolean,
mdHideMedium: Boolean,
mdHideLarge: Boolean,
mdHideXlarge: Boolean,
2016-12-12 07:26:21 +00:00
mdGutter: [Number, Boolean],
2016-12-13 23:20:12 +00:00
mdFlex: [Number, Boolean],
mdFlexXsmall: Number,
mdFlexSmall: Number,
mdFlexMedium: Number,
mdFlexLarge: Number,
mdFlexXlarge: Number
2016-12-12 07:26:21 +00:00
},
computed: {
classes() {
let classes = {
'md-row': this.mdRow,
'md-row-xsmall': this.mdRowXsmall,
'md-row-small': this.mdRowSmall,
'md-row-medium': this.mdRowMedium,
'md-row-large': this.mdRowLarge,
'md-row-xlarge': this.mdRowXlarge,
'md-column': this.mdColumn,
'md-column-xsmall': this.mdColumnXsmall,
'md-column-small': this.mdColumnSmall,
'md-column-medium': this.mdColumnMedium,
'md-column-large': this.mdColumnLarge,
2016-12-13 04:39:29 +00:00
'md-column-xlarge': this.mdColumnXlarge,
'md-hide-xsmall': this.mdHideXsmall,
'md-hide-small': this.mdHideSmall,
'md-hide-medium': this.mdHideMedium,
'md-hide-large': this.mdHideLarge,
2016-12-13 23:20:12 +00:00
'md-hide-xlarge': this.mdHideXlarge,
'md-flex-xsmall': this.mdFlexXsmall,
'md-flex-small': this.mdFlexSmall,
'md-flex-medium': this.mdFlexMedium,
'md-flex-large': this.mdFlexLarge,
'md-flex-xlarge': this.mdFlexXlarge
2016-12-12 07:26:21 +00:00
};
if (this.mdGutter) {
if (typeof this.mdGutter === 'boolean') {
classes['md-gutter-8'] = true;
} else {
classes['md-gutter-' + this.mdGutter] = true;
}
}
2016-12-13 23:30:07 +00:00
this.generateFlexClasses('', 'mdFlex', classes);
2016-12-13 23:20:12 +00:00
this.generateFlexClasses('xsmall', 'mdFlexXsmall', classes);
this.generateFlexClasses('small', 'mdFlexSmall', classes);
this.generateFlexClasses('medium', 'mdFlexMedium', classes);
this.generateFlexClasses('large', 'mdFlexLarge', classes);
this.generateFlexClasses('xlarge', 'mdFlexXlarge', classes);
return classes;
}
},
methods: {
generateFlexClasses(size, name, object) {
if (size) {
size = '-' + size;
}
if (this[name]) {
if (typeof this[name] === 'boolean') {
object['md-flex' + size] = true;
2016-12-12 07:26:21 +00:00
} else {
2016-12-13 23:20:12 +00:00
object['md-flex-' + size + this[name]] = true;
2016-12-12 07:26:21 +00:00
}
}
2016-12-12 05:10:54 +00:00
}
},
2016-12-12 05:10:09 +00:00
render(createElement) {
return createElement(this.mdTag, {
staticClass: 'md-layout',
class: this.classes
}, this.$slots.default);
}
};
</script>