(function($){$(document).on('keydown','div.custom-checkbox',function(e){if(e.keyCode==32) e.preventDefault()}) $(document).on('keyup','div.custom-checkbox',function(e){if(e.keyCode==32){var $cb=$('input',this) if($cb.data('oc-space-timestamp')==e.timeStamp) return $cb.get(0).checked=!$cb.get(0).checked $cb.data('oc-space-timestamp',e.timeStamp) $cb.trigger('change') return false}}) $(document).render(function(){if(Modernizr.touch) return var formatSelectOption=function(state){if(!state.id) return state.text;var $option=$(state.element),iconClass=$option.data('icon'),imageSrc=$option.data('image') if(iconClass) return' '+state.text if(imageSrc) return' '+state.text return state.text} $('select.custom-select:not([data-no-auto-update-on-render=true])').select2({formatResult:formatSelectOption,formatSelection:formatSelectOption,escapeMarkup:function(m){return m;}})}) $(document).on('disable','select.custom-select',function(event,status){$(this).select2('enable',!status)}) $(document).on('focus','select.custom-select',function(event){setTimeout($.proxy(function(){$(this).select2('focus')},this),10)})})(jQuery);$(window).on('ajaxErrorMessage',function(event,message){if(!message)return swal({title:message,confirmButtonClass:'btn-default'}) event.preventDefault()}) $(window).on('ajaxConfirmMessage',function(event,message){if(!message)return swal({title:message,showCancelButton:true,confirmButtonClass:'btn-primary'},function(isConfirm){isConfirm?event.promise.resolve():event.promise.reject()}) event.preventDefault() return true}) function backendUrl(url){if(typeof backendBasePath==='undefined'||!backendBasePath) return url;if(url.substr(0,1)=='/') url=url.substr(1);return backendBasePath+url;} AssetManager=function(){var o={load:function(collection,callback){var jsList=(collection.js)?collection.js:[],cssList=(collection.css)?collection.css:[],imgList=(collection.img)?collection.img:[] jsList=$.grep(jsList,function(item){return $('head script[src="'+item+'"]').length==0}) cssList=$.grep(cssList,function(item){return $('head link[href="'+item+'"]').length==0}) var cssCounter=0,jsLoaded=false,imgLoaded=false if(jsList.length===0&&cssList.length===0&&imgList.length===0){callback&&callback() return} o.loadJavaScript(jsList,function(){jsLoaded=true checkLoaded()}) $.each(cssList,function(index,source){o.loadStyleSheet(source,function(){cssCounter++ checkLoaded()})}) o.loadImage(imgList,function(){imgLoaded=true checkLoaded()}) function checkLoaded(){if(!imgLoaded) return false if(!jsLoaded) return false if(cssCounter-1){return;}else if($.contains($this[0],event.target)){return;}else{handler(event,$this);}});return this;}}) if($.oc===undefined) $.oc={} $.oc.escapeHtmlString=function(string){var htmlEscapes={'&':'&','<':'<','>':'>','"':'"',"'":''','/':'/'},htmlEscaper=/[&<>"'\/]/g return(''+string).replace(htmlEscaper,function(match){return htmlEscapes[match];})} +function($){"use strict";if($.oc===undefined) $.oc={} if($.oc.foundation===undefined) $.oc.foundation={} var Base=function(){this.proxiedMethods=[] this.proxyCounter=0} Base.prototype.dispose=function() {for(var index in this.proxiedMethods) this.proxiedMethods[index]=null this.proxiedMethods=null} Base.prototype.proxy=function(method){if(method.ocProxyId===undefined){this.proxyCounter++ method.ocProxyId=this.proxyCounter} if(this.proxiedMethods[method.ocProxyId]!==undefined) return this.proxiedMethods[method.ocProxyId] this.proxiedMethods[method.ocProxyId]=method.bind(this) return this.proxiedMethods[method.ocProxyId]} $.oc.foundation.base=Base;}(window.jQuery);+function($){"use strict";if($.oc===undefined) $.oc={} if($.oc.foundation===undefined) $.oc.foundation={} var Element={hasClass:function(el,className){if(el.classList) return el.classList.contains(className);return new RegExp('(^| )'+className+'( |$)','gi').test(el.className);},addClass:function(el,className){if(this.hasClass(el,className)) return if(el.classList) el.classList.add(className);else el.className+=' '+className;},removeClass:function(el,className){if(el.classList) el.classList.remove(className);else el.className=el.className.replace(new RegExp('(^|\\b)'+className.split(' ').join('|')+'(\\b|$)','gi'),' ');},absolutePosition:function(element,ignoreScrolling){var top=ignoreScrolling===true?0:document.body.scrollTop,left=0 do{top+=element.offsetTop||0;if(ignoreScrolling!==true) top-=element.scrollTop||0 left+=element.offsetLeft||0 element=element.offsetParent}while(element) return{top:top,left:left}},getCaretPosition:function(input){if(document.selection){var selection=document.selection.createRange() selection.moveStart('character',-input.value.length) return selection.text.length} if(input.selectionStart!==undefined) return input.selectionStart return 0},setCaretPosition:function(input,position){if(document.selection){var range=input.createTextRange() setTimeout(function(){range.collapse(true) range.moveStart("character",position) range.moveEnd("character",0) range.select() range=null input=null},0)} if(input.selectionStart!==undefined){setTimeout(function(){input.selectionStart=position input.selectionEnd=position input=null},0)}}} $.oc.foundation.element=Element;}(window.jQuery);+function($){"use strict";if($.oc===undefined) $.oc={} if($.oc.foundation===undefined) $.oc.foundation={} var Event={getTarget:function(ev,tag){var target=ev.target?ev.target:ev.srcElement if(tag===undefined) return target var tagName=target.tagName while(tagName!=tag){target=target.parentNode if(!target) return null tagName=target.tagName} return target},stop:function(ev){if(ev.stopPropagation) ev.stopPropagation() else ev.cancelBubble=true if(ev.preventDefault) ev.preventDefault() else ev.returnValue=false},pageCoordinates:function(ev){if(ev.pageX||ev.pageY){return{x:ev.pageX,y:ev.pageY}} else if(ev.clientX||ev.clientY){return{x:(ev.clientX+document.body.scrollLeft+document.documentElement.scrollLeft),y:(ev.clientY+document.body.scrollTop+document.documentElement.scrollTop)}} return{x:0,y:0}}} $.oc.foundation.event=Event;}(window.jQuery);+function($){"use strict";var Base=$.oc.foundation.base,BaseProto=Base.prototype var Scrollpad=function(element,options){this.$el=$(element) this.scrollbarElement=null this.dragHandleElement=null this.scrollContentElement=null this.contentElement=null this.options=options this.scrollbarSize=null this.updateScrollbarTimer=null this.dragOffset=null Base.call(this) this.init()} Scrollpad.prototype=Object.create(BaseProto) Scrollpad.prototype.constructor=Scrollpad Scrollpad.prototype.dispose=function(){this.unregisterHandlers() this.$el.get(0).removeChild(this.scrollbarElement) this.$el.removeData('oc.scrollpad') this.$el=null this.scrollbarElement=null this.dragHandleElement=null this.scrollContentElement=null this.contentElement=null BaseProto.dispose.call(this)} Scrollpad.prototype.scrollToStart=function(){var scrollAttr=this.options.direction=='vertical'?'scrollTop':'scrollLeft' this.scrollContentElement[scrollAttr]=0} Scrollpad.prototype.init=function(){this.build() this.setScrollContentSize() this.registerHandlers()} Scrollpad.prototype.build=function(){var el=this.$el.get(0) this.scrollContentElement=el.children[0] this.contentElement=this.scrollContentElement.children[0] this.$el.prepend('
') this.scrollbarElement=el.querySelector('.scrollpad-scrollbar') this.dragHandleElement=el.querySelector('.scrollpad-scrollbar > .drag-handle')} Scrollpad.prototype.registerHandlers=function(){this.$el.on('mouseenter',this.proxy(this.onMouseEnter)) this.$el.on('mouseleave',this.proxy(this.onMouseLeave)) this.scrollContentElement.addEventListener('scroll',this.proxy(this.onScroll)) this.dragHandleElement.addEventListener('mousedown',this.proxy(this.onStartDrag))} Scrollpad.prototype.unregisterHandlers=function(){this.$el.off('mouseenter',this.proxy(this.onMouseEnter)) this.$el.off('mouseleave',this.proxy(this.onMouseLeave)) this.scrollContentElement.removeEventListener('scroll',this.proxy(this.onScroll)) this.dragHandleElement.removeEventListener('mousedown',this.proxy(this.onStartDrag)) document.removeEventListener('mousemove',this.proxy(this.onMouseMove)) document.removeEventListener('mouseup',this.proxy(this.onEndDrag))} Scrollpad.prototype.setScrollContentSize=function(){var scrollbarSize=this.getScrollbarSize() if(this.options.direction=='vertical') this.scrollContentElement.setAttribute('style','margin-right: -'+scrollbarSize+'px') else this.scrollContentElement.setAttribute('style','margin-bottom: -'+scrollbarSize+'px')} Scrollpad.prototype.getScrollbarSize=function(){if(this.scrollbarSize!==null) return this.scrollbarSize var testerElement=document.createElement('div') testerElement.setAttribute('class','scrollpad-scrollbar-size-tester') testerElement.appendChild(document.createElement('div')) document.body.appendChild(testerElement) var width=testerElement.offsetWidth,innerWidth=testerElement.querySelector('div').offsetWidth document.body.removeChild(testerElement) if(width===innerWidth&&navigator.userAgent.toLowerCase().indexOf('firefox')>-1) return this.scrollbarSize=17 return this.scrollbarSize=width-innerWidth} Scrollpad.prototype.updateScrollbarSize=function(){var contentSize=this.options.direction=='vertical'?this.contentElement.scrollHeight:this.contentElement.scrollWidth,scrollOffset=this.options.direction=='vertical'?this.scrollContentElement.scrollTop:this.scrollContentElement.scrollLeft,scrollbarSize=this.options.direction=='vertical'?this.scrollbarElement.offsetHeight:this.scrollbarElement.offsetWidth,scrollbarRatio=scrollbarSize/contentSize,handleOffset=Math.round(scrollbarRatio*scrollOffset)+2,handleSize=Math.floor(scrollbarRatio*(scrollbarSize-2))-2;if(scrollbarSize1) dragPerc=1 var scrollPos=dragPerc*contentSize;this.scrollContentElement[scrollAttr]=scrollPos} Scrollpad.prototype.onEndDrag=function(ev){document.removeEventListener('mousemove',this.proxy(this.onMouseMove)) document.removeEventListener('mouseup',this.proxy(this.onEndDrag))} Scrollpad.DEFAULTS={direction:'vertical'} var old=$.fn.scrollpad $.fn.scrollpad=function(option){var args=Array.prototype.slice.call(arguments,1),result=undefined this.each(function(){var $this=$(this) var data=$this.data('oc.scrollpad') var options=$.extend({},Scrollpad.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data)$this.data('oc.scrollpad',(data=new Scrollpad(this,options))) if(typeof option=='string')result=data[option].apply(data,args) if(typeof result!='undefined')return false}) return result?result:this} $.fn.scrollpad.Constructor=Scrollpad $.fn.scrollpad.noConflict=function(){$.fn.scrollpad=old return this} $(document).on('render',function(){$('div[data-control=scrollpad]').scrollpad()})}(window.jQuery);+function($){"use strict";var TriggerOn=function(element,options){var $el=this.$el=$(element);this.options=options||{};if(this.options.triggerType!==false&&this.options.triggerAction===false)this.options.triggerAction=this.options.triggerType if(this.options.triggerCondition===false) throw new Error('Trigger condition is not specified.') if(this.options.trigger===false) throw new Error('Trigger selector is not specified.') if(this.options.triggerAction===false) throw new Error('Trigger action is not specified.') this.triggerCondition=this.options.triggerCondition if(this.options.triggerCondition.indexOf('value')==0){var match=this.options.triggerCondition.match(/[^[\]]+(?=])/g) this.triggerCondition='value' this.triggerConditionValue=(match)?match:""} this.triggerParent=this.options.triggerClosestParent!==undefined?$el.closest(this.options.triggerClosestParent):undefined if(this.triggerCondition=='checked'||this.triggerCondition=='value'){$(document).on('change',this.options.trigger,$.proxy(this.onConditionChanged,this))} var self=this $el.on('oc.triggerOn.update',function(e){e.stopPropagation() self.onConditionChanged()}) self.onConditionChanged()} TriggerOn.prototype.onConditionChanged=function(){if(this.triggerCondition=='checked'){this.updateTarget($(this.options.trigger+':checked',this.triggerParent).length>0)} else if(this.triggerCondition=='value'){var trigger=$(this.options.trigger+':checked',this.triggerParent);if(trigger.length){this.updateTarget(trigger.val()==this.triggerConditionValue)}else{this.updateTarget($(this.options.trigger,this.triggerParent).val()==this.triggerConditionValue)}}} TriggerOn.prototype.updateTarget=function(status){if(this.options.triggerAction=='show') this.$el.toggleClass('hide',!status).trigger('hide',[!status]) else if(this.options.triggerAction=='hide') this.$el.toggleClass('hide',status).trigger('hide',[status]) else if(this.options.triggerAction=='enable') this.$el.prop('disabled',!status).trigger('disable',[!status]).toggleClass('control-disabled',!status) else if(this.options.triggerAction=='disable') this.$el.prop('disabled',status).trigger('disable',[status]).toggleClass('control-disabled',status) else if(this.options.triggerAction=='empty'&&status) this.$el.trigger('empty').val('') if(this.options.triggerAction=='show'||this.options.triggerAction=='hide') this.fixButtonClasses() $(window).trigger('resize')} TriggerOn.prototype.fixButtonClasses=function(){var group=this.$el.closest('.btn-group') if(group.length>0&&this.$el.is(':last-child')) this.$el.prev().toggleClass('last',this.$el.hasClass('hide'))} TriggerOn.DEFAULTS={triggerAction:false,triggerCondition:false,triggerClosestParent:undefined,trigger:false} var old=$.fn.triggerOn $.fn.triggerOn=function(option){return this.each(function(){var $this=$(this) var data=$this.data('oc.triggerOn') var options=$.extend({},TriggerOn.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data)$this.data('oc.triggerOn',(data=new TriggerOn(this,options)))})} $.fn.triggerOn.Constructor=TriggerOn $.fn.triggerOn.noConflict=function(){$.fn.triggerOn=old return this} $(document).render(function(){$('[data-trigger]').triggerOn()})}(window.jQuery);+function($){"use strict";var DragScroll=function(element,options){this.options=$.extend({},DragScroll.DEFAULTS,options) var $el=$(element),el=$el.get(0),dragStart=0,startOffset=0,self=this,dragging=false,eventElementName=this.options.vertical?'pageY':'pageX';this.el=$el this.scrollClassContainer=this.options.scrollClassContainer?$(this.options.scrollClassContainer):$el if(this.options.scrollMarkerContainer) $(this.options.scrollMarkerContainer).append($('')) $el.mousewheel(function(event){if(!self.options.allowScroll) return;var offset=self.options.vertical?((event.deltaFactor*event.deltaY)*-1):(event.deltaFactor*event.deltaX) return!scrollWheel(offset)}) $el.on('mousedown',function(event){startDrag(event) return false}) $el.on('touchstart',function(event){var touchEvent=event.originalEvent;if(touchEvent.touches.length==1){startDrag(touchEvent.touches[0]) event.stopPropagation()}}) $el.on('click',function(){if($(document.body).hasClass('drag')) return false}) $(document).on('ready',$.proxy(this.fixScrollClasses,this)) $(window).on('resize',$.proxy(this.fixScrollClasses,this)) function startDrag(event){dragStart=event[eventElementName] startOffset=self.options.vertical?$el.scrollTop():$el.scrollLeft() if(Modernizr.touch){$(window).on('touchmove.dragScroll',function(event){var touchEvent=event.originalEvent moveDrag(touchEvent.touches[0]) event.preventDefault()}) $(window).on('touchend.dragScroll',function(event){stopDrag()})} else{$(window).on('mousemove.dragScroll',function(event){moveDrag(event) $(document.body).addClass(self.options.dragClass) return false}) $(window).on('mouseup.dragScroll',function(mouseUpEvent){var isClick=event.pageX==mouseUpEvent.pageX&&event.pageY==mouseUpEvent.pageY stopDrag(isClick) return false})}} function moveDrag(event){var current=event[eventElementName],offset=dragStart-current if(Math.abs(offset)>2){if(!dragging){dragging=true $el.trigger('start.oc.dragScroll') self.options.start();} self.options.vertical?$el.scrollTop(startOffset+offset):$el.scrollLeft(startOffset+offset) $el.trigger('drag.oc.dragScroll') self.options.drag()}} function stopDrag(click){$(window).off('.dragScroll') dragging=false;if(click) $(document.body).removeClass(self.options.dragClass) else self.fixScrollClasses() window.setTimeout(function(){if(!click){$(document.body).removeClass(self.options.dragClass) $el.trigger('stop.oc.dragScroll') self.options.stop() self.fixScrollClasses()}},100)} function scrollWheel(offset){startOffset=self.options.vertical?el.scrollTop:el.scrollLeft self.options.vertical?$el.scrollTop(startOffset+offset):$el.scrollLeft(startOffset+offset) var scrolled=self.options.vertical?el.scrollTop!=startOffset:el.scrollLeft!=startOffset $el.trigger('drag.oc.dragScroll') self.options.drag() if(scrolled){if(self.wheelUpdateTimer!==undefined&&self.wheelUpdateTimer!==false) window.clearInterval(self.wheelUpdateTimer);self.wheelUpdateTimer=window.setTimeout(function(){self.wheelUpdateTimer=false;self.fixScrollClasses()},100);} return scrolled} this.fixScrollClasses();} DragScroll.DEFAULTS={vertical:false,allowScroll:true,scrollClassContainer:false,scrollMarkerContainer:false,dragClass:'drag',start:function(){},drag:function(){},stop:function(){}} DragScroll.prototype.fixScrollClasses=function(){this.scrollClassContainer.toggleClass('scroll-before',!this.isStart()) this.scrollClassContainer.toggleClass('scroll-after',!this.isEnd()) this.scrollClassContainer.toggleClass('scroll-active-before',this.isActiveBefore()) this.scrollClassContainer.toggleClass('scroll-active-after',this.isActiveAfter())} DragScroll.prototype.isStart=function(){if(!this.options.vertical) return this.el.scrollLeft()<=0;else return this.el.scrollTop()<=0;} DragScroll.prototype.isEnd=function(){if(!this.options.vertical) return(this.el[0].scrollWidth-(this.el.scrollLeft()+this.el.width()))<=0 else return(this.el[0].scrollHeight-(this.el.scrollTop()+this.el.height()))<=0} DragScroll.prototype.goToStart=function(){if(!this.options.vertical) return this.el.scrollLeft(0) else return this.el.scrollTop(0)} DragScroll.prototype.isActiveAfter=function(){var activeElement=$('.active',this.el);if(activeElement.length==0) return false if(!this.options.vertical) return activeElement.get(0).offsetLeft>(this.el.scrollLeft()+this.el.width()) else return activeElement.get(0).offsetTop>(this.el.scrollTop()+this.el.height())} DragScroll.prototype.isActiveBefore=function(){var activeElement=$('.active',this.el);if(activeElement.length==0) return false if(!this.options.vertical) return(activeElement.get(0).offsetLeft+activeElement.width())0){this.el.animate({'scrollLeft':$el.get(0).offsetLeft+$el.width()-this.el.width()},params) animated=true}}}else{offset=$el.get(0).offsetTop-this.el.scrollTop() if(offset<0){this.el.animate({'scrollTop':$el.get(0).offsetTop},params) animated=true}else{offset=$el.get(0).offsetTop-(this.el.scrollTop()+this.el.height()) if(offset>0){this.el.animate({'scrollTop':$el.get(0).offsetTop+$el.height()-this.el.height()},params) animated=true}}} if(!animated&&callback!==undefined) callback()} var old=$.fn.dragScroll $.fn.dragScroll=function(option){var args=arguments;return this.each(function(){var $this=$(this) var data=$this.data('oc.dragScroll') var options=typeof option=='object'&&option if(!data)$this.data('oc.dragScroll',(data=new DragScroll(this,options))) if(typeof option=='string'){var methodArgs=[];for(var i=1;i').appendTo('body').addClass(this.options.collapsedMenuClass).css('width',0) this.menuContainer=$('
').appendTo(this.menuPanel).css('display','none') this.menuElement=$(element).clone().appendTo(this.menuContainer).css('width','auto') var self=this this.toggle.click(function(){if(!self.body.hasClass(self.options.bodyMenuOpenClass)){var wrapperWidth=self.wrapper.outerWidth() self.menuElement.dragScroll('goToStart') self.wrapper.css({'position':'absolute','min-width':self.wrapper.width(),'height':'100%'}) self.body.addClass(self.options.bodyMenuOpenClass) self.menuContainer.css('display','block') self.wrapper.animate({'left':self.options.menuWidth},{duration:200,queue:false}) self.menuPanel.animate({'width':self.options.menuWidth},{duration:200,queue:false,complete:function(){self.menuElement.css('width',self.options.menuWidth)}})}else{closeMenu()} return false}) this.wrapper.click(function(){if(self.body.hasClass(self.options.bodyMenuOpenClass)){closeMenu() return false}}) $(window).resize(function(){if(self.body.hasClass(self.options.bodyMenuOpenClass)){if($(window).width()>self.options.breakpoint){hideMenu()}}}) this.menuElement.dragScroll({vertical:true,start:function(){self.menuElement.addClass('drag')},stop:function(){self.menuElement.removeClass('drag')},scrollClassContainer:self.menuPanel,scrollMarkerContainer:self.menuContainer}) this.menuElement.on('click',function(){if(self.menuElement.hasClass('drag')) return false}) function hideMenu(){self.body.removeClass(self.options.bodyMenuOpenClass) self.wrapper.css({'position':'static','min-width':0,'right':0,'height':'100%'}) self.menuPanel.css('width',0) self.menuElement.css('width','auto') self.menuContainer.css('display','none')} function closeMenu(){self.wrapper.animate({'left':0},{duration:200,queue:false}) self.menuPanel.animate({'width':0},{duration:200,queue:false,complete:hideMenu}) self.menuElement.animate({'width':0},{duration:200,queue:false})}} VerticalMenu.DEFAULTS={menuWidth:250,minContentWidth:769,breakpoint:769,bodyMenuOpenClass:'mainmenu-open',collapsedMenuClass:'mainmenu-collapsed',contentWrapper:'#layout-canvas'} var old=$.fn.verticalMenu $.fn.verticalMenu=function(toggleSelector,option){return this.each(function(){var $this=$(this) var data=$this.data('oc.verticalMenu') var options=typeof option=='object'&&option if(!data)$this.data('oc.verticalMenu',(data=new VerticalMenu(this,toggleSelector,options))) if(typeof option=='string')data[option].call($this)})} $.fn.verticalMenu.Constructor=VerticalMenu $.fn.verticalMenu.noConflict=function(){$.fn.verticalMenu=old return this}}(window.jQuery);(function($){$(window).load(function(){$('nav.navbar').each(function(){var navbar=$(this),nav=$('ul.nav',navbar) nav.verticalMenu($('a.menu-toggle',navbar)) $('li.with-tooltip > a',navbar).tooltip({container:'body',placement:'bottom'}) $('.layout-cell.width-fix',navbar).one('oc.widthFixed',function(){var dragScroll=$('[data-control=toolbar]',navbar).data('oc.dragScroll') if(dragScroll) dragScroll.goToElement($('ul.nav > li.active',navbar),undefined,{'duration':0})})})})})(jQuery);+function($){"use strict";if($.oc===undefined) $.oc={} var SideNav=function(element,options){this.options=options this.$el=$(element) this.$list=$('ul',this.$el) this.init();} SideNav.DEFAULTS={} SideNav.prototype.init=function(){var self=this;this.$list.dragScroll({vertical:true,start:function(){self.$list.addClass('drag')},stop:function(){self.$list.removeClass('drag')},scrollClassContainer:self.$el,scrollMarkerContainer:self.$el}) this.$list.on('click',function(){if(self.$list.hasClass('drag')) return false})} SideNav.prototype.setCounter=function(itemId,value){var $counter=$('span.counter[data-menu-id="'+itemId+'"]',this.$el) $counter.removeClass('empty') $counter.toggleClass('empty',value==0) $counter.text(value) return this} SideNav.prototype.increaseCounter=function(itemId,value){var $counter=$('span.counter[data-menu-id="'+itemId+'"]',this.$el) var originalValue=parseInt($counter.text()) if(isNaN(originalValue)) originalValue=0 var newValue=value+originalValue $counter.toggleClass('empty',newValue==0) $counter.text(newValue) return this} SideNav.prototype.dropCounter=function(itemId){this.setCounter(itemId,0) return this} var old=$.fn.sideNav $.fn.sideNav=function(option){return this.each(function(){var $this=$(this) var data=$this.data('oc.sideNav') var options=$.extend({},SideNav.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data)$this.data('oc.sideNav',(data=new SideNav(this,options))) if(typeof option=='string')data[option].call($this) if($.oc.sideNav===undefined) $.oc.sideNav=data})} $.fn.sideNav.Constructor=SideNav $.fn.sideNav.noConflict=function(){$.fn.sideNav=old return this} $(document).ready(function(){$('[data-control="sidenav"]').sideNav()})}(window.jQuery);+function($){"use strict";var Tab=function(element,options){var $el=this.$el=$(element);this.options=options||{} this.$tabsContainer=$('.nav-tabs',$el) this.$pagesContainer=$('.tab-content',$el) this.tabId='tabs'+$el.parents().length+Math.round(Math.random()*1000);if(this.options.closable!==undefined&&this.options.closable!==false) $el.attr('data-closable','') this.init()} Tab.prototype.init=function(){var self=this;this.options.slidable=this.options.slidable!==undefined&&this.options.slidable!==false $('> li',this.$tabsContainer).each(function(index){self.initTab(this)}) this.$el.on('close.oc.tab',function(ev,data){ev.preventDefault() var force=(data!==undefined&&data.force!==undefined)?data.force:false;self.closeTab($(ev.target).closest('ul.nav-tabs > li, div.tab-content > div'),force)}) this.$el.on('toggleCollapse.oc.tab',function(ev,data){ev.preventDefault() $(ev.target).closest('div.tab-content > div').toggleClass('collapsed')}) this.$el.on('modified.oc.tab',function(ev){ev.preventDefault() self.modifyTab($(ev.target).closest('ul.nav-tabs > li, div.tab-content > div'))}) this.$el.on('unmodified.oc.tab',function(ev){ev.preventDefault() self.unmodifyTab($(ev.target).closest('ul.nav-tabs > li, div.tab-content > div'))}) this.$tabsContainer.on('shown.bs.tab','li',function(){$(window).trigger('oc.updateUi')}) if(this.options.slidable){this.$pagesContainer.touchwipe({wipeRight:function(){self.prev();},wipeLeft:function(){self.next();},preventDefaultEvents:false,min_move_x:60});} this.$tabsContainer.toolbar({scrollClassContainer:this.$el}) this.updateClasses()} Tab.prototype.initTab=function(li){var $tabs=$('>li',this.$tabsContainer),tabIndex=$tabs.index(li),time=new Date().getTime(),targetId=this.tabId+'-tab-'+tabIndex+time,$a=$('a',li) $a.attr('data-target','#'+targetId).attr('data-toggle','tab') if(!$a.attr('title')) $a.attr('title',$a.text()) var html=$a.html() $a.html('') $a.append($('').append($('').html(html))) var pane=$('> .tab-pane',this.$pagesContainer).eq(tabIndex).attr('id',targetId) $(li).append($('×').click(function(){$(this).trigger('close.oc.tab') return false})) pane.data('tab',li) this.$el.trigger('initTab.oc.tab',[{'pane':pane,'tab':li}])} Tab.prototype.addTab=function(title,content,identifier,tabClass){var processedTitle=this.generateTitleText(title,-1),$link=$('').attr('href','javascript:;').text(processedTitle),$li=$('
  • '),$pane=$('
    ').html(content).addClass('tab-pane');$link.attr('title',title) $li.append($link) this.$tabsContainer.append($li) this.$pagesContainer.append($pane) if(tabClass!==undefined) $link.addClass(tabClass) if(identifier!==undefined) $li.attr('data-tab-id',identifier) if(this.options.paneClasses!==undefined) $pane.addClass(this.options.paneClasses) this.initTab($li) $link.tab('show') $(window).trigger('resize') this.$tabsContainer.dragScroll('goToElement',$li) var defaultFocus=$('[default-focus]',$pane) if(defaultFocus.is(":visible")) defaultFocus.focus() this.updateClasses()} Tab.prototype.updateTab=function(tab,title,content){var tabIndex=this.findTabIndex(tab) if(tabIndex==-1) return var processedTitle=this.generateTitleText(title,-1),$tab=$('> li',this.$tabsContainer).eq(tabIndex),$pane=$('> div',this.$pagesContainer).eq(tabIndex),$link=$('a',$tab) $link.text(processedTitle).attr('title',title) $pane.html(content) this.initTab($tab) this.updateClasses()} Tab.prototype.generateTitleText=function(title,tabIndex){var newTitle=title if(this.options.titleAsFileNames) newTitle=title.replace(/^.*[\\\/]/,'') if(this.options.maxTitleSymbols&&newTitle.length>this.options.maxTitleSymbols) newTitle='...'+newTitle.substring(newTitle.length-this.options.maxTitleSymbols) return newTitle} Tab.prototype.closeTab=function(tab,force){var tabIndex=this.findTabIndex(tab) if(tabIndex==-1) return var $tab=$('> li',this.$tabsContainer).eq(tabIndex),$pane=$('> div',this.$pagesContainer).eq(tabIndex),isActive=$tab.hasClass('active'),isModified=$tab.attr('data-modified')!==undefined;if(isModified&&this.options.closeConfirmation!==undefined&&force!==true){if(!confirm(this.options.closeConfirmation)) return} var e=$.Event('beforeClose.oc.tab',{relatedTarget:$pane}) this.$el.trigger(e) if(e.isDefaultPrevented()) return $pane.remove() $tab.remove() if(isActive) $('> li > a',this.$tabsContainer).eq(tabIndex-1).tab('show') if($('> li > a',this.$tabsContainer).length==0) this.$el.trigger('afterAllClosed.oc.tab') this.$el.trigger('closed.oc.tab',[$tab]) $(window).trigger('resize') this.updateClasses()} Tab.prototype.updateClasses=function(){if(this.$tabsContainer.children().length>0) this.$el.addClass('has-tabs') else this.$el.removeClass('has-tabs')} Tab.prototype.modifyTab=function(tab){var tabIndex=this.findTabIndex(tab) if(tabIndex==-1) return $('> li',this.$tabsContainer).eq(tabIndex).attr('data-modified','') $('> div',this.$pagesContainer).eq(tabIndex).attr('data-modified','')} Tab.prototype.unmodifyTab=function(tab){var tabIndex=this.findTabIndex(tab) if(tabIndex==-1) return $('> li',this.$tabsContainer).eq(tabIndex).removeAttr('data-modified') $('> div',this.$pagesContainer).eq(tabIndex).removeAttr('data-modified')} Tab.prototype.findTabIndex=function(tab){var tabToFind=tab if(tab===undefined) tabToFind=$('li.active',this.$tabsContainer) var tabParent=this.$pagesContainer if($(tabToFind).parent().hasClass('nav-tabs')) tabParent=this.$tabsContainer return tabParent.children().index($(tabToFind))} Tab.prototype.findTabFromPane=function(pane){var id='#'+$(pane).attr('id'),tab=$('[data-target="'+id+'"]',this.$tabsContainer) return tab} Tab.prototype.goTo=function(identifier){var $tab=$('[data-tab-id="'+identifier+'" ]',this.$tabsContainer) if($tab.length==0) return false var tabIndex=this.findTabIndex($tab) if(tabIndex==-1) return false this.goToIndex(tabIndex) this.$tabsContainer.dragScroll('goToElement',$tab) return true} Tab.prototype.goToPane=function(pane){var $pane=$(pane),$tab=this.findTabFromPane($pane) if($pane.length==0) return $pane.removeClass('collapsed') var tabIndex=this.findTabIndex($pane) if(tabIndex==-1) return false this.goToIndex(tabIndex) if($tab.length>0) this.$tabsContainer.dragScroll('goToElement',$tab) return true} Tab.prototype.goToElement=function(element){return this.goToPane(element.closest('.tab-pane'))} Tab.prototype.findByIdentifier=function(identifier){return $('[data-tab-id="'+identifier+'" ]',this.$tabsContainer);} Tab.prototype.updateIdentifier=function(tab,identifier){var index=this.findTabIndex(tab) if(index==-1) return $('> li',this.$tabsContainer).eq(index).attr('data-tab-id',identifier)} Tab.prototype.updateTitle=function(tab,title){var index=this.findTabIndex(tab) if(index==-1) return var processedTitle=this.generateTitleText(title,index),$link=$('> li > a span.title',this.$tabsContainer).eq(index) $link.attr('title',title) $link.text(processedTitle)} Tab.prototype.goToIndex=function(index){$('> li > a',this.$tabsContainer).eq(index).tab('show')} Tab.prototype.prev=function(){var tabIndex=this.findTabIndex() if(tabIndex<=0) return this.goToIndex(tabIndex-1)} Tab.prototype.next=function(){var tabIndex=this.findTabIndex() if(tabIndex==-1) return this.goToIndex(tabIndex+1)} Tab.DEFAULTS={} var old=$.fn.ocTab $.fn.ocTab=function(option){var args=arguments;return this.each(function(){var $this=$(this) var data=$this.data('oc.tab') var options=$.extend({},Tab.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data)$this.data('oc.tab',(data=new Tab(this,options))) if(typeof option=='string'){var methodArgs=[];for(var i=1;i').addClass('control-popover') if(this.options.containerClass) this.$container.addClass(this.options.containerClass) if(this.options.useAnimation) this.$container.addClass('fade') var $content=$('
    ').html(this.getContent()) this.$container.append($content) if(this.options.width) this.$container.width(this.options.width) if(this.options.modal){this.$overlay=$('
    ').addClass('popover-overlay') $(document.body).append(this.$overlay) if(this.options.highlightModalTarget){this.$el.addClass('popover-highlight') this.$el.blur()}}else{this.$overlay=false} if(this.options.container) $(this.options.container).append(this.$container) else $(document.body).append(this.$container) var placement=this.calcPlacement(),position=this.calcPosition(placement) this.$container.css({left:position.x,top:position.y}).addClass('placement-'+placement) this.$container.addClass('in') if(this.$overlay)this.$overlay.addClass('in') $(document.body).addClass('popover-open') var showEvent=jQuery.Event('show.oc.popover',{relatedTarget:this.$container.get(0)}) this.$el.trigger(showEvent) this.$container.on('mousedown',function(e){e.stopPropagation();}) this.$container.on('close.oc.popover',function(e){self.hide()}) this.$container.on('click','[data-dismiss=popover]',function(e){self.hide() return false}) this.docClickHandler=$.proxy(this.onDocumentClick,this) $(document).bind('mousedown',this.docClickHandler);if(this.options.closeOnEsc){$(document).on('keyup.oc.popover',function(e){if($(e.target).hasClass('select2-offscreen')) return false if(e.keyCode==27){self.hide() return false}})}} Popover.prototype.getContent=function(){return typeof this.options.content=='function'?this.options.content.call(this.$el[0],this):this.options.content} Popover.prototype.calcDimensions=function(){var documentWidth=$(document).width(),documentHeight=$(document).height(),targetOffset=this.$el.offset(),targetWidth=this.$el.outerWidth(),targetHeight=this.$el.outerHeight() return{containerWidth:this.$container.outerWidth()+this.arrowSize,containerHeight:this.$container.outerHeight()+this.arrowSize,targetOffset:targetOffset,targetHeight:targetHeight,targetWidth:targetWidth,spaceLeft:targetOffset.left,spaceRight:documentWidth-(targetWidth+targetOffset.left),spaceTop:targetOffset.top,spaceBottom:documentHeight-(targetHeight+targetOffset.top),spaceHorizontalBottom:documentHeight-targetOffset.top,spaceVerticalRight:documentWidth-targetOffset.left,documentWidth:documentWidth}} Popover.prototype.fitsLeft=function(dimensions){return dimensions.spaceLeft>=dimensions.containerWidth&&dimensions.spaceHorizontalBottom>=dimensions.containerHeight} Popover.prototype.fitsRight=function(dimensions){return dimensions.spaceRight>=dimensions.containerWidth&&dimensions.spaceHorizontalBottom>=dimensions.containerHeight} Popover.prototype.fitsBottom=function(dimensions){return dimensions.spaceBottom>=dimensions.containerHeight&&dimensions.spaceVerticalRight>=dimensions.containerWidth} Popover.prototype.fitsTop=function(dimensions){return dimensions.spaceTop>=dimensions.containerHeight&&dimensions.spaceVerticalRight>=dimensions.containerWidth} Popover.prototype.calcPlacement=function(){var placement=this.options.placement,dimensions=this.calcDimensions();if(placement=='center') return placement if(placement!='bottom'&&placement!='top'&&placement!='left'&&placement!='right') placement='bottom' var placementFunctions={top:this.fitsTop,bottom:this.fitsBottom,left:this.fitsLeft,right:this.fitsRight} if(placementFunctions[placement](dimensions)) return placement for(var index in placementFunctions){if(placementFunctions[index](dimensions)) return index} return this.options.fallbackPlacement} Popover.prototype.calcPosition=function(placement){var dimensions=this.calcDimensions(),result switch(placement){case'left':var realOffset=this.options.offsetY===undefined?this.options.offset:this.options.offsetY result={x:(dimensions.targetOffset.left-dimensions.containerWidth),y:dimensions.targetOffset.top+realOffset} break;case'top':var realOffset=this.options.offsetX===undefined?this.options.offset:this.options.offsetX result={x:dimensions.targetOffset.left+realOffset,y:(dimensions.targetOffset.top-dimensions.containerHeight)} break;case'bottom':var realOffset=this.options.offsetX===undefined?this.options.offset:this.options.offsetX result={x:dimensions.targetOffset.left+realOffset,y:(dimensions.targetOffset.top+dimensions.targetHeight+this.arrowSize)} break;case'right':var realOffset=this.options.offsetY===undefined?this.options.offset:this.options.offsetY result={x:(dimensions.targetOffset.left+dimensions.targetWidth+this.arrowSize),y:dimensions.targetOffset.top+realOffset} break;case'center':var windowHeight=$(window).height() result={x:(dimensions.documentWidth/2-dimensions.containerWidth/2),y:(windowHeight/2-dimensions.containerHeight/2)} if(result.y<40) result.y=40 break;} if(!this.options.container) return result var $container=$(this.options.container),containerOffset=$container.offset() result.x-=containerOffset.left result.y-=containerOffset.top return result} Popover.prototype.onDocumentClick=function(){if(this.options.closeOnPageClick) this.hide();} Popover.DEFAULTS={placement:'bottom',fallbackPlacement:'bottom',content:'

    Popover content

    ',width:false,modal:false,highlightModalTarget:false,closeOnPageClick:true,closeOnEsc:true,container:false,containerClass:null,offset:15,useAnimation:false} var old=$.fn.ocPopover $.fn.ocPopover=function(option){var args=arguments;return this.each(function(){var $this=$(this) var data=$this.data('oc.popover') var options=$.extend({},Popover.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data){if(typeof option=='string') return;$this.data('oc.popover',(data=new Popover(this,options)))}else{if(typeof option!='string') return;var methodArgs=[];for(var i=1;i').prop({class:'control-popup modal fade',role:'dialog',tabindex:-1}),modalDialog=$('

    ').addClass('modal-dialog'),modalContent=$('
    ').addClass('modal-content') if(this.options.size) modalDialog.addClass('size-'+this.options.size) return modal.append(modalDialog.append(modalContent))} Popup.prototype.setContent=function(contents){this.$content.html(contents) this.setLoading(false) this.show() this.firstDiv=this.$content.find('>div:first') if(this.firstDiv.length>0) this.firstDiv.data('oc.popup',this)} Popup.prototype.setBackdrop=function(val){if(val&&!this.$backdrop){this.$backdrop=$('
  • ',pullPlaceholder:true,serialize:function($parent,$children,parentIsContainer){var result=$.extend({},$parent.data()) if(parentIsContainer) return $children else if($children[0]){result.children=$children delete result.subContainer} delete result.sortable return result},tolerance:0},containerGroups={},groupCounter=0,emptyBox={left:0,top:0,bottom:0,right:0},eventNames={start:"touchstart.sortable mousedown.sortable",drop:"touchend.sortable touchcancel.sortable mouseup.sortable",drag:"touchmove.sortable mousemove.sortable",scroll:"scroll.sortable"} function d(a,b){var x=Math.max(0,a[0]-b[0],b[0]-a[1]),y=Math.max(0,a[2]-b[1],b[1]-a[3]) return x+y;} function setDimensions(array,dimensions,tolerance,useOffset){var i=array.length,offsetMethod=useOffset?"offset":"position" tolerance=tolerance||0 while(i--){var el=array[i].el?array[i].el:$(array[i]),pos=el[offsetMethod]() pos.left+=parseInt(el.css('margin-left'),10) pos.top+=parseInt(el.css('margin-top'),10) dimensions[i]=[pos.left-tolerance,pos.left+el.outerWidth()+tolerance,pos.top-tolerance,pos.top+el.outerHeight()+tolerance]}} function getRelativePosition(pointer,element){var offset=element.offset() return{left:pointer.left-offset.left,top:pointer.top-offset.top}} function sortByDistanceDesc(dimensions,pointer,lastPointer){pointer=[pointer.left,pointer.top] lastPointer=lastPointer&&[lastPointer.left,lastPointer.top] var dim,i=dimensions.length,distances=[] while(i--){dim=dimensions[i] distances[i]=[i,d(dim,pointer),lastPointer&&d(dim,lastPointer)]} distances=distances.sort(function(a,b){return b[1]-a[1]||b[2]-a[2]||b[0]-a[0]}) return distances} function ContainerGroup(options){this.options=$.extend({},groupDefaults,options) this.containers=[] if(!this.options.parentContainer){this.scrollProxy=$.proxy(this.scroll,this) this.dragProxy=$.proxy(this.drag,this) this.dropProxy=$.proxy(this.drop,this) this.placeholder=$(this.options.placeholder) if(!options.isValidTarget) this.options.isValidTarget=undefined}} ContainerGroup.get=function(options){if(!containerGroups[options.group]){if(!options.group) options.group=groupCounter++ containerGroups[options.group]=new ContainerGroup(options)} return containerGroups[options.group]} ContainerGroup.prototype={dragInit:function(e,itemContainer){this.$document=$(itemContainer.el[0].ownerDocument) if(itemContainer.enabled()){this.item=$(e.target).closest(this.options.itemSelector) this.itemContainer=itemContainer if(this.item.is(this.options.exclude)||!this.options.onMousedown(this.item,groupDefaults.onMousedown,e)){return} this.setPointer(e) this.toggleListeners('on')}else{this.toggleListeners('on',['drop'])} this.setupDelayTimer() this.dragInitDone=true},drag:function(e){if(!this.dragging){if(!this.distanceMet(e)||!this.delayMet){return} this.options.onDragStart(this.item,this.itemContainer,groupDefaults.onDragStart,e) this.item.before(this.placeholder) this.dragging=true} this.setPointer(e) this.options.onDrag(this.item,getRelativePosition(this.pointer,this.item.offsetParent()),groupDefaults.onDrag,e) var x=e.pageX||e.originalEvent.pageX,y=e.pageY||e.originalEvent.pageY,box=this.sameResultBox,t=this.options.tolerance if(!box||box.top-t>y||box.bottom+tx||box.right+t=this.options.distance)},getPointer:function(e){return{left:e.pageX||e.originalEvent.pageX,top:e.pageY||e.originalEvent.pageY}},setupDelayTimer:function(){var self=this this.delayMet=!this.options.delay if(!this.delayMet){clearTimeout(this._mouseDelayTimer);this._mouseDelayTimer=setTimeout(function(){self.delayMet=true},this.options.delay)}},scroll:function(e){this.clearDimensions() this.clearOffsetParent()},toggleListeners:function(method,events){var self=this events=events||['drag','drop','scroll'] $.each(events,function(i,event){self.$document[method](eventNames[event],self[event+'Proxy'])})},clearOffsetParent:function(){this.offsetParent=undefined},clearDimensions:function(){this.containerDimensions=undefined var i=this.containers.length while(i--){this.containers[i].clearDimensions()}},destroy:function(){containerGroups[this.options.group]=undefined}} function Container(element,options){this.el=element this.options=$.extend({},containerDefaults,options) this.group=ContainerGroup.get(this.options) this.rootGroup=this.options.rootGroup||this.group this.parentContainer=this.options.parentContainer this.handle=this.rootGroup.options.handle||this.rootGroup.options.itemSelector var itemPath=this.rootGroup.options.itemPath,target=itemPath?this.el.find(itemPath):this.el target.on(eventNames.start,this.handle,$.proxy(this.dragInit,this)) if(this.options.drop){this.group.containers.push(this)}} Container.prototype={dragInit:function(e){var rootGroup=this.rootGroup if(!rootGroup.dragInitDone&&this.options.drag){rootGroup.dragInit(e,this)}},searchValidTarget:function(pointer,lastPointer){var distances=sortByDistanceDesc(this.getItemDimensions(),pointer,lastPointer),i=distances.length,rootGroup=this.rootGroup,validTarget=!rootGroup.options.isValidTarget||rootGroup.options.isValidTarget(rootGroup.item,this) if(!i&&validTarget){var itemPath=this.rootGroup.options.itemPath,target=itemPath?this.el.find(itemPath):this.el rootGroup.movePlaceholder(this,target,"append") return true}else{while(i--){var index=distances[i][0],distance=distances[i][1] if(!distance&&this.hasChildGroup(index)){var found=this.getContainerGroup(index).searchValidTarget(pointer,lastPointer) if(found) return true} else if(validTarget){this.movePlaceholder(index,pointer) return true}}}},movePlaceholder:function(index,pointer){var item=$(this.items[index]),dim=this.itemDimensions[index],method="after",width=item.outerWidth(),height=item.outerHeight(),offset=item.offset(),sameResultBox={left:offset.left,right:offset.left+width,top:offset.top,bottom:offset.top+height} if(this.options.vertical){var yCenter=(dim[2]+dim[3])/2,inUpperHalf=pointer.top<=yCenter if(inUpperHalf){method="before" sameResultBox.bottom-=height/2}else{sameResultBox.top+=height/2}}else{var xCenter=(dim[0]+dim[1])/2,inLeftHalf=pointer.left<=xCenter if(inLeftHalf){method="before" sameResultBox.right-=width/2}else{sameResultBox.left+=width/2}} if(this.hasChildGroup(index)){sameResultBox=emptyBox} this.rootGroup.movePlaceholder(this,item,method,sameResultBox)},getItemDimensions:function(){if(!this.itemDimensions){this.items=this.$getChildren(this.el,"item").filter(":not(.placeholder, .dragged)").get() setDimensions(this.items,this.itemDimensions=[],this.options.tolerance)} return this.itemDimensions},getItemOffsetParent:function(){var offsetParent,el=this.el if(el.css("position")==="relative"||el.css("position")==="absolute"||el.css("position")==="fixed") offsetParent=el else offsetParent=el.offsetParent() return offsetParent},hasChildGroup:function(index){return this.options.nested&&this.getContainerGroup(index)},getContainerGroup:function(index){var childGroup=$.data(this.items[index],"subContainer") if(childGroup===undefined){var childContainers=this.$getChildren(this.items[index],"container") childGroup=false if(childContainers[0]){var options=$.extend({},this.options,{parentContainer:this,rootGroup:this.rootGroup,group:groupCounter++}) childGroup=childContainers.sortable(options).data('oc.sortable').group} $.data(this.items[index],"subContainer",childGroup)} return childGroup},enabled:function(){return!this.disabled&&(!this.parentContainer||this.parentContainer.enabled())},$getChildren:function(parent,type){var options=this.rootGroup.options,path=options[type+"Path"],selector=options[type+"Selector"] parent=$(parent) if(path) parent=parent.find(path) return parent.children(selector)},_serialize:function(parent,isContainer){var self=this,childType=isContainer?"item":"container",children=this.$getChildren(parent,childType).not(this.options.exclude).map(function(){return self._serialize($(this),!isContainer)}).get() return this.rootGroup.options.serialize(parent,children,isContainer)},clearDimensions:function(){this.itemDimensions=undefined if(this.items&&this.items[0]){var i=this.items.length while(i--){var group=$.data(this.items[i],"subContainer") if(group) group.clearDimensions()}}}} var API={enable:function(ignoreChildren){this.disabled=false},disable:function(ignoreChildren){this.disabled=true},serialize:function(){return this._serialize(this.el,true)},destroy:function(){this.rootGroup.destroy()}} $.extend(Container.prototype,API) var old=$.fn.sortable $.fn.sortable=function(option){var args=Array.prototype.slice.call(arguments,1) return this.map(function(){var $this=$(this),object=$this.data('oc.sortable') if(object&&API[option]) return API[option].apply(object,args)||this else if(!object&&(option===undefined||typeof option==="object")) $this.data('oc.sortable',new Container($this,option)) return this});};$.fn.sortable.noConflict=function(){$.fn.sortable=old return this}}(window.jQuery);+function($){"use strict";if($.oc===undefined) $.oc={} $.oc.inspector={editors:{},propertyCounter:0} var Inspector=function(element,options){this.options=options this.$el=$(element) this.title=false this.description=false} Inspector.prototype.loadConfiguration=function(onSuccess){var configString=this.$el.data('inspector-config') if(configString!==undefined){this.parseConfiguration(configString) if(onSuccess!==undefined) onSuccess();}else{var $form=$(this.selector).closest('form'),data=this.$el.data(),self=this $.oc.stripeLoadIndicator.show() var request=$form.request('onGetInspectorConfiguration',{data:data}).done(function(data){self.parseConfiguration(data.configuration.properties) if(data.configuration.title!==undefined) self.title=data.configuration.title if(data.configuration.description!==undefined) self.description=data.configuration.description $.oc.stripeLoadIndicator.hide() if(onSuccess!==undefined) onSuccess();}).always(function(){$.oc.stripeLoadIndicator.hide()})}} Inspector.prototype.parseConfiguration=function(jsonString){if(jsonString===undefined) throw new Error('The Inspector cannot be initialized because the Inspector configuration '+'attribute is not defined on the inspectable element.');if(!$.isArray(jsonString)&&!$.isPlainObject(jsonString)){try{this.config=$.parseJSON(jsonString)}catch(err){throw new Error('Error parsing the Inspector field configuration. '+err)}}else this.config=jsonString this.propertyValuesField=$('input[data-inspector-values]',this.$el)} Inspector.prototype.getPopoverTemplate=function(){return' \
    \

    {{title}}

    \ {{#description}} \

    {{description}}

    \ {{/description}} \ \
    \
    \ \ {{#properties}} \ \ \ {{#editor}}{{/editor}} \ \ {{/properties}} \
    \ {{#expandControl}}{{/expandControl}} \ {{title}} \ {{#info}}{{/info}} \
    \ \ '} Inspector.prototype.init=function(){if(!this.config||this.config.length==0) return var self=this,fieldsConfig=this.preprocessConfig(),data={title:this.title?this.title:this.$el.data('inspector-title'),description:this.description?this.description:this.$el.data('inspector-description'),properties:fieldsConfig.properties,editor:function(){return function(text,render){if(this.itemType=='property') return self.renderEditor(this,render)}},info:function(){return function(text,render){if(this.description!==undefined&&this.description!=null) return render('',this)}},propFormat:function(){return function(text,render){return'prop-'+render(text).replace('.','-')}},colspan:function(){return function(text,render){return this.itemType=='group'?'colspan="2"':null}},tableClass:function(){return function(text,render){return fieldsConfig.hasGroups?'has-groups':null}},cellClass:function(){return function(text,render){var result=this.itemType+((this.itemType=='property'&&this.groupIndex!==undefined)?' grouped':'') if(this.itemType=='property'&&this.groupIndex!==undefined) result+=self.groupExpanded(this.group)?' expanded':' collapsed' if(this.itemType=='property'&&!this.showExternalParam) result+=' no-external-parameter' return result}},expandControl:function(){return function(text,render){if(this.itemType=='group'){this.itemStatus=self.groupExpanded(this.title)?'expanded':'' return render('
    Expand/collapse',this)}}},dataGroupIndex:function(){return function(text,render){return this.groupIndex!==undefined&&this.itemType=='property'?render('data-group-index={{groupIndex}}',this):''}}} this.editors=[] this.initProperties() this.$el.data('oc.inspectorVisible',true) var displayPopover=function(){var offset=self.$el.data('inspector-offset') if(offset===undefined) offset=15 var offsetX=self.$el.data('inspector-offset-x'),offsetY=self.$el.data('inspector-offset-y') var placement=self.$el.data('inspector-placement') if(placement===undefined) placement='bottom' var fallbackPlacement=self.$el.data('inspector-fallback-placement') if(fallbackPlacement===undefined) fallbackPlacement='bottom' self.$el.ocPopover({content:Mustache.render(self.getPopoverTemplate(),data),highlightModalTarget:true,modal:true,placement:placement,fallbackPlacement:fallbackPlacement,containerClass:'control-inspector',container:self.$el.data('inspector-container'),offset:offset,offsetX:offsetX,offsetY:offsetY,width:400}) self.$el.on('hiding.oc.popover',function(e){return self.onBeforeHide(e)}) self.$el.on('hide.oc.popover',function(){self.cleanup()}) self.$el.addClass('inspector-open') $(self.$el.data('oc.popover').$container).on('keydown',function(e){if(e.keyCode==13) $(this).trigger('close.oc.popover')}) if(self.editors.length>0){if(self.editors[0].focus!==undefined) self.editors[0].focus()} if(self.$el.closest('[data-inspector-external-parameters]').length>0) self.initExternalParameterEditor(self.$el.data('oc.popover').$container) $.each(self.editors,function(){if(this.init!==undefined) this.init()}) $('.with-tooltip',self.$el.data('oc.popover').$container).tooltip({placement:'auto right',container:'body',delay:500}) var $container=self.$el.data('oc.popover').$container $container.on('click','tr.group',function(){self.toggleGroup($('a.expandControl',this),$container) return false}) var cssClass=self.options.inspectorCssClass if(cssClass!==undefined) $container.addClass(cssClass)} var e=$.Event('showing.oc.inspector') this.$el.trigger(e,[{callback:displayPopover}]) if(e.isDefaultPrevented()) return if(!e.isPropagationStopped()) displayPopover()} Inspector.prototype.initExternalParameterEditor=function($container){var self=this $('table.inspector-fields tr',$container).each(function(){if(!$(this).hasClass('no-external-parameter')){var property=$(this).data('property'),$td=$('td',this),$editorContainer=$('
    '),$editor=$('
    \
    \ \ \ \ \
    \
    ') $editorContainer.append($td.children()) $editorContainer.append($editor) $td.append($editorContainer) var $editorLink=$('a',$editor) $editorLink.click(function(){return self.toggleExternalParameterEditor($(this))}).attr('title','Click to enter the external parameter name to load the property value from').tooltip({'container':'body',delay:500}) var $input=$editor.find('input'),propertyValue=self.propertyValues[property] $input.on('focus',function(){var $field=$(this) $('td',$field.closest('table')).removeClass('active') $field.closest('td').addClass('active')}) $input.on('change',function(){self.markPropertyChanged(property,true)}) var matches=[] if(propertyValue){if(matches=propertyValue.match(/^\{\{([^\}]+)\}\}$/)){var value=$.trim(matches[1]) if(value.length>0){self.showExternalParameterEditor($editorContainer,$editor,$editorLink,$td,true) $editor.find('input').val(value) self.writeProperty(property,null,true)}}}}})} Inspector.prototype.showExternalParameterEditor=function($container,$editor,$editorLink,$cell,noAnimation){var position=$editor.position() $('input',$editor).focus() if(!noAnimation){$editor.css({'left':position.left+'px','right':0})}else{$editor.css('right',0)} setTimeout(function(){$editor.css('left',0) $cell.scrollTop(0)},0) $container.addClass('editor-visible') $editorLink.attr('data-original-title','Click to enter the property value') this.toggleCellEditorVisibility($cell,false) $editor.find('input').attr('tabindex',0)} Inspector.prototype.toggleExternalParameterEditor=function($editorLink){var $container=$editorLink.closest('.external-param-editor-container'),$editor=$('.external-editor',$container),$cell=$editorLink.closest('td'),self=this $editorLink.tooltip('hide') if(!$container.hasClass('editor-visible')){self.showExternalParameterEditor($container,$editor,$editorLink,$cell)}else{var left=$container.width() $editor.css('left',left+'px') setTimeout(function(){$editor.css({'left':'auto','right':'30px'}) $container.removeClass('editor-visible') $container.closest('td').removeClass('active') var property=$container.closest('tr').data('property'),propertyEditor=self.findEditor(property) if(propertyEditor&&propertyEditor.onHideExternalParameterEditor!==undefined) propertyEditor.onHideExternalParameterEditor()},200) $editorLink.attr('data-original-title','Click to enter the external parameter name to load the property value from') $editor.find('input').attr('tabindex',-1) self.toggleCellEditorVisibility($cell,true)} return false} Inspector.prototype.toggleCellEditorVisibility=function($cell,show){var $container=$('.external-param-editor-container',$cell) $container.children().each(function(){var $el=$(this) if($el.hasClass('external-editor')) return if(show) $el.removeClass('hide') else{var height=$cell.data('inspector-cell-height') if(!height){height=$cell.height() $cell.data('inspector-cell-height',height)} $container.css('height',height+'px') $el.addClass('hide')}})} Inspector.prototype.preprocessConfig=function(){var fields=[],result={hasGroups:false,properties:[]},groupIndex=0 function findGroup(title){var groups=$.grep(fields,function(item){return item.itemType!==undefined&&item.itemType=='group'&&item.title==title}) if(groups.length>0) return groups[0] return null} $.each(this.config,function(){this.itemType='property' if(this.group===undefined) fields.push(this) else{var group=findGroup(this.group) if(!group){group={itemType:'group',title:this.group,properties:[],groupIndex:groupIndex} groupIndex++ fields.push(group)} this.groupIndex=group.groupIndex group.properties.push(this)}}) $.each(fields,function(){result.properties.push(this) if(this.itemType=='group'){result.hasGroups=true $.each(this.properties,function(){result.properties.push(this)}) delete this.properties}}) return result} Inspector.prototype.toggleGroup=function(link,$container){var $link=$(link),groupIndex=$link.data('group-index'),propertyRows=$('tr[data-group-index='+groupIndex+']',$container),duration=Math.round(100/propertyRows.length),collapse=true,statuses=this.loadGroupExpandedStatuses(),title=$('span.title-element',$link.closest('tr')).attr('title') if($link.hasClass('expanded')){$link.removeClass('expanded') statuses[title]=false}else{$link.addClass('expanded') collapse=false statuses[title]=true} propertyRows.each(function(index){var self=$(this) setTimeout(function(){self.toggleClass('collapsed',collapse) self.toggleClass('expanded',!collapse)},index*duration)}) this.writeGroupExpandedStatuses(statuses)} Inspector.prototype.loadGroupExpandedStatuses=function(){var statuses=this.$el.data('inspector-group-statuses') return statuses!==undefined?JSON.parse(statuses):{}} Inspector.prototype.writeGroupExpandedStatuses=function(statuses){this.$el.data('inspector-group-statuses',JSON.stringify(statuses))} Inspector.prototype.groupExpanded=function(title){var statuses=this.loadGroupExpandedStatuses() if(statuses[title]!==undefined) return statuses[title] return false} Inspector.prototype.normalizePropertyCode=function(code){var lowerCaseCode=code.toLowerCase() for(var index in this.config){var propertyInfo=this.config[index] if(propertyInfo.property.toLowerCase()==lowerCaseCode) return propertyInfo.property} return code} Inspector.prototype.initProperties=function(){if(!this.propertyValuesField.length){var properties={},attributes=this.$el.get(0).attributes for(var i=0,len=attributes.length;i',data)} InspectorEditorString.prototype.validate=function(){var val=$.trim($(this.selector).val()) if(this.fieldDef.required&&val.length===0) return this.fieldDef.validationMessage||'Required fields were left blank.' if(this.fieldDef.validationPattern===undefined) return var re=new RegExp(this.fieldDef.validationPattern,'m') if(!val.match(re)) return this.fieldDef.validationMessage} InspectorEditorString.prototype.focus=function(){$(this.selector).focus() $(this.selector).closest('td').scrollLeft(0)} $.oc.inspector.editors.inspectorEditorString=InspectorEditorString;var InspectorEditorCheckbox=function(editorId,inspector,fieldDef){this.inspector=inspector this.fieldDef=fieldDef this.editorId=editorId this.selector='#'+this.editorId+' input' var self=this $(document).on('change',this.selector,function(){self.applyValue()})} InspectorEditorCheckbox.prototype.applyValue=function(){this.inspector.writeProperty(this.fieldDef.property,$(this.selector).get(0).checked?1:0)} InspectorEditorCheckbox.prototype.renderEditor=function(){var self=this,data={id:this.editorId,cbId:this.editorId+'-cb',title:this.fieldDef.title} return Mustache.render(this.getTemplate(),data)} InspectorEditorCheckbox.prototype.init=function(){var isChecked=this.inspector.readProperty(this.fieldDef.property,true) if(isChecked===undefined){if(this.fieldDef.default!==undefined){isChecked=this.normalizeCheckedValue(this.fieldDef.default)}}else{isChecked=this.normalizeCheckedValue(isChecked)} $(this.selector).prop('checked',isChecked)} InspectorEditorCheckbox.prototype.normalizeCheckedValue=function(value){if(value=='0'||value=='false') return false return value} InspectorEditorCheckbox.prototype.focus=function(){$(this.selector).closest('div').focus()} InspectorEditorCheckbox.prototype.getTemplate=function(){return' \ \
    \ \ \
    \ \ ';} $.oc.inspector.editors.inspectorEditorCheckbox=InspectorEditorCheckbox;var InspectorEditorDropdown=function(editorId,inspector,fieldDef){this.inspector=inspector this.fieldDef=fieldDef this.editorId=editorId this.selector='#'+this.editorId+' select' this.dynamicOptions=this.fieldDef.options?false:true this.initialization=false var self=this $(document).on('change',this.selector,function(){self.applyValue()})} InspectorEditorDropdown.prototype.applyValue=function(){this.inspector.writeProperty(this.fieldDef.property,$(this.selector).val(),this.initialization)} InspectorEditorDropdown.prototype.renderEditor=function(){var self=this,data={id:this.editorId,value:$.trim(this.inspector.readProperty(this.fieldDef.property)),selectId:this.editorId+'-select',defaultOption:function(){return function(text,render){if(self.fieldDef.placeholder==undefined) return'' if(!Modernizr.touch) return''}}} if(this.fieldDef.options){var options=[] if(this.fieldDef.placeholder!==undefined&&Modernizr.touch) options.push({value:null,title:this.fieldDef.placeholder}) $.each(this.fieldDef.options,function(value,title){options.push({value:value,title:title})}) data.options=options} return Mustache.render(this.getTemplate(),data)} InspectorEditorDropdown.prototype.getTemplate=function(){return' \ \ \ \ ';} InspectorEditorDropdown.prototype.init=function(){var value=this.inspector.readProperty(this.fieldDef.property,true),self=this if(value===undefined) value=this.inspector.getDefaultValue(this.fieldDef.property) $(this.selector).attr('data-no-auto-update-on-render','true') $(this.selector).val(value) if(!Modernizr.touch){var options={dropdownCssClass:'ocInspectorDropdown'} if(this.fieldDef.placeholder!==undefined) options.placeholder=this.fieldDef.placeholder $(this.selector).select2(options)} if(this.dynamicOptions){if(!Modernizr.touch){this.indicatorContainer=$('.select2-container',$(this.selector).closest('td')) this.indicatorContainer.addClass('loading-indicator-container').addClass('size-small')} this.loadOptions(true)} if(this.fieldDef.depends) this.inspector.$el.on('propertyChanged.oc.Inspector',$.proxy(this.onDependencyChanged,this))} InspectorEditorDropdown.prototype.onDependencyChanged=function(ev,property){if($.inArray(property,this.fieldDef.depends)===-1) return var self=this,dependencyValues=this.getDependencyValues() if(this.prevDependencyValues===undefined||this.prevDependencyValues!=dependencyValues) this.loadOptions()} InspectorEditorDropdown.prototype.saveDependencyValues=function(){this.prevDependencyValues=this.getDependencyValues()} InspectorEditorDropdown.prototype.getDependencyValues=function(){var dependencyValues='',self=this $.each(this.fieldDef.depends,function(index,masterProperty){dependencyValues+=masterProperty+':'+self.inspector.readProperty(masterProperty)+'-'}) return dependencyValues} InspectorEditorDropdown.prototype.showLoadingIndicator=function(){if(!Modernizr.touch) this.indicatorContainer.loadIndicator()} InspectorEditorDropdown.prototype.hideLoadingIndicator=function(){if(!Modernizr.touch) this.indicatorContainer.loadIndicator('hide')} InspectorEditorDropdown.prototype.loadOptions=function(initialization){var $form=$(this.selector).closest('form'),data=this.inspector.propertyValues,$select=$(this.selector),currentValue=this.inspector.readProperty(this.fieldDef.property,true),self=this if(currentValue===undefined) currentValue=this.inspector.getDefaultValue(this.fieldDef.property) for(var index in this.inspector.config){var propertyInfo=this.inspector.config[index] if(propertyInfo.itemType=='property'){if(data[propertyInfo.property]===undefined) data[propertyInfo.property]=this.inspector.getDefaultValue(propertyInfo.property)}} if(this.fieldDef.depends) this.saveDependencyValues() data.inspectorProperty=this.fieldDef.property data.inspectorClassName=this.inspector.options.inspectorClass this.showLoadingIndicator() $form.request('onInspectableGetOptions',{data:data,success:function(data){$('option',$select).remove() if(self.fieldDef.placeholder!==undefined) $select.append($('')) if(data.options) $.each(data.options,function(key,obj){$select.append($('').attr('value',obj.value).text(obj.title))}) var hasOption=$('option[value="'+currentValue+'"]',$select).length>0 if(hasOption) $select.val(currentValue) else $('option:first-child',$select).attr("selected","selected");self.initialization=initialization $select.trigger('change') self.initialization=false self.hideLoadingIndicator()},error:function(jqXHR,textStatus,errorThrown){alert(jqXHR.responseText.length?jqXHR.responseText:jqXHR.statusText) self.hideLoadingIndicator()}})} InspectorEditorDropdown.prototype.onHideExternalParameterEditor=function(){this.loadOptions(false)} InspectorEditorDropdown.prototype.cleanup=function(){$(this.selector).select2('destroy')} $.oc.inspector.editors.inspectorEditorDropdown=InspectorEditorDropdown;function initInspector($element){var inspector=$element.data('oc.inspector') if(inspector===undefined){inspector=new Inspector($element.get(0),$element.data()) inspector.loadConfiguration(function(){inspector.init()}) $element.data('oc.inspector',inspector)}else inspector.init()} $.fn.inspector=function(option){return this.each(function(){initInspector($(this))})} $(document).on('click','[data-inspectable]',function(){var $this=$(this) if($this.data('oc.inspectorVisible')) return false initInspector($this) return false})}(window.jQuery);+function($){"use strict";$(document).on('shown.bs.dropdown','.dropdown',function(){$(document.body).addClass('dropdown-open') var dropdown=$('.dropdown-menu',this),dropdownContainer=$(this).data('dropdown-container') if($('.dropdown-container',dropdown).length==0){var title=$('[data-toggle=dropdown]',this).text(),titleAttr=dropdown.data('dropdown-title'),timer=null;if(titleAttr!==undefined) title=titleAttr $('li:first-child',dropdown).addClass('first-item') dropdown.prepend($('
  • ').addClass('dropdown-title').text(title)) var container=$('
  • ').addClass('dropdown-container'),ul=$('
      ') container.prepend(ul) ul.prepend(dropdown.children()) dropdown.prepend(container) dropdown.on('touchstart',function(){window.setTimeout(function(){dropdown.addClass('scroll')},200)}) dropdown.on('touchend',function(){window.setTimeout(function(){dropdown.removeClass('scroll')},200)}) dropdown.on('click','a',function(){if(dropdown.hasClass('scroll')) return false})} if(dropdownContainer!==undefined&&dropdownContainer=='body'){$(this).data('oc.dropdown',dropdown) $(document.body).append(dropdown) dropdown.css({'visibility':'hidden','left':0,'top':0,'display':'block'}) var targetOffset=$(this).offset(),targetHeight=$(this).height(),targetWidth=$(this).width(),position={x:targetOffset.left,y:targetOffset.top+targetHeight},leftOffset=targetWidth<30?-16:0,documentHeight=$(document).height(),dropdownHeight=dropdown.height() if((dropdownHeight+position.y)>$(document).height()){position.y=targetOffset.top-dropdownHeight-12 dropdown.addClass('top')}else dropdown.removeClass('top') dropdown.css({'left':position.x+leftOffset,'top':position.y,'visibility':'visible'})} if($('.dropdown-overlay',document.body).length==0) $(document.body).prepend($('
      ').addClass('dropdown-overlay'));}) $(document).on('hidden.bs.dropdown','.dropdown',function(){var dropdown=$(this).data('oc.dropdown') if(dropdown!==undefined){dropdown.css('display','none') $(this).append(dropdown)} $(document.body).removeClass('dropdown-open');})}(window.jQuery);+function($){"use strict";var ChangeMonitor=function(element,options){var $el=this.$el=$(element);this.paused=false this.options=options||{} this.init()} ChangeMonitor.prototype.init=function(){this.$el.on('change',$.proxy(this.change,this)) this.$el.on('unchange.oc.changeMonitor',$.proxy(this.unchange,this)) this.$el.on('pause.oc.changeMonitor ',$.proxy(this.pause,this)) this.$el.on('resume.oc.changeMonitor ',$.proxy(this.resume,this)) this.$el.on('keyup input paste','input, textarea:not(.ace_text-input)',$.proxy(this.onInputChange,this)) $('input:not([type=hidden]), textarea:not(.ace_text-input)',this.$el).each(function(){$(this).data('oldval.oc.changeMonitor',$(this).val());}) if(this.options.windowCloseConfirm) $(window).on('beforeunload',$.proxy(this.onBeforeUnload,this))} ChangeMonitor.prototype.change=function(ev,inputChange){if(this.paused) return if(!inputChange){var type=$(ev.target).attr('type') if(type=='text'||type=="password") return} if(!this.$el.hasClass('oc-data-changed')){this.$el.trigger('changed.oc.changeMonitor') this.$el.addClass('oc-data-changed')}} ChangeMonitor.prototype.unchange=function(){if(this.paused) return if(this.$el.hasClass('oc-data-changed')){this.$el.trigger('unchanged.oc.changeMonitor') this.$el.removeClass('oc-data-changed')}} ChangeMonitor.prototype.onInputChange=function(ev){if(this.paused) return var $el=$(ev.target) if($el.data('oldval.oc.changeMonitor')!=$el.val()){$el.data('oldval.oc.changeMonitor',$el.val());this.change(ev,true);}} ChangeMonitor.prototype.pause=function(){this.paused=true} ChangeMonitor.prototype.resume=function(){this.paused=false} ChangeMonitor.prototype.onBeforeUnload=function(){if($.contains(document.documentElement,this.$el.get(0))&&this.$el.hasClass('oc-data-changed')) return this.options.windowCloseConfirm} ChangeMonitor.DEFAULTS={windowCloseConfirm:false} var old=$.fn.changeMonitor $.fn.changeMonitor=function(option){return this.each(function(){var $this=$(this) var data=$this.data('oc.changeMonitor') var options=$.extend({},ChangeMonitor.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data)$this.data('oc.changeMonitor',(data=new ChangeMonitor(this,options)))})} $.fn.changeMonitor.Constructor=ChangeMonitor $.fn.changeMonitor.noConflict=function(){$.fn.changeMonitor=old return this} $(document).render(function(){$('[data-change-monitor]').changeMonitor()})}(window.jQuery);+function($){"use strict";var ChartUtils=function(){} ChartUtils.prototype.defaultValueColor='#b8b8b8';ChartUtils.prototype.getColor=function(index){var colors=['#95b753','#cc3300','#e5a91a','#3366ff','#ff0f00','#ff6600','#ff9e01','#fcd202','#f8ff01','#b0de09','#04d215','#0d8ecf','#0d52d1','#2a0cd0','#8a0ccf','#cd0d74','#754deb','#dddddd','#999999','#333333','#000000','#57032a','#ca9726','#990000','#4b0c25'],colorIndex=index%(colors.length-1);return colors[colorIndex];} ChartUtils.prototype.loadListValues=function($list){var result={values:[],total:0,max:0} $('> li',$list).each(function(){var value=parseFloat($('span',this).text());result.total+=value result.values.push({value:value,color:$(this).data('color')}) result.max=Math.max(result.max,value)}) return result;} ChartUtils.prototype.getLegendLabel=function($legend,index){return $('tr:eq('+index+') td:eq(1)',$legend).html();} ChartUtils.prototype.initLegendColorIndicators=function($legend){var indicators=[];$('tr > td:first-child',$legend).each(function(){var indicator=$('') $(this).prepend(indicator) indicators.push(indicator)}) return indicators;} ChartUtils.prototype.createLegend=function($list){var $legend=$('
      ').addClass('chart-legend'),$table=$('') $legend.append($table) $('> li',$list).each(function(){var label=$(this).clone().children().remove().end().html();$table.append($('').append($('
      ')).append($('').html(label)).append($('').addClass('value').html($('span',this).html())))}) $legend.insertAfter($list) $list.remove() return $legend;} ChartUtils.prototype.showTooltip=function(x,y,text){var $tooltip=$('#chart-tooltip') if($tooltip.length) $tooltip.remove() $tooltip=$('
      ').html(text).css('visibility','hidden') x+=10 y+=10 $(document.body).append($tooltip) var tooltipWidth=$tooltip.outerWidth() if((x+tooltipWidth)>$(window).width()) x=$(window).width()-tooltipWidth-10;$tooltip.css({top:y,left:x,visibility:'visible'});} ChartUtils.prototype.hideTooltip=function(){$('#chart-tooltip').remove()} if($.oc===undefined) $.oc={} $.oc.chartUtils=new ChartUtils();}(window.jQuery);+function($){"use strict";var PieChart=function(element,options){this.options=options||{};var $el=this.$el=$(element),size=this.size=(this.options.size!==undefined?this.options.size:$el.height()),outerRadius=size/2-1,innerRadius=outerRadius-outerRadius/3.5,total=0,values=$.oc.chartUtils.loadListValues($('ul',$el)),$legend=$.oc.chartUtils.createLegend($('ul',$el)),indicators=$.oc.chartUtils.initLegendColorIndicators($legend),self=this;var $canvas=$('
      ').addClass('canvas').width(size).height(size) $el.prepend($canvas) Raphael($canvas.get(0),size,size,function(){self.paper=this;self.segments=this.set() self.paper.customAttributes.segment=function(startAngle,endAngle){var p1=self.arcCoords(outerRadius,startAngle),p2=self.arcCoords(outerRadius,endAngle),p3=self.arcCoords(innerRadius,endAngle),p4=self.arcCoords(innerRadius,startAngle),flag=(endAngle-startAngle)>180,path=[["M",p1.x,p1.y],["A",outerRadius,outerRadius,0,+flag,0,p2.x,p2.y],["L",p3.x,p3.y],["A",innerRadius,innerRadius,0,+flag,1,p4.x,p4.y],["Z"]];return{path:path}} self.paper.circle(size/2,size/2,innerRadius+(outerRadius-innerRadius)/2).attr({"stroke-width":outerRadius-innerRadius-0.5}).attr({stroke:$.oc.chartUtils.defaultValueColor}) $.each(values.values,function(index,valueInfo){var color=valueInfo.color!==undefined?valueInfo.color:$.oc.chartUtils.getColor(index),path=self.paper.path().attr({"stroke-width":0}).attr({segment:[0,0]}).attr({fill:color}) self.segments.push(path) indicators[index].css('background-color',color) path.hover(function(ev){$.oc.chartUtils.showTooltip(ev.pageX,ev.pageY,$.trim($.oc.chartUtils.getLegendLabel($legend,index))+': '+valueInfo.value+'')},function(){$.oc.chartUtils.hideTooltip()})}) var start=self.options.startAngle;$.each(values.values,function(index,valueInfo){var length=360/values.total*valueInfo.value;if(length==360) length--;self.segments[index].animate({segment:[start,start+length]},1000,"bounce") start+=length})});if(this.options.centerText!==undefined){var $text=$('').addClass('center').html(this.options.centerText) $canvas.append($text)}} PieChart.prototype.arcCoords=function(radius,angle){var a=Raphael.rad(angle),x=this.size/2+radius*Math.cos(a),y=this.size/2-radius*Math.sin(a);return{'x':x,'y':y}} PieChart.DEFAULTS={startAngle:45} var old=$.fn.pieChart $.fn.pieChart=function(option){return this.each(function(){var $this=$(this) var data=$this.data('oc.pieChart') var options=$.extend({},PieChart.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data) $this.data('oc.pieChart',(data=new PieChart(this,options)))})} $.fn.pieChart.Constructor=PieChart $.fn.pieChart.noConflict=function(){$.fn.pieChart=old return this} $(document).render(function(){$('[data-control=chart-pie]').pieChart()})}(window.jQuery);+function($){"use strict";var BarChart=function(element,options){this.options=options||{};var $el=this.$el=$(element),size=this.size=$el.height(),total=0,self=this,values=$.oc.chartUtils.loadListValues($('ul',$el)),$legend=$.oc.chartUtils.createLegend($('ul',$el)),indicators=$.oc.chartUtils.initLegendColorIndicators($legend),isFullWidth=this.isFullWidth(),chartHeight=this.options.height!==undefined?this.options.height:size,chartWidth=isFullWidth?this.$el.width():size,barWidth=(chartWidth-(values.values.length-1)*this.options.gap)/values.values.length var $canvas=$('
      ').addClass('canvas').height(chartHeight).width(isFullWidth?'100%':chartWidth) $el.prepend($canvas) $el.toggleClass('full-width',isFullWidth) Raphael($canvas.get(0),isFullWidth?'100%':chartWidth,chartHeight,function(){self.paper=this;self.bars=this.set() self.paper.customAttributes.bar=function(start,height){return{path:[["M",start,chartWidth],["L",start,chartHeight-height],["L",start+barWidth,chartHeight-height],["L",start+barWidth,chartWidth],["Z"]]}} var start=0;$.each(values.values,function(index,valueInfo){var color=valueInfo.color!==undefined?valueInfo.color:$.oc.chartUtils.getColor(index),path=self.paper.path().attr({"stroke-width":0}).attr({bar:[start,0]}).attr({fill:color}) self.bars.push(path) indicators[index].css('background-color',color) start+=barWidth+self.options.gap path.hover(function(ev){$.oc.chartUtils.showTooltip(ev.pageX,ev.pageY,$.trim($.oc.chartUtils.getLegendLabel($legend,index))+': '+valueInfo.value+'')},function(){$.oc.chartUtils.hideTooltip()})}) start=0 $.each(values.values,function(index,valueInfo){var height=chartHeight/values.max*valueInfo.value;self.bars[index].animate({bar:[start,height]},1000,"bounce") start+=barWidth+self.options.gap;}) if(isFullWidth){$(window).on('resize',function(){chartWidth=self.$el.width(),barWidth=(chartWidth-(values.values.length-1)*self.options.gap)/values.values.length var start=0 $.each(values.values,function(index,valueInfo){var height=chartHeight/values.max*valueInfo.value;self.bars[index].animate({bar:[start,height]},10,"bounce") start+=barWidth+self.options.gap;})})}});} BarChart.prototype.isFullWidth=function(){return this.options.fullWidth!==undefined&&this.options.fullWidth} BarChart.DEFAULTS={gap:2} var old=$.fn.barChart $.fn.barChart=function(option){return this.each(function(){var $this=$(this) var data=$this.data('oc.barChart') var options=$.extend({},BarChart.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data) $this.data('oc.barChart',(data=new BarChart(this,options)))})} $.fn.barChart.Constructor=BarChart $.fn.barChart.noConflict=function(){$.fn.barChart=old return this} $(document).render(function(){$('[data-control=chart-bar]').barChart()})}(window.jQuery);+function($){"use strict";var ChartLine=function(element,options){var self=this this.chartOptions={xaxis:{mode:"time",tickLength:5},selection:{mode:"x"},grid:{markingsColor:"rgba(0,0,0, 0.02)",backgroundColor:{colors:["#fff","#fff"]},borderColor:"#7bafcc",borderWidth:0,color:"#ddd",hoverable:true,clickable:true,labelMargin:10},series:{lines:{show:true,fill:true},points:{show:true}},tooltip:true,tooltipOpts:{defaultTheme:false,content:"%x: %y",dateFormat:"%y-%0m-%0d",shifts:{x:10,y:20}},legend:{show:true,noColumns:2}} this.defaultDataSetOptions={shadowSize:0} var parsedOptions={} try{parsedOptions=JSON.parse(JSON.stringify(eval("({"+options.chartOptions+"})")));}catch(e){throw new Error('Error parsing the data-chart-options attribute value. '+e);} this.chartOptions=$.extend({},this.chartOptions,parsedOptions) this.options=options,this.$el=$(element) this.fullDataSet=[] this.resetZoomLink=$(options.resetZoomLink) this.$el.trigger('oc.chartLineInit',[this]) this.resetZoomLink.on('click',$.proxy(this.clearZoom,this));if(this.options.zoomable){this.$el.on("plotselected",function(event,ranges){var newCoords={xaxis:{min:ranges.xaxis.from,max:ranges.xaxis.to}} $.plot(self.$el,self.fullDataSet,$.extend(true,{},self.chartOptions,newCoords)) self.resetZoomLink.show()});} if(this.chartOptions.xaxis.mode=="time"&&this.options.timeMode=="weeks") this.chartOptions.markings=weekendAreas function weekendAreas(axes){var markings=[],d=new Date(axes.xaxis.min);d.setUTCDate(d.getUTCDate()-((d.getUTCDay()+1)%7)) d.setUTCSeconds(0) d.setUTCMinutes(0) d.setUTCHours(0) var i=d.getTime() do{markings.push({xaxis:{from:i,to:i+2*24*60*60*1000}}) i+=7*24*60*60*1000}while(i[data-chart="dataset"]').each(function(){var data=$(this).data(),processedData={};for(var key in data){var normalizedKey=key.substring(3),value=data[key];normalizedKey=normalizedKey.charAt(0).toLowerCase()+normalizedKey.slice(1);if(normalizedKey=='data') value=JSON.parse('['+value+']');processedData[normalizedKey]=value;} self.addDataSet($.extend({},self.defaultDataSetOptions,processedData));}) this.initializing=false this.rebuildChart()} ChartLine.DEFAULTS={chartOptions:"",timeMode:null,zoomable:false} ChartLine.prototype.addDataSet=function(dataSet){this.fullDataSet.push(dataSet) if(!this.initializing) this.rebuildChart()} ChartLine.prototype.rebuildChart=function(){this.$el.trigger('oc.beforeChartLineRender',[this]) $.plot(this.$el,this.fullDataSet,this.chartOptions)} ChartLine.prototype.clearZoom=function(){this.rebuildChart() this.resetZoomLink.hide()} var old=$.fn.chartLine $.fn.chartLine=function(option){return this.each(function(){var $this=$(this) var data=$this.data('october.chartLine') var options=$.extend({},ChartLine.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data)$this.data('october.chartLine',(data=new ChartLine(this,options))) if(typeof option=='string')data[option].call($this)})} $.fn.chartLine.Constructor=ChartLine $.fn.chartLine.noConflict=function(){$.fn.chartLine=old return this} $(document).render(function(){$('[data-control="chart-line"]').chartLine()})}(window.jQuery);+function($){"use strict";var BalloonSelector=function(element,options){this.$el=$(element) this.$field=$('input',this.$el) this.options=options||{};var self=this;$('li',this.$el).click(function(){if(self.$el.hasClass('control-disabled')) return $('li',self.$el).removeClass('active') $(this).addClass('active') self.$field.val($(this).data('value')) self.$el.trigger('change')})} BalloonSelector.DEFAULTS={} var old=$.fn.balloonSelector $.fn.balloonSelector=function(option){return this.each(function(){var $this=$(this) var data=$this.data('oc.balloon-selector') var options=$.extend({},BalloonSelector.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data)$this.data('oc.balloon-selector',(data=new BalloonSelector(this,options)))})} $.fn.balloonSelector.Constructor=BalloonSelector $.fn.balloonSelector.noConflict=function(){$.fn.balloonSelector=old return this} $(document).on('render',function(){$('div[data-control=balloon-selector]').balloonSelector()})}(window.jQuery);+function($){"use strict";var RowLink=function(element,options){var self=this this.options=options this.$el=$(element) var tr=this.$el.prop('tagName')=='TR'?this.$el:this.$el.find('tr:has(td)') tr.each(function(){var link=$(this).find(options.target).filter(function(){return!$(this).closest('td').hasClass(options.excludeClass)&&!$(this).hasClass(options.excludeClass)}).first() if(!link.length)return var href=link.attr('href'),onclick=(typeof link.get(0).onclick=="function")?link.get(0).onclick:null $(this).find('td').not('.'+options.excludeClass).click(function(){if(onclick) onclick.apply(link.get(0)) else window.location=href;}) $(this).addClass(options.linkedClass) link.hide().after(link.html())})} RowLink.DEFAULTS={target:'a',excludeClass:'nolink',linkedClass:'rowlink'} var old=$.fn.rowLink $.fn.rowLink=function(option){var args=Array.prototype.slice.call(arguments,1) return this.each(function(){var $this=$(this) var data=$this.data('oc.rowlink') var options=$.extend({},RowLink.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data)$this.data('oc.rowlink',(data=new RowLink(this,options))) else if(typeof option=='string')data[option].apply(data,args)})} $.fn.rowLink.Constructor=RowLink $.fn.rowLink.noConflict=function(){$.fn.rowLink=old return this} $(document).render(function(){$('[data-control="rowlink"]').rowLink()})}(window.jQuery);+function($){"use strict";var TreeListWidget=function(element,options){var $el=this.$el=$(element),self=this;this.options=options||{};var sortableOptions={handle:options.handle,nested:options.nested,onDrop:function($item,container,_super){self.$el.trigger('move.oc.treelist',{item:$item,container:container}) _super($item,container)},afterMove:function($placeholder,container,$closestEl){self.$el.trigger('aftermove.oc.treelist',{placeholder:$placeholder,container:container,closestEl:$closestEl})}} $el.find('> ol').sortable($.extend(sortableOptions,options)) if(!options.nested){$el.find('> ol ol').sortable($.extend(sortableOptions,options))}} TreeListWidget.prototype.unbind=function(){this.$el.find('> ol').sortable('destroy') if(!this.options.nested){this.$el.find('> ol ol').sortable('destroy')} this.$el.removeData('oc.treelist')} TreeListWidget.DEFAULTS={handle:null,nested:true} var old=$.fn.treeListWidget $.fn.treeListWidget=function(option){var args=arguments,result this.each(function(){var $this=$(this) var data=$this.data('oc.treelist') var options=$.extend({},TreeListWidget.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data)$this.data('oc.treelist',(data=new TreeListWidget(this,options))) if(typeof option=='string')result=data[option].call(data) if(typeof result!='undefined')return false}) return result?result:this} $.fn.treeListWidget.Constructor=TreeListWidget $.fn.treeListWidget.noConflict=function(){$.fn.treeListWidget=old return this} $(document).render(function(){$('[data-control="treelist"]').treeListWidget();})}(window.jQuery);!function($){"use strict";var Autocomplete=function(element,options){this.$element=$(element) this.options=$.extend({},$.fn.autocomplete.defaults,options) this.matcher=this.options.matcher||this.matcher this.sorter=this.options.sorter||this.sorter this.highlighter=this.options.highlighter||this.highlighter this.updater=this.options.updater||this.updater this.source=this.options.source this.$menu=$(this.options.menu) this.shown=false this.listen()} Autocomplete.prototype={constructor:Autocomplete,select:function(){var val=this.$menu.find('.active').attr('data-value') this.$element.val(this.updater(val)).change() return this.hide()},updater:function(item){return item},show:function(){var pos=$.extend({},this.$element.position(),{height:this.$element[0].offsetHeight}) this.$menu.insertAfter(this.$element).css({top:pos.top+pos.height,left:pos.left}).show() this.shown=true return this},hide:function(){this.$menu.hide() this.shown=false return this},lookup:function(event){var items this.query=this.$element.val() if(!this.query||this.query.length'+match+''})},render:function(items){var that=this items=$(items).map(function(i,item){i=$(that.options.item).attr('data-value',that.itemValue(item)) i.find('a').html(that.highlighter(that.itemLabel(item))) return i[0]}) items.first().addClass('active') this.$menu.html(items) return this},next:function(event){var active=this.$menu.find('.active').removeClass('active'),next=active.next() if(!next.length){next=$(this.$menu.find('li')[0])} next.addClass('active')},prev:function(event){var active=this.$menu.find('.active').removeClass('active'),prev=active.prev() if(!prev.length){prev=this.$menu.find('li').last()} prev.addClass('active')},listen:function(){this.$element.on('focus',$.proxy(this.focus,this)).on('blur',$.proxy(this.blur,this)).on('keypress',$.proxy(this.keypress,this)).on('keyup',$.proxy(this.keyup,this)) if(this.eventSupported('keydown')){this.$element.on('keydown',$.proxy(this.keydown,this))} this.$menu.on('click',$.proxy(this.click,this)).on('mouseenter','li',$.proxy(this.mouseenter,this)).on('mouseleave','li',$.proxy(this.mouseleave,this))},eventSupported:function(eventName){var isSupported=eventName in this.$element if(!isSupported){this.$element.setAttribute(eventName,'return;') isSupported=typeof this.$element[eventName]==='function'} return isSupported},move:function(e){if(!this.shown)return switch(e.keyCode){case 9:case 13:case 27:e.preventDefault() break case 38:e.preventDefault() this.prev() break case 40:e.preventDefault() this.next() break} e.stopPropagation()},keydown:function(e){this.suppressKeyPressRepeat=~$.inArray(e.keyCode,[40,38,9,13,27]) this.move(e)},keypress:function(e){if(this.suppressKeyPressRepeat)return this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break case 9:case 13:if(!this.shown)return this.select() break case 27:if(!this.shown)return this.hide() break default:this.lookup()} e.stopPropagation() e.preventDefault()},focus:function(e){this.focused=true},blur:function(e){this.focused=false if(!this.mousedover&&this.shown)this.hide()},click:function(e){e.stopPropagation() e.preventDefault() this.select() this.$element.focus()},mouseenter:function(e){this.mousedover=true this.$menu.find('.active').removeClass('active') $(e.currentTarget).addClass('active')},mouseleave:function(e){this.mousedover=false if(!this.focused&&this.shown)this.hide()}} var old=$.fn.autocomplete $.fn.autocomplete=function(option){return this.each(function(){var $this=$(this),data=$this.data('autocomplete'),options=typeof option=='object'&&option if(!data)$this.data('autocomplete',(data=new Autocomplete(this,options))) if(typeof option=='string')data[option]()})} $.fn.autocomplete.defaults={source:[],items:8,menu:'',item:'
    • ',minLength:1} $.fn.autocomplete.Constructor=Autocomplete $.fn.autocomplete.noConflict=function(){$.fn.autocomplete=old return this} $(document).on('focus.autocomplete.data-api','[data-control="autocomplete"]',function(e){var $this=$(this) if($this.data('autocomplete'))return $this.autocomplete($this.data())})}(window.jQuery);+function($){'use strict';var dismiss='[data-dismiss="callout"]' var Callout=function(el){$(el).on('click',dismiss,this.close)} Callout.prototype.close=function(e){var $this=$(this) var selector=$this.attr('data-target') if(!selector){selector=$this.attr('href') selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,'')} var $parent=$(selector) if(e)e.preventDefault() if(!$parent.length){$parent=$this.hasClass('callout')?$this:$this.parent()} $parent.trigger(e=$.Event('close.oc.callout')) if(e.isDefaultPrevented())return $parent.removeClass('in') function removeElement(){$parent.trigger('closed.oc.callout').remove()} $.support.transition&&$parent.hasClass('fade')?$parent.one($.support.transition.end,removeElement).emulateTransitionEnd(500):removeElement()} var old=$.fn.callout $.fn.callout=function(option){return this.each(function(){var $this=$(this) var data=$this.data('oc.callout') if(!data)$this.data('oc.callout',(data=new Callout(this))) if(typeof option=='string')data[option].call($this)})} $.fn.callout.Constructor=Callout $.fn.callout.noConflict=function(){$.fn.callout=old return this} $(document).on('click.oc.callout.data-api',dismiss,Callout.prototype.close)}(jQuery);+function($){"use strict";var SidenavTree=function(element,options){this.options=options this.$el=$(element) this.init();} SidenavTree.DEFAULTS={treeName:'sidenav_tree'} SidenavTree.prototype.init=function(){var self=this $(document.body).addClass('has-sidenav-tree') this.statusCookieName=this.options.treeName+'groupStatus' this.searchCookieName=this.options.treeName+'search' this.$searchInput=$(this.options.searchInput) this.$el.on('click','li > div.group',function(){self.toggleGroup($(this).closest('li')) return false;});this.$searchInput.on('keyup',function(){self.handleSearchChange()}) var searchTerm=$.cookie(this.searchCookieName) if(searchTerm!==undefined&&searchTerm.length>0){this.$searchInput.val(searchTerm) this.applySearch()} var scrollbar=$('[data-control=scrollbar]',this.$el).data('oc.scrollbar'),active=$('li.active',this.$el) if(active.length>0) scrollbar.gotoElement(active)} SidenavTree.prototype.toggleGroup=function(group){var $group=$(group),status=$group.attr('data-status') status===undefined||status=='expanded'?this.collapseGroup($group):this.expandGroup($group)} SidenavTree.prototype.collapseGroup=function(group){var $list=$('> ul',group),self=this;$list.css('overflow','hidden') $list.animate({'height':0},{duration:100,queue:false,complete:function(){$list.css({'overflow':'visible','display':'none'}) $(group).attr('data-status','collapsed') $(window).trigger('oc.updateUi') self.saveGroupStatus($(group).data('group-code'),true)}})} SidenavTree.prototype.expandGroup=function(group,duration){var $list=$('> ul',group),self=this duration=duration===undefined?100:duration $list.css({'overflow':'hidden','display':'block','height':0}) $list.animate({'height':$list[0].scrollHeight},{duration:duration,queue:false,complete:function(){$list.css({'overflow':'visible','height':'auto'}) $(group).attr('data-status','expanded') $(window).trigger('oc.updateUi') self.saveGroupStatus($(group).data('group-code'),false)}})} SidenavTree.prototype.saveGroupStatus=function(groupCode,collapsed){var collapsedGroups=$.cookie(this.statusCookieName),updatedGroups=[] if(collapsedGroups===undefined) collapsedGroups='' collapsedGroups=collapsedGroups.split('|') $.each(collapsedGroups,function(){if(groupCode!=this) updatedGroups.push(this)}) if(collapsed) updatedGroups.push(groupCode) $.cookie(this.statusCookieName,updatedGroups.join('|'),{expires:30,path:'/'})} SidenavTree.prototype.handleSearchChange=function(){var lastValue=this.$searchInput.data('oc.lastvalue');if(lastValue!==undefined&&lastValue==this.$searchInput.val()) return this.$searchInput.data('oc.lastvalue',this.$searchInput.val()) if(this.dataTrackInputTimer!==undefined) window.clearTimeout(this.dataTrackInputTimer);var self=this this.dataTrackInputTimer=window.setTimeout(function(){self.applySearch()},300);$.cookie(this.searchCookieName,$.trim(this.$searchInput.val()),{expires:30,path:'/'})} SidenavTree.prototype.applySearch=function(){var query=$.trim(this.$searchInput.val()),words=query.toLowerCase().split(' '),visibleGroups=[],visibleItems=[],self=this if(query.length==0){$('li',this.$el).removeClass('hidden') return} $('ul.top-level > li',this.$el).each(function(){var $li=$(this) if(self.textContainsWords($('div.group h3',$li).text(),words)){visibleGroups.push($li.get(0)) $('ul li',$li).each(function(){visibleItems.push(this)})}else{$('ul li',$li).each(function(){if(self.textContainsWords($(this).text(),words)||self.textContainsWords($(this).data('keywords'),words)){visibleGroups.push($li.get(0)) visibleItems.push(this)}})}}) $('ul.top-level > li',this.$el).each(function(){var $li=$(this),groupIsVisible=$.inArray(this,visibleGroups)!==-1 $li.toggleClass('hidden',!groupIsVisible) if(groupIsVisible) self.expandGroup($li,0) $('ul li',$li).each(function(){var $itemLi=$(this) $itemLi.toggleClass('hidden',$.inArray(this,visibleItems)==-1)})}) return false} SidenavTree.prototype.textContainsWords=function(text,words){text=text.toLowerCase() for(var i=0;i