aboutsummaryrefslogtreecommitdiff
path: root/webAO/golden/js/goldenlayout.js
blob: 6f4c3c0b03cebd245c25f46d86f90dc41d463de8 (plain)
1
2
(function(e,t){'object'==typeof exports&&'object'==typeof module?module.exports=t():'function'==typeof define&&define.amd?define('GoldenLayout',[],t):'object'==typeof exports?exports.GoldenLayout=t():e.GoldenLayout=t()})('undefined'==typeof self?this:self,function(){var e=Math.min,t=Math.floor,n=Math.max;return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e['default']}:function(){return e};return t.d(n,'a',n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p='',t(t.s=35)}([function(e,t,n){'use strict';function o(e){var t=location.hash.match(new RegExp(e+'=([^&]*)'));return t?t[1]:null}t.e=function(e){return $.zepto?e.touches?e.targetTouches[0]:e:e.originalEvent&&e.originalEvent.touches?e.originalEvent.touches[0]:e},t.j=function(e){var t,n;if('function'==typeof a.a)return a()(e);for(n in t=[],e)t.push(n);return t},t.d=function(e){if(window.location.hash)return o(e);if(!window.location.search)return null;var t,n,i=window.location.search.substr(1).split('&'),a={};for(n=0;n<i.length;n++)t=i[n].split('='),a[t[0]]=t[1];return a[e]||null},t.b=function(e,t){for(var n in t)e[n]=t[n];return e},t.a=function(e){return(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)})(function(){e()})},t.g=function(e,t){if(!(t instanceof Array))throw new Error('Haystack is not an Array');if(t.indexOf)return t.indexOf(e);for(var n=0;n<t.length;n++)if(t[n]===e)return n;return-1},n.d(t,'h',function(){return l}),t.c=function(e,t,n){if(void 0!==Function.prototype.bind)return Function.prototype.bind.apply(e,[t].concat(n||[]));var o=function(){var i=(n||[]).concat(Array.prototype.slice.call(arguments,0));return this instanceof o?void e.apply(this,i):e.apply(t,i)};return o.prototype=e.prototype,o},t.i=function(){return'function'==typeof Date.now?Date.now():new Date().getTime()},t.f=function(){return(1e15*Math.random()).toString(36).replace('.','')},t.k=function(e){return $.trim(e.replace(/(<([^>]+)>)/ig,''))};var i=n(40),a=n.n(i),s=n(60),r=n.n(s),l='function'!=typeof /./&&'object'!=typeof Int8Array?function(e){return'function'==typeof e||!1}:function(e){return'[object Function]'===toString.call(e)}},function(e,t,n){'use strict';var o=n(0);const a='__all';t.a=a;t.b=class{constructor(){this._mSubscriptions={},this._mSubscriptions[a]=[],this.on=function(e,t,n){if(!Object(o.h)(t))throw new Error('Tried to listen to event '+e+' with non-function callback '+t);this._mSubscriptions[e]||(this._mSubscriptions[e]=[]),this._mSubscriptions[e].push({fn:t,ctx:n})},this.emit=function(e){var t,n,o;o=Array.prototype.slice.call(arguments,1);var i=this._mSubscriptions[e];if(i)for(i=i.slice(),t=0;t<i.length;t++)n=i[t].ctx||{},i[t].fn.apply(n,o);o.unshift(e);var s=this._mSubscriptions[a].slice();for(t=0;t<s.length;t++)n=s[t].ctx||{},s[t].fn.apply(n,o)},this.unbind=function(e,t,n){if(!this._mSubscriptions[e])throw new Error('No subscribtions to unsubscribe for event '+e);var o,i=!1;for(o=0;o<this._mSubscriptions[e].length;o++)t&&this._mSubscriptions[e][o].fn!==t||n&&n!==this._mSubscriptions[e][o].ctx||(this._mSubscriptions[e].splice(o,1),i=!0);if(!1==i)throw new Error('Nothing to unbind for '+e)},this.off=this.unbind,this.trigger=this.emit}}},function(e){var t=e.exports={version:'2.5.6'};'number'==typeof __e&&(__e=t)},function(e,t,n){'use strict';var o=n(1),i=n(26),a=n(12),s=n(27),r=n(66),l=n(0);class c extends o.b{constructor(e,t,n){super(),this.config=this._extendItemNode(t),this.type=t.type,this.contentItems=[],this.parent=n,this.isInitialised=!1,this.isMaximised=!1,this.isRoot=!1,this.isRow=!1,this.isColumn=!1,this.isStack=!1,this.isComponent=!1,this.layoutManager=e,this._pendingEventPropagations={},this._throttledEvents=['stateChanged'],this.on(o.a,this._propagateEvent,this),t.content&&this._createContentItems(t)}setSize(){throw new Error('Abstract Method')}callDownwards(e,t,n,o){var a;for(!0!==n&&!0!==o&&this[e].apply(this,t||[]),a=0;a<this.contentItems.length;a++)this.contentItems[a].callDownwards(e,t,n);!0===n&&!0!==o&&this[e].apply(this,t||[])}removeChild(e,t){var n=Object(l.g)(e,this.contentItems);if(-1===n)throw new Error('Can\'t remove child item. Unknown content item');!0!==t&&this.contentItems[n]._$destroy(),this.contentItems.splice(n,1),this.config.content.splice(n,1),0<this.contentItems.length?this.callDownwards('setSize'):!(this instanceof a.a)&&!0===this.config.isClosable&&this.parent.removeChild(this)}undisplayChild(e){var t=Object(l.g)(e,this.contentItems);if(-1===t)throw new Error('Can\'t remove child item. Unknown content item');this instanceof a.a||!0!==this.config.isClosable||this.parent.undisplayChild(this)}addChild(e,t){t===void 0&&(t=this.contentItems.length),this.contentItems.splice(t,0,e),this.config.content===void 0&&(this.config.content=[]),this.config.content.splice(t,0,e.config),e.parent=this,!0===e.parent.isInitialised&&!1===e.isInitialised&&e._$init()}replaceChild(e,t,n){t=this.layoutManager._$normalizeContentItem(t);var o=Object(l.g)(e,this.contentItems),i=e.element[0].parentNode;if(-1===o)throw new Error('Can\'t replace child. oldChild is not child of this');i.replaceChild(t.element[0],e.element[0]),!0===n&&(e.parent=null,e._$destroy()),this.contentItems[o]=t,t.parent=this,this.isStack&&(this.header.tabs[o].contentItem=t),!0===t.parent.isInitialised&&!1===t.isInitialised&&t._$init(),this.callDownwards('setSize')}remove(){this.parent.removeChild(this)}popout(){var e=this.layoutManager.createPopout(this);return this.emitBubblingEvent('stateChanged'),e}toggleMaximise(t){t&&t.preventDefault(),!0===this.isMaximised?this.layoutManager._$minimiseItem(this):this.layoutManager._$maximiseItem(this),this.isMaximised=!this.isMaximised,this.emitBubblingEvent('stateChanged')}select(){this.layoutManager.selectedItem!==this&&(this.layoutManager.selectItem(this,!0),this.element.addClass('lm_selected'))}deselect(){this.layoutManager.selectedItem===this&&(this.layoutManager.selectedItem=null,this.element.removeClass('lm_selected'))}setTitle(e){this.config.title=e,this.emit('titleChanged',e),this.emit('stateChanged')}hasId(e){if(!this.config.id)return!1;return'string'==typeof this.config.id?this.config.id===e:this.config.id instanceof Array?-1!==Object(l.g)(e,this.config.id):void 0}addId(e){this.hasId(e)||(this.config.id?'string'==typeof this.config.id?this.config.id=[this.config.id,e]:this.config.id instanceof Array&&this.config.id.push(e):this.config.id=e)}removeId(e){if(!this.hasId(e))throw new Error('Id not found');if('string'==typeof this.config.id)delete this.config.id;else if(this.config.id instanceof Array){var t=Object(l.g)(e,this.config.id);this.config.id.splice(t,1)}}getItemsByFilter(e){var t=[],n=function(o){for(var a=0;a<o.contentItems.length;a++)!0===e(o.contentItems[a])&&t.push(o.contentItems[a]),n(o.contentItems[a])};return n(this),t}getItemsById(e){return this.getItemsByFilter(function(t){return t.config.id instanceof Array?-1!==Object(l.g)(e,t.config.id):t.config.id===e})}getItemsByType(e){return this._$getItemsByProperty('type',e)}getComponentsByName(e){var t,n=this._$getItemsByProperty('componentName',e),o=[];for(t=0;t<n.length;t++)o.push(n[t].instance);return o}_$getItemsByProperty(e,t){return this.getItemsByFilter(function(n){return n[e]===t})}_$setParent(e){this.parent=e}_$highlightDropZone(e,t,n){this.layoutManager.dropTargetIndicator.highlightArea(n)}_$onDrop(e){this.addChild(e)}_$hide(){this._callOnActiveComponents('hide'),this.element.hide(),this.layoutManager.updateSize()}_$show(){this._callOnActiveComponents('show'),this.element.show(),this.layoutManager.updateSize()}_callOnActiveComponents(e){var t,n,o=this.getItemsByType('stack');for(n=0;n<o.length;n++)t=o[n].getActiveContentItem(),t&&t.isComponent&&t.container[e]()}_$destroy(){this.emitBubblingEvent('beforeItemDestroyed'),this.callDownwards('_$destroy',[],!0,!0),this.element.remove(),this.emitBubblingEvent('itemDestroyed')}_$getArea(e){e=e||this.element;var t=e.offset(),n=e.width(),o=e.height();return{x1:t.left,y1:t.top,x2:t.left+n,y2:t.top+o,surface:n*o,contentItem:this}}_$init(){var e;for(this.setSize(),e=0;e<this.contentItems.length;e++)this.childElementContainer.append(this.contentItems[e].element);this.isInitialised=!0,this.emitBubblingEvent('itemCreated'),this.emitBubblingEvent(this.type+'Created')}emitBubblingEvent(e){var t=new i.a(e,this);this.emit(e,t)}_createContentItems(e){var t,n;if(!(e.content instanceof Array))throw new s.a('content must be an Array',e);for(n=0;n<e.content.length;n++)t=this.layoutManager.createContentItem(e.content[n],this),this.contentItems.push(t)}_extendItemNode(e){for(var t in r.a)void 0===e[t]&&(e[t]=r.a[t]);return e}_propagateEvent(e,t){t instanceof i.a&&!1===t.isPropagationStopped&&!0===this.isInitialised&&(!1===this.isRoot&&this.parent?this.parent.emit.apply(this.parent,Array.prototype.slice.call(arguments,0)):this._scheduleEventPropagationToLayoutManager(e,t))}_scheduleEventPropagationToLayoutManager(e,t){-1===Object(l.g)(e,this._throttledEvents)?this.layoutManager.emit(e,t.origin):!0!==this._pendingEventPropagations[e]&&(this._pendingEventPropagations[e]=!0,Object(l.a)(Object(l.c)(this._propagateEventToLayoutManager,this,[e,t])))}_propagateEventToLayoutManager(e,t){this._pendingEventPropagations[e]=!1,this.layoutManager.emit(e,t)}}t.a=c},function(e){var t=e.exports='undefined'!=typeof window&&window.Math==Math?window:'undefined'!=typeof self&&self.Math==Math?self:Function('return this')();'number'==typeof __g&&(__g=t)},function(e,t,n){e.exports=!n(10)(function(){return 7!=Object.defineProperty({},'a',{get:function(){return 7}}).a})},function(e,o,i){'use strict';var a=Math.round,s=i(3),r=i(13),l=i(67),c=i(0);class p extends s.a{constructor(e,t,n,o){super(t,n,o),this.isRow=!e,this.isColumn=e,this.element=$('<div class="lm_item lm_'+(e?'column':'row')+'"></div>'),this.childElementContainer=this.element,this._splitterSize=t.config.dimensions.borderWidth,this._splitterGrabSize=t.config.dimensions.borderGrabWidth,this._isColumn=e,this._dimension=e?'height':'width',this._splitter=[],this._splitterPosition=null,this._splitterMinPosition=null,this._splitterMaxPosition=null}addChild(e,t,o){var a,r,l,i;if(e=this.layoutManager._$normalizeContentItem(e,this),void 0===t&&(t=this.contentItems.length),0<this.contentItems.length?(i=this._createSplitter(n(0,t-1)).element,0<t?(this.contentItems[t-1].element.after(i),i.after(e.element),this._isDocked(t-1)&&(this._splitter[t-1].element.hide(),this._splitter[t].element.show())):(this.contentItems[0].element.before(i),i.before(e.element))):this.childElementContainer.append(e.element),s.a.prototype.addChild.call(this,e,t),a=100*(1/this.contentItems.length),!0===o)return void this.emitBubblingEvent('stateChanged');for(l=0;l<this.contentItems.length;l++)this.contentItems[l]===e?e.config[this._dimension]=a:(r=this.contentItems[l].config[this._dimension]*=(100-a)/100,this.contentItems[l].config[this._dimension]=r);this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged'),this._validateDocking()}undisplayChild(e){var t,o=e.config[this._dimension],i=Object(c.g)(e,this.contentItems),a=n(i-1,0);if(-1===i)throw new Error('Can\'t undisplay child. ContentItem is not child of this Row or Column');this._splitter[a]&&this._splitter[a].element.hide(),a<this._splitter.length&&this._isDocked(a)&&this._splitter[a].element.hide();var r=this._isDocked();for(t=0;t<this.contentItems.length;t++)this.contentItems[t]===e?this.contentItems[t].config[this._dimension]=0:this._isDocked(t)||(this.contentItems[t].config[this._dimension]+=o/(this.contentItems.length-1-r));1===this.contentItems.length&&s.a.prototype.undisplayChild.call(this,e),this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged')}removeChild(e,t){var o,i,a=e.config[this._dimension],r=Object(c.g)(e,this.contentItems),l=n(r-1,0);if(-1===r)throw new Error('Can\'t remove child. ContentItem is not child of this Row or Column');this._splitter[l]&&(this._splitter[l]._$destroy(),this._splitter.splice(l,1)),l<this._splitter.length&&this._isDocked(l)&&this._splitter[l].element.hide();var p=this._isDocked();for(o=0;o<this.contentItems.length;o++)this.contentItems[o]!==e&&(this._isDocked(o)||(this.contentItems[o].config[this._dimension]+=a/(this.contentItems.length-1-p)));s.a.prototype.removeChild.call(this,e,t),1===this.contentItems.length&&!0===this.config.isClosable?(i=this.contentItems[0],this.contentItems=[],this.parent.replaceChild(this,i,!0),this._validateDocking(this.parent)):(this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged'),this._validateDocking())}replaceChild(e,t){var n=e.config[this._dimension];s.a.prototype.replaceChild.call(this,e,t),t.config[this._dimension]=n,this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged')}setSize(){0<this.contentItems.length&&(this._calculateRelativeSizes(),this._setAbsoluteSizes()),this.emitBubblingEvent('stateChanged'),this.emit('resize')}dock(e,t,o){if(1===this.contentItems.length)throw new Error('Can\'t dock child when it single');var a=e.config[this._dimension],s=this.layoutManager.config.dimensions.headerHeight,r=Object(c.g)(e,this.contentItems),l=n(r-1,0);if(-1===r)throw new Error('Can\'t dock child. ContentItem is not child of this Row or Column');var p,i=e._docker&&e._docker.docked;if('undefined'==typeof t||t!=i){if(i){for(this._splitter[l].element.show(),p=0;p<this.contentItems.length;p++){var d=e._docker.size;this.contentItems[p]===e?e.config[this._dimension]=d:(itemSize=this.contentItems[p].config[this._dimension]*=(100-d)/100,this.contentItems[p].config[this._dimension]=itemSize)}e._docker={docked:!1}}else{if(2>this.contentItems.length-this._isDocked())throw new Error('Can\'t dock child when it is last in '+this.config.type);var m={column:{first:'top',last:'bottom'},row:{first:'left',last:'right'}}[this.config.type][r?'last':'first'];e.header.position()!=m&&e.header.position(m),this._splitter[l]&&this._splitter[l].element.hide();var _=this._isDocked();for(p=0;p<this.contentItems.length;p++)this.contentItems[p]===e?this.contentItems[p].config[this._dimension]=0:this._isDocked(p)||(this.contentItems[p].config[this._dimension]+=a/(this.contentItems.length-1-_));e._docker={dimension:this._dimension,size:a,realSize:e.element[this._dimension]()-s,docked:!0},o&&e.childElementContainer[this._dimension](0)}e.element.toggleClass('lm_docked',e._docker.docked),this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged'),this._validateDocking()}}_$init(){if(!0!==this.isInitialised){var e;for(s.a.prototype._$init.call(this),e=0;e<this.contentItems.length-1;e++)this.contentItems[e].element.after(this._createSplitter(e).element);for(e=0;e<this.contentItems.length;e++)this.contentItems[e]._header&&this.contentItems[e]._header.docked&&this.dock(this.contentItems[e],!0,!0)}}_setAbsoluteSizes(){var e,t=this._calculateAbsoluteSizes();for(e=0;e<this.contentItems.length;e++)0<t.additionalPixel-e&&t.itemSizes[e]++,this._isColumn?(this.contentItems[e].element.width(t.totalWidth),this.contentItems[e].element.height(t.itemSizes[e])):(this.contentItems[e].element.width(t.itemSizes[e]),this.contentItems[e].element.height(t.totalHeight))}_calculateAbsoluteSizes(){var e,n,o,i=(this.contentItems.length-1)*this._splitterSize,a=this.layoutManager.config.dimensions.headerHeight,s=this.element.width(),r=this.element.height(),l=0,c=[];for(this._isColumn?r-=i:s-=i,e=0;e<this.contentItems.length;e++)this._isDocked(e)&&(this._isColumn?r-=a-this._splitterSize:s-=a-this._splitterSize);for(e=0;e<this.contentItems.length;e++)o=this._isColumn?t(r*(this.contentItems[e].config.height/100)):t(s*(this.contentItems[e].config.width/100)),this._isDocked(e)&&(o=a),l+=o,c.push(o);return n=t((this._isColumn?r:s)-l),{itemSizes:c,additionalPixel:n,totalWidth:s,totalHeight:r}}_calculateRelativeSizes(){var e,t=0,n=[],o=this._isColumn?'height':'width';for(e=0;e<this.contentItems.length;e++)void 0===this.contentItems[e].config[o]?n.push(this.contentItems[e]):t+=this.contentItems[e].config[o];if(100===a(t))return void this._respectMinItemWidth();if(100>a(t)&&0<n.length){for(e=0;e<n.length;e++)n[e].config[o]=(100-t)/n.length;return void this._respectMinItemWidth()}if(100<a(t))for(e=0;e<n.length;e++)n[e].config[o]=50,t+=50;for(e=0;e<this.contentItems.length;e++)this.contentItems[e].config[o]=100*(this.contentItems[e].config[o]/t);this._respectMinItemWidth()}_respectMinItemWidth(){var e,t,n,o=this.layoutManager.config.dimensions?this.layoutManager.config.dimensions.minItemWidth||0:0,s=null,r=[],l=0,c=0,p=0,d=0,m=null,_=[];if(!(this._isColumn||!o||1>=this.contentItems.length)){s=this._calculateAbsoluteSizes();for(var g=0;g<this.contentItems.length;g++)m=this.contentItems[g],d=s.itemSizes[g],d<o?(c+=o-d,n={width:o}):(l+=d-o,n={width:d},r.push(n)),_.push(n);if(!(0==c||c>l)){for(e=c/l,p=c,g=0;g<r.length;g++)n=r[g],t=a((n.width-o)*e),p-=t,n.width-=t;for(0!==p&&(_[_.length-1].width-=p),g=0;g<this.contentItems.length;g++)this.contentItems[g].config.width=100*(_[g].width/s.totalWidth)}}}_createSplitter(e){var t;return t=new l.a(this._isColumn,this._splitterSize,this._splitterGrabSize),t.on('drag',Object(c.c)(this._onSplitterDrag,this,[t]),this),t.on('dragStop',Object(c.c)(this._onSplitterDragStop,this,[t]),this),t.on('dragStart',Object(c.c)(this._onSplitterDragStart,this,[t]),this),this._splitter.splice(e,0,t),t}_getItemsForSplitter(e){var t=Object(c.g)(e,this._splitter);return{before:this.contentItems[t],after:this.contentItems[t+1]}}_isDocked(e){if('undefined'==typeof e){for(var t=0,n=0;n<this.contentItems.length;++n)this._isDocked(n)&&t++;return t}return e<this.contentItems.length?this.contentItems[e]._docker&&this.contentItems[e]._docker.docked:void 0}_validateDocking(e){e=e||this;for(var t=1<e.contentItems.length-e._isDocked(),n=0;n<e.contentItems.length;++n)e.contentItems[n]instanceof r.a&&(e.contentItems[n].header._setDockable(e._isDocked(n)||t),e.contentItems[n].header._$setClosable(t))}_getMinimumDimensions(e){for(var t=0,o=0,a=0;a<e.length;++a)t=n(e[a].minWidth||0,t),o=n(e[a].minHeight||0,o);return{horizontal:t,vertical:o}}_onSplitterDragStart(e){var t=this._getItemsForSplitter(e),n=this.layoutManager.config.dimensions[this._isColumn?'minItemHeight':'minItemWidth'],o=this._getMinimumDimensions(t.before.config.content),i=this._isColumn?o.vertical:o.horizontal,a=this._getMinimumDimensions(t.after.config.content),s=this._isColumn?a.vertical:a.horizontal;this._splitterPosition=0,this._splitterMinPosition=-1*(t.before.element[this._dimension]()-(i||n)),this._splitterMaxPosition=t.after.element[this._dimension]()-(s||n)}_onSplitterDrag(e,t,n){var o=this._isColumn?n:t;o>this._splitterMinPosition&&o<this._splitterMaxPosition&&(this._splitterPosition=o,e.element.css(this._isColumn?'top':'left',o))}_onSplitterDragStop(e){var t=this._getItemsForSplitter(e),n=t.before.element[this._dimension](),o=t.after.element[this._dimension](),i=(this._splitterPosition+n)/(n+o),a=t.before.config[this._dimension]+t.after.config[this._dimension];t.before.config[this._dimension]=i*a,t.after.config[this._dimension]=(1-i)*a,e.element.css({top:0,left:0}),Object(c.a)(Object(c.c)(this.callDownwards,this,['setSize']))}}o.a=p},function(e,t,n){'use strict';var o=n(1),i=n(0);class a extends o.b{constructor(e,t){super(),this._timeout=null,this._eElement=$(e),this._oDocument=$(document),this._eBody=$(document.body),this._nButtonCode=t||0,this._nDelay=200,this._nDistance=10,this._nX=0,this._nY=0,this._nOriginalX=0,this._nOriginalY=0,this._bDragging=!1,this._fMove=Object(i.c)(this.onMouseMove,this),this._fUp=Object(i.c)(this.onMouseUp,this),this._fDown=Object(i.c)(this.onMouseDown,this),this._eElement.on('mousedown touchstart',this._fDown)}destroy(){this._eElement.unbind('mousedown touchstart',this._fDown),this._oDocument.unbind('mouseup touchend',this._fUp),this._eElement=null,this._oDocument=null,this._eBody=null}onMouseDown(e){if(e.preventDefault(),0==e.button||'touchstart'===e.type){var t=this._getCoordinates(e);this._nOriginalX=t.x,this._nOriginalY=t.y,this._oDocument.on('mousemove touchmove',this._fMove),this._oDocument.one('mouseup touchend',this._fUp),this._timeout=setTimeout(Object(i.c)(this._startDrag,this),this._nDelay)}}onMouseMove(e){var t=Math.abs;if(null!=this._timeout){e.preventDefault();var n=this._getCoordinates(e);this._nX=n.x-this._nOriginalX,this._nY=n.y-this._nOriginalY,!1===this._bDragging&&(t(this._nX)>this._nDistance||t(this._nY)>this._nDistance)&&(clearTimeout(this._timeout),this._startDrag()),this._bDragging&&this.emit('drag',this._nX,this._nY,e)}}onMouseUp(e){null!=this._timeout&&(clearTimeout(this._timeout),this._eBody.removeClass('lm_dragging'),this._eElement.removeClass('lm_dragging'),this._oDocument.find('iframe').css('pointer-events',''),this._oDocument.unbind('mousemove touchmove',this._fMove),this._oDocument.unbind('mouseup touchend',this._fUp),!0===this._bDragging&&(this._bDragging=!1,this.emit('dragStop',e,this._nOriginalX+this._nX)))}_startDrag(){this._bDragging=!0,this._eBody.addClass('lm_dragging'),this._eElement.addClass('lm_dragging'),this._oDocument.find('iframe').css('pointer-events','none'),this.emit('dragStart',this._nOriginalX,this._nOriginalY)}_getCoordinates(e){return e=Object(i.e)(e),{x:e.pageX,y:e.pageY}}}t.a=a},function(e,t,n){var o=n(9);e.exports=function(e){if(!o(e))throw TypeError(e+' is not an object!');return e}},function(e){e.exports=function(e){return'object'==typeof e?null!==e:'function'==typeof e}},function(e){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){'use strict';var o=n(0);t.a=class{constructor(){if(this._keys=['settings','hasHeaders','constrainDragToContainer','selectionEnabled','dimensions','borderWidth','minItemHeight','minItemWidth','headerHeight','dragProxyWidth','dragProxyHeight','labels','close','maximise','minimise','popout','content','componentName','componentState','id','width','type','height','isClosable','title','popoutWholeStack','openPopouts','parentId','activeItemIndex','reorderEnabled','borderGrabWidth'],36<this._keys.length)throw new Error('Too many keys in config minifier map');this._values=[!0,!1,'row','column','stack','component','close','maximise','minimise','open in new window']}minifyConfig(e){var t={};return this._nextLevel(e,t,'_min'),t}unminifyConfig(e){var t={};return this._nextLevel(e,t,'_max'),t}_nextLevel(e,t,n){var o,i;for(o in e)e instanceof Array&&(o=parseInt(o,10)),e.hasOwnProperty(o)&&(i=this[n](o,this._keys),'object'==typeof e[o]?(t[i]=e[o]instanceof Array?[]:{},this._nextLevel(e[o],t[i],n)):t[i]=this[n](e[o],this._values))}_min(e,t){if('string'==typeof e&&1===e.length)return'___'+e;var n=Object(o.g)(e,t);return-1===n?e:n.toString(36)}_max(e,t){return'string'==typeof e&&1===e.length?t[parseInt(e,36)]:'string'==typeof e&&'___'===e.substr(0,3)?e[3]:e}}},function(e,t,n){'use strict';var o=n(3),i=n(6);class a extends o.a{constructor(e,t,n){super(e,t,null),this.isRoot=!0,this.type='root',this.element=$('<div class="lm_goldenlayout lm_item lm_root"></div>'),this.childElementContainer=this.element,this._containerElement=n,this._containerElement.append(this.element)}addChild(e){if(0<this.contentItems.length)throw new Error('Root node can only have a single child');e=this.layoutManager._$normalizeContentItem(e,this),this.childElementContainer.append(e.element),o.a.prototype.addChild.call(this,e),this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged')}setSize(e,t){e='undefined'==typeof e?this._containerElement.width():e,t='undefined'==typeof t?this._containerElement.height():t,this.element.width(e),this.element.height(t),this.contentItems[0]&&(this.contentItems[0].element.width(e),this.contentItems[0].element.height(t))}_$highlightDropZone(){this.layoutManager.tabDropPlaceholder.remove(),o.a.prototype._$highlightDropZone.apply(this,arguments)}_$onDrop(e,t){var n;if(e.isComponent&&(n=this.layoutManager.createContentItem({type:'stack',header:e.config.header||{}},this),n._$init(),n.addChild(e),e=n),!this.contentItems.length)this.addChild(e);else{('row'===e.config.type||'column'===e.config.type)&&(n=this.layoutManager.createContentItem({type:'stack'},this),n.addChild(e),e=n);var o='x'==t.side[0]?'row':'column',a='x'==t.side[0]?'width':'height',s='2'==t.side[1],r=this.contentItems[0];if(!(r instanceof i.a)||r.type!=o){var l=this.layoutManager.createContentItem({type:o},this);this.replaceChild(r,l),l.addChild(e,s?0:void 0,!0),l.addChild(r,s?void 0:0,!0),r.config[a]=50,e.config[a]=50,l.callDownwards('setSize')}else{var c=r.contentItems[s?0:r.contentItems.length-1];r.addChild(e,s?0:void 0,!0),c.config[a]*=0.5,e.config[a]=c.config[a],r.callDownwards('setSize')}}}}t.a=a},function(t,o,i){'use strict';var a=i(3),s=i(6),r=i(28),l=i(0);class c extends a.a{constructor(e,t,n){super(e,t,n),this.element=$('<div class="lm_item lm_stack"></div>'),this._activeContentItem=null;var o=e.config;this._header={show:!0===o.settings.hasHeaders&&!1!==t.hasHeaders,popout:o.settings.showPopoutIcon&&o.labels.popout,maximise:o.settings.showMaximiseIcon&&o.labels.maximise,close:o.settings.showCloseIcon&&o.labels.close,minimise:o.labels.minimise},o.header&&Object(l.b)(this._header,o.header),t.header&&Object(l.b)(this._header,t.header),t.content&&t.content[0]&&t.content[0].header&&Object(l.b)(this._header,t.content[0].header),this._dropZones={},this._dropSegment=null,this._contentAreaDimensions=null,this._dropIndex=null,this.isStack=!0,this.childElementContainer=$('<div class="lm_items"></div>'),this.header=new r.a(e,this),this.element.on('mouseleave mouseenter',Object(l.c)(function(e){this._docker&&this._docker.docked&&this.childElementContainer[this._docker.dimension]('mouseenter'==e.type?this._docker.realSize:0)},this)),this.element.append(this.header.element),this.element.append(this.childElementContainer),this._setupHeaderPosition(),this._$validateClosability()}dock(e){this._header.dock&&this.parent instanceof s.a&&this.parent.dock(this,e)}setSize(){if('none'!==this.element.css('display')){var e=this._docker&&this._docker.docked,t={width:this.element.width(),height:this.element.height()};this._header.show&&(t[this._sided?'width':'height']-=this.layoutManager.config.dimensions.headerHeight),e&&(t[this._docker.dimension]=this._docker.realSize),e&&'height'!=this._docker.dimension||this.childElementContainer.width(t.width),e&&'width'!=this._docker.dimension||this.childElementContainer.height(t.height);for(var n=0;n<this.contentItems.length;n++)this.contentItems[n].element.width(t.width),this.contentItems[n].element.height(t.height);this.emit('resize'),this.emitBubblingEvent('stateChanged')}}_$init(){var e,t;if(!0!==this.isInitialised){for(a.a.prototype._$init.call(this),e=0;e<this.contentItems.length;e++)this.header.createTab(this.contentItems[e]),this.contentItems[e]._$hide();if(0<this.contentItems.length){if(t=this.contentItems[this.config.activeItemIndex||0],!t)throw new Error('Configured activeItemIndex out of bounds');this.setActiveContentItem(t)}}}setActiveContentItem(e){if(-1===Object(l.g)(e,this.contentItems))throw new Error('contentItem is not a child of this stack');null!==this._activeContentItem&&this._activeContentItem._$hide(),this._activeContentItem=e,this.header.setActiveContentItem(e),e._$show(),this.emit('activeContentItemChanged',e),this.layoutManager.emit('activeContentItemChanged',e),this.emitBubblingEvent('stateChanged')}getActiveContentItem(){return this.header.activeContentItem}addChild(e,t){t>this.contentItems.length&&(t-=1),e=this.layoutManager._$normalizeContentItem(e,this),a.a.prototype.addChild.call(this,e,t),this.childElementContainer.append(e.element),this.header.createTab(e,t),this.setActiveContentItem(e),this.callDownwards('setSize'),this._$validateClosability(),this.parent instanceof s.a&&this.parent._validateDocking(),this.emitBubblingEvent('stateChanged')}removeChild(e,t){var o=Object(l.g)(e,this.contentItems);a.a.prototype.removeChild.call(this,e,t),this.header.removeTab(e),this.header.activeContentItem===e&&(0<this.contentItems.length?this.setActiveContentItem(this.contentItems[n(o-1,0)]):this._activeContentItem=null),this._$validateClosability(),this.parent instanceof s.a&&this.parent._validateDocking(),this.emitBubblingEvent('stateChanged')}undisplayChild(e){if(1<this.contentItems.length){var t=Object(l.g)(e,this.contentItems);e._$hide&&e._$hide(),this.setActiveContentItem(this.contentItems[0===t?t+1:t-1])}else this.header.hideTab(e),e._$hide&&e._$hide(),a.a.prototype.undisplayChild.call(this,e),this.parent instanceof s.a&&this.parent._validateDocking();this.emitBubblingEvent('stateChanged')}_$validateClosability(){var e,t,n;for(e=this.header._isClosable(),n=0,t=this.contentItems.length;n<t&&!!e;n++)e=this.contentItems[n].config.isClosable;this.header._$setClosable(e)}_$destroy(){a.a.prototype._$destroy.call(this),this.header._$destroy(),this.element.off('mouseenter mouseleave')}_$onDrop(e){if('header'===this._dropSegment)return this._resetHeaderDropZone(),void this.addChild(e,this._dropIndex);if('body'===this._dropSegment)return void this.addChild(e);var t,n,o,i='top'===this._dropSegment||'bottom'===this._dropSegment,a='left'===this._dropSegment||'right'===this._dropSegment,s='top'===this._dropSegment||'left'===this._dropSegment,r=i&&this.parent.isColumn||a&&this.parent.isRow,c=i?'column':'row',p=i?'height':'width';e.isComponent&&(n=this.layoutManager.createContentItem({type:'stack',header:e.config.header||{}},this),n._$init(),n.addChild(e),e=n),('row'===e.config.type||'column'===e.config.type)&&(n=this.layoutManager.createContentItem({type:'stack'},this),n.addChild(e),e=n),r?(t=Object(l.g)(this,this.parent.contentItems),this.parent.addChild(e,s?t:t+1,!0),this.config[p]*=0.5,e.config[p]=this.config[p],this.parent.callDownwards('setSize')):(c=i?'column':'row',o=this.layoutManager.createContentItem({type:c},this),this.parent.replaceChild(this,o),o.addChild(e,s?0:void 0,!0),o.addChild(this,s?void 0:0,!0),this.config[p]=50,e.config[p]=50,o.callDownwards('setSize')),this.parent._validateDocking()}_$highlightDropZone(e,t){var n,o;for(n in this._contentAreaDimensions)if(o=this._contentAreaDimensions[n].hoverArea,o.x1<e&&o.x2>e&&o.y1<t&&o.y2>t)return void('header'===n?(this._dropSegment='header',this._highlightHeaderDropZone(this._sided?t:e)):(this._resetHeaderDropZone(),this._highlightBodyDropZone(n)))}_$getArea(){if('none'===this.element.css('display'))return null;var e=a.a.prototype._$getArea,t=e.call(this,this.header.element),n=e.call(this,this.childElementContainer),o=n.x2-n.x1,i=n.y2-n.y1;return(this._contentAreaDimensions={header:{hoverArea:{x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2},highlightArea:{x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2}}},this._activeContentItem&&!1===this._activeContentItem.isComponent)?t:0===this.contentItems.length?(this._contentAreaDimensions.body={hoverArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2}},e.call(this,this.element)):(this._contentAreaDimensions.left={hoverArea:{x1:n.x1,y1:n.y1,x2:n.x1+0.25*o,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x1+0.5*o,y2:n.y2}},this._contentAreaDimensions.top={hoverArea:{x1:n.x1+0.25*o,y1:n.y1,x2:n.x1+0.75*o,y2:n.y1+0.5*i},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y1+0.5*i}},this._contentAreaDimensions.right={hoverArea:{x1:n.x1+0.75*o,y1:n.y1,x2:n.x2,y2:n.y2},highlightArea:{x1:n.x1+0.5*o,y1:n.y1,x2:n.x2,y2:n.y2}},this._contentAreaDimensions.bottom={hoverArea:{x1:n.x1+0.25*o,y1:n.y1+0.5*i,x2:n.x1+0.75*o,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1+0.5*i,x2:n.x2,y2:n.y2}},e.call(this,this.element))}_highlightHeaderDropZone(t){var n,o,i,a,s,r,l,c,p,d=this.header.tabs.length,m=!1;if(0===d)return l=this.header.element.offset(),void this.layoutManager.dropTargetIndicator.highlightArea({x1:l.left,x2:l.left+100,y1:l.top+this.header.element.height()-20,y2:l.top+this.header.element.height()});for(n=0;n<d;n++)if(o=this.header.tabs[n].element,s=o.offset(),this._sided?(a=s.top,i=s.left,c=o.height()):(a=s.left,i=s.top,c=o.width()),t>a&&t<a+c){m=!0;break}if(!(!1==m&&t<a)){if(p=a+c/2,t<p?(this._dropIndex=n,o.before(this.layoutManager.tabDropPlaceholder)):(this._dropIndex=e(n+1,d),o.after(this.layoutManager.tabDropPlaceholder)),this._sided){var _=this.layoutManager.tabDropPlaceholder.offset().top;return void this.layoutManager.dropTargetIndicator.highlightArea({x1:i,x2:i+o.innerHeight(),y1:_,y2:_+this.layoutManager.tabDropPlaceholder.width()})}r=this.layoutManager.tabDropPlaceholder.offset().left,this.layoutManager.dropTargetIndicator.highlightArea({x1:r,x2:r+this.layoutManager.tabDropPlaceholder.width(),y1:i,y2:i+o.innerHeight()})}}_resetHeaderDropZone(){this.layoutManager.tabDropPlaceholder.remove()}toggleMaximise(t){this.isMaximised||this.dock(!1),a.a.prototype.toggleMaximise.call(this,t)}_setupHeaderPosition(){var e=0<=['right','left','bottom'].indexOf(this._header.show)&&this._header.show;if(this.header.element.toggle(!!this._header.show),this._side=e,this._sided=0<=['right','left'].indexOf(this._side),this.element.removeClass('lm_left lm_right lm_bottom'),this._side&&this.element.addClass('lm_'+this._side),this.element.find('.lm_header').length&&this.childElementContainer){var t=0<=['right','bottom'].indexOf(this._side)?'before':'after';this.header.element[t](this.childElementContainer),this.callDownwards('setSize')}}_highlightBodyDropZone(e){var t=this._contentAreaDimensions[e].highlightArea;this.layoutManager.dropTargetIndicator.highlightArea(t),this._dropSegment=e}}o.a=c},function(e){e.exports=function(e){if(e==void 0)throw TypeError('Can\'t call method on  '+e);return e}},function(e,t,n){var o=n(44),i=n(20);e.exports=Object.keys||function(e){return o(e,i)}},function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,t,n){var o=n(45),i=n(14);e.exports=function(e){return o(i(e))}},function(e){var n=Math.ceil;e.exports=function(e){return isNaN(e=+e)?0:(0<e?t:n)(e)}},function(e,t,n){var o=n(50)('keys'),i=n(52);e.exports=function(e){return o[e]||(o[e]=i(e))}},function(e){e.exports=['constructor','hasOwnProperty','isPrototypeOf','propertyIsEnumerable','toLocaleString','toString','valueOf']},function(e,t,n){var o=n(4),i=n(2),a=n(54),s=n(56),r=n(16),l='prototype',c=function(e,t,n){var p,d,m,_=e&c.F,g=e&c.G,u=e&c.S,f=e&c.P,h=e&c.B,y=e&c.W,v=g?i:i[t]||(i[t]={}),b=v[l],k=g?o:u?o[t]:(o[t]||{})[l];for(p in g&&(n=t),n)d=!_&&k&&void 0!==k[p],d&&r(v,p)||(m=d?k[p]:n[p],v[p]=g&&'function'!=typeof k[p]?n[p]:h&&d?a(m,o):y&&k[p]==m?function(e){var t=function(t,n,o){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n);}return new e(t,n,o)}return e.apply(this,arguments)};return t[l]=e[l],t}(m):f&&'function'==typeof m?a(Function.call,m):m,f&&((v.virtual||(v.virtual={}))[p]=m,e&c.R&&b&&!b[p]&&s(b,p,m)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t,n){var o=n(8),i=n(57),a=n(58),s=Object.defineProperty;t.f=n(5)?Object.defineProperty:function(e,t,n){if(o(e),t=a(t,!0),o(n),i)try{return s(e,t,n)}catch(t){}if('get'in n||'set'in n)throw TypeError('Accessors not supported!');return'value'in n&&(e[t]=n.value),e}},function(e,t,n){var o=n(9),i=n(4).document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},function(e,t){'use strict';t.a=class{constructor(e,t){this._reactComponent=null,this._originalComponentWillUpdate=null,this._container=e,this._initialState=t,this._reactClass=this._getReactClass(),this._container.on('open',this._render,this),this._container.on('destroy',this._destroy,this)}_render(){this._reactComponent=ReactDOM.render(this._getReactComponent(),this._container.getElement()[0]),this._originalComponentWillUpdate=this._reactComponent.componentWillUpdate||function(){},this._reactComponent.componentWillUpdate=this._onUpdate.bind(this),this._container.getState()&&this._reactComponent.setState(this._container.getState())}_destroy(){ReactDOM.unmountComponentAtNode(this._container.getElement()[0]),this._container.off('open',this._render,this),this._container.off('destroy',this._destroy,this)}_onUpdate(e,t){this._container.setState(t),this._originalComponentWillUpdate.call(this._reactComponent,e,t)}_getReactClass(){var e,t=this._container._config.component;if(!t)throw new Error('No react component name. type: react-component needs a field `component`');if(e=this._container.layoutManager.getComponent(t),!e)throw new Error('React component "'+t+'" not found. Please register all components with GoldenLayout using `registerComponent(name, component)`');return e}_getReactComponent(){var e={glEventHub:this._container.layoutManager.eventHub,glContainer:this._container},t=$.extend(e,this._container._config.props);return React.createElement(this._reactClass,t)}}},function(e,t,n){'use strict';var o=n(1),i=n(0);class a extends o.b{constructor(e){super(),this._layoutManager=e,this._dontPropagateToParent=null,this._childEventSource=null,this.on(o.a,Object(i.c)(this._onEventFromThis,this)),this._boundOnEventFromChild=Object(i.c)(this._onEventFromChild,this),$(window).on('gl_child_event',this._boundOnEventFromChild)}_onEventFromThis(){var e=Array.prototype.slice.call(arguments);this._layoutManager.isSubWindow&&e[0]!==this._dontPropagateToParent&&this._propagateToParent(e),this._propagateToChildren(e),this._dontPropagateToParent=null,this._childEventSource=null}_$onEventFromParent(e){this._dontPropagateToParent=e[0],this.emit.apply(this,e)}_onEventFromChild(e){this._childEventSource=e.originalEvent.__gl,this.emit.apply(this,e.originalEvent.__glArgs)}_propagateToParent(e){var t,n='gl_child_event';document.createEvent?(t=window.opener.document.createEvent('HTMLEvents'),t.initEvent(n,!0,!0)):(t=window.opener.document.createEventObject(),t.eventType=n),t.eventName=n,t.__glArgs=e,t.__gl=this._layoutManager,document.createEvent?window.opener.dispatchEvent(t):window.opener.fireEvent('on'+t.eventType,t)}_propagateToChildren(e){var t,n;for(n=0;n<this._layoutManager.openPopouts.length;n++)t=this._layoutManager.openPopouts[n].getGlInstance(),t&&t!==this._childEventSource&&t.eventHub._$onEventFromParent(e)}destroy(){$(window).off('gl_child_event',this._boundOnEventFromChild)}}t.a=a},function(e,t){'use strict';t.a=class{constructor(e,t){this.name=e,this.origin=t,this.isPropagationStopped=!1}stopPropagation(){this.isPropagationStopped=!0}}},function(e,t){'use strict';class n extends Error{constructor(e,t){super(),this.name='Configuration Error',this.message=e,this.node=t}}t.a=n},function(e,t,n){'use strict';var o=n(1),a=n(29),i=n(31),s=n(0);class r extends o.b{constructor(e,t){super(),this.layoutManager=e,this.element=$('<div class="lm_header"><ul class="lm_tabs"></ul><ul class="lm_controls"></ul><ul class="lm_tabdropdown_list"></ul></div>'),!0===this.layoutManager.config.settings.selectionEnabled&&(this.element.addClass('lm_selectable'),this.element.on('click touchstart',Object(s.c)(this._onHeaderClick,this))),this.tabsContainer=this.element.find('.lm_tabs'),this.tabDropdownContainer=this.element.find('.lm_tabdropdown_list'),this.tabDropdownContainer.hide(),this.controlsContainer=this.element.find('.lm_controls'),this.parent=t,this.parent.on('resize',this._updateTabSizes,this),this.tabs=[],this.tabsMarkedForRemoval=[],this.activeContentItem=null,this.closeButton=null,this.dockButton=null,this.tabDropdownButton=null,this.hideAdditionalTabsDropdown=Object(s.c)(this._hideAdditionalTabsDropdown,this),$(document).mouseup(this.hideAdditionalTabsDropdown),this._lastVisibleTabIndex=-1,this._tabControlOffset=this.layoutManager.config.settings.tabControlOffset,this._createControls()}createTab(e,t){var n,o;for(o=0;o<this.tabs.length;o++)if(this.tabs[o].contentItem===e)return;return n=new a.a(this,e),0===this.tabs.length?(this.tabs.push(n),void this.tabsContainer.append(n.element)):void(void 0===t&&(t=this.tabs.length),0<t?this.tabs[t-1].element.after(n.element):this.tabs[0].element.before(n.element),this.tabs.splice(t,0,n),this._updateTabSizes())}removeTab(e){for(var t=0;t<this.tabs.length;t++)if(this.tabs[t].contentItem===e)return this.tabs[t]._$destroy(),void this.tabs.splice(t,1);for(t=0;t<this.tabsMarkedForRemoval.length;t++)if(this.tabsMarkedForRemoval[t].contentItem===e)return this.tabsMarkedForRemoval[t]._$destroy(),void this.tabsMarkedForRemoval.splice(t,1);throw new Error('contentItem is not controlled by this header')}hideTab(e){for(var t=0;t<this.tabs.length;t++)if(this.tabs[t].contentItem===e)return this.tabs[t].element.hide(),this.tabsMarkedForRemoval.push(this.tabs[t]),void this.tabs.splice(t,1);throw new Error('contentItem is not controlled by this header')}setActiveContentItem(e){var t,n,o,i;for(t=0;t<this.tabs.length;t++)o=this.tabs[t].contentItem===e,this.tabs[t].setActive(o),!0===o&&(this.activeContentItem=e,this.parent.config.activeItemIndex=t);if(this.layoutManager.config.settings.reorderOnTabMenuClick&&-1!==this._lastVisibleTabIndex&&this.parent.config.activeItemIndex>this._lastVisibleTabIndex){for(i=this.tabs[this.parent.config.activeItemIndex],n=this.parent.config.activeItemIndex;0<n;n--)this.tabs[n]=this.tabs[n-1];this.tabs[0]=i,this.parent.config.activeItemIndex=0}this._updateTabSizes(),this.parent.emitBubblingEvent('stateChanged')}position(e){var t=this.parent._header.show;if(this.parent._docker&&this.parent._docker.docked)throw new Error('Can\'t change header position in docked stack');return t&&!this.parent._side&&(t='top'),void 0!==e&&this.parent._header.show!=e&&(this.parent._header.show=e,this.parent._setupHeaderPosition()),t}_$setClosable(e){return this._canDestroy=e||1<this.tabs.length,this.closeButton&&this._isClosable()&&(this.closeButton.element[e?'show':'hide'](),!0)}_setDockable(e){return this.dockButton&&this.parent._header&&this.parent._header.dock&&(this.dockButton.element.toggle(!!e),!0)}_$destroy(){this.emit('destroy',this);for(var e=0;e<this.tabs.length;e++)this.tabs[e]._$destroy();$(document).off('mouseup',this.hideAdditionalTabsDropdown),this.element.remove()}_getHeaderSetting(e){if(e in this.parent._header)return this.parent._header[e]}_createControls(){var e,t,n,o,a,r,l,c,p;if(p=Object(s.c)(this._showAdditionalTabsDropdown,this),c=this.layoutManager.config.labels.tabDropdown,this.tabDropdownButton=new i.a(this,c,'lm_tabdropdown',p),this.tabDropdownButton.element.hide(),this.parent._header&&this.parent._header.dock){var d=Object(s.c)(this.parent.dock,this.parent);n=this._getHeaderSetting('dock'),this.dockButton=new i.a(this,n,'lm_dock',d)}this._getHeaderSetting('popout')&&(t=Object(s.c)(this._onPopoutClick,this),n=this._getHeaderSetting('popout'),new i.a(this,n,'lm_popout',t)),this._getHeaderSetting('maximise')&&(r=Object(s.c)(this.parent.toggleMaximise,this.parent),o=this._getHeaderSetting('maximise'),a=this._getHeaderSetting('minimise'),l=new i.a(this,o,'lm_maximise',r),this.parent.on('maximised',function(){l.element.attr('title',a)}),this.parent.on('minimised',function(){l.element.attr('title',o)})),this._isClosable()&&(e=Object(s.c)(this.parent.remove,this.parent),n=this._getHeaderSetting('close'),this.closeButton=new i.a(this,n,'lm_close',e))}_showAdditionalTabsDropdown(){this.tabDropdownContainer.show()}_hideAdditionalTabsDropdown(){this.tabDropdownContainer.hide()}_isClosable(){return this.parent.config.isClosable&&this.layoutManager.config.settings.showCloseIcon}_onPopoutClick(){!0===this.layoutManager.config.settings.popoutWholeStack?this.parent.popout():this.activeContentItem.popout()}_onHeaderClick(e){e.target===this.element[0]&&this.parent.select()}_updateTabSizes(e){if(0!==this.tabs.length){this.tabDropdownButton.element.toggle(!0===e);var t=function(e){return e?'width':'height'};this.element.css(t(!this.parent._sided),''),this.element[t(this.parent._sided)](this.layoutManager.config.dimensions.headerHeight);var n,o,i,a,s,r=this.element.outerWidth()-this.controlsContainer.outerWidth()-this._tabControlOffset,l=0,c=0,p=0,d=this.layoutManager.config.settings.tabOverlapAllowance,m=!1,_=this.activeContentItem?this.tabs.indexOf(this.activeContentItem.tab):0,g=this.tabs[_];for(this.parent._sided&&(r=this.element.outerHeight()-this.controlsContainer.outerHeight()-this._tabControlOffset),this._lastVisibleTabIndex=-1,o=0;o<this.tabs.length;o++)if(n=this.tabs[o].element,this.tabsContainer.append(n),s=n.outerWidth()+parseInt(n.css('margin-right'),10),l+=s,c=_<=o?l:l+g.element.outerWidth()+parseInt(g.element.css('margin-right'),10),c>r){if(!!m)o===_&&(n.css({"z-index":'auto',"margin-left":''}),this.tabsContainer.append(n));else if(p=0<_&&_<=o?(c-r)/(o-1):(c-r)/o,p<d){for(i=0;i<=o;i++)a=i!==_&&0!==i?'-'+p+'px':'',this.tabs[i].element.css({"z-index":o-i,"margin-left":a});this._lastVisibleTabIndex=o,this.tabsContainer.append(n)}else m=!0;if(m&&o!==_)if(e)n.css({"z-index":'auto',"margin-left":''}),this.tabDropdownContainer.append(n);else return void this._updateTabSizes(!0)}else this._lastVisibleTabIndex=o,n.css({"z-index":'auto',"margin-left":''}),this.tabsContainer.append(n)}}}t.a=r},function(e,t,n){'use strict';var o=n(7),i=n(30),a=n(0);t.a=class{constructor(e,t){this.header=e,this.contentItem=t,this.element=$('<li class="lm_tab"><i class="lm_left"></i><span class="lm_title"></span><div class="lm_close_tab"></div><i class="lm_right"></i></li>'),this.titleElement=this.element.find('.lm_title'),this.closeElement=this.element.find('.lm_close_tab'),this.closeElement[t.config.isClosable?'show':'hide'](),this.isActive=!1,this.setTitle(t.config.title),this.contentItem.on('titleChanged',this.setTitle,this),this._layoutManager=this.contentItem.layoutManager,!0===this._layoutManager.config.settings.reorderEnabled&&!0===t.config.reorderEnabled&&(this._dragListener=new o.a(this.element),this._dragListener.on('dragStart',this._onDragStart,this),this.contentItem.on('destroy',this._dragListener.destroy,this._dragListener)),this._onTabClickFn=Object(a.c)(this._onTabClick,this),this._onCloseClickFn=Object(a.c)(this._onCloseClick,this),this.element.on('mousedown touchstart',this._onTabClickFn),this.contentItem.config.isClosable?(this.closeElement.on('click touchstart',this._onCloseClickFn),this.closeElement.on('mousedown',this._onCloseMousedown)):this.closeElement.remove(),this.contentItem.tab=this,this.contentItem.emit('tab',this),this.contentItem.layoutManager.emit('tabCreated',this),this.contentItem.isComponent&&(this.contentItem.container.tab=this,this.contentItem.container.emit('tab',this))}setTitle(e){this.element.attr('title',Object(a.k)(e)),this.titleElement.html(e)}setActive(e){e===this.isActive||(this.isActive=e,e?this.element.addClass('lm_active'):this.element.removeClass('lm_active'))}_$destroy(){this.element.off('mousedown touchstart',this._onTabClickFn),this.closeElement.off('click touchstart',this._onCloseClickFn),this._dragListener&&(this.contentItem.off('destroy',this._dragListener.destroy,this._dragListener),this._dragListener.off('dragStart',this._onDragStart),this._dragListener=null),this.element.remove()}_onDragStart(e,t){return this.header._canDestroy?void(!0===this.contentItem.parent.isMaximised&&this.contentItem.parent.toggleMaximise(),new i.a(e,t,this._dragListener,this._layoutManager,this.contentItem,this.header.parent)):null}_onTabClick(e){if(0===e.button||'touchstart'===e.type){var t=this.header.parent.getActiveContentItem();this.contentItem!==t&&this.header.parent.setActiveContentItem(this.contentItem)}else 1===e.button&&this.contentItem.config.isClosable&&this._onCloseClick(e)}_onCloseClick(e){e.stopPropagation();this.header._canDestroy&&this.header.parent.removeChild(this.contentItem)}_onCloseMousedown(e){e.stopPropagation()}}},function(e,t,n){'use strict';var o=n(1),i=n(0);class a extends o.b{constructor(e,t,n,o,a,s){super(),this._dragListener=n,this._layoutManager=o,this._contentItem=a,this._originalParent=s,this._area=null,this._lastValidArea=null,this._dragListener.on('drag',this._onDrag,this),this._dragListener.on('dragStop',this._onDrop,this),this.element=$('<div class="lm_dragProxy"><div class="lm_header"><ul class="lm_tabs"><li class="lm_tab lm_active"><i class="lm_left"></i><span class="lm_title"></span><i class="lm_right"></i></li></ul></div><div class="lm_content"></div></div>'),s&&s._side&&(this._sided=s._sided,this.element.addClass('lm_'+s._side),0<=['right','bottom'].indexOf(s._side)&&this.element.find('.lm_content').after(this.element.find('.lm_header'))),this.element.css({left:e,top:t}),this.element.find('.lm_tab').attr('title',Object(i.k)(this._contentItem.config.title)),this.element.find('.lm_title').html(this._contentItem.config.title),this.childElementContainer=this.element.find('.lm_content'),this.childElementContainer.append(a.element),this._undisplayTree(),this._layoutManager._$calculateItemAreas(),this._setDimensions(),$(document.body).append(this.element);var r=this._layoutManager.container.offset();this._minX=r.left,this._minY=r.top,this._maxX=this._layoutManager.container.width()+this._minX,this._maxY=this._layoutManager.container.height()+this._minY,this._width=this.element.width(),this._height=this.element.height(),this._setDropPosition(e,t)}_onDrag(e,t,n){n=Object(i.e)(n);var o=n.pageX,a=n.pageY,s=o>this._minX&&o<this._maxX&&a>this._minY&&a<this._maxY;(s||!0!==this._layoutManager.config.settings.constrainDragToContainer)&&this._setDropPosition(o,a)}_setDropPosition(e,t){this.element.css({left:e,top:t}),this._area=this._layoutManager._$getArea(e,t),null!==this._area&&(this._lastValidArea=this._area,this._area.contentItem._$highlightDropZone(e,t,this._area))}_onDrop(){this._updateTree(),this._layoutManager.dropTargetIndicator.hide(),null===this._area?null===this._lastValidArea?this._originalParent?this._originalParent.addChild(this._contentItem):this._contentItem._$destroy():this._lastValidArea.contentItem._$onDrop(this._contentItem,this._lastValidArea):this._area.contentItem._$onDrop(this._contentItem,this._area),this.element.remove(),this._layoutManager.emit('itemDropped',this._contentItem)}_undisplayTree(){this._contentItem.parent&&this._contentItem.parent.undisplayChild(this._contentItem)}_updateTree(){this._contentItem.parent&&this._contentItem.parent.removeChild(this._contentItem,!0),this._contentItem._$setParent(this)}_setDimensions(){var e=this._layoutManager.config.dimensions,t=e.dragProxyWidth,n=e.dragProxyHeight;this.element.width(t),this.element.height(n),t-=this._sided?e.headerHeight:0,n-=this._sided?0:e.headerHeight,this.childElementContainer.width(t),this.childElementContainer.height(n),this._contentItem.element.width(t),this._contentItem.element.height(n),this._contentItem.callDownwards('_$show'),this._contentItem.callDownwards('setSize')}}t.a=a},function(e,t){'use strict';t.a=class{constructor(e,t,n,o){this._header=e,this.element=$('<li class="'+n+'" title="'+t+'"></li>'),this._header.on('destroy',this._$destroy,this),this._action=o,this.element.on('click touchstart',this._action),this._header.controlsContainer.append(this.element)}_$destroy(){this.element.off(),this.element.remove()}}},function(e,t,n){'use strict';var o=n(3),i=n(33);class a extends o.a{constructor(e,t,n){super(e,t,n);var o=e.getComponent(this.config.componentName),a=$.extend(!0,{},this.config.componentState||{});a.componentName=this.config.componentName,this.componentName=this.config.componentName,''===this.config.title&&(this.config.title=this.config.componentName),this.isComponent=!0,this.container=new i.a(this.config,this,e),this.instance=new o(this.container,a),this.element=this.container._element}close(){this.parent.removeChild(this)}setSize(){'none'!==this.element.css('display')&&this.container._$setSize(this.element.width(),this.element.height())}_$init(){o.a.prototype._$init.call(this),this.container.emit('open')}_$hide(){this.container.hide(),o.a.prototype._$hide.call(this)}_$show(){this.container.show(),o.a.prototype._$show.call(this)}_$shown(){this.container.shown(),o.a.prototype._$shown.call(this)}_$destroy(){this.container.emit('destroy',this),o.a.prototype._$destroy.call(this)}_$getArea(){return null}}t.a=a},function(e,t,n){'use strict';var o=n(1);class i extends o.b{constructor(e,t,n){super(),this.width=null,this.height=null,this.title=e.componentName,this.parent=t,this.layoutManager=n,this.isHidden=!1,this._config=e,this._element=$('<div class="lm_item_container"><div class="lm_content"></div></div>'),this._contentElement=this._element.find('.lm_content')}getElement(){return this._contentElement}hide(){this.emit('hide'),this.isHidden=!0,this._element.hide()}show(){this.emit('show'),this.isHidden=!1,this._element.show(),(0!=this.height||0!=this.width)&&this.emit('shown')}setSize(e,t){for(var n,o,a,s,r,l,i=this.parent,c=this;!i.isColumn&&!i.isRow;)if(c=i,i=i.parent,i.isRoot)return!1;for(a=i.isColumn?'height':'width',s='height'===a?t:e,n=this[a]*(1/(c.config[a]/100)),o=100*(s/n),r=(c.config[a]-o)/(i.contentItems.length-1),l=0;l<i.contentItems.length;l++)i.contentItems[l]===c?i.contentItems[l].config[a]=o:i.contentItems[l].config[a]+=r;return i.callDownwards('setSize'),!0}close(){this._config.isClosable&&(this.emit('close'),this.parent.close())}getState(){return this._config.componentState}extendState(e){this.setState($.extend(!0,this.getState(),e))}setState(e){this._config.componentState=e,this.parent.emitBubblingEvent('stateChanged')}setTitle(e){this.parent.setTitle(e)}_$setSize(e,t){(e!==this.width||t!==this.height)&&(this.width=e,this.height=t,$.zepto?this._contentElement.width(e):this._contentElement.outerWidth(e),$.zepto?this._contentElement.height(t):this._contentElement.outerHeight(t),this.emit('resize'))}}t.a=i},function(e,n,o){'use strict';var i=o(68),a=o.n(i),s=o(1),r=o(11),l=o(0);class c extends s.b{constructor(e,t,n,o,i){super(),this.isInitialised=!1,this._config=e,this._dimensions=t,this._parentId=n,this._indexInParent=o,this._layoutManager=i,this._popoutWindow=null,this._id=null,this._createWindow()}toConfig(){if(!1===this.isInitialised)throw new Error('Can\'t create config, layout not yet initialised');return{dimensions:{width:this.getGlInstance().width,height:this.getGlInstance().height,left:this._popoutWindow.screenX||this._popoutWindow.screenLeft,top:this._popoutWindow.screenY||this._popoutWindow.screenTop},content:this.getGlInstance().toConfig().content,parentId:this._parentId,indexInParent:this._indexInParent}}getGlInstance(){return this._popoutWindow.__glInstance}getWindow(){return this._popoutWindow}close(){if(this.getGlInstance())this.getGlInstance()._$closeWindow();else try{this.getWindow().close()}catch(t){}}popIn(){var e,t,n=this._indexInParent;this._parentId&&(e=$.extend(!0,{},this.getGlInstance().toConfig()).content[0],t=this._layoutManager.root.getItemsById(this._parentId)[0],!t&&(t=0<this._layoutManager.root.contentItems.length?this._layoutManager.root.contentItems[0]:this._layoutManager.root,n=0)),t.addChild(e,this._indexInParent),this.close()}_createWindow(){var e,n=this._createUrl(),o=t(1e6*Math.random()).toString(36),i=this._serializeWindowOptions({width:this._dimensions.width,height:this._dimensions.height,innerWidth:this._dimensions.width,innerHeight:this._dimensions.height,menubar:'no',toolbar:'no',location:'no',personalbar:'no',resizable:'yes',scrollbars:'no',status:'no'});if(this._popoutWindow=window.open(n,o,i),!this._popoutWindow)if(!0===this._layoutManager.config.settings.blockedPopoutsThrowError){var a=new Error('Popout blocked');throw a.type='popoutBlocked',a}else return;$(this._popoutWindow).on('load',Object(l.c)(this._positionWindow,this)).on('unload beforeunload',Object(l.c)(this._onClose,this)),e=setInterval(Object(l.c)(function(){this._popoutWindow.__glInstance&&this._popoutWindow.__glInstance.isInitialised&&(this._onInitialised(),clearInterval(e))},this),10)}_serializeWindowOptions(e){var t,n=[];for(t in e)n.push(t+'='+e[t]);return n.join(',')}_createUrl(){var e,t={content:this._config},n='gl-window-config-'+Object(l.f)();t=new r.a().minifyConfig(t);try{localStorage.setItem(n,a()(t))}catch(t){throw new Error('Error while writing to localStorage '+t.toString())}return e=document.location.href.split('?'),1===e.length?e[0]+'?gl-window='+n:document.location.href+'&gl-window='+n}_positionWindow(){this._popoutWindow.moveTo(this._dimensions.left,this._dimensions.top),this._popoutWindow.focus()}_onInitialised(){this.isInitialised=!0,this.getGlInstance().on('popIn',this.popIn,this),this.emit('initialised')}_onClose(){setTimeout(Object(l.c)(this.emit,this,['closed']),50)}}n.a=c},function(e,t,n){'use strict';Object.defineProperty(t,'__esModule',{value:!0});var o=n(36),i=n.n(o),a=n(37),s=n.n(a),r=n(38),l=n.n(r),c=n(39);n.d(t,'default',function(){return c.a});var p=n(33);n.d(t,'ItemContainer',function(){return p.a});var d=n(34);n.d(t,'BrowserPopout',function(){return d.a});var m=n(28);n.d(t,'Header',function(){return m.a});var _=n(31);n.d(t,'HeaderButton',function(){return _.a});var g=n(29);n.d(t,'Tab',function(){return g.a});var u=n(32);n.d(t,'Component',function(){return u.a});var f=n(12);n.d(t,'Root',function(){return f.a});var h=n(6);n.d(t,'RowOrColumn',function(){return h.a});var y=n(13);n.d(t,'Stack',function(){return y.a});var v=n(26);n.d(t,'BubblingEvent',function(){return v.a});var b=n(11);n.d(t,'ConfigMinifier',function(){return b.a});var k=n(7);n.d(t,'DragListener',function(){return k.a});var x=n(1);n.d(t,'EventEmitter',function(){return x.b});var D=n(25);n.d(t,'EventHub',function(){return D.a});var w=n(24);n.d(t,'ReactComponentHandler',function(){return w.a}),{}.ES6&&(n(74),n(77))},function(){},function(){},function(){},function(e,o,i){'use strict';var a=i(1),s=i(24),r=i(11),l=i(25),c=i(12),p=i(6),d=i(13),m=i(32),_=i(3),g=i(34),u=i(70),f=i(71),h=i(72),y=i(27),v=i(73),b=i(0);class k extends a.b{constructor(e,t){if(!$){var n='jQuery is missing as dependency for GoldenLayout. ';throw n+='Please either expose $ on GoldenLayout\'s scope (e.g. window) or add "jquery" to ',n+='your paths when using RequireJS/AMD',new Error(n)}super(),this.isInitialised=!1,this._isFullPage=!1,this._resizeTimeoutId=null,this._components={"lm-react-component":s.a},this._itemAreas=[],this._resizeFunction=Object(b.c)(this._onResize,this),this._unloadFunction=Object(b.c)(this._onUnload,this),this._maximisedItem=null,this._maximisePlaceholder=$('<div class="lm_maximise_place"></div>'),this._creationTimeoutPassed=!1,this._subWindowsCreated=!1,this._dragSources=[],this._updatingColumnsResponsive=!1,this._firstLoad=!0,this.width=null,this.height=null,this.root=null,this.openPopouts=[],this.selectedItem=null,this.isSubWindow=!1,this.eventHub=new l.a(this),this.config=this._createConfig(e),this.container=t,this.dropTargetIndicator=null,this.transitionIndicator=null,this.tabDropPlaceholder=$('<div class="lm_drop_tab_placeholder"></div>'),!0===this.isSubWindow&&$('body').css('visibility','hidden'),this._typeToItem={column:Object(b.c)(p.a,this,[!0]),row:Object(b.c)(p.a,this,[!1]),stack:d.a,component:m.a}}minifyConfig(e){return new r.a().minifyConfig(e)}unminifyConfig(e){return new r.a().unminifyConfig(e)}registerComponent(e,t){if('function'!=typeof t)throw new Error('Please register a constructor function');if(void 0!==this._components[e])throw new Error('Component '+e+' is already registered');this._components[e]=t}toConfig(e){var t,n,o;if(!1===this.isInitialised)throw new Error('Can\'t create config, layout not yet initialised');if(e&&!(e instanceof _.a))throw new Error('Root must be a ContentItem');for(t={settings:Object(b.b)({},this.config.settings),dimensions:Object(b.b)({},this.config.dimensions),labels:Object(b.b)({},this.config.labels)},t.content=[],n=function(e,t){var o,a;for(o in t.config)'content'!==o&&(e[o]=t.config[o]);if(t.contentItems.length)for(e.content=[],a=0;a<t.contentItems.length;a++)e.content[a]={},n(e.content[a],t.contentItems[a])},e?n(t,{contentItems:[e]}):n(t,this.root),this._$reconcilePopoutWindows(),t.openPopouts=[],o=0;o<this.openPopouts.length;o++)t.openPopouts.push(this.openPopouts[o].toConfig());return t.maximisedItemId=this._maximisedItem?'__glMaximised':null,t}getComponent(e){if(this._components[e]===void 0)throw new y.a('Unknown component "'+e+'"');return this._components[e]}init(){return!1===this._subWindowsCreated&&(this._createSubWindows(),this._subWindowsCreated=!0),'loading'===document.readyState||null===document.body?void $(document).ready(Object(b.c)(this.init,this)):!0===this.isSubWindow&&!1===this._creationTimeoutPassed?(setTimeout(Object(b.c)(this.init,this),7),void(this._creationTimeoutPassed=!0)):void(!0===this.isSubWindow&&this._adjustToWindowMode(),this._setContainer(),this.dropTargetIndicator=new f.a(this.container),this.transitionIndicator=new h.a,this.updateSize(),this._create(this.config),this._bindEvents(),this.isInitialised=!0,this._adjustColumnsResponsive(),this.emit('initialised'))}updateSize(e,t){2===arguments.length?(this.width=e,this.height=t):(this.width=this.container.width(),this.height=this.container.height()),!0===this.isInitialised&&(this.root.callDownwards('setSize',[this.width,this.height]),this._maximisedItem&&(this._maximisedItem.element.width(this.container.width()),this._maximisedItem.element.height(this.container.height()),this._maximisedItem.callDownwards('setSize')),this._adjustColumnsResponsive())}destroy(){!1===this.isInitialised||(this._onUnload(),$(window).off('resize',this._resizeFunction),$(window).off('unload beforeunload',this._unloadFunction),this.root.callDownwards('_$destroy',[],!0),this.root.contentItems=[],this.tabDropPlaceholder.remove(),this.dropTargetIndicator.destroy(),this.transitionIndicator.destroy(),this.eventHub.destroy(),this._dragSources.forEach(function(e){e._dragListener.destroy(),e._element=null,e._itemConfig=null,e._dragListener=null}),this._dragSources=[])}createContentItem(e,t){var n,o;if('string'!=typeof e.type)throw new y.a('Missing parameter \'type\'',e);if('react-component'===e.type&&(e.type='component',e.componentName='lm-react-component'),!this._typeToItem[e.type])throw n='Unknown type \''+e.type+'\'. Valid types are '+Object(b.j)(this._typeToItem).join(','),new y.a(n);return'component'!==e.type||t instanceof d.a||!t||!0===this.isSubWindow&&t instanceof c.a||(e={type:'stack',width:e.width,height:e.height,content:[e]}),o=new this._typeToItem[e.type](this,e,t),o}createPopout(e,t,n,o){var i,a,s,r,l,c,p=e,d=e instanceof _.a,m=this;if(n=n||null,d){for(p=this.toConfig(e).content,n=Object(b.f)(),r=e.parent,l=e;1===r.contentItems.length&&!r.isRoot;)r=r.parent,l=l.parent;r.addId(n),isNaN(o)&&(o=Object(b.g)(l,r.contentItems))}else p instanceof Array||(p=[p]);return!t&&d&&(i=window.screenX||window.screenLeft,a=window.screenY||window.screenTop,s=e.element.offset(),t={left:i+s.left,top:a+s.top,width:e.element.width(),height:e.element.height()}),t||d||(t={left:window.screenX||window.screenLeft+20,top:window.screenY||window.screenTop+20,width:500,height:309}),d&&e.remove(),c=new g.a(p,t,n,o,this),c.on('initialised',function(){m.emit('windowOpened',c)}),c.on('closed',function(){m._$reconcilePopoutWindows()}),this.openPopouts.push(c),c}createDragSource(e,t){this.config.settings.constrainDragToContainer=!1;var n=new u.a($(e),t,this);return this._dragSources.push(n),n}selectItem(e,t){if(!0!==this.config.settings.selectionEnabled)throw new Error('Please set selectionEnabled to true to use this feature');e===this.selectedItem||(null!==this.selectedItem&&this.selectedItem.deselect(),e&&!0!==t&&e.select(),this.selectedItem=e,this.emit('selectionChanged',e))}_$maximiseItem(e){null!==this._maximisedItem&&this._$minimiseItem(this._maximisedItem),this._maximisedItem=e,this._maximisedItem.addId('__glMaximised'),e.element.addClass('lm_maximised'),e.element.after(this._maximisePlaceholder),this.root.element.prepend(e.element),e.element.width(this.container.width()),e.element.height(this.container.height()),e.callDownwards('setSize'),this._maximisedItem.emit('maximised'),this.emit('stateChanged')}_$minimiseItem(e){e.element.removeClass('lm_maximised'),e.removeId('__glMaximised'),this._maximisePlaceholder.after(e.element),this._maximisePlaceholder.remove(),e.parent.callDownwards('setSize'),this._maximisedItem=null,e.emit('minimised'),this.emit('stateChanged')}_$closeWindow(){window.setTimeout(function(){window.close()},1)}_$getArea(e,t){var n,o,i=Infinity,a=null;for(n=0;n<this._itemAreas.length;n++)o=this._itemAreas[n],e>o.x1&&e<o.x2&&t>o.y1&&t<o.y2&&i>o.surface&&(i=o.surface,a=o);return a}_$createRootItemAreas(){var e=50,t={y2:0,x2:0,y1:'y2',x1:'x2'};for(var n in t){var o=this.root._$getArea();o.side=n,o[n]=t[n]?o[t[n]]-e:e,o.surface=(o.x2-o.x1)*(o.y2-o.y1),this._itemAreas.push(o)}}_$calculateItemAreas(){var e,t,n=this._getAllContentItems();if(this._itemAreas=[],1===n.length)return void this._itemAreas.push(this.root._$getArea());for(this._$createRootItemAreas(),e=0;e<n.length;e++)if(n[e].isStack)if(t=n[e]._$getArea(),null===t)continue;else if(t instanceof Array)this._itemAreas=this._itemAreas.concat(t);else{this._itemAreas.push(t);var o={};Object(b.b)(o,t),Object(b.b)(o,t.contentItem._contentAreaDimensions.header.highlightArea),o.surface=(o.x2-o.x1)*(o.y2-o.y1),this._itemAreas.push(o)}}_$normalizeContentItem(e,t){if(!e)throw new Error('No content item defined');if(Object(b.h)(e)&&(e=e()),e instanceof _.a)return e;if($.isPlainObject(e)&&e.type){var n=this.createContentItem(e,t);return n.callDownwards('_$init'),n}throw new Error('Invalid contentItem')}_$reconcilePopoutWindows(){var e,t=[];for(e=0;e<this.openPopouts.length;e++)!1===this.openPopouts[e].getWindow().closed?t.push(this.openPopouts[e]):this.emit('windowClosed',this.openPopouts[e]);this.openPopouts.length!==t.length&&(this.emit('stateChanged'),this.openPopouts=t)}_getAllContentItems(){var e=[],t=function(n){if(e.push(n),n.contentItems instanceof Array)for(var o=0;o<n.contentItems.length;o++)t(n.contentItems[o])};return t(this.root),e}_bindEvents(){this._isFullPage&&$(window).resize(this._resizeFunction),$(window).on('unload beforeunload',this._unloadFunction)}_onResize(){clearTimeout(this._resizeTimeoutId),this._resizeTimeoutId=setTimeout(Object(b.c)(this.updateSize,this),100)}_createConfig(e){var t=Object(b.d)('gl-window');t&&(this.isSubWindow=!0,e=localStorage.getItem(t),e=JSON.parse(e),e=new r.a().unminifyConfig(e),localStorage.removeItem(t)),e=$.extend(!0,{},v.a,e);var n=function(e){for(var t in e)'props'!=t&&'object'==typeof e[t]?n(e[t]):'type'==t&&'react-component'===e[t]&&(e.type='component',e.componentName='lm-react-component')};return n(e),!1===e.settings.hasHeaders&&(e.dimensions.headerHeight=0),e}_adjustToWindowMode(){var e=$('<div class="lm_popin" title="'+this.config.labels.popin+'"><div class="lm_icon"></div><div class="lm_bg"></div></div>');e.click(Object(b.c)(function(){this.emit('popIn')},this)),document.title=Object(b.k)(this.config.content[0].title),$('head').append($('body link, body style, template, .gl_keep')),this.container=$('body').html('').css('visibility','visible').append(e);document.body.offsetHeight;window.__glInstance=this}_createSubWindows(){var e,t;for(e=0;e<this.config.openPopouts.length;e++)t=this.config.openPopouts[e],this.createPopout(t.content,t.dimensions,t.parentId,t.indexInParent)}_setContainer(){var e=$(this.container||'body');if(0===e.length)throw new Error('GoldenLayout container not found');if(1<e.length)throw new Error('GoldenLayout more than one container element specified');e[0]===document.body&&(this._isFullPage=!0,$('html, body').css({height:'100%',margin:0,padding:0,overflow:'hidden'})),this.container=e}_create(e){var t;if(!(e.content instanceof Array))throw t=void 0===e.content?'Missing setting \'content\' on top level of configuration':'Configuration parameter \'content\' must be an array',new y.a(t,e);if(1<e.content.length)throw t='Top level content can\'t contain more then one element.',new y.a(t,e);this.root=new c.a(this,{content:e.content},this.container),this.root.callDownwards('_$init'),'__glMaximised'===e.maximisedItemId&&this.root.getItemsById(e.maximisedItemId)[0].toggleMaximise()}_onUnload(){if(!0===this.config.settings.closePopoutsOnUnload)for(var e=0;e<this.openPopouts.length;e++)this.openPopouts[e].close()}_adjustColumnsResponsive(){if(!this._useResponsiveLayout()||this._updatingColumnsResponsive||!this.config.dimensions||!this.config.dimensions.minItemWidth||0===this.root.contentItems.length||!this.root.contentItems[0].isRow)return void(this._firstLoad=!1);this._firstLoad=!1;var e=this.root.contentItems[0].contentItems.length;if(!(1>=e)){var o=this.config.dimensions.minItemWidth;if(!(e*o<=this.width)){this._updatingColumnsResponsive=!0;for(var a,s=n(t(this.width/o),1),r=this.root.contentItems[0],l=this._findAllStackContainers()[0],c=0;c<e-s;c++)a=r.contentItems[r.contentItems.length-1],this._addChildContentItemsToContainer(l,a);this._updatingColumnsResponsive=!1}}}_useResponsiveLayout(){return this.config.settings&&('always'==this.config.settings.responsiveMode||'onload'==this.config.settings.responsiveMode&&this._firstLoad)}_addChildContentItemsToContainer(e,t){'stack'===t.type?t.contentItems.forEach(function(n){e.addChild(n),t.removeChild(n,!0)}):t.contentItems.forEach(Object(b.c)(function(t){this._addChildContentItemsToContainer(e,t)},this))}_findAllStackContainers(){var e=[];return this._findAllStackContainersRecursive(e,this.root),e}_findAllStackContainersRecursive(e,t){t.contentItems.forEach(Object(b.c)(function(t){'stack'==t.type?e.push(t):!t.isComponent&&this._findAllStackContainersRecursive(e,t)},this))}}o.a=k},function(e,t,n){e.exports={default:n(41),__esModule:!0}},function(e,t,n){n(42),e.exports=n(2).Object.keys},function(e,t,n){var o=n(43),i=n(15);n(53)('keys',function(){return function(e){return i(o(e))}})},function(e,t,n){var o=n(14);e.exports=function(e){return Object(o(e))}},function(e,t,n){var o=n(16),a=n(17),s=n(47)(!1),i=n(19)('IE_PROTO');e.exports=function(e,t){var n,r=a(e),l=0,c=[];for(n in r)n!=i&&o(r,n)&&c.push(n);for(;t.length>l;)o(r,n=t[l++])&&(~s(c,n)||c.push(n));return c}},function(e,t,n){var o=n(46);e.exports=Object('z').propertyIsEnumerable(0)?Object:function(e){return'String'==o(e)?e.split(''):Object(e)}},function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,t,n){var o=n(17),i=n(48),a=n(49);e.exports=function(e){return function(t,n,s){var r,l=o(t),c=i(l.length),p=a(s,c);if(e&&n!=n){for(;c>p;)if(r=l[p++],r!=r)return!0;}else for(;c>p;p++)if((e||p in l)&&l[p]===n)return e||p||0;return!e&&-1}}},function(t,n,o){var i=o(18);t.exports=function(t){return 0<t?e(i(t),9007199254740991):0}},function(t,o,i){var a=i(18);t.exports=function(t,o){return t=a(t),0>t?n(t+o,0):e(t,o)}},function(e,t,n){var o=n(2),i=n(4),a='__core-js_shared__',s=i[a]||(i[a]={});(e.exports=function(e,t){return s[e]||(s[e]=t===void 0?{}:t)})('versions',[]).push({version:o.version,mode:n(51)?'pure':'global',copyright:'\xA9 2018 Denis Pushkarev (zloirock.ru)'})},function(e){e.exports=!0},function(e){var t=0,n=Math.random();e.exports=function(e){return'Symbol('.concat(e===void 0?'':e,')_',(++t+n).toString(36))}},function(e,t,n){var o=n(21),i=n(2),a=n(10);e.exports=function(e,t){var n=(i.Object||{})[e]||Object[e],s={};s[e]=t(n),o(o.S+o.F*a(function(){n(1)}),'Object',s)}},function(e,t,n){var o=n(55);e.exports=function(e,t,n){return(o(e),void 0===t)?e:1===n?function(n){return e.call(t,n)}:2===n?function(n,o){return e.call(t,n,o)}:3===n?function(n,o,i){return e.call(t,n,o,i)}:function(){return e.apply(t,arguments)}}},function(e){e.exports=function(e){if('function'!=typeof e)throw TypeError(e+' is not a function!');return e}},function(e,t,n){var o=n(22),i=n(59);e.exports=n(5)?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){e.exports=!n(5)&&!n(10)(function(){return 7!=Object.defineProperty(n(23)('div'),'a',{get:function(){return 7}}).a})},function(e,t,n){var o=n(9);e.exports=function(e,t){if(!o(e))return e;var n,i;if(t&&'function'==typeof(n=e.toString)&&!o(i=n.call(e)))return i;if('function'==typeof(n=e.valueOf)&&!o(i=n.call(e)))return i;if(!t&&'function'==typeof(n=e.toString)&&!o(i=n.call(e)))return i;throw TypeError('Can\'t convert object to primitive value')}},function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){e.exports={default:n(61),__esModule:!0}},function(e,t,n){n(62);var o=n(2).Object;e.exports=function(e,t){return o.create(e,t)}},function(e,t,n){var o=n(21);o(o.S,'Object',{create:n(63)})},function(e,t,n){var o=n(8),i=n(64),a=n(20),s=n(19)('IE_PROTO'),r=function(){},l='prototype',c=function(){var e,t=n(23)('iframe'),o=a.length,i='<',s='>';for(t.style.display='none',n(65).appendChild(t),t.src='javascript:',e=t.contentWindow.document,e.open(),e.write(i+'script'+s+'document.F=Object'+i+'/script'+s),e.close(),c=e.F;o--;)delete c[l][a[o]];return c()};e.exports=Object.create||function(e,t){var n;return null===e?n=c():(r[l]=o(e),n=new r,r[l]=null,n[s]=e),void 0===t?n:i(n,t)}},function(e,t,n){var o=n(22),a=n(8),s=n(15);e.exports=n(5)?Object.defineProperties:function(e,t){a(e);for(var n,r=s(t),l=r.length,c=0;l>c;)o.f(e,n=r[c++],t[n]);return e}},function(e,t,n){var o=n(4).document;e.exports=o&&o.documentElement},function(e,t){'use strict';t.a={isClosable:!0,reorderEnabled:!0,title:''}},function(e,t,n){'use strict';var o=n(7);t.a=class{constructor(e,t,n){this._isVertical=e,this._size=t,this._grabSize=n<t?t:n,this.element=this._createElement(),this._dragListener=new o.a(this.element)}on(e,t,n){this._dragListener.on(e,t,n)}_$destroy(){this.element.remove()}_createElement(){var e=$('<div class="lm_drag_handle"></div>'),t=$('<div class="lm_splitter"></div>');t.append(e);var n=this._grabSize-this._size,o=n/2;return this._isVertical?(e.css('top',-o),e.css('height',this._size+n),t.addClass('lm_vertical'),t.height(this._size)):(e.css('left',-o),e.css('width',this._size+n),t.addClass('lm_horizontal'),t.width(this._size)),t}}},function(e,t,n){e.exports={default:n(69),__esModule:!0}},function(e,t,n){var o=n(2),i=o.JSON||(o.JSON={stringify:JSON.stringify});e.exports=function(){return i.stringify.apply(i,arguments)}},function(e,t,n){'use strict';var o=n(7),i=n(30),a=n(0);t.a=class{constructor(e,t,n){this._element=e,this._itemConfig=t,this._layoutManager=n,this._dragListener=null,this._createDragListener()}_createDragListener(){null!==this._dragListener&&this._dragListener.destroy(),this._dragListener=new o.a(this._element),this._dragListener.on('dragStart',this._onDragStart,this),this._dragListener.on('dragStop',this._createDragListener,this)}_onDragStart(e,t){var n=this._itemConfig;Object(a.h)(n)&&(n=n());var o=this._layoutManager._$normalizeContentItem($.extend(!0,{},n)),s=new i.a(e,t,this._dragListener,this._layoutManager,o,null);this._layoutManager.transitionIndicator.transitionElements(this._element,s.element)}}},function(e,t){'use strict';t.a=class{constructor(){this.element=$('<div class="lm_dropTargetIndicator"><div class="lm_inner"></div></div>'),$(document.body).append(this.element)}destroy(){this.element.remove()}highlight(e,t,n,o){this.highlightArea({x1:e,y1:t,x2:n,y2:o})}highlightArea(e){this.element.css({left:e.x1,top:e.y1,width:e.x2-e.x1,height:e.y2-e.y1}).show()}hide(){this.element.hide()}}},function(e,t,n){'use strict';var o=n(0);t.a=class{constructor(){this._element=$('<div class="lm_transition_indicator"></div>'),$(document.body).append(this._element),this._toElement=null,this._fromDimensions=null,this._totalAnimationDuration=200,this._animationStartTime=null}destroy(){this._element.remove()}transitionElements(){}_nextAnimationFrame(){var e,t=this._measure(this._toElement),n=(Object(o.i)()-this._animationStartTime)/this._totalAnimationDuration,i={};if(1<=n)return void this._element.hide();for(e in t.opacity=0,this._fromDimensions)i[e]=this._fromDimensions[e]+(t[e]-this._fromDimensions[e])*n;this._element.css(i),Object(o.a)(Object(o.c)(this._nextAnimationFrame,this))}_measure(e){var t=e.offset();return{left:t.left,top:t.top,width:e.outerWidth(),height:e.outerHeight()}}}},function(e,t){'use strict';t.a={openPopouts:[],settings:{hasHeaders:!0,constrainDragToContainer:!0,reorderEnabled:!0,selectionEnabled:!1,popoutWholeStack:!1,blockedPopoutsThrowError:!0,closePopoutsOnUnload:!0,showPopoutIcon:!0,showMaximiseIcon:!0,showCloseIcon:!0,responsiveMode:'onload',tabOverlapAllowance:0,reorderOnTabMenuClick:!0,tabControlOffset:10},dimensions:{borderWidth:5,borderGrabWidth:15,minItemHeight:10,minItemWidth:10,headerHeight:20,dragProxyWidth:300,dragProxyHeight:200},labels:{close:'close',maximise:'maximise',minimise:'minimise',popout:'open in new window',popin:'pop in',tabDropdown:'additional tabs'}}},function(e,t,n){n(75)(n(76))},function(e){e.exports=function(e){function t(e){'undefined'!=typeof console&&(console.error||console.log)('[Script Loader]',e)}function n(){return'undefined'!=typeof attachEvent&&'undefined'==typeof addEventListener}try{'undefined'!=typeof execScript&&n()?execScript(e):'undefined'==typeof eval?t('EvalError: No eval function available'):eval.call(null,e)}catch(e){t(e)}}},function(e){e.exports='/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */\n(function(global, factory) {\n  if (typeof define === \'function\' && define.amd)\n    define(function() { return factory(global) })\n  else\n    factory(global)\n}(this, function(window) {\n  var Zepto = (function() {\n  var undefined, key, $, classList, emptyArray = [], concat = emptyArray.concat, filter = emptyArray.filter, slice = emptyArray.slice,\n    document = window.document,\n    elementDisplay = {}, classCache = {},\n    cssNumber = { \'column-count\': 1, \'columns\': 1, \'font-weight\': 1, \'line-height\': 1,\'opacity\': 1, \'z-index\': 1, \'zoom\': 1 },\n    fragmentRE = /^\\s*<(\\w+|!)[^>]*>/,\n    singleTagRE = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n    tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n    rootNodeRE = /^(?:body|html)$/i,\n    capitalRE = /([A-Z])/g,\n\n    // special attributes that should be get/set via method calls\n    methodAttributes = [\'val\', \'css\', \'html\', \'text\', \'data\', \'width\', \'height\', \'offset\'],\n\n    adjacencyOperators = [ \'after\', \'prepend\', \'before\', \'append\' ],\n    table = document.createElement(\'table\'),\n    tableRow = document.createElement(\'tr\'),\n    containers = {\n      \'tr\': document.createElement(\'tbody\'),\n      \'tbody\': table, \'thead\': table, \'tfoot\': table,\n      \'td\': tableRow, \'th\': tableRow,\n      \'*\': document.createElement(\'div\')\n    },\n    readyRE = /complete|loaded|interactive/,\n    simpleSelectorRE = /^[\\w-]*$/,\n    class2type = {},\n    toString = class2type.toString,\n    zepto = {},\n    camelize, uniq,\n    tempParent = document.createElement(\'div\'),\n    propMap = {\n      \'tabindex\': \'tabIndex\',\n      \'readonly\': \'readOnly\',\n      \'for\': \'htmlFor\',\n      \'class\': \'className\',\n      \'maxlength\': \'maxLength\',\n      \'cellspacing\': \'cellSpacing\',\n      \'cellpadding\': \'cellPadding\',\n      \'rowspan\': \'rowSpan\',\n      \'colspan\': \'colSpan\',\n      \'usemap\': \'useMap\',\n      \'frameborder\': \'frameBorder\',\n      \'contenteditable\': \'contentEditable\'\n    },\n    isArray = Array.isArray ||\n      function(object){ return object instanceof Array }\n\n  zepto.matches = function(element, selector) {\n    if (!selector || !element || element.nodeType !== 1) return false\n    var matchesSelector = element.matches || element.webkitMatchesSelector ||\n                          element.mozMatchesSelector || element.oMatchesSelector ||\n                          element.matchesSelector\n    if (matchesSelector) return matchesSelector.call(element, selector)\n    // fall back to performing a selector:\n    var match, parent = element.parentNode, temp = !parent\n    if (temp) (parent = tempParent).appendChild(element)\n    match = ~zepto.qsa(parent, selector).indexOf(element)\n    temp && tempParent.removeChild(element)\n    return match\n  }\n\n  function type(obj) {\n    return obj == null ? String(obj) :\n      class2type[toString.call(obj)] || "object"\n  }\n\n  function isFunction(value) { return type(value) == "function" }\n  function isWindow(obj)     { return obj != null && obj == obj.window }\n  function isDocument(obj)   { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }\n  function isObject(obj)     { return type(obj) == "object" }\n  function isPlainObject(obj) {\n    return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype\n  }\n\n  function likeArray(obj) {\n    var length = !!obj && \'length\' in obj && obj.length,\n      type = $.type(obj)\n\n    return \'function\' != type && !isWindow(obj) && (\n      \'array\' == type || length === 0 ||\n        (typeof length == \'number\' && length > 0 && (length - 1) in obj)\n    )\n  }\n\n  function compact(array) { return filter.call(array, function(item){ return item != null }) }\n  function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }\n  camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : \'\' }) }\n  function dasherize(str) {\n    return str.replace(/::/g, \'/\')\n           .replace(/([A-Z]+)([A-Z][a-z])/g, \'$1_$2\')\n           .replace(/([a-z\\d])([A-Z])/g, \'$1_$2\')\n           .replace(/_/g, \'-\')\n           .toLowerCase()\n  }\n  uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }\n\n  function classRE(name) {\n    return name in classCache ?\n      classCache[name] : (classCache[name] = new RegExp(\'(^|\\\\s)\' + name + \'(\\\\s|$)\'))\n  }\n\n  function maybeAddPx(name, value) {\n    return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value\n  }\n\n  function defaultDisplay(nodeName) {\n    var element, display\n    if (!elementDisplay[nodeName]) {\n      element = document.createElement(nodeName)\n      document.body.appendChild(element)\n      display = getComputedStyle(element, \'\').getPropertyValue("display")\n      element.parentNode.removeChild(element)\n      display == "none" && (display = "block")\n      elementDisplay[nodeName] = display\n    }\n    return elementDisplay[nodeName]\n  }\n\n  function children(element) {\n    return \'children\' in element ?\n      slice.call(element.children) :\n      $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })\n  }\n\n  function Z(dom, selector) {\n    var i, len = dom ? dom.length : 0\n    for (i = 0; i < len; i++) this[i] = dom[i]\n    this.length = len\n    this.selector = selector || \'\'\n  }\n\n  // `$.zepto.fragment` takes a html string and an optional tag name\n  // to generate DOM nodes from the given html string.\n  // The generated DOM nodes are returned as an array.\n  // This function can be overridden in plugins for example to make\n  // it compatible with browsers that don\'t support the DOM fully.\n  zepto.fragment = function(html, name, properties) {\n    var dom, nodes, container\n\n    // A special case optimization for a single tag\n    if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))\n\n    if (!dom) {\n      if (html.replace) html = html.replace(tagExpanderRE, "<$1></$2>")\n      if (name === undefined) name = fragmentRE.test(html) && RegExp.$1\n      if (!(name in containers)) name = \'*\'\n\n      container = containers[name]\n      container.innerHTML = \'\' + html\n      dom = $.each(slice.call(container.childNodes), function(){\n        container.removeChild(this)\n      })\n    }\n\n    if (isPlainObject(properties)) {\n      nodes = $(dom)\n      $.each(properties, function(key, value) {\n        if (methodAttributes.indexOf(key) > -1) nodes[key](value)\n        else nodes.attr(key, value)\n      })\n    }\n\n    return dom\n  }\n\n  // `$.zepto.Z` swaps out the prototype of the given `dom` array\n  // of nodes with `$.fn` and thus supplying all the Zepto functions\n  // to the array. This method can be overridden in plugins.\n  zepto.Z = function(dom, selector) {\n    return new Z(dom, selector)\n  }\n\n  // `$.zepto.isZ` should return `true` if the given object is a Zepto\n  // collection. This method can be overridden in plugins.\n  zepto.isZ = function(object) {\n    return object instanceof zepto.Z\n  }\n\n  // `$.zepto.init` is Zepto\'s counterpart to jQuery\'s `$.fn.init` and\n  // takes a CSS selector and an optional context (and handles various\n  // special cases).\n  // This method can be overridden in plugins.\n  zepto.init = function(selector, context) {\n    var dom\n    // If nothing given, return an empty Zepto collection\n    if (!selector) return zepto.Z()\n    // Optimize for string selectors\n    else if (typeof selector == \'string\') {\n      selector = selector.trim()\n      // If it\'s a html fragment, create nodes from it\n      // Note: In both Chrome 21 and Firefox 15, DOM error 12\n      // is thrown if the fragment doesn\'t begin with <\n      if (selector[0] == \'<\' && fragmentRE.test(selector))\n        dom = zepto.fragment(selector, RegExp.$1, context), selector = null\n      // If there\'s a context, create a collection on that context first, and select\n      // nodes from there\n      else if (context !== undefined) return $(context).find(selector)\n      // If it\'s a CSS selector, use it to select nodes.\n      else dom = zepto.qsa(document, selector)\n    }\n    // If a function is given, call it when the DOM is ready\n    else if (isFunction(selector)) return $(document).ready(selector)\n    // If a Zepto collection is given, just return it\n    else if (zepto.isZ(selector)) return selector\n    else {\n      // normalize array if an array of nodes is given\n      if (isArray(selector)) dom = compact(selector)\n      // Wrap DOM nodes.\n      else if (isObject(selector))\n        dom = [selector], selector = null\n      // If it\'s a html fragment, create nodes from it\n      else if (fragmentRE.test(selector))\n        dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null\n      // If there\'s a context, create a collection on that context first, and select\n      // nodes from there\n      else if (context !== undefined) return $(context).find(selector)\n      // And last but no least, if it\'s a CSS selector, use it to select nodes.\n      else dom = zepto.qsa(document, selector)\n    }\n    // create a new Zepto collection from the nodes found\n    return zepto.Z(dom, selector)\n  }\n\n  // `$` will be the base `Zepto` object. When calling this\n  // function just call `$.zepto.init, which makes the implementation\n  // details of selecting nodes and creating Zepto collections\n  // patchable in plugins.\n  $ = function(selector, context){\n    return zepto.init(selector, context)\n  }\n\n  function extend(target, source, deep) {\n    for (key in source)\n      if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n        if (isPlainObject(source[key]) && !isPlainObject(target[key]))\n          target[key] = {}\n        if (isArray(source[key]) && !isArray(target[key]))\n          target[key] = []\n        extend(target[key], source[key], deep)\n      }\n      else if (source[key] !== undefined) target[key] = source[key]\n  }\n\n  // Copy all but undefined properties from one or more\n  // objects to the `target` object.\n  $.extend = function(target){\n    var deep, args = slice.call(arguments, 1)\n    if (typeof target == \'boolean\') {\n      deep = target\n      target = args.shift()\n    }\n    args.forEach(function(arg){ extend(target, arg, deep) })\n    return target\n  }\n\n  // `$.zepto.qsa` is Zepto\'s CSS selector implementation which\n  // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\n  // This method can be overridden in plugins.\n  zepto.qsa = function(element, selector){\n    var found,\n        maybeID = selector[0] == \'#\',\n        maybeClass = !maybeID && selector[0] == \'.\',\n        nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked\n        isSimple = simpleSelectorRE.test(nameOnly)\n    return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn\'t have getElementById\n      ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :\n      (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :\n      slice.call(\n        isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn\'t have getElementsByClassName/TagName\n          maybeClass ? element.getElementsByClassName(nameOnly) : // If it\'s simple, it could be a class\n          element.getElementsByTagName(selector) : // Or a tag\n          element.querySelectorAll(selector) // Or it\'s not simple, and we need to query all\n      )\n  }\n\n  function filtered(nodes, selector) {\n    return selector == null ? $(nodes) : $(nodes).filter(selector)\n  }\n\n  $.contains = document.documentElement.contains ?\n    function(parent, node) {\n      return parent !== node && parent.contains(node)\n    } :\n    function(parent, node) {\n      while (node && (node = node.parentNode))\n        if (node === parent) return true\n      return false\n    }\n\n  function funcArg(context, arg, idx, payload) {\n    return isFunction(arg) ? arg.call(context, idx, payload) : arg\n  }\n\n  function setAttribute(node, name, value) {\n    value == null ? node.removeAttribute(name) : node.setAttribute(name, value)\n  }\n\n  // access className property while respecting SVGAnimatedString\n  function className(node, value){\n    var klass = node.className || \'\',\n        svg   = klass && klass.baseVal !== undefined\n\n    if (value === undefined) return svg ? klass.baseVal : klass\n    svg ? (klass.baseVal = value) : (node.className = value)\n  }\n\n  // "true"  => true\n  // "false" => false\n  // "null"  => null\n  // "42"    => 42\n  // "42.5"  => 42.5\n  // "08"    => "08"\n  // JSON    => parse if valid\n  // String  => self\n  function deserializeValue(value) {\n    try {\n      return value ?\n        value == "true" ||\n        ( value == "false" ? false :\n          value == "null" ? null :\n          +value + "" == value ? +value :\n          /^[\\[\\{]/.test(value) ? $.parseJSON(value) :\n          value )\n        : value\n    } catch(e) {\n      return value\n    }\n  }\n\n  $.type = type\n  $.isFunction = isFunction\n  $.isWindow = isWindow\n  $.isArray = isArray\n  $.isPlainObject = isPlainObject\n\n  $.isEmptyObject = function(obj) {\n    var name\n    for (name in obj) return false\n    return true\n  }\n\n  $.isNumeric = function(val) {\n    var num = Number(val), type = typeof val\n    return val != null && type != \'boolean\' &&\n      (type != \'string\' || val.length) &&\n      !isNaN(num) && isFinite(num) || false\n  }\n\n  $.inArray = function(elem, array, i){\n    return emptyArray.indexOf.call(array, elem, i)\n  }\n\n  $.camelCase = camelize\n  $.trim = function(str) {\n    return str == null ? "" : String.prototype.trim.call(str)\n  }\n\n  // plugin compatibility\n  $.uuid = 0\n  $.support = { }\n  $.expr = { }\n  $.noop = function() {}\n\n  $.map = function(elements, callback){\n    var value, values = [], i, key\n    if (likeArray(elements))\n      for (i = 0; i < elements.length; i++) {\n        value = callback(elements[i], i)\n        if (value != null) values.push(value)\n      }\n    else\n      for (key in elements) {\n        value = callback(elements[key], key)\n        if (value != null) values.push(value)\n      }\n    return flatten(values)\n  }\n\n  $.each = function(elements, callback){\n    var i, key\n    if (likeArray(elements)) {\n      for (i = 0; i < elements.length; i++)\n        if (callback.call(elements[i], i, elements[i]) === false) return elements\n    } else {\n      for (key in elements)\n        if (callback.call(elements[key], key, elements[key]) === false) return elements\n    }\n\n    return elements\n  }\n\n  $.grep = function(elements, callback){\n    return filter.call(elements, callback)\n  }\n\n  if (window.JSON) $.parseJSON = JSON.parse\n\n  // Populate the class2type map\n  $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {\n    class2type[ "[object " + name + "]" ] = name.toLowerCase()\n  })\n\n  // Define methods that will be available on all\n  // Zepto collections\n  $.fn = {\n    constructor: zepto.Z,\n    length: 0,\n\n    // Because a collection acts like an array\n    // copy over these useful array functions.\n    forEach: emptyArray.forEach,\n    reduce: emptyArray.reduce,\n    push: emptyArray.push,\n    sort: emptyArray.sort,\n    splice: emptyArray.splice,\n    indexOf: emptyArray.indexOf,\n    concat: function(){\n      var i, value, args = []\n      for (i = 0; i < arguments.length; i++) {\n        value = arguments[i]\n        args[i] = zepto.isZ(value) ? value.toArray() : value\n      }\n      return concat.apply(zepto.isZ(this) ? this.toArray() : this, args)\n    },\n\n    // `map` and `slice` in the jQuery API work differently\n    // from their array counterparts\n    map: function(fn){\n      return $($.map(this, function(el, i){ return fn.call(el, i, el) }))\n    },\n    slice: function(){\n      return $(slice.apply(this, arguments))\n    },\n\n    ready: function(callback){\n      // need to check if document.body exists for IE as that browser reports\n      // document ready when it hasn\'t yet created the body element\n      if (readyRE.test(document.readyState) && document.body) callback($)\n      else document.addEventListener(\'DOMContentLoaded\', function(){ callback($) }, false)\n      return this\n    },\n    get: function(idx){\n      return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]\n    },\n    toArray: function(){ return this.get() },\n    size: function(){\n      return this.length\n    },\n    remove: function(){\n      return this.each(function(){\n        if (this.parentNode != null)\n          this.parentNode.removeChild(this)\n      })\n    },\n    each: function(callback){\n      emptyArray.every.call(this, function(el, idx){\n        return callback.call(el, idx, el) !== false\n      })\n      return this\n    },\n    filter: function(selector){\n      if (isFunction(selector)) return this.not(this.not(selector))\n      return $(filter.call(this, function(element){\n        return zepto.matches(element, selector)\n      }))\n    },\n    add: function(selector,context){\n      return $(uniq(this.concat($(selector,context))))\n    },\n    is: function(selector){\n      return this.length > 0 && zepto.matches(this[0], selector)\n    },\n    not: function(selector){\n      var nodes=[]\n      if (isFunction(selector) && selector.call !== undefined)\n        this.each(function(idx){\n          if (!selector.call(this,idx)) nodes.push(this)\n        })\n      else {\n        var excludes = typeof selector == \'string\' ? this.filter(selector) :\n          (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)\n        this.forEach(function(el){\n          if (excludes.indexOf(el) < 0) nodes.push(el)\n        })\n      }\n      return $(nodes)\n    },\n    has: function(selector){\n      return this.filter(function(){\n        return isObject(selector) ?\n          $.contains(this, selector) :\n          $(this).find(selector).size()\n      })\n    },\n    eq: function(idx){\n      return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)\n    },\n    first: function(){\n      var el = this[0]\n      return el && !isObject(el) ? el : $(el)\n    },\n    last: function(){\n      var el = this[this.length - 1]\n      return el && !isObject(el) ? el : $(el)\n    },\n    find: function(selector){\n      var result, $this = this\n      if (!selector) result = $()\n      else if (typeof selector == \'object\')\n        result = $(selector).filter(function(){\n          var node = this\n          return emptyArray.some.call($this, function(parent){\n            return $.contains(parent, node)\n          })\n        })\n      else if (this.length == 1) result = $(zepto.qsa(this[0], selector))\n      else result = this.map(function(){ return zepto.qsa(this, selector) })\n      return result\n    },\n    closest: function(selector, context){\n      var nodes = [], collection = typeof selector == \'object\' && $(selector)\n      this.each(function(_, node){\n        while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))\n          node = node !== context && !isDocument(node) && node.parentNode\n        if (node && nodes.indexOf(node) < 0) nodes.push(node)\n      })\n      return $(nodes)\n    },\n    parents: function(selector){\n      var ancestors = [], nodes = this\n      while (nodes.length > 0)\n        nodes = $.map(nodes, function(node){\n          if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\n            ancestors.push(node)\n            return node\n          }\n        })\n      return filtered(ancestors, selector)\n    },\n    parent: function(selector){\n      return filtered(uniq(this.pluck(\'parentNode\')), selector)\n    },\n    children: function(selector){\n      return filtered(this.map(function(){ return children(this) }), selector)\n    },\n    contents: function() {\n      return this.map(function() { return this.contentDocument || slice.call(this.childNodes) })\n    },\n    siblings: function(selector){\n      return filtered(this.map(function(i, el){\n        return filter.call(children(el.parentNode), function(child){ return child!==el })\n      }), selector)\n    },\n    empty: function(){\n      return this.each(function(){ this.innerHTML = \'\' })\n    },\n    // `pluck` is borrowed from Prototype.js\n    pluck: function(property){\n      return $.map(this, function(el){ return el[property] })\n    },\n    show: function(){\n      return this.each(function(){\n        this.style.display == "none" && (this.style.display = \'\')\n        if (getComputedStyle(this, \'\').getPropertyValue("display") == "none")\n          this.style.display = defaultDisplay(this.nodeName)\n      })\n    },\n    replaceWith: function(newContent){\n      return this.before(newContent).remove()\n    },\n    wrap: function(structure){\n      var func = isFunction(structure)\n      if (this[0] && !func)\n        var dom   = $(structure).get(0),\n            clone = dom.parentNode || this.length > 1\n\n      return this.each(function(index){\n        $(this).wrapAll(\n          func ? structure.call(this, index) :\n            clone ? dom.cloneNode(true) : dom\n        )\n      })\n    },\n    wrapAll: function(structure){\n      if (this[0]) {\n        $(this[0]).before(structure = $(structure))\n        var children\n        // drill down to the inmost element\n        while ((children = structure.children()).length) structure = children.first()\n        $(structure).append(this)\n      }\n      return this\n    },\n    wrapInner: function(structure){\n      var func = isFunction(structure)\n      return this.each(function(index){\n        var self = $(this), contents = self.contents(),\n            dom  = func ? structure.call(this, index) : structure\n        contents.length ? contents.wrapAll(dom) : self.append(dom)\n      })\n    },\n    unwrap: function(){\n      this.parent().each(function(){\n        $(this).replaceWith($(this).children())\n      })\n      return this\n    },\n    clone: function(){\n      return this.map(function(){ return this.cloneNode(true) })\n    },\n    hide: function(){\n      return this.css("display", "none")\n    },\n    toggle: function(setting){\n      return this.each(function(){\n        var el = $(this)\n        ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide()\n      })\n    },\n    prev: function(selector){ return $(this.pluck(\'previousElementSibling\')).filter(selector || \'*\') },\n    next: function(selector){ return $(this.pluck(\'nextElementSibling\')).filter(selector || \'*\') },\n    html: function(html){\n      return 0 in arguments ?\n        this.each(function(idx){\n          var originHtml = this.innerHTML\n          $(this).empty().append( funcArg(this, html, idx, originHtml) )\n        }) :\n        (0 in this ? this[0].innerHTML : null)\n    },\n    text: function(text){\n      return 0 in arguments ?\n        this.each(function(idx){\n          var newText = funcArg(this, text, idx, this.textContent)\n          this.textContent = newText == null ? \'\' : \'\'+newText\n        }) :\n        (0 in this ? this.pluck(\'textContent\').join("") : null)\n    },\n    attr: function(name, value){\n      var result\n      return (typeof name == \'string\' && !(1 in arguments)) ?\n        (0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined) :\n        this.each(function(idx){\n          if (this.nodeType !== 1) return\n          if (isObject(name)) for (key in name) setAttribute(this, key, name[key])\n          else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))\n        })\n    },\n    removeAttr: function(name){\n      return this.each(function(){ this.nodeType === 1 && name.split(\' \').forEach(function(attribute){\n        setAttribute(this, attribute)\n      }, this)})\n    },\n    prop: function(name, value){\n      name = propMap[name] || name\n      return (1 in arguments) ?\n        this.each(function(idx){\n          this[name] = funcArg(this, value, idx, this[name])\n        }) :\n        (this[0] && this[0][name])\n    },\n    removeProp: function(name){\n      name = propMap[name] || name\n      return this.each(function(){ delete this[name] })\n    },\n    data: function(name, value){\n      var attrName = \'data-\' + name.replace(capitalRE, \'-$1\').toLowerCase()\n\n      var data = (1 in arguments) ?\n        this.attr(attrName, value) :\n        this.attr(attrName)\n\n      return data !== null ? deserializeValue(data) : undefined\n    },\n    val: function(value){\n      if (0 in arguments) {\n        if (value == null) value = ""\n        return this.each(function(idx){\n          this.value = funcArg(this, value, idx, this.value)\n        })\n      } else {\n        return this[0] && (this[0].multiple ?\n           $(this[0]).find(\'option\').filter(function(){ return this.selected }).pluck(\'value\') :\n           this[0].value)\n      }\n    },\n    offset: function(coordinates){\n      if (coordinates) return this.each(function(index){\n        var $this = $(this),\n            coords = funcArg(this, coordinates, index, $this.offset()),\n            parentOffset = $this.offsetParent().offset(),\n            props = {\n              top:  coords.top  - parentOffset.top,\n              left: coords.left - parentOffset.left\n            }\n\n        if ($this.css(\'position\') == \'static\') props[\'position\'] = \'relative\'\n        $this.css(props)\n      })\n      if (!this.length) return null\n      if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0]))\n        return {top: 0, left: 0}\n      var obj = this[0].getBoundingClientRect()\n      return {\n        left: obj.left + window.pageXOffset,\n        top: obj.top + window.pageYOffset,\n        width: Math.round(obj.width),\n        height: Math.round(obj.height)\n      }\n    },\n    css: function(property, value){\n      if (arguments.length < 2) {\n        var element = this[0]\n        if (typeof property == \'string\') {\n          if (!element) return\n          return element.style[camelize(property)] || getComputedStyle(element, \'\').getPropertyValue(property)\n        } else if (isArray(property)) {\n          if (!element) return\n          var props = {}\n          var computedStyle = getComputedStyle(element, \'\')\n          $.each(property, function(_, prop){\n            props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))\n          })\n          return props\n        }\n      }\n\n      var css = \'\'\n      if (type(property) == \'string\') {\n        if (!value && value !== 0)\n          this.each(function(){ this.style.removeProperty(dasherize(property)) })\n        else\n          css = dasherize(property) + ":" + maybeAddPx(property, value)\n      } else {\n        for (key in property)\n          if (!property[key] && property[key] !== 0)\n            this.each(function(){ this.style.removeProperty(dasherize(key)) })\n          else\n            css += dasherize(key) + \':\' + maybeAddPx(key, property[key]) + \';\'\n      }\n\n      return this.each(function(){ this.style.cssText += \';\' + css })\n    },\n    index: function(element){\n      return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])\n    },\n    hasClass: function(name){\n      if (!name) return false\n      return emptyArray.some.call(this, function(el){\n        return this.test(className(el))\n      }, classRE(name))\n    },\n    addClass: function(name){\n      if (!name) return this\n      return this.each(function(idx){\n        if (!(\'className\' in this)) return\n        classList = []\n        var cls = className(this), newName = funcArg(this, name, idx, cls)\n        newName.split(/\\s+/g).forEach(function(klass){\n          if (!$(this).hasClass(klass)) classList.push(klass)\n        }, this)\n        classList.length && className(this, cls + (cls ? " " : "") + classList.join(" "))\n      })\n    },\n    removeClass: function(name){\n      return this.each(function(idx){\n        if (!(\'className\' in this)) return\n        if (name === undefined) return className(this, \'\')\n        classList = className(this)\n        funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function(klass){\n          classList = classList.replace(classRE(klass), " ")\n        })\n        className(this, classList.trim())\n      })\n    },\n    toggleClass: function(name, when){\n      if (!name) return this\n      return this.each(function(idx){\n        var $this = $(this), names = funcArg(this, name, idx, className(this))\n        names.split(/\\s+/g).forEach(function(klass){\n          (when === undefined ? !$this.hasClass(klass) : when) ?\n            $this.addClass(klass) : $this.removeClass(klass)\n        })\n      })\n    },\n    scrollTop: function(value){\n      if (!this.length) return\n      var hasScrollTop = \'scrollTop\' in this[0]\n      if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset\n      return this.each(hasScrollTop ?\n        function(){ this.scrollTop = value } :\n        function(){ this.scrollTo(this.scrollX, value) })\n    },\n    scrollLeft: function(value){\n      if (!this.length) return\n      var hasScrollLeft = \'scrollLeft\' in this[0]\n      if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset\n      return this.each(hasScrollLeft ?\n        function(){ this.scrollLeft = value } :\n        function(){ this.scrollTo(value, this.scrollY) })\n    },\n    position: function() {\n      if (!this.length) return\n\n      var elem = this[0],\n        // Get *real* offsetParent\n        offsetParent = this.offsetParent(),\n        // Get correct offsets\n        offset       = this.offset(),\n        parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()\n\n      // Subtract element margins\n      // note: when an element has margin: auto the offsetLeft and marginLeft\n      // are the same in Safari causing offset.left to incorrectly be 0\n      offset.top  -= parseFloat( $(elem).css(\'margin-top\') ) || 0\n      offset.left -= parseFloat( $(elem).css(\'margin-left\') ) || 0\n\n      // Add offsetParent borders\n      parentOffset.top  += parseFloat( $(offsetParent[0]).css(\'border-top-width\') ) || 0\n      parentOffset.left += parseFloat( $(offsetParent[0]).css(\'border-left-width\') ) || 0\n\n      // Subtract the two offsets\n      return {\n        top:  offset.top  - parentOffset.top,\n        left: offset.left - parentOffset.left\n      }\n    },\n    offsetParent: function() {\n      return this.map(function(){\n        var parent = this.offsetParent || document.body\n        while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static")\n          parent = parent.offsetParent\n        return parent\n      })\n    }\n  }\n\n  // for now\n  $.fn.detach = $.fn.remove\n\n  // Generate the `width` and `height` functions\n  ;[\'width\', \'height\'].forEach(function(dimension){\n    var dimensionProperty =\n      dimension.replace(/./, function(m){ return m[0].toUpperCase() })\n\n    $.fn[dimension] = function(value){\n      var offset, el = this[0]\n      if (value === undefined) return isWindow(el) ? el[\'inner\' + dimensionProperty] :\n        isDocument(el) ? el.documentElement[\'scroll\' + dimensionProperty] :\n        (offset = this.offset()) && offset[dimension]\n      else return this.each(function(idx){\n        el = $(this)\n        el.css(dimension, funcArg(this, value, idx, el[dimension]()))\n      })\n    }\n  })\n\n  function traverseNode(node, fun) {\n    fun(node)\n    for (var i = 0, len = node.childNodes.length; i < len; i++)\n      traverseNode(node.childNodes[i], fun)\n  }\n\n  // Generate the `after`, `prepend`, `before`, `append`,\n  // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\n  adjacencyOperators.forEach(function(operator, operatorIndex) {\n    var inside = operatorIndex % 2 //=> prepend, append\n\n    $.fn[operator] = function(){\n      // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\n      var argType, nodes = $.map(arguments, function(arg) {\n            var arr = []\n            argType = type(arg)\n            if (argType == "array") {\n              arg.forEach(function(el) {\n                if (el.nodeType !== undefined) return arr.push(el)\n                else if ($.zepto.isZ(el)) return arr = arr.concat(el.get())\n                arr = arr.concat(zepto.fragment(el))\n              })\n              return arr\n            }\n            return argType == "object" || arg == null ?\n              arg : zepto.fragment(arg)\n          }),\n          parent, copyByClone = this.length > 1\n      if (nodes.length < 1) return this\n\n      return this.each(function(_, target){\n        parent = inside ? target : target.parentNode\n\n        // convert all methods to a "before" operation\n        target = operatorIndex == 0 ? target.nextSibling :\n                 operatorIndex == 1 ? target.firstChild :\n                 operatorIndex == 2 ? target :\n                 null\n\n        var parentInDocument = $.contains(document.documentElement, parent)\n\n        nodes.forEach(function(node){\n          if (copyByClone) node = node.cloneNode(true)\n          else if (!parent) return $(node).remove()\n\n          parent.insertBefore(node, target)\n          if (parentInDocument) traverseNode(node, function(el){\n            if (el.nodeName != null && el.nodeName.toUpperCase() === \'SCRIPT\' &&\n               (!el.type || el.type === \'text/javascript\') && !el.src){\n              var target = el.ownerDocument ? el.ownerDocument.defaultView : window\n              target[\'eval\'].call(target, el.innerHTML)\n            }\n          })\n        })\n      })\n    }\n\n    // after    => insertAfter\n    // prepend  => prependTo\n    // before   => insertBefore\n    // append   => appendTo\n    $.fn[inside ? operator+\'To\' : \'insert\'+(operatorIndex ? \'Before\' : \'After\')] = function(html){\n      $(html)[operator](this)\n      return this\n    }\n  })\n\n  zepto.Z.prototype = Z.prototype = $.fn\n\n  // Export internal API functions in the `$.zepto` namespace\n  zepto.uniq = uniq\n  zepto.deserializeValue = deserializeValue\n  $.zepto = zepto\n\n  return $\n})()\n\nwindow.Zepto = Zepto\nwindow.$ === undefined && (window.$ = Zepto)\n\n;(function($){\n  var _zid = 1, undefined,\n      slice = Array.prototype.slice,\n      isFunction = $.isFunction,\n      isString = function(obj){ return typeof obj == \'string\' },\n      handlers = {},\n      specialEvents={},\n      focusinSupported = \'onfocusin\' in window,\n      focus = { focus: \'focusin\', blur: \'focusout\' },\n      hover = { mouseenter: \'mouseover\', mouseleave: \'mouseout\' }\n\n  specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = \'MouseEvents\'\n\n  function zid(element) {\n    return element._zid || (element._zid = _zid++)\n  }\n  function findHandlers(element, event, fn, selector) {\n    event = parse(event)\n    if (event.ns) var matcher = matcherFor(event.ns)\n    return (handlers[zid(element)] || []).filter(function(handler) {\n      return handler\n        && (!event.e  || handler.e == event.e)\n        && (!event.ns || matcher.test(handler.ns))\n        && (!fn       || zid(handler.fn) === zid(fn))\n        && (!selector || handler.sel == selector)\n    })\n  }\n  function parse(event) {\n    var parts = (\'\' + event).split(\'.\')\n    return {e: parts[0], ns: parts.slice(1).sort().join(\' \')}\n  }\n  function matcherFor(ns) {\n    return new RegExp(\'(?:^| )\' + ns.replace(\' \', \' .* ?\') + \'(?: |$)\')\n  }\n\n  function eventCapture(handler, captureSetting) {\n    return handler.del &&\n      (!focusinSupported && (handler.e in focus)) ||\n      !!captureSetting\n  }\n\n  function realEvent(type) {\n    return hover[type] || (focusinSupported && focus[type]) || type\n  }\n\n  function add(element, events, fn, data, selector, delegator, capture){\n    var id = zid(element), set = (handlers[id] || (handlers[id] = []))\n    events.split(/\\s/).forEach(function(event){\n      if (event == \'ready\') return $(document).ready(fn)\n      var handler   = parse(event)\n      handler.fn    = fn\n      handler.sel   = selector\n      // emulate mouseenter, mouseleave\n      if (handler.e in hover) fn = function(e){\n        var related = e.relatedTarget\n        if (!related || (related !== this && !$.contains(this, related)))\n          return handler.fn.apply(this, arguments)\n      }\n      handler.del   = delegator\n      var callback  = delegator || fn\n      handler.proxy = function(e){\n        e = compatible(e)\n        if (e.isImmediatePropagationStopped()) return\n        e.data = data\n        var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))\n        if (result === false) e.preventDefault(), e.stopPropagation()\n        return result\n      }\n      handler.i = set.length\n      set.push(handler)\n      if (\'addEventListener\' in element)\n        element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n    })\n  }\n  function remove(element, events, fn, selector, capture){\n    var id = zid(element)\n    ;(events || \'\').split(/\\s/).forEach(function(event){\n      findHandlers(element, event, fn, selector).forEach(function(handler){\n        delete handlers[id][handler.i]\n      if (\'removeEventListener\' in element)\n        element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n      })\n    })\n  }\n\n  $.event = { add: add, remove: remove }\n\n  $.proxy = function(fn, context) {\n    var args = (2 in arguments) && slice.call(arguments, 2)\n    if (isFunction(fn)) {\n      var proxyFn = function(){ return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments) }\n      proxyFn._zid = zid(fn)\n      return proxyFn\n    } else if (isString(context)) {\n      if (args) {\n        args.unshift(fn[context], fn)\n        return $.proxy.apply(null, args)\n      } else {\n        return $.proxy(fn[context], fn)\n      }\n    } else {\n      throw new TypeError("expected function")\n    }\n  }\n\n  $.fn.bind = function(event, data, callback){\n    return this.on(event, data, callback)\n  }\n  $.fn.unbind = function(event, callback){\n    return this.off(event, callback)\n  }\n  $.fn.one = function(event, selector, data, callback){\n    return this.on(event, selector, data, callback, 1)\n  }\n\n  var returnTrue = function(){return true},\n      returnFalse = function(){return false},\n      ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\n      eventMethods = {\n        preventDefault: \'isDefaultPrevented\',\n        stopImmediatePropagation: \'isImmediatePropagationStopped\',\n        stopPropagation: \'isPropagationStopped\'\n      }\n\n  function compatible(event, source) {\n    if (source || !event.isDefaultPrevented) {\n      source || (source = event)\n\n      $.each(eventMethods, function(name, predicate) {\n        var sourceMethod = source[name]\n        event[name] = function(){\n          this[predicate] = returnTrue\n          return sourceMethod && sourceMethod.apply(source, arguments)\n        }\n        event[predicate] = returnFalse\n      })\n\n      event.timeStamp || (event.timeStamp = Date.now())\n\n      if (source.defaultPrevented !== undefined ? source.defaultPrevented :\n          \'returnValue\' in source ? source.returnValue === false :\n          source.getPreventDefault && source.getPreventDefault())\n        event.isDefaultPrevented = returnTrue\n    }\n    return event\n  }\n\n  function createProxy(event) {\n    var key, proxy = { originalEvent: event }\n    for (key in event)\n      if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]\n\n    return compatible(proxy, event)\n  }\n\n  $.fn.delegate = function(selector, event, callback){\n    return this.on(event, selector, callback)\n  }\n  $.fn.undelegate = function(selector, event, callback){\n    return this.off(event, selector, callback)\n  }\n\n  $.fn.live = function(event, callback){\n    $(document.body).delegate(this.selector, event, callback)\n    return this\n  }\n  $.fn.die = function(event, callback){\n    $(document.body).undelegate(this.selector, event, callback)\n    return this\n  }\n\n  $.fn.on = function(event, selector, data, callback, one){\n    var autoRemove, delegator, $this = this\n    if (event && !isString(event)) {\n      $.each(event, function(type, fn){\n        $this.on(type, selector, data, fn, one)\n      })\n      return $this\n    }\n\n    if (!isString(selector) && !isFunction(callback) && callback !== false)\n      callback = data, data = selector, selector = undefined\n    if (callback === undefined || data === false)\n      callback = data, data = undefined\n\n    if (callback === false) callback = returnFalse\n\n    return $this.each(function(_, element){\n      if (one) autoRemove = function(e){\n        remove(element, e.type, callback)\n        return callback.apply(this, arguments)\n      }\n\n      if (selector) delegator = function(e){\n        var evt, match = $(e.target).closest(selector, element).get(0)\n        if (match && match !== element) {\n          evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})\n          return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))\n        }\n      }\n\n      add(element, event, callback, data, selector, delegator || autoRemove)\n    })\n  }\n  $.fn.off = function(event, selector, callback){\n    var $this = this\n    if (event && !isString(event)) {\n      $.each(event, function(type, fn){\n        $this.off(type, selector, fn)\n      })\n      return $this\n    }\n\n    if (!isString(selector) && !isFunction(callback) && callback !== false)\n      callback = selector, selector = undefined\n\n    if (callback === false) callback = returnFalse\n\n    return $this.each(function(){\n      remove(this, event, callback, selector)\n    })\n  }\n\n  $.fn.trigger = function(event, args){\n    event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)\n    event._args = args\n    return this.each(function(){\n      // handle focus(), blur() by calling them directly\n      if (event.type in focus && typeof this[event.type] == "function") this[event.type]()\n      // items in the collection might not be DOM elements\n      else if (\'dispatchEvent\' in this) this.dispatchEvent(event)\n      else $(this).triggerHandler(event, args)\n    })\n  }\n\n  // triggers event handlers on current element just as if an event occurred,\n  // doesn\'t trigger an actual event, doesn\'t bubble\n  $.fn.triggerHandler = function(event, args){\n    var e, result\n    this.each(function(i, element){\n      e = createProxy(isString(event) ? $.Event(event) : event)\n      e._args = args\n      e.target = element\n      $.each(findHandlers(element, event.type || event), function(i, handler){\n        result = handler.proxy(e)\n        if (e.isImmediatePropagationStopped()) return false\n      })\n    })\n    return result\n  }\n\n  // shortcut methods for `.bind(event, fn)` for each event type\n  ;(\'focusin focusout focus blur load resize scroll unload click dblclick \'+\n  \'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \'+\n  \'change select keydown keypress keyup error\').split(\' \').forEach(function(event) {\n    $.fn[event] = function(callback) {\n      return (0 in arguments) ?\n        this.bind(event, callback) :\n        this.trigger(event)\n    }\n  })\n\n  $.Event = function(type, props) {\n    if (!isString(type)) props = type, type = props.type\n    var event = document.createEvent(specialEvents[type] || \'Events\'), bubbles = true\n    if (props) for (var name in props) (name == \'bubbles\') ? (bubbles = !!props[name]) : (event[name] = props[name])\n    event.initEvent(type, bubbles, true)\n    return compatible(event)\n  }\n\n})(Zepto)\n\n;(function($){\n  var jsonpID = +new Date(),\n      document = window.document,\n      key,\n      name,\n      rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n      scriptTypeRE = /^(?:text|application)\\/javascript/i,\n      xmlTypeRE = /^(?:text|application)\\/xml/i,\n      jsonType = \'application/json\',\n      htmlType = \'text/html\',\n      blankRE = /^\\s*$/,\n      originAnchor = document.createElement(\'a\')\n\n  originAnchor.href = window.location.href\n\n  // trigger a custom event and return false if it was cancelled\n  function triggerAndReturn(context, eventName, data) {\n    var event = $.Event(eventName)\n    $(context).trigger(event, data)\n    return !event.isDefaultPrevented()\n  }\n\n  // trigger an Ajax "global" event\n  function triggerGlobal(settings, context, eventName, data) {\n    if (settings.global) return triggerAndReturn(context || document, eventName, data)\n  }\n\n  // Number of active Ajax requests\n  $.active = 0\n\n  function ajaxStart(settings) {\n    if (settings.global && $.active++ === 0) triggerGlobal(settings, null, \'ajaxStart\')\n  }\n  function ajaxStop(settings) {\n    if (settings.global && !(--$.active)) triggerGlobal(settings, null, \'ajaxStop\')\n  }\n\n  // triggers an extra global event "ajaxBeforeSend" that\'s like "ajaxSend" but cancelable\n  function ajaxBeforeSend(xhr, settings) {\n    var context = settings.context\n    if (settings.beforeSend.call(context, xhr, settings) === false ||\n        triggerGlobal(settings, context, \'ajaxBeforeSend\', [xhr, settings]) === false)\n      return false\n\n    triggerGlobal(settings, context, \'ajaxSend\', [xhr, settings])\n  }\n  function ajaxSuccess(data, xhr, settings, deferred) {\n    var context = settings.context, status = \'success\'\n    settings.success.call(context, data, status, xhr)\n    if (deferred) deferred.resolveWith(context, [data, status, xhr])\n    triggerGlobal(settings, context, \'ajaxSuccess\', [xhr, settings, data])\n    ajaxComplete(status, xhr, settings)\n  }\n  // type: "timeout", "error", "abort", "parsererror"\n  function ajaxError(error, type, xhr, settings, deferred) {\n    var context = settings.context\n    settings.error.call(context, xhr, type, error)\n    if (deferred) deferred.rejectWith(context, [xhr, type, error])\n    triggerGlobal(settings, context, \'ajaxError\', [xhr, settings, error || type])\n    ajaxComplete(type, xhr, settings)\n  }\n  // status: "success", "notmodified", "error", "timeout", "abort", "parsererror"\n  function ajaxComplete(status, xhr, settings) {\n    var context = settings.context\n    settings.complete.call(context, xhr, status)\n    triggerGlobal(settings, context, \'ajaxComplete\', [xhr, settings])\n    ajaxStop(settings)\n  }\n\n  function ajaxDataFilter(data, type, settings) {\n    if (settings.dataFilter == empty) return data\n    var context = settings.context\n    return settings.dataFilter.call(context, data, type)\n  }\n\n  // Empty function, used as default callback\n  function empty() {}\n\n  $.ajaxJSONP = function(options, deferred){\n    if (!(\'type\' in options)) return $.ajax(options)\n\n    var _callbackName = options.jsonpCallback,\n      callbackName = ($.isFunction(_callbackName) ?\n        _callbackName() : _callbackName) || (\'Zepto\' + (jsonpID++)),\n      script = document.createElement(\'script\'),\n      originalCallback = window[callbackName],\n      responseData,\n      abort = function(errorType) {\n        $(script).triggerHandler(\'error\', errorType || \'abort\')\n      },\n      xhr = { abort: abort }, abortTimeout\n\n    if (deferred) deferred.promise(xhr)\n\n    $(script).on(\'load error\', function(e, errorType){\n      clearTimeout(abortTimeout)\n      $(script).off().remove()\n\n      if (e.type == \'error\' || !responseData) {\n        ajaxError(null, errorType || \'error\', xhr, options, deferred)\n      } else {\n        ajaxSuccess(responseData[0], xhr, options, deferred)\n      }\n\n      window[callbackName] = originalCallback\n      if (responseData && $.isFunction(originalCallback))\n        originalCallback(responseData[0])\n\n      originalCallback = responseData = undefined\n    })\n\n    if (ajaxBeforeSend(xhr, options) === false) {\n      abort(\'abort\')\n      return xhr\n    }\n\n    window[callbackName] = function(){\n      responseData = arguments\n    }\n\n    script.src = options.url.replace(/\\?(.+)=\\?/, \'?$1=\' + callbackName)\n    document.head.appendChild(script)\n\n    if (options.timeout > 0) abortTimeout = setTimeout(function(){\n      abort(\'timeout\')\n    }, options.timeout)\n\n    return xhr\n  }\n\n  $.ajaxSettings = {\n    // Default type of request\n    type: \'GET\',\n    // Callback that is executed before request\n    beforeSend: empty,\n    // Callback that is executed if the request succeeds\n    success: empty,\n    // Callback that is executed the the server drops error\n    error: empty,\n    // Callback that is executed on request complete (both: error and success)\n    complete: empty,\n    // The context for the callbacks\n    context: null,\n    // Whether to trigger "global" Ajax events\n    global: true,\n    // Transport\n    xhr: function () {\n      return new window.XMLHttpRequest()\n    },\n    // MIME types mapping\n    // IIS returns Javascript as "application/x-javascript"\n    accepts: {\n      script: \'text/javascript, application/javascript, application/x-javascript\',\n      json:   jsonType,\n      xml:    \'application/xml, text/xml\',\n      html:   htmlType,\n      text:   \'text/plain\'\n    },\n    // Whether the request is to another domain\n    crossDomain: false,\n    // Default timeout\n    timeout: 0,\n    // Whether data should be serialized to string\n    processData: true,\n    // Whether the browser should be allowed to cache GET responses\n    cache: true,\n    //Used to handle the raw response data of XMLHttpRequest.\n    //This is a pre-filtering function to sanitize the response.\n    //The sanitized response should be returned\n    dataFilter: empty\n  }\n\n  function mimeToDataType(mime) {\n    if (mime) mime = mime.split(\';\', 2)[0]\n    return mime && ( mime == htmlType ? \'html\' :\n      mime == jsonType ? \'json\' :\n      scriptTypeRE.test(mime) ? \'script\' :\n      xmlTypeRE.test(mime) && \'xml\' ) || \'text\'\n  }\n\n  function appendQuery(url, query) {\n    if (query == \'\') return url\n    return (url + \'&\' + query).replace(/[&?]{1,2}/, \'?\')\n  }\n\n  // serialize payload and append it to the URL for GET requests\n  function serializeData(options) {\n    if (options.processData && options.data && $.type(options.data) != "string")\n      options.data = $.param(options.data, options.traditional)\n    if (options.data && (!options.type || options.type.toUpperCase() == \'GET\' || \'jsonp\' == options.dataType))\n      options.url = appendQuery(options.url, options.data), options.data = undefined\n  }\n\n  $.ajax = function(options){\n    var settings = $.extend({}, options || {}),\n        deferred = $.Deferred && $.Deferred(),\n        urlAnchor, hashIndex\n    for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]\n\n    ajaxStart(settings)\n\n    if (!settings.crossDomain) {\n      urlAnchor = document.createElement(\'a\')\n      urlAnchor.href = settings.url\n      // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049\n      urlAnchor.href = urlAnchor.href\n      settings.crossDomain = (originAnchor.protocol + \'//\' + originAnchor.host) !== (urlAnchor.protocol + \'//\' + urlAnchor.host)\n    }\n\n    if (!settings.url) settings.url = window.location.toString()\n    if ((hashIndex = settings.url.indexOf(\'#\')) > -1) settings.url = settings.url.slice(0, hashIndex)\n    serializeData(settings)\n\n    var dataType = settings.dataType, hasPlaceholder = /\\?.+=\\?/.test(settings.url)\n    if (hasPlaceholder) dataType = \'jsonp\'\n\n    if (settings.cache === false || (\n         (!options || options.cache !== true) &&\n         (\'script\' == dataType || \'jsonp\' == dataType)\n        ))\n      settings.url = appendQuery(settings.url, \'_=\' + Date.now())\n\n    if (\'jsonp\' == dataType) {\n      if (!hasPlaceholder)\n        settings.url = appendQuery(settings.url,\n          settings.jsonp ? (settings.jsonp + \'=?\') : settings.jsonp === false ? \'\' : \'callback=?\')\n      return $.ajaxJSONP(settings, deferred)\n    }\n\n    var mime = settings.accepts[dataType],\n        headers = { },\n        setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] },\n        protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\n        xhr = settings.xhr(),\n        nativeSetHeader = xhr.setRequestHeader,\n        abortTimeout\n\n    if (deferred) deferred.promise(xhr)\n\n    if (!settings.crossDomain) setHeader(\'X-Requested-With\', \'XMLHttpRequest\')\n    setHeader(\'Accept\', mime || \'*/*\')\n    if (mime = settings.mimeType || mime) {\n      if (mime.indexOf(\',\') > -1) mime = mime.split(\',\', 2)[0]\n      xhr.overrideMimeType && xhr.overrideMimeType(mime)\n    }\n    if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != \'GET\'))\n      setHeader(\'Content-Type\', settings.contentType || \'application/x-www-form-urlencoded\')\n\n    if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name])\n    xhr.setRequestHeader = setHeader\n\n    xhr.onreadystatechange = function(){\n      if (xhr.readyState == 4) {\n        xhr.onreadystatechange = empty\n        clearTimeout(abortTimeout)\n        var result, error = false\n        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == \'file:\')) {\n          dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader(\'content-type\'))\n\n          if (xhr.responseType == \'arraybuffer\' || xhr.responseType == \'blob\')\n            result = xhr.response\n          else {\n            result = xhr.responseText\n\n            try {\n              // http://perfectionkills.com/global-eval-what-are-the-options/\n              // sanitize response accordingly if data filter callback provided\n              result = ajaxDataFilter(result, dataType, settings)\n              if (dataType == \'script\')    (1,eval)(result)\n              else if (dataType == \'xml\')  result = xhr.responseXML\n              else if (dataType == \'json\') result = blankRE.test(result) ? null : $.parseJSON(result)\n            } catch (e) { error = e }\n\n            if (error) return ajaxError(error, \'parsererror\', xhr, settings, deferred)\n          }\n\n          ajaxSuccess(result, xhr, settings, deferred)\n        } else {\n          ajaxError(xhr.statusText || null, xhr.status ? \'error\' : \'abort\', xhr, settings, deferred)\n        }\n      }\n    }\n\n    if (ajaxBeforeSend(xhr, settings) === false) {\n      xhr.abort()\n      ajaxError(null, \'abort\', xhr, settings, deferred)\n      return xhr\n    }\n\n    var async = \'async\' in settings ? settings.async : true\n    xhr.open(settings.type, settings.url, async, settings.username, settings.password)\n\n    if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]\n\n    for (name in headers) nativeSetHeader.apply(xhr, headers[name])\n\n    if (settings.timeout > 0) abortTimeout = setTimeout(function(){\n        xhr.onreadystatechange = empty\n        xhr.abort()\n        ajaxError(null, \'timeout\', xhr, settings, deferred)\n      }, settings.timeout)\n\n    // avoid sending empty string (#319)\n    xhr.send(settings.data ? settings.data : null)\n    return xhr\n  }\n\n  // handle optional data/success arguments\n  function parseArguments(url, data, success, dataType) {\n    if ($.isFunction(data)) dataType = success, success = data, data = undefined\n    if (!$.isFunction(success)) dataType = success, success = undefined\n    return {\n      url: url\n    , data: data\n    , success: success\n    , dataType: dataType\n    }\n  }\n\n  $.get = function(/* url, data, success, dataType */){\n    return $.ajax(parseArguments.apply(null, arguments))\n  }\n\n  $.post = function(/* url, data, success, dataType */){\n    var options = parseArguments.apply(null, arguments)\n    options.type = \'POST\'\n    return $.ajax(options)\n  }\n\n  $.getJSON = function(/* url, data, success */){\n    var options = parseArguments.apply(null, arguments)\n    options.dataType = \'json\'\n    return $.ajax(options)\n  }\n\n  $.fn.load = function(url, data, success){\n    if (!this.length) return this\n    var self = this, parts = url.split(/\\s/), selector,\n        options = parseArguments(url, data, success),\n        callback = options.success\n    if (parts.length > 1) options.url = parts[0], selector = parts[1]\n    options.success = function(response){\n      self.html(selector ?\n        $(\'<div>\').html(response.replace(rscript, "")).find(selector)\n        : response)\n      callback && callback.apply(self, arguments)\n    }\n    $.ajax(options)\n    return this\n  }\n\n  var escape = encodeURIComponent\n\n  function serialize(params, obj, traditional, scope){\n    var type, array = $.isArray(obj), hash = $.isPlainObject(obj)\n    $.each(obj, function(key, value) {\n      type = $.type(value)\n      if (scope) key = traditional ? scope :\n        scope + \'[\' + (hash || type == \'object\' || type == \'array\' ? key : \'\') + \']\'\n      // handle data in serializeArray() format\n      if (!scope && array) params.add(value.name, value.value)\n      // recurse into nested objects\n      else if (type == "array" || (!traditional && type == "object"))\n        serialize(params, value, traditional, key)\n      else params.add(key, value)\n    })\n  }\n\n  $.param = function(obj, traditional){\n    var params = []\n    params.add = function(key, value) {\n      if ($.isFunction(value)) value = value()\n      if (value == null) value = ""\n      this.push(escape(key) + \'=\' + escape(value))\n    }\n    serialize(params, obj, traditional)\n    return params.join(\'&\').replace(/%20/g, \'+\')\n  }\n})(Zepto)\n\n;(function($){\n  $.fn.serializeArray = function() {\n    var name, type, result = [],\n      add = function(value) {\n        if (value.forEach) return value.forEach(add)\n        result.push({ name: name, value: value })\n      }\n    if (this[0]) $.each(this[0].elements, function(_, field){\n      type = field.type, name = field.name\n      if (name && field.nodeName.toLowerCase() != \'fieldset\' &&\n        !field.disabled && type != \'submit\' && type != \'reset\' && type != \'button\' && type != \'file\' &&\n        ((type != \'radio\' && type != \'checkbox\') || field.checked))\n          add($(field).val())\n    })\n    return result\n  }\n\n  $.fn.serialize = function(){\n    var result = []\n    this.serializeArray().forEach(function(elm){\n      result.push(encodeURIComponent(elm.name) + \'=\' + encodeURIComponent(elm.value))\n    })\n    return result.join(\'&\')\n  }\n\n  $.fn.submit = function(callback) {\n    if (0 in arguments) this.bind(\'submit\', callback)\n    else if (this.length) {\n      var event = $.Event(\'submit\')\n      this.eq(0).trigger(event)\n      if (!event.isDefaultPrevented()) this.get(0).submit()\n    }\n    return this\n  }\n\n})(Zepto)\n\n;(function(){\n  // getComputedStyle shouldn\'t freak out when called\n  // without a valid element as argument\n  try {\n    getComputedStyle(undefined)\n  } catch(e) {\n    var nativeGetComputedStyle = getComputedStyle\n    window.getComputedStyle = function(element, pseudoElement){\n      try {\n        return nativeGetComputedStyle(element, pseudoElement)\n      } catch(e) {\n        return null\n      }\n    }\n  }\n})()\n  return Zepto\n}))\n'},function(){(function(e){e.expr={":":{}},e.support={},e.fn.clone=function(){var t=e();return this.each(function(){t.push(this.cloneNode(!0))}),t},['Left','Top'].forEach(function(t,n){function o(e){return e&&'object'==typeof e&&'setInterval'in e}function i(e){return o(e)?e:!(9!==e.nodeType)&&(e.defaultView||e.parentWindow)}var a='scroll'+t;e.fn[a]=function(t){var o,s;return void 0===t?(o=this[0],!o)?null:(s=i(o),s?'pageXOffset'in s?s[n?'pageYOffset':'pageXOffset']:s.document.documentElement[a]||s.document.body[a]:o[a]):void this.each(function(){if(s=i(this),s){var o=n?e(s).scrollLeft():t,r=n?t:e(s).scrollTop();s.scrollTo(o,r)}else this[a]=t})}}),['width','height'].forEach(function(t){var n=t.replace(/./,function(e){return e[0].toUpperCase()});e.fn['inner'+n]=function(e){var n=this;if(n){var o=n[t]();return{width:['left','right'],height:['top','bottom']}[t].forEach(function(t){o+=parseInt(n.css('padding-'+t),10),e&&(o+=parseInt(n.css('margin-'+t),10))}),o}return null},e.fn['outer'+n]=function(e){var n=this;if(n){var o=n[t]();return{width:['left','right'],height:['top','bottom']}[t].forEach(function(t){e&&(o+=parseInt(n.css('margin-'+t),10))}),o}return null}}),e.proxy=function(t,n){if('string'==typeof n){var o=t[n];n=t,t=o}if(e.isFunction(t)){var i=Array.prototype.slice.call(arguments,2),a=function(){return t.apply(n,i.concat(Array.prototype.slice.call(arguments)))};return a.guid=t.guid=t.guid||a.guid||e.guid++,a}};var t=String.prototype.trim;e.trim=function(e,n){return!n&&t?t.call(e):(n=defaultToWhiteSpace(n),e.replace(new RegExp('^['+n+']+|['+n+']+$','g'),''))};var n=/^t(?:able|d|h)$/i,o=/^(?:body|html)$/i;e.fn.position=function(){if(!this[0])return null;var t=this[0],n=this.offsetParent(),i=this.offset(),a=o.test(n[0].nodeName)?{top:0,left:0}:n.offset();return i.top-=parseFloat(e(t).css('margin-top'))||0,i.left-=parseFloat(e(t).css('margin-left'))||0,a.top+=parseFloat(e(n[0]).css('border-top-width'))||0,a.left+=parseFloat(e(n[0]).css('border-left-width'))||0,{top:i.top-a.top,left:i.left-a.left}},e.fn.offsetParent=function(){var t=e();return this.each(function(){for(var n=this.offsetParent||document.body;n&&!o.test(n.nodeName)&&'static'===e(n).css('position');)n=n.offsetParent;t.push(n)}),t}})(Zepto)}])});
//# sourceMappingURL=goldenlayout.js.map