mand-mobile
Version:
A Vue.js 2.0 Mobile UI Toolkit
190 lines (168 loc) • 7.04 kB
JavaScript
;(function(){
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(['exports', '../popup', '../radio-list', '../_util', '../_style/global.css', './style/index.css'], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require('../popup'), require('../radio-list'), require('../_util'), require('../_style/global.css'), require('./style/index.css'));
} else {
var mod = {
exports: {}
};
factory(mod.exports, global.popup, global.radioList, global._util, global.global, global.index);
global.index = mod.exports;
}
})(this, function (exports, _popup, _radioList, _util) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _popup2 = _interopRequireDefault(_popup);
var _radioList2 = _interopRequireDefault(_radioList);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
var _components;
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;
}
exports.default = {
name: 'md-drop-menu',
components: (_components = {}, _defineProperty(_components, _popup2.default.name, _popup2.default), _defineProperty(_components, _radioList2.default.name, _radioList2.default), _components),
props: {
data: {
type: Array,
default: function _default() {
return [];
}
},
defaultValue: {
type: Array,
default: function _default() {
return [];
}
}
},
data: function data() {
return {
isPopupShow: false,
selectedMenuListItem: [],
selectedMenuListValue: [],
selectedMenuListIndex: [],
activeMenuBarIndex: -1,
scroller: ''
};
},
computed: {
hasSlot: function hasSlot() {
return !!this.$scopedSlots.default;
},
activeMenuListData: function activeMenuListData() {
if (this.activeMenuBarIndex < 0 || !this.data[this.activeMenuBarIndex]) {
return [];
}
return this.data[this.activeMenuBarIndex].options;
}
},
watch: {
data: function data(val, oldVal) {
if (!(0, _util.compareObjects)(val, oldVal)) {
this.$_initSelectedBar();
}
},
defaultValue: function defaultValue(val, oldVal) {
if (!(0, _util.compareObjects)(val, oldVal)) {
this.$_initSelectedBar();
}
}
},
mounted: function mounted() {
this.$_initSelectedBar();
},
methods: {
$_initSelectedBar: function $_initSelectedBar() {
var _this = this;
this.selectedMenuListValue = this.defaultValue;
(0, _util.traverse)(this.data, ['options'], function (item, level, indexs) {
var barItemIndex = indexs[0];
var defaultValue = _this.defaultValue[barItemIndex];
if (defaultValue !== undefined && (item.value === defaultValue || item.text === defaultValue || item.label === defaultValue)) {
_this.$set(_this.selectedMenuListItem, barItemIndex, item);
return 2;
}
});
},
$_checkBarItemSelect: function $_checkBarItemSelect(index) {
return !!(this.selectedMenuListItem[index] !== undefined || this.defaultValue[index]);
},
$_getBarItemText: function $_getBarItemText(item, index) {
return this.selectedMenuListItem[index] !== undefined ? this.selectedMenuListItem[index].text : item.text;
},
$_setScroller: function $_setScroller() {
var boxer = this.$el ? this.$el.querySelector('.md-popup-box') : null;
if (boxer && boxer.clientHeight >= this.$el.clientHeight) {
this.scroller = '.md-drop-menu-list';
} else {
return '';
}
},
$_onBarItemClick: function $_onBarItemClick(barItem, index) {
if (!barItem || barItem.disabled) {
return;
}
if (!this.isPopupShow) {
this.isPopupShow = true;
this.activeMenuBarIndex = index;
} else {
this.isPopupShow = false;
}
},
$_onListItemClick: function $_onListItemClick(listItem) {
var activeMenuBarIndex = this.activeMenuBarIndex;
var barItem = this.data[activeMenuBarIndex];
this.isPopupShow = false;
this.selectedMenuListValue[activeMenuBarIndex] = listItem.value;
this.$set(this.selectedMenuListItem, activeMenuBarIndex, listItem);
this.$emit('change', barItem, listItem);
},
$_onListShow: function $_onListShow() {
this.$_setScroller();
this.$emit('show');
},
$_onListHide: function $_onListHide() {
this.$emit('hide');
},
$_onListBeforeHide: function $_onListBeforeHide() {
this.activeMenuBarIndex = -1;
},
getSelectedValues: function getSelectedValues() {
return this.selectedMenuListItem;
},
getSelectedValue: function getSelectedValue(index) {
return this.selectedMenuListItem[index];
}
}
};
});
})()
if (module.exports.__esModule) module.exports = module.exports.default
var __vue__options__ = (typeof module.exports === "function"? module.exports.options: module.exports)
__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"md-drop-menu"},[_c('div',{staticClass:"md-drop-menu-bar"},[_vm._l((_vm.data),function(item,index){return [_c('div',{key:index,staticClass:"bar-item",class:{
active: index === _vm.activeMenuBarIndex,
selected: _vm.$_checkBarItemSelect(index),
disabled: item.disabled
},on:{"click":function($event){return _vm.$_onBarItemClick(item, index)}}},[_c('span',{domProps:{"textContent":_vm._s(_vm.$_getBarItemText(item, index))}})])]})],2),_vm._v(" "),_c('md-popup',{attrs:{"position":"top","prevent-scroll":"","prevent-scroll-exclude":_vm.scroller},on:{"show":_vm.$_onListShow,"hide":_vm.$_onListHide,"before-hide":_vm.$_onListBeforeHide},model:{value:(_vm.isPopupShow),callback:function ($$v) {_vm.isPopupShow=$$v},expression:"isPopupShow"}},[_c('div',{staticClass:"md-drop-menu-list"},[_c('md-radio-list',{attrs:{"options":_vm.activeMenuListData,"is-slot-scope":_vm.hasSlot,"align-center":""},on:{"change":_vm.$_onListItemClick},scopedSlots:_vm._u([{key:"default",fn:function(ref){
var option = ref.option;
return _c('div',{},[_vm._t("default",null,{"option":option})],2)}}],null,true),model:{value:(_vm.selectedMenuListValue[_vm.activeMenuBarIndex]),callback:function ($$v) {_vm.$set(_vm.selectedMenuListValue, _vm.activeMenuBarIndex, $$v)},expression:"selectedMenuListValue[activeMenuBarIndex]"}})],1)])],1)}
__vue__options__.staticRenderFns = []