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