225 lines
6.6 KiB
JavaScript
Executable File
225 lines
6.6 KiB
JavaScript
Executable File
(function (global, factory) {
|
|
if (typeof define === "function" && define.amd) {
|
|
define('/Plugin/menu', ['exports', 'Plugin'], factory);
|
|
} else if (typeof exports !== "undefined") {
|
|
factory(exports, require('Plugin'));
|
|
} else {
|
|
var mod = {
|
|
exports: {}
|
|
};
|
|
factory(mod.exports, global.Plugin);
|
|
global.PluginMenu = mod.exports;
|
|
}
|
|
})(this, function (exports, _Plugin2) {
|
|
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var _Plugin3 = babelHelpers.interopRequireDefault(_Plugin2);
|
|
|
|
var NAME = 'menu';
|
|
|
|
var Menu = function (_Plugin) {
|
|
babelHelpers.inherits(Menu, _Plugin);
|
|
|
|
function Menu() {
|
|
var _ref;
|
|
|
|
babelHelpers.classCallCheck(this, Menu);
|
|
|
|
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
|
|
args[_key] = arguments[_key];
|
|
}
|
|
|
|
var _this = babelHelpers.possibleConstructorReturn(this, (_ref = Menu.__proto__ || Object.getPrototypeOf(Menu)).call.apply(_ref, [this].concat(args)));
|
|
|
|
_this.folded = true;
|
|
_this.foldAlt = true;
|
|
_this.outerHeight = 0;
|
|
return _this;
|
|
}
|
|
|
|
babelHelpers.createClass(Menu, [{
|
|
key: 'getName',
|
|
value: function getName() {
|
|
return NAME;
|
|
}
|
|
}, {
|
|
key: 'render',
|
|
value: function render() {
|
|
this.bindEvents();
|
|
this.$el.data('menuApi', this);
|
|
}
|
|
}, {
|
|
key: 'bindEvents',
|
|
value: function bindEvents() {
|
|
var self = this;
|
|
|
|
this.$el.on('mouseenter.site.menu', '.site-menu-item', function () {
|
|
var $item = $(this);
|
|
if (self.folded === true && $item.is('.has-sub') && $item.parent('.site-menu').length > 0) {
|
|
var $sub = $item.children('.site-menu-sub');
|
|
self.position($item, $sub);
|
|
}
|
|
$item.addClass('hover');
|
|
}).on('mouseleave.site.menu', '.site-menu-item', function () {
|
|
var $item = $(this);
|
|
if (self.folded === true && $item.is('.has-sub') && $item.parent('.site-menu').length > 0) {
|
|
$item.children('.site-menu-sub').css('max-height', '');
|
|
$item.removeClass('open');
|
|
}
|
|
$item.removeClass('hover');
|
|
}).on('deactive.site.menu', '.site-menu-item.active', function (e) {
|
|
$(this).removeClass('active');
|
|
|
|
e.stopPropagation();
|
|
}).on('active.site.menu', '.site-menu-item', function (e) {
|
|
$(this).addClass('active');
|
|
|
|
e.stopPropagation();
|
|
}).on('open.site.menu', '.site-menu-item', function (e) {
|
|
var $item = $(this);
|
|
|
|
self.expand($item, function () {
|
|
$item.addClass('open');
|
|
});
|
|
|
|
if (self.options.accordion) {
|
|
$item.siblings('.open').trigger('close.site.menu');
|
|
}
|
|
|
|
e.stopPropagation();
|
|
}).on('close.site.menu', '.site-menu-item.open', function (e) {
|
|
var $item = $(this);
|
|
|
|
self.collapse($item, function () {
|
|
$item.removeClass('open');
|
|
});
|
|
|
|
e.stopPropagation();
|
|
}).on('click.site.menu ', '.site-menu-item', function (e) {
|
|
var $item = $(this);
|
|
|
|
if ($item.is('.has-sub') && $(e.target).closest('.site-menu-item').is(this)) {
|
|
if ($item.is('.open')) {
|
|
$item.trigger('close.site.menu');
|
|
} else {
|
|
$item.trigger('open.site.menu');
|
|
}
|
|
} else if (!$item.is('.active')) {
|
|
$item.siblings('.active').trigger('deactive.site.menu');
|
|
$item.trigger('active.site.menu');
|
|
}
|
|
|
|
e.stopPropagation();
|
|
}).on('tap.site.menu', '> .site-menu-item > a', function () {
|
|
var link = $(this).attr('href');
|
|
|
|
if (link) {
|
|
window.location = link;
|
|
}
|
|
}).on('touchend.site.menu', '> .site-menu-item > a', function () {
|
|
var $item = $(this).parent('.site-menu-item');
|
|
|
|
if (self.folded === true) {
|
|
if ($item.is('.has-sub') && $item.parent('.site-menu').length > 0) {
|
|
$item.siblings('.hover').removeClass('hover');
|
|
|
|
if ($item.is('.hover')) {
|
|
$item.removeClass('hover');
|
|
} else {
|
|
$item.addClass('hover');
|
|
}
|
|
}
|
|
}
|
|
}).on('scroll.site.menu', '.site-menu-sub', function (e) {
|
|
e.stopPropagation();
|
|
});
|
|
}
|
|
}, {
|
|
key: 'collapse',
|
|
value: function collapse($item, callback) {
|
|
var self = this;
|
|
var $sub = $item.children('.site-menu-sub');
|
|
|
|
$sub.show().slideUp(this.options.speed, function () {
|
|
$(this).css('display', '');
|
|
|
|
$(this).find('> .site-menu-item').removeClass('is-shown');
|
|
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
|
|
self.$el.trigger('collapsed.site.menu');
|
|
});
|
|
}
|
|
}, {
|
|
key: 'expand',
|
|
value: function expand($item, callback) {
|
|
var self = this;
|
|
var $sub = $item.children('.site-menu-sub');
|
|
var $children = $sub.children('.site-menu-item').addClass('is-hidden');
|
|
|
|
$sub.hide().slideDown(this.options.speed, function () {
|
|
$(this).css('display', '');
|
|
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
|
|
self.$el.trigger('expanded.site.menu');
|
|
});
|
|
|
|
setTimeout(function () {
|
|
$children.addClass('is-shown');
|
|
$children.removeClass('is-hidden');
|
|
}, 0);
|
|
}
|
|
}, {
|
|
key: 'refresh',
|
|
value: function refresh() {
|
|
this.$el.find('.open').filter(':not(.active)').removeClass('open');
|
|
}
|
|
}, {
|
|
key: 'position',
|
|
value: function position($item, $dropdown) {
|
|
var itemHeight = $item.find('> a').outerHeight(),
|
|
menubarHeight = this.outerHeight,
|
|
offsetTop = $item.position().top;
|
|
|
|
$dropdown.removeClass('site-menu-sub-up').css('max-height', '');
|
|
|
|
if (offsetTop > menubarHeight / 2) {
|
|
$dropdown.addClass('site-menu-sub-up');
|
|
|
|
if (this.foldAlt) {
|
|
offsetTop -= itemHeight;
|
|
}
|
|
$dropdown.css('max-height', offsetTop + itemHeight);
|
|
} else {
|
|
if (this.foldAlt) {
|
|
offsetTop += itemHeight;
|
|
}
|
|
$dropdown.removeClass('site-menu-sub-up');
|
|
$dropdown.css('max-height', menubarHeight - offsetTop);
|
|
}
|
|
}
|
|
}], [{
|
|
key: 'getDefaults',
|
|
value: function getDefaults() {
|
|
return {
|
|
speed: 250,
|
|
accordion: true
|
|
};
|
|
}
|
|
}]);
|
|
return Menu;
|
|
}(_Plugin3.default);
|
|
|
|
_Plugin3.default.register(NAME, Menu);
|
|
|
|
exports.default = Menu;
|
|
}); |