139 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /* ControlSidebar()
 | |
|  * ===============
 | |
|  * Toggles the state of the control sidebar
 | |
|  *
 | |
|  * @Usage: $('#control-sidebar-trigger').controlSidebar(options)
 | |
|  *         or add [data-toggle="control-sidebar"] to the trigger
 | |
|  *         Pass any option as data-option="value"
 | |
|  */
 | |
| +function ($) {
 | |
|   'use strict'
 | |
| 
 | |
|   var DataKey = 'lte.controlsidebar'
 | |
| 
 | |
|   var Default = {
 | |
|     slide: true
 | |
|   }
 | |
| 
 | |
|   var Selector = {
 | |
|     sidebar: '.control-sidebar',
 | |
|     data   : '[data-toggle="control-sidebar"]',
 | |
|     open   : '.control-sidebar-open',
 | |
|     bg     : '.control-sidebar-bg',
 | |
|     wrapper: '.wrapper',
 | |
|     content: '.content-wrapper',
 | |
|     boxed  : '.layout-boxed'
 | |
|   }
 | |
| 
 | |
|   var ClassName = {
 | |
|     open : 'control-sidebar-open',
 | |
|     fixed: 'fixed'
 | |
|   }
 | |
| 
 | |
|   var Event = {
 | |
|     collapsed: 'collapsed.controlsidebar',
 | |
|     expanded : 'expanded.controlsidebar'
 | |
|   }
 | |
| 
 | |
|   // ControlSidebar Class Definition
 | |
|   // ===============================
 | |
|   var ControlSidebar = function (element, options) {
 | |
|     this.element         = element
 | |
|     this.options         = options
 | |
|     this.hasBindedResize = false
 | |
| 
 | |
|     this.init()
 | |
|   }
 | |
| 
 | |
|   ControlSidebar.prototype.init = function () {
 | |
|     // Add click listener if the element hasn't been
 | |
|     // initialized using the data API
 | |
|     if (!$(this.element).is(Selector.data)) {
 | |
|       $(this).on('click', this.toggle)
 | |
|     }
 | |
| 
 | |
|     this.fix()
 | |
|     $(window).resize(function () {
 | |
|       this.fix()
 | |
|     }.bind(this))
 | |
|   }
 | |
| 
 | |
|   ControlSidebar.prototype.toggle = function (event) {
 | |
|     if (event) event.preventDefault()
 | |
| 
 | |
|     this.fix()
 | |
| 
 | |
|     if (!$(Selector.sidebar).is(Selector.open) && !$('body').is(Selector.open)) {
 | |
|       this.expand()
 | |
|     } else {
 | |
|       this.collapse()
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   ControlSidebar.prototype.expand = function () {
 | |
|     if (!this.options.slide) {
 | |
|       $('body').addClass(ClassName.open)
 | |
|     } else {
 | |
|       $(Selector.sidebar).addClass(ClassName.open)
 | |
|     }
 | |
| 
 | |
|     $(this.element).trigger($.Event(Event.expanded))
 | |
|   }
 | |
| 
 | |
|   ControlSidebar.prototype.collapse = function () {
 | |
|     $('body, ' + Selector.sidebar).removeClass(ClassName.open)
 | |
|     $(this.element).trigger($.Event(Event.collapsed))
 | |
|   }
 | |
| 
 | |
|   ControlSidebar.prototype.fix = function () {
 | |
|     if ($('body').is(Selector.boxed)) {
 | |
|       this._fixForBoxed($(Selector.bg))
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   // Private
 | |
| 
 | |
|   ControlSidebar.prototype._fixForBoxed = function (bg) {
 | |
|     bg.css({
 | |
|       position: 'absolute',
 | |
|       height  : $(Selector.wrapper).height()
 | |
|     })
 | |
|   }
 | |
| 
 | |
|   // 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 ControlSidebar($this, options)))
 | |
|       }
 | |
| 
 | |
|       if (typeof option == 'string') data.toggle()
 | |
|     })
 | |
|   }
 | |
| 
 | |
|   var old = $.fn.controlSidebar
 | |
| 
 | |
|   $.fn.controlSidebar             = Plugin
 | |
|   $.fn.controlSidebar.Constructor = ControlSidebar
 | |
| 
 | |
|   // No Conflict Mode
 | |
|   // ================
 | |
|   $.fn.controlSidebar.noConflict = function () {
 | |
|     $.fn.controlSidebar = old
 | |
|     return this
 | |
|   }
 | |
| 
 | |
|   // ControlSidebar Data API
 | |
|   // =======================
 | |
|   $(document).on('click', Selector.data, function (event) {
 | |
|     if (event) event.preventDefault()
 | |
|     Plugin.call($(this), 'toggle')
 | |
|   })
 | |
| 
 | |
| }(jQuery)
 |