123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- /* 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)
|