layui.define(['jquery'], function (exports) {
|
var $ = layui.jquery;
|
var CLS_DROPDOWN = 'layui-dropdown';
|
var CLS_DROPDOWN_RIGHT = 'layui-dropdown-direright';
|
var CLS_SELECT = 'layui-dropdown-select';
|
var CLS_OPTION = 'layui-dropdown-option';
|
var CLS_TITLE = 'layui-dropdown-title';
|
var CLS_ARROW = 'febs-arrow-up';
|
var HTML_DROPDOWN = '<div class="' + CLS_DROPDOWN + '"><div>';
|
var DEPTH = 0;
|
var INDEX = 0;
|
|
var Class = function (config) {
|
this.config = $.extend({}, this.config, config);
|
this.render(config)
|
};
|
Class.prototype.config = {
|
width: 150,
|
trigger: 'click'
|
};
|
Class.prototype.dropdownElem = '';
|
Class.prototype.exists = false;
|
Class.prototype.depth = 0;
|
Class.prototype.index = 0;
|
Class.prototype.render = function (config) {
|
var self = this;
|
if (typeof this.config.elem == 'string') {
|
$(document).on('click', this.config.elem, event)
|
} else {
|
this.config.elem.click(event)
|
}
|
|
function event(e) {
|
e.stopPropagation();
|
if (self.dropdownElem === '') {
|
INDEX += 1;
|
self.index = INDEX;
|
|
var dropdown = $(HTML_DROPDOWN).attr('lay-index', self.index);
|
$('.' + CLS_DROPDOWN + '[lay-index="' + self.index + '"]').remove();
|
|
dropdown.html(self.createOptionsHtml(config));
|
$('body').prepend(dropdown);
|
dropdown.on('click', '.' + CLS_OPTION, function (e) {
|
e.stopPropagation();
|
if ($.isFunction(config.click)) {
|
config.click($(this).attr('lay-name'), $(this), e);
|
dropdown.hide()
|
}
|
});
|
self.dropdownElem = dropdown;
|
self.dropdownSelect = dropdown.find('.' + CLS_SELECT)
|
}
|
|
var dropdown = self.dropdownElem;
|
|
var top = $(this).offset().top + $(this).height() + 12;
|
var left = $(this).offset().left - 5;
|
dropdown.css({
|
top: top - 10
|
});
|
var offsetWidth = (self.depth + 1) * self.config.width;
|
|
if (left + offsetWidth > $(window).width()) {
|
dropdown
|
.addClass('layui-dropdown-right')
|
.css('left', left - dropdown.width() + $(this).width());
|
self.dropdownSelect.css({left: 'auto', right: self.config.width})
|
} else {
|
dropdown.removeClass('layui-dropdown-right').css('left', left);
|
self.dropdownSelect.css({right: 'auto', left: self.config.width})
|
}
|
|
$('body').one('click', function (e) {
|
dropdown.stop().animate(
|
{
|
top: '-=100000',
|
opacity: 0
|
},
|
1
|
);
|
});
|
|
dropdown
|
.show()
|
.stop()
|
.animate(
|
{
|
top: '+=10',
|
opacity: 1
|
},
|
250
|
)
|
}
|
};
|
Class.prototype.createOptionsHtml = function (data, depth) {
|
depth = depth || 0;
|
var self = this;
|
var width = self.config.width + 'px;';
|
var html =
|
'<div class="' +
|
CLS_SELECT +
|
'" style="width:' +
|
width +
|
(depth > 0 ? 'left:' + width : '') +
|
'">';
|
if (depth === 0) {
|
html += '<div class="' + CLS_ARROW + '"></div>'
|
}
|
layui.each(data.options, function (i, option) {
|
var paserHtml = false;
|
var permissions = currentUser.permissionSet;
|
var options = option.options || [];
|
if (option.perms) {
|
if (permissions.indexOf(option.perms) !== -1) {
|
paserHtml = true;
|
}
|
} else {
|
paserHtml = true;
|
}
|
if (paserHtml) {
|
html +=
|
'<div lay-name=' +
|
option.name +
|
' class="' +
|
CLS_OPTION +
|
'"><p class="' +
|
CLS_TITLE +
|
' layui-elip"><span class="layui-icon ' +
|
option.icon +
|
'"></span>' +
|
option.title +
|
'</p>' +
|
(options.length > 0
|
? '<i class="layui-icon layui-icon-right"></i>'
|
: '');
|
option.options = option.options || [];
|
if (option.options.length > 0)
|
html += self.createOptionsHtml(option, depth + 1);
|
html += '</div>';
|
if (self.depth < depth) self.depth = depth
|
}
|
});
|
html += '</div>';
|
return html
|
};
|
|
var self = {
|
render: function (config) {
|
new Class(config)
|
}
|
};
|
exports('dropdown', self)
|
});
|