lobipanel
Version:
jQuery plugin for bootstrap panels. It extends panels with several common and useful functions.
1 lines • 30.1 kB
JavaScript
Math.randomString=function(n){for(var text="",possible="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",i=0;n>i;i++)text+=possible.charAt(Math.floor(Math.random()*possible.length));return text},String.prototype.getCss=function(){for(var css={},style=this.valueOf().split(";"),i=0;i<style.length;i++)if(style[i]=$.trim(style[i]),style[i]){var s=style[i].split(":");css[$.trim(s[0])]=$.trim(s[1])}return css},String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")},String.prototype.toCamel=function(){return this.replace(/(\-[a-z])/g,function($1){return $1.toUpperCase().replace("-","")})},String.prototype.toDash=function(){return this.replace(/([A-Z])/g,function($1){return"-"+$1.toLowerCase()})},String.prototype.toUnderscore=function(){return this.replace(/([A-Z])/g,function($1){return"_"+$1.toLowerCase()})},Number.prototype.isBetween=function(num1,num2,including){if(including){if(this.valueOf()<=num2&&this.valueOf()>=num1)return!0}else if(this.valueOf()<num2&&this.valueOf()>num1)return!0;return!1},$.fn.insertAt=function(i,selector){var object=selector;if("string"==typeof selector&&(object=$(selector)),i=Math.min(object.children().length,i),0==i)return object.prepend(this),this;var oldIndex=this.data("index");return this.attr("data-index",i),object.find(">*:nth-child("+i+")").after(this),object.children().each(function(index,el){var $el=$(el);i>oldIndex&&index>oldIndex&&i>=index?$el.attr("data-index",parseInt($el.data("data-index"),10)-1):oldIndex>=i&&index>i&&oldIndex>=index&&$el.attr("data-index",parseInt($el.attr("data-index"),10)+1)}),this},$.fn.disableSelection=function(){return this.attr("unselectable","on").css("user-select","none").on("selectstart",!1)},$.fn.enableSelection=function(){return this.removeAttr("unselectable").css("user-select","initial").off("selectstart")},$(function(){var STORAGE_PREFIX="lobipanel_",LobiPanel=function($el,options){var me=this;this.hasRandomId=!1,this.storage=null,this.$el=$el,me.$el.data("inner-id")||(me.hasRandomId=!0,me.$el.attr("data-inner-id",Math.randomString(10))),this.innerId=me.$el.data("inner-id"),this.$options=me._processInput(options),me.$heading=this.$el.find(">.panel-heading"),me.$body=this.$el.find(">.panel-body"),me._init(),me.$el.css("display","none"),me._applyState(me.$options.state,me.$options.stateParams),me.$el.css("display","block"),me._applyIndex(me.$options.initialIndex)};LobiPanel.prototype={_processInput:function(options){var me=this;options||(options={}),me.hasRandomId||(me.storage=localStorage.getItem(STORAGE_PREFIX+me.innerId),me.storage=JSON.parse(me.storage)||{});var opts=me._getOptionsFromAttributes();options=$.extend({},$.fn.lobiPanel.DEFAULTS,me.storage,options,opts);for(var objects=["unpin","reload","expand","minimize","close","editTitle"],i=0;i<objects.length;i++){var prop=objects[i];"object"==typeof options[prop]&&(options[prop]=$.extend({},$.fn.lobiPanel.DEFAULTS[prop],options[prop],opts[prop]))}return options},_init:function(){var me=this;me.$el.addClass("lobipanel"),me.$heading.append(me._generateControls());var parent=me.$el.parent();me._appendInnerIdToParent(parent,me.innerId),me._enableSorting(),me._onToggleIconsBtnClick(),me._enableResponsiveness(),me._setBodyHeight(),me.$options.autoload&&me.load();var maxWidth="calc(100% - "+me.$heading.find(".dropdown-menu").children().length*me.$heading.find(".dropdown-menu li").first().outerWidth()+"px)";me.$heading.find(".panel-title").css("max-width",maxWidth),me._triggerEvent("init")},isPanelInit:function(){var me=this;return me.$el.hasClass("lobipanel")&&me.$el.data("inner-id")},isPinned:function(){var me=this;return!me.$el.hasClass("panel-unpin")},pin:function(){var me=this;return me.disableResize(),me.disableDrag(),me._enableSorting(),me._offPanelClick(),me.$el.removeClass("panel-unpin").attr("old-style",me.$el.attr("style")).removeAttr("style").css("position","relative"),me.$body.css({width:"",height:""}),me._setBodyHeight(),me._insertInParent(),me},unpin:function(){var me=this;if(me.$el.hasClass("panel-collapsed"))return me;if(me._disableSorting(),me.$el.attr("old-style"))me.$el.attr("style",me.$el.attr("old-style"));else{var width=me.$el.width(),height=me.$el.height(),left=Math.max(0,($(window).width()-me.$el.outerWidth())/2),top=Math.max(0,$(document).scrollTop()+($(window).height()-me.$el.outerHeight())/2);me.$el.css({left:left,top:top,width:width,height:height})}var res=me._getMaxZIndex();me.$el.css("z-index",res["z-index"]+1),me._onPanelClick(),me.$el.addClass("panel-unpin"),$("body").append(me.$el);var panelWidth=me._getAvailableWidth(me.$el.width()),panelHeight=me._getAvailableHeight(me.$el.height());me.$el.css({position:"absolute",width:panelWidth,height:panelHeight});var bHeight=me._calculateBodyHeight(panelHeight),bWidth=me._calculateBodyWidth(panelWidth);return me.$body.css({width:bWidth,height:bHeight}),me.$options.draggable&&me.enableDrag(),"none"!==me.$options.resize&&me.enableResize(),me},togglePin:function(){var me=this;return this.isPinned()?this.unpin():this.pin(),me},isMinimized:function(){var me=this;return me.$el.hasClass("panel-minimized")||me.$el.hasClass("panel-collapsed")},minimize:function(){var me=this;if(me._triggerEvent("beforeMinimize"),me.isMinimized())return me;if(me.isPinned())me.$body.slideUp(),me.$el.find(".panel-footer").slideUp(),me.$el.addClass("panel-collapsed"),me._saveState("collapsed"),me._changeClassOfControl(me.$heading.find('[data-func="minimize"]'));else{me.disableTooltips();var left,top,footer=me._getFooterForMinimizedPanels(),children=footer.find(">*");if(top=footer.offset().top,0===children.length)left=footer.offset().left;else{var ch=$(children[children.length-1]);left=ch.offset().left+ch.width()}me.$el.hasClass("panel-expanded")||me.$el.attr("old-style",me.$el.attr("style")),me.$el.animate({left:left,top:top,width:200,height:footer.height()},100,function(){me.$el.hasClass("panel-expanded")&&(me.$el.removeClass("panel-expanded"),me.$el.find(".panel-heading [data-func=expand] ."+LobiPanel.PRIVATE_OPTIONS.iconClass).removeClass(me.$options.expand.icon2).addClass(me.$options.expand.icon)),me.$el.addClass("panel-minimized"),me.$el.removeAttr("style"),me.disableDrag(),me.disableResize(),me._expandOnHeaderClick(),footer.append(me.$el),$("body").addClass("lobipanel-minimized");var maxWidth="calc(100% - "+me.$heading.find(".dropdown-menu li>a:visible").length*me.$heading.find(".dropdown-menu li>a:visible").first().outerWidth()+"px)";me.$heading.find(".panel-title").css("max-width",maxWidth),me._saveState("minimized"),me._triggerEvent("onMinimize")})}return me},maximize:function(){var me=this;if(me._triggerEvent("beforeMaximize"),!me.isMinimized())return me;if(me.isPinned())me.$body.slideDown(),me.$el.find(".panel-footer").slideDown(),me.$el.removeClass("panel-collapsed"),me._saveState("pinned"),me._changeClassOfControl(me.$heading.find('[data-func="minimize"]'));else{me.enableTooltips();var css=me.$el.attr("old-style").getCss();me.$el.css({position:css.position||"fixed","z-index":css["z-index"],left:me.$el.offset().left,top:me.$el.offset().top,width:me.$el.width(),height:me.$el.height()}),$("body").append(me.$el),delete css.position,delete css["z-index"],me.$el.animate(css,100,function(){me.$el.css("position",""),me.$el.removeClass("panel-minimized"),me.$el.removeAttr("old-style"),me.$options.draggable&&me.enableDrag(),me.enableResize(),me._removeExpandOnHeaderClick();var footer=me._getFooterForMinimizedPanels();0===footer.children().length&&footer.remove(),$("body").removeClass("lobipanel-minimized").addClass("lobipanel-minimized");var maxWidth="calc(100% - "+me.$heading.find(".dropdown-menu li").length*me.$heading.find(".dropdown-menu li").first().outerWidth()+"px)";me.$heading.find(".panel-title").css("max-width",maxWidth),me._updateUnpinnedState(),me._triggerEvent("onMaximize")})}return me},toggleMinimize:function(){var me=this;return me.isMinimized()?me.maximize():me.minimize(),me},isOnFullScreen:function(){var me=this;return me.$el.hasClass("panel-expanded")},toFullScreen:function(){var me=this;if(me._triggerEvent("beforeFullScreen"),me.$el.hasClass("panel-collapsed"))return me;me._changeClassOfControl(me.$heading.find('[data-func="expand"]')),me.$el.css("position","fixed");var res=me._getMaxZIndex();if(me.isPinned()||me.isMinimized()){me.enableTooltips(),me.$el.css({"z-index":res["z-index"]+1,left:me.$el.offset().left,top:me.$el.offset().top-$(window).scrollTop(),width:me.$el.width(),height:me.$el.height()}),$("body").append(me.$el);var footer=me._getFooterForMinimizedPanels();0===footer.children().length&&footer.remove()}else me.$body.css({width:"",height:""}),me._setBodyHeight();me.isMinimized()?(me.$el.removeClass("panel-minimized"),me._removeExpandOnHeaderClick()):(me.$el.attr("old-style",me.$el.attr("style")),me.disableResize());var toolbar=$("."+LobiPanel.PRIVATE_OPTIONS.toolbarClass),toolbarHeight=toolbar.outerHeight()||0;return me.$el.animate({width:$(window).width(),height:$(window).height()-toolbarHeight,left:0,top:0},me.$options.expandAnimation,function(){me.$el.css({width:"",height:"",right:0,bottom:toolbarHeight}),me.$el.addClass("panel-expanded"),$("body").css("overflow","hidden"),me.$body.css({width:me._calculateBodyWidth(me.$el.width()),height:me._calculateBodyHeight(me.$el.height())}),me.disableDrag(),me.isPinned()&&me._disableSorting(),me._saveState("fullscreen"),me._triggerEvent("onFullScreen")}),me},toSmallSize:function(){var me=this;me._triggerEvent("beforeSmallSize"),me._changeClassOfControl(me.$heading.find('[data-func="expand"]'));var css=me.$el.attr("old-style").getCss();return me.$el.animate({position:"absolute",left:css.left,top:css.top,width:css.width,height:css.height,right:css.right,bottom:css.bottom},me.$options.collapseAnimation,function(){me.$el.removeAttr("old-style"),me.$el.hasClass("panel-unpin")?(me.$options.draggable&&me.enableDrag(),me.enableResize()):(me.$el.removeAttr("style"),me._insertInParent(),me._enableSorting()),me.$el.removeClass("panel-expanded"),$("body").css("overflow","auto");var bWidth="",bHeight="";me.isPinned()?"auto"!==me.$options.bodyHeight&&(bHeight=me.$options.bodyHeight):(bWidth=me._calculateBodyWidth(me.getWidth()),bHeight=me._calculateBodyHeight(me.getHeight())),"auto"!==me.$options.bodyHeight?me._saveState("pinnned"):me._updateUnpinnedState(),me.$body.css({width:bWidth,height:bHeight}),me._triggerEvent("onSmallSize")}),me},toggleSize:function(){var me=this;return me.isOnFullScreen()?me.toSmallSize():me.toFullScreen(),me},close:function(animationDuration){var me=this,animationDuration=void 0===animationDuration?100:animationDuration;return me._triggerEvent("beforeClose"),me.$el.hide(animationDuration,function(){me.isOnFullScreen()&&$("body").css("overflow","auto"),me._triggerEvent("onClose"),me.$el.remove();var footer=me._getFooterForMinimizedPanels();0===footer.children().length&&footer.remove()}),me},setPosition:function(left,top,animationDuration){var me=this,animationDuration=void 0===animationDuration?100:animationDuration;return me.isPinned()?me:(me.$el.animate({left:left,top:top},animationDuration),me)},setWidth:function(w,animationDuration){var me=this,animationDuration=void 0===animationDuration?100:animationDuration;if(me.isPinned())return me;var bWidth=me._calculateBodyWidth(w);return me.$el.animate({width:w},animationDuration),me.$body.animate({width:bWidth},animationDuration),me},setHeight:function(h,animationDuration){var me=this,animationDuration=void 0===animationDuration?100:animationDuration;if(me.isPinned())return me;var bHeight=me._calculateBodyHeight(h);return me.$el.animate({height:h},animationDuration),me.$body.animate({height:bHeight},animationDuration),me},setSize:function(w,h,animationDuration){var me=this,animationDuration=void 0===animationDuration?100:animationDuration;if(me.isPinned())return me;var bHeight=me._calculateBodyHeight(h),bWidth=me._calculateBodyWidth(w);return me.$el.animate({height:h,width:w},animationDuration),me.$body.animate({height:bHeight,width:bWidth},animationDuration),me},getPosition:function(){var me=this,offset=me.$el.offset();return{x:offset.left,y:offset.top}},getWidth:function(){var me=this;return me.$el.width()},getHeight:function(){var me=this;return me.$el.height()},bringToFront:function(){var me=this;me._triggerEvent("beforeToFront");var res=me._getMaxZIndex();return res.id===me.$el.data("inner-id")?me:(me.$el.css("z-index",res["z-index"]+1),me._triggerEvent("onToFront"),me)},enableDrag:function(){var me=this;return me.$el.draggable({handle:".panel-heading",containment:me.$options.constrain,start:function(){me.$el.css("position","absolute")},stop:function(){me.$el.css("position",""),me._updateUnpinnedState()}}),me},disableDrag:function(){var me=this;return me.$el.hasClass("ui-draggable")&&me.$el.draggable("destroy"),me},enableResize:function(){var me=this,handles=!1;return"vertical"===me.$options.resize?handles="n, s":"horizontal"===me.$options.resize?handles="e, w":"both"===me.$options.resize&&(handles="all"),handles?(me.$el.resizable({minWidth:me.$options.minWidth,maxWidth:me.$options.maxWidth,minHeight:me.$options.minHeight,maxHeight:me.$options.maxHeight,handles:handles,start:function(){me.$el.disableSelection(),me._triggerEvent("resizeStart")},stop:function(){me.$el.enableSelection(),me._triggerEvent("resizeStop")},resize:function(){var bHeight=me._calculateBodyHeight(me.$el.height()),bWidth=me._calculateBodyWidth(me.$el.width());me.$body.css({width:bWidth,height:bHeight}),me._updateUnpinnedState(),me._triggerEvent("onResize")}}),me):me},disableResize:function(){var me=this;return me.$el.hasClass("ui-resizable")&&me.$el.resizable("destroy"),me},startLoading:function(){var me=this,spinner=me._generateWindow8Spinner();me.$el.append(spinner);var sp=spinner.find(".spinner");return sp.css("margin-top",50),me},stopLoading:function(){var me=this;return me.$el.find(".spinner-wrapper").remove(),me},setLoadUrl:function(url){var me=this;return me.$options.loadUrl=url,me},load:function(params){var me=this;params=params||{},"string"==typeof params&&(params={url:params});var url=params.url||me.$options.loadUrl,data=params.data||{},callback=params.callback||null;return url?(me._triggerEvent("beforeLoad"),me.startLoading(),me.$body.load(url,data,function(result,status,xhr){callback&&"function"==typeof callback&&me.callback(result,status,xhr),me.stopLoading(),me._triggerEvent("loaded",result,status,xhr)}),me):me},destroy:function(){var me=this;return me.disableDrag(),me.disableResize(),me.$options.sortable=!1,me._enableSorting(),me._removeInnerIdFromParent(me.innerId),me.$el.removeClass("lobipanel").removeAttr("data-inner-id").removeAttr("data-index").removeData("lobiPanel"),me.$heading.find(".dropdown").remove(),me.$el},startTitleEditing:function(){var me=this,title=me.$heading.find(".panel-title").text().trim(),input=$('<input value="'+title+'"/>');return input.on("keydown",function(ev){13===ev.which?me.finishTitleEditing():27===ev.which&&me.cancelTitleEditing()}),me.$heading.find(".panel-title").data("old-title",title).html("").append(input),input[0].focus(),input[0].select(),me._changeClassOfControl(me.$heading.find('[data-func="editTitle"]')),me},isTitleEditing:function(){var me=this;return me.$heading.find(".panel-title input").length>0},cancelTitleEditing:function(){var me=this,title=me.$heading.find(".panel-title");return title.html(title.data("old-title")).find("input").remove(),me._changeClassOfControl(me.$heading.find('[data-func="editTitle"]')),me},finishTitleEditing:function(){var me=this,input=me.$heading.find("input");return me._triggerEvent("beforeTitleChange",input.val())===!1?me:(me.$heading.find(".panel-title").html(input.val()),input.remove(),me._changeClassOfControl(me.$heading.find('[data-func="editTitle"]')),me._triggerEvent("onTitleChange",input.val()),me)},enableTooltips:function(){var me=this;if($(window).width()<768)return me;var controls=me.$heading.find(".dropdown-menu>li>a");return controls.each(function(index,el){var $el=$(el);$el.attr("data-toggle","tooltip").attr("data-title",$el.data("tooltip")).attr("data-placement","bottom")}),controls.each(function(ind,el){$(el).tooltip({container:"body",template:'<div class="tooltip lobipanel-tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'})}),me},disableTooltips:function(){var me=this,$links=me.$heading.find(".dropdown-menu>li>a");return $links.each(function(ind,el){var bsTooltip=$(el).data("bs.tooltip");bsTooltip&&$(el).tooltip("destroy")}),me},_generateControls:function(){var me=this,dropdown=me._generateDropdown(),menu=dropdown.find(".dropdown-menu");return me.$options.editTitle!==!1&&menu.append(me._generateEditTitle()),me.$options.unpin!==!1&&menu.append(me._generateUnpin()),me.$options.reload!==!1&&menu.append(me._generateReload()),me.$options.minimize!==!1&&menu.append(me._generateMinimize()),me.$options.expand!==!1&&menu.append(me._generateExpand()),me.$options.close!==!1&&menu.append(me._generateClose()),menu.find(">li>a").on("click",function(ev){ev.preventDefault(),ev.stopPropagation()}),dropdown},_generateDropdown:function(){var me=this;return $('<div class="dropdown"></div>').append('<ul class="dropdown-menu dropdown-menu-right"></ul>').append('<div class="dropdown-toggle" data-toggle="dropdown"><span class="'+LobiPanel.PRIVATE_OPTIONS.iconClass+" "+me.$options.toggleIcon+'"></div>')},_generateEditTitle:function(){var me=this,options=me.$options.editTitle,control=$('<a data-func="editTitle"></a>');return control.append('<i class="'+LobiPanel.PRIVATE_OPTIONS.iconClass+" "+options.icon+'"></i>'),options.tooltip&&"string"==typeof options.tooltip&&(control.append('<span class="control-title">'+options.tooltip+"</span>"),control.attr("data-tooltip",options.tooltip)),me._attachEditTitleClickListener(control),$("<li></li>").append(control)},_attachEditTitleClickListener:function(control){var me=this;control.on("mousedown",function(ev){ev.stopPropagation()}),control.on("click",function(ev){ev.stopPropagation(),me.hideTooltip(control),me.isTitleEditing()?me.finishTitleEditing():me.startTitleEditing()})},hideTooltip:function($el){var bsTooltip=$el.data("bs.tooltip");return bsTooltip&&$el.tooltip("hide"),this},_generateUnpin:function(){var me=this,options=me.$options.unpin,control=$('<a data-func="unpin"></a>');return control.append('<i class="'+LobiPanel.PRIVATE_OPTIONS.iconClass+" "+options.icon+'"></i>'),options.tooltip&&"string"==typeof options.tooltip&&(control.append('<span class="control-title">'+options.tooltip+"</span>"),control.attr("data-tooltip",options.tooltip)),me._attachUnpinClickListener(control),$("<li></li>").append(control)},_attachUnpinClickListener:function(control){var me=this;control.on("mousedown",function(ev){ev.stopPropagation()}),control.on("click",function(){me.hideTooltip(control),me.doTogglePin()})},_generateReload:function(){var me=this,options=me.$options.reload,control=$('<a data-func="reload"></a>');return control.append('<i class="'+LobiPanel.PRIVATE_OPTIONS.iconClass+" "+options.icon+'"></i>'),options.tooltip&&"string"==typeof options.tooltip&&(control.append('<span class="control-title">'+options.tooltip+"</span>"),control.attr("data-tooltip",options.tooltip)),me._attachReloadClickListener(control),$("<li></li>").append(control)},_attachReloadClickListener:function(control){var me=this;control.on("mousedown",function(ev){ev.stopPropagation()}),control.on("click",function(){me.hideTooltip(control),me.load()})},_generateMinimize:function(){var me=this,options=me.$options.minimize,control=$('<a data-func="minimize"></a>');return control.append('<i class="'+LobiPanel.PRIVATE_OPTIONS.iconClass+" "+options.icon+'"></i>'),options.tooltip&&"string"==typeof options.tooltip&&(control.append('<span class="control-title">'+options.tooltip+"</span>"),control.attr("data-tooltip",options.tooltip)),me._attachMinimizeClickListener(control),$("<li></li>").append(control)},_attachMinimizeClickListener:function(control){var me=this;control.on("mousedown",function(ev){ev.stopPropagation()}),control.on("click",function(ev){ev.stopPropagation(),me.hideTooltip(control),me.toggleMinimize()})},_generateExpand:function(){var me=this,options=me.$options.expand,control=$('<a data-func="expand"></a>');return control.append('<i class="'+LobiPanel.PRIVATE_OPTIONS.iconClass+" "+options.icon+'"></i>'),options.tooltip&&"string"==typeof options.tooltip&&(control.append('<span class="control-title">'+options.tooltip+"</span>"),control.attr("data-tooltip",options.tooltip)),me._attachExpandClickListener(control),$("<li></li>").append(control)},_attachExpandClickListener:function(control){var me=this;control.on("mousedown",function(ev){ev.stopPropagation()}),control.on("click",function(ev){ev.stopPropagation(),me.hideTooltip(control),me.toggleSize()})},_generateClose:function(){var me=this,options=me.$options.close,control=$('<a data-func="close"></a>');return control.append('<i class="'+LobiPanel.PRIVATE_OPTIONS.iconClass+" "+options.icon+'"></i>'),options.tooltip&&"string"==typeof options.tooltip&&(control.append('<span class="control-title">'+options.tooltip+"</span>"),control.attr("data-tooltip",options.tooltip)),me._attachCloseClickListener(control),$("<li></li>").append(control)},_attachCloseClickListener:function(control){var me=this;control.on("mousedown",function(ev){ev.stopPropagation()}),control.on("click",function(ev){ev.stopPropagation(),me.hideTooltip(control),me.close()})},_getMaxZIndex:function(){var style,max,cur,panels=$(".lobipanel.panel-unpin:not(.panel-minimized.panel-expanded)");if(0===panels.length)return{id:"","z-index":LobiPanel.PRIVATE_OPTIONS.initialZIndex};style=$(panels[0]).attr("style");var id=$(panels[0]).data("inner-id");max=style?style.getCss()["z-index"]:LobiPanel.PRIVATE_OPTIONS.initialZIndex;for(var i=1;i<panels.length;i++)style=$(panels[i]).attr("style"),cur=style?style.getCss()["z-index"]:0,cur>max&&(id=$(panels[i]).data("inner-id"),max=cur);return{id:id,"z-index":parseInt(max,10)}},_onPanelClick:function(){var me=this;me.$el.on("mousedown.lobiPanel",function(){return me.isPinned()||me.isMinimized()||me.isOnFullScreen()?!1:void me.bringToFront()})},_offPanelClick:function(){var me=this;me.$el.off("mousedown.lobiPanel")},_changeClassOfControl:function(el){var me=this;el=$(el);var opts=me.$options[el.attr("data-func")];opts.icon&&el.find("."+LobiPanel.PRIVATE_OPTIONS.iconClass).toggleClass(opts.icon).toggleClass(opts.icon2)},_getFooterForMinimizedPanels:function(){var minimizedCtr=$("."+LobiPanel.PRIVATE_OPTIONS.toolbarClass);return 0===minimizedCtr.length&&(minimizedCtr=$('<div class="'+LobiPanel.PRIVATE_OPTIONS.toolbarClass+'"></div>'),$("body").append(minimizedCtr)),minimizedCtr},_expandOnHeaderClick:function(){var me=this;me.$heading.on("click.lobiPanel",function(){me.maximize(),me.bringToFront()})},_removeExpandOnHeaderClick:function(){var me=this;me.$heading.off("click.lobiPanel")},_getAvailableWidth:function(calcWidth){var me=this;return me.$options.maxWidth&&(calcWidth=Math.min(calcWidth,me.$options.maxWidth)),me.$options.minWidth&&(calcWidth=Math.max(calcWidth,me.$options.minWidth)),calcWidth},_getAvailableHeight:function(calcHeight){var me=this;return me.$options.maxHeight&&(calcHeight=Math.min(calcHeight,me.$options.maxHeight)),me.$options.minHeight&&(calcHeight=Math.max(calcHeight,me.$options.minHeight)),calcHeight},_calculateBodyHeight:function(h){var me=this;return h-me.$heading.outerHeight()-me.$el.find(".panel-footer").outerHeight()},_calculateBodyWidth:function(w){return w-2},_appendInnerIdToParent:function(parent,innerId){var me=this;if(void 0===parent.attr(LobiPanel.PRIVATE_OPTIONS.parentAttr))parent.attr(LobiPanel.PRIVATE_OPTIONS.parentAttr,innerId);else{if(parent.attr(LobiPanel.PRIVATE_OPTIONS.parentAttr).indexOf(innerId)>-1)return;var innerIds=parent.attr(LobiPanel.PRIVATE_OPTIONS.parentAttr);parent.attr(LobiPanel.PRIVATE_OPTIONS.parentAttr,innerIds+" "+innerId)}me.$el.attr("data-index",me.$el.index())},_insertInParent:function(){var me=this,parent=$("["+LobiPanel.PRIVATE_OPTIONS.parentAttr+"~="+me.innerId+"]");me.$el.insertAt(me.$el.attr("data-index"),parent)},_generateWindow8Spinner:function(){var template=['<div class="spinner spinner-windows8">','<div class="wBall">','<div class="wInnerBall">',"</div>","</div>",'<div class="wBall">','<div class="wInnerBall">',"</div>","</div>",'<div class="wBall">','<div class="wInnerBall">',"</div>","</div>",'<div class="wBall">','<div class="wInnerBall">',"</div>","</div>",'<div class="wBall">','<div class="wInnerBall">',"</div>","</div>","</div>"].join("");return $('<div class="spinner-wrapper">'+template+"</div>")},_enableSorting:function(){var me=this,parent=me.$el.parent();parent.hasClass("ui-sortable")&&parent.sortable("destroy"),me.$options.sortable?(me.$el.addClass("lobipanel-sortable"),parent.addClass("lobipanel-parent-sortable")):me.$el.removeClass("lobipanel-sortable"),parent.sortable({connectWith:".lobipanel-parent-sortable",items:".lobipanel-sortable",handle:".panel-heading",cursor:"move",placeholder:"lobipanel-placeholder",forcePlaceholderSize:!0,opacity:.7,revert:300,update:function(event,ui){var innerId=ui.item.data("inner-id");me._removeInnerIdFromParent(innerId),me._appendInnerIdToParent(ui.item.parent(),innerId),me._updateDataIndices(ui.item),me._triggerEvent("dragged")}})},_disableSorting:function(){var me=this,parent=me.$el.parent();parent.hasClass("ui-sortable")&&parent.sortable("destroy")},_updateDataIndices:function(panel){var items=panel.parent().children();items.each(function(index,el){$(el).attr("data-index",index);var lobiPanel=$(el).data("lobiPanel");lobiPanel&&lobiPanel.$options.stateful&&!lobiPanel.hasRandomId&&lobiPanel._saveState("pinned",{index:index})}),console.log("Save indices in localstorage")},_removeInnerIdFromParent:function(innerId){var parent=$("["+LobiPanel.PRIVATE_OPTIONS.parentAttr+"~="+innerId+"]"),innerIds=parent.attr(LobiPanel.PRIVATE_OPTIONS.parentAttr).replace(innerId,"").trim().replace(/\s{2,}/g," ");parent.attr(LobiPanel.PRIVATE_OPTIONS.parentAttr,innerIds)},_onToggleIconsBtnClick:function(){var me=this;me.$heading.find(".toggle-controls").on("click.lobiPanel",function(){me.$el.toggleClass("controls-expanded")})},_adjustForScreenSize:function(){var me=this;me.disableTooltips(),$(window).width()>768&&me.$options.tooltips&&me.enableTooltips(),me.isOnFullScreen()&&me.$body.css({width:me._calculateBodyWidth(me.$el.width()),height:me._calculateBodyHeight(me.$el.height())})},_enableResponsiveness:function(){var me=this;me._adjustForScreenSize(),$(window).on("resize.lobiPanel",function(){me._adjustForScreenSize()})},_setBodyHeight:function(){var me=this;"auto"!==me.$options.bodyHeight&&me.$body.css({height:me.$options.bodyHeight,overflow:"auto"})},_getOptionsFromAttributes:function(){var me=this,$el=me.$el,options={};for(var key in $.fn.lobiPanel.DEFAULTS){var k=key.toDash(),val=$el.data(k);void 0!==val&&(options[key]="object"!=typeof $.fn.lobiPanel.DEFAULTS[key]?val:eval("("+val+")"))}return options},_saveState:function(state,params){var me=this;console.log("Save state ",state,params),!me.hasRandomId&&me.$options.stateful&&(me.storage.state=state,params&&(me.storage.stateParams=params),me._saveLocalStorage(me.storage))},_saveLocalStorage:function(storage){var me=this;localStorage.setItem(STORAGE_PREFIX+me.innerId,JSON.stringify(storage))},_applyState:function(state,params){var me=this;switch(state){case"pinned":params&&null!==params.index&&void 0!==params.index&&me._applyIndex(params.index);break;case"unpinned":me.unpin(),me.setPosition(params.left,params.top,0),me.setSize(params.width,params.height,0);break;case"minimized":me.unpin(),me.minimize();break;case"collapsed":me.minimize();break;case"fullscreen":me.toFullScreen()}},_applyIndex:function(index){var me=this;null!==index&&me.$el.insertAt(index,me.$el.parent())},_triggerEvent:function(eventType){var me=this,args=Array.prototype.slice.call(arguments,1);return args.unshift(me),me.$el.trigger(eventType+".lobiPanel",args),me.$options[eventType]&&"function"==typeof me.$options[eventType]?me.$options[eventType].apply(me,args):!0},doPin:function(){var me=this;return me._triggerEvent("beforePin")!==!1&&(me.pin(),me._saveState("pinned"),me._triggerEvent("onPin")),me},doUnpin:function(){var me=this;return me._triggerEvent("beforeUnpin")!==!1&&(me.unpin(),me._updateUnpinnedState(),me._triggerEvent("onUnpin")),me},doTogglePin:function(){var me=this;return this.isPinned()?this.doUnpin():this.doPin(),me},_updateUnpinnedState:function(){var me=this;me._saveState("unpinned",me.getAlignment())},getAlignment:function(){var me=this;return{top:me.$el.css("top"),left:me.$el.css("left"),width:me.$el.css("width"),height:me.$el.css("height")}}},$.fn.lobiPanel=function(option){var args=arguments,ret=null;return this.each(function(){var $this=$(this),data=$this.data("lobiPanel"),options="object"==typeof option&&option;data||$this.data("lobiPanel",data=new LobiPanel($this,options)),"string"==typeof option&&(args=Array.prototype.slice.call(args,1),ret=data[option].apply(data,args))}),ret},LobiPanel.PRIVATE_OPTIONS={parentAttr:"data-lobipanel-child-inner-id",toolbarClass:"lobipanel-minimized-toolbar",initialZIndex:1e4,iconClass:"panel-control-icon"},$.fn.lobiPanel.DEFAULTS={draggable:!0,sortable:!1,connectWith:".ui-sortable",resize:"both",minWidth:200,minHeight:100,maxWidth:1200,maxHeight:700,loadUrl:"",autoload:!0,bodyHeight:"auto",tooltips:!0,toggleIcon:"glyphicon glyphicon-cog",expandAnimation:100,collapseAnimation:100,state:"pinned",initialIndex:null,stateful:!1,constrain:"document",unpin:{icon:"glyphicon glyphicon-move",tooltip:"Unpin"},reload:{icon:"glyphicon glyphicon-refresh",tooltip:"Reload"},minimize:{icon:"glyphicon glyphicon-minus",icon2:"glyphicon glyphicon-plus",tooltip:"Minimize"},expand:{icon:"glyphicon glyphicon-resize-full",icon2:"glyphicon glyphicon-resize-small",tooltip:"Fullscreen"},close:{icon:"glyphicon glyphicon-remove",tooltip:"Close"},editTitle:{icon:"glyphicon glyphicon-pencil",icon2:"glyphicon glyphicon-floppy-disk",tooltip:"Edit title"},beforeTitleChange:null},$(".lobipanel").lobiPanel()});