diff --git a/build/js/ControlSidebar.js b/build/js/ControlSidebar.js new file mode 100644 index 000000000..9f231c87f --- /dev/null +++ b/build/js/ControlSidebar.js @@ -0,0 +1,138 @@ +/* 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)