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