diff options
Diffstat (limited to 'public/bower_components/admin-lte/build/js/PushMenu.js')
-rw-r--r-- | public/bower_components/admin-lte/build/js/PushMenu.js | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/public/bower_components/admin-lte/build/js/PushMenu.js b/public/bower_components/admin-lte/build/js/PushMenu.js new file mode 100644 index 0000000..f45e971 --- /dev/null +++ b/public/bower_components/admin-lte/build/js/PushMenu.js @@ -0,0 +1,176 @@ +/* PushMenu() + * ========== + * Adds the push menu functionality to the sidebar. + * + * @usage: $('.btn').pushMenu(options) + * or add [data-toggle="push-menu"] to any button + * Pass any option as data-option="value" + */ ++function ($) { + 'use strict'; + + var DataKey = 'lte.pushmenu'; + + var Default = { + collapseScreenSize : 767, + expandOnHover : false, + expandTransitionDelay: 200 + }; + + var Selector = { + collapsed : '.sidebar-collapse', + open : '.sidebar-open', + mainSidebar : '.main-sidebar', + contentWrapper: '.content-wrapper', + searchInput : '.sidebar-form .form-control', + button : '[data-toggle="push-menu"]', + mini : '.sidebar-mini', + expanded : '.sidebar-expanded-on-hover', + layoutFixed : '.fixed' + }; + + var ClassName = { + collapsed : 'sidebar-collapse', + open : 'sidebar-open', + mini : 'sidebar-mini', + expanded : 'sidebar-expanded-on-hover', + expandFeature: 'sidebar-mini-expand-feature', + layoutFixed : 'fixed' + }; + + var Event = { + expanded : 'expanded.pushMenu', + collapsed: 'collapsed.pushMenu' + }; + + // PushMenu Class Definition + // ========================= + var PushMenu = function (options) { + this.options = options; + this.init(); + }; + + PushMenu.prototype.init = function () { + if (this.options.expandOnHover + || ($('body').is(Selector.mini + Selector.layoutFixed))) { + this.expandOnHover(); + $('body').addClass(ClassName.expandFeature); + } + + $(Selector.contentWrapper).click(function () { + // Enable hide menu when clicking on the content-wrapper on small screens + if ($(window).width() <= this.options.collapseScreenSize && $('body').hasClass(ClassName.open)) { + this.close(); + } + }.bind(this)); + + // __Fix for android devices + $(Selector.searchInput).click(function (e) { + e.stopPropagation(); + }); + }; + + PushMenu.prototype.toggle = function () { + var windowWidth = $(window).width(); + var isOpen = !$('body').hasClass(ClassName.collapsed); + + if (windowWidth <= this.options.collapseScreenSize) { + isOpen = $('body').hasClass(ClassName.open); + } + + if (!isOpen) { + this.open(); + } else { + this.close(); + } + }; + + PushMenu.prototype.open = function () { + var windowWidth = $(window).width(); + + if (windowWidth > this.options.collapseScreenSize) { + $('body').removeClass(ClassName.collapsed) + .trigger($.Event(Event.expanded)); + } + else { + $('body').addClass(ClassName.open) + .trigger($.Event(Event.expanded)); + } + }; + + PushMenu.prototype.close = function () { + var windowWidth = $(window).width(); + if (windowWidth > this.options.collapseScreenSize) { + $('body').addClass(ClassName.collapsed) + .trigger($.Event(Event.collapsed)); + } else { + $('body').removeClass(ClassName.open + ' ' + ClassName.collapsed) + .trigger($.Event(Event.collapsed)); + } + }; + + PushMenu.prototype.expandOnHover = function () { + $(Selector.mainSidebar).hover(function () { + if ($('body').is(Selector.mini + Selector.collapsed) + && $(window).width() > this.options.collapseScreenSize) { + this.expand(); + } + }.bind(this), function () { + if ($('body').is(Selector.expanded)) { + this.collapse(); + } + }.bind(this)); + }; + + PushMenu.prototype.expand = function () { + setTimeout(function () { + $('body').removeClass(ClassName.collapsed) + .addClass(ClassName.expanded); + }, this.options.expandTransitionDelay); + }; + + PushMenu.prototype.collapse = function () { + setTimeout(function () { + $('body').removeClass(ClassName.expanded) + .addClass(ClassName.collapsed); + }, this.options.expandTransitionDelay); + }; + + // PushMenu Plugin Definition + // ========================== + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var data = $this.data(DataKey); + + if (!data) { + var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option); + $this.data(DataKey, (data = new PushMenu(options))); + } + + if (option === 'toggle') data.toggle(); + }); + } + + var old = $.fn.pushMenu; + + $.fn.pushMenu = Plugin; + $.fn.pushMenu.Constructor = PushMenu; + + // No Conflict Mode + // ================ + $.fn.pushMenu.noConflict = function () { + $.fn.pushMenu = old; + return this; + }; + + // Data API + // ======== + $(document).on('click', Selector.button, function (e) { + e.preventDefault(); + Plugin.call($(this), 'toggle'); + }); + $(window).on('load', function () { + Plugin.call($(Selector.button)); + }); +}(jQuery); |