/timeline/timeline-bundle-debug.js
JavaScript | 2950 lines | 2911 code | 26 blank | 13 comment | 197 complexity | 7291e2b177ef0134c5916c11f1d23649 MD5 | raw file
Large files files are truncated, but you can click here to view the full file
- /* band.js */
- Timeline._Band=function(timeline,bandInfo,index){if(timeline.autoWidth&&typeof bandInfo.width=="string"){bandInfo.width=bandInfo.width.indexOf("%")>-1?0:parseInt(bandInfo.width);
- }this._timeline=timeline;
- this._bandInfo=bandInfo;
- this._index=index;
- this._locale=("locale" in bandInfo)?bandInfo.locale:Timeline.getDefaultLocale();
- this._timeZone=("timeZone" in bandInfo)?bandInfo.timeZone:0;
- this._labeller=("labeller" in bandInfo)?bandInfo.labeller:(("createLabeller" in timeline.getUnit())?timeline.getUnit().createLabeller(this._locale,this._timeZone):new Timeline.GregorianDateLabeller(this._locale,this._timeZone));
- this._theme=bandInfo.theme;
- this._zoomIndex=("zoomIndex" in bandInfo)?bandInfo.zoomIndex:0;
- this._zoomSteps=("zoomSteps" in bandInfo)?bandInfo.zoomSteps:null;
- this._dragging=false;
- this._changing=false;
- this._originalScrollSpeed=5;
- this._scrollSpeed=this._originalScrollSpeed;
- this._onScrollListeners=[];
- this._orthogonalDragging=false;
- this._viewOrthogonalOffset=0;
- this._onOrthogonalScrollListeners=[];
- var b=this;
- this._syncWithBand=null;
- this._syncWithBandHandler=function(band){b._onHighlightBandScroll();
- };
- this._syncWithBandOrthogonalScrollHandler=function(band){b._onHighlightBandOrthogonalScroll();
- };
- this._selectorListener=function(band){b._onHighlightBandScroll();
- };
- var inputDiv=this._timeline.getDocument().createElement("div");
- inputDiv.className="timeline-band-input";
- this._timeline.addDiv(inputDiv);
- this._keyboardInput=document.createElement("input");
- this._keyboardInput.type="text";
- inputDiv.appendChild(this._keyboardInput);
- SimileAjax.DOM.registerEventWithObject(this._keyboardInput,"keydown",this,"_onKeyDown");
- SimileAjax.DOM.registerEventWithObject(this._keyboardInput,"keyup",this,"_onKeyUp");
- this._div=this._timeline.getDocument().createElement("div");
- this._div.id="timeline-band-"+index;
- this._div.className="timeline-band timeline-band-"+index;
- this._timeline.addDiv(this._div);
- SimileAjax.DOM.registerEventWithObject(this._div,"dblclick",this,"_onDblClick");
- SimileAjax.DOM.registerEventWithObject(this._div,"mousedown",this,"_onMouseDown");
- SimileAjax.DOM.registerEventWithObject(document.body,"mousemove",this,"_onMouseMove");
- SimileAjax.DOM.registerEventWithObject(document.body,"mouseup",this,"_onMouseUp");
- SimileAjax.DOM.registerEventWithObject(document.body,"mouseout",this,"_onMouseOut");
- var mouseWheel=this._theme!=null?this._theme.mouseWheel:"scroll";
- if(mouseWheel==="zoom"||mouseWheel==="scroll"||this._zoomSteps){if(SimileAjax.Platform.browser.isFirefox){SimileAjax.DOM.registerEventWithObject(this._div,"DOMMouseScroll",this,"_onMouseScroll");
- }else{SimileAjax.DOM.registerEventWithObject(this._div,"mousewheel",this,"_onMouseScroll");
- }}this._innerDiv=this._timeline.getDocument().createElement("div");
- this._innerDiv.className="timeline-band-inner";
- this._div.appendChild(this._innerDiv);
- this._ether=bandInfo.ether;
- bandInfo.ether.initialize(this,timeline);
- this._etherPainter=bandInfo.etherPainter;
- bandInfo.etherPainter.initialize(this,timeline);
- this._eventSource=bandInfo.eventSource;
- if(this._eventSource){this._eventListener={onAddMany:function(){b._onAddMany();
- },onClear:function(){b._onClear();
- }};
- this._eventSource.addListener(this._eventListener);
- }this._eventPainter=bandInfo.eventPainter;
- this._eventTracksNeeded=0;
- this._eventTrackIncrement=0;
- bandInfo.eventPainter.initialize(this,timeline);
- this._decorators=("decorators" in bandInfo)?bandInfo.decorators:[];
- for(var i=0;
- i<this._decorators.length;
- i++){this._decorators[i].initialize(this,timeline);
- }this._supportsOrthogonalScrolling=("supportsOrthogonalScrolling" in this._eventPainter)&&this._eventPainter.supportsOrthogonalScrolling();
- if(this._supportsOrthogonalScrolling){this._scrollBar=this._timeline.getDocument().createElement("div");
- this._scrollBar.id="timeline-band-scrollbar-"+index;
- this._scrollBar.className="timeline-band-scrollbar";
- this._timeline.addDiv(this._scrollBar);
- this._scrollBar.innerHTML='<div class="timeline-band-scrollbar-thumb"> </div>';
- var scrollbarThumb=this._scrollBar.firstChild;
- if(SimileAjax.Platform.browser.isIE){scrollbarThumb.style.cursor="move";
- }else{scrollbarThumb.style.cursor="-moz-grab";
- }SimileAjax.DOM.registerEventWithObject(scrollbarThumb,"mousedown",this,"_onScrollBarMouseDown");
- }};
- Timeline._Band.SCROLL_MULTIPLES=5;
- Timeline._Band.prototype.dispose=function(){this.closeBubble();
- if(this._eventSource){this._eventSource.removeListener(this._eventListener);
- this._eventListener=null;
- this._eventSource=null;
- }this._timeline=null;
- this._bandInfo=null;
- this._labeller=null;
- this._ether=null;
- this._etherPainter=null;
- this._eventPainter=null;
- this._decorators=null;
- this._onScrollListeners=null;
- this._syncWithBandHandler=null;
- this._syncWithBandOrthogonalScrollHandler=null;
- this._selectorListener=null;
- this._div=null;
- this._innerDiv=null;
- this._keyboardInput=null;
- this._scrollBar=null;
- };
- Timeline._Band.prototype.addOnScrollListener=function(listener){this._onScrollListeners.push(listener);
- };
- Timeline._Band.prototype.removeOnScrollListener=function(listener){for(var i=0;
- i<this._onScrollListeners.length;
- i++){if(this._onScrollListeners[i]==listener){this._onScrollListeners.splice(i,1);
- break;
- }}};
- Timeline._Band.prototype.addOnOrthogonalScrollListener=function(listener){this._onOrthogonalScrollListeners.push(listener);
- };
- Timeline._Band.prototype.removeOnOrthogonalScrollListener=function(listener){for(var i=0;
- i<this._onOrthogonalScrollListeners.length;
- i++){if(this._onOrthogonalScrollListeners[i]==listener){this._onOrthogonalScrollListeners.splice(i,1);
- break;
- }}};
- Timeline._Band.prototype.setSyncWithBand=function(band,highlight){if(this._syncWithBand){this._syncWithBand.removeOnScrollListener(this._syncWithBandHandler);
- this._syncWithBand.removeOnOrthogonalScrollListener(this._syncWithBandOrthogonalScrollHandler);
- }this._syncWithBand=band;
- this._syncWithBand.addOnScrollListener(this._syncWithBandHandler);
- this._syncWithBand.addOnOrthogonalScrollListener(this._syncWithBandOrthogonalScrollHandler);
- this._highlight=highlight;
- this._positionHighlight();
- };
- Timeline._Band.prototype.getLocale=function(){return this._locale;
- };
- Timeline._Band.prototype.getTimeZone=function(){return this._timeZone;
- };
- Timeline._Band.prototype.getLabeller=function(){return this._labeller;
- };
- Timeline._Band.prototype.getIndex=function(){return this._index;
- };
- Timeline._Band.prototype.getEther=function(){return this._ether;
- };
- Timeline._Band.prototype.getEtherPainter=function(){return this._etherPainter;
- };
- Timeline._Band.prototype.getEventSource=function(){return this._eventSource;
- };
- Timeline._Band.prototype.getEventPainter=function(){return this._eventPainter;
- };
- Timeline._Band.prototype.getTimeline=function(){return this._timeline;
- };
- Timeline._Band.prototype.updateEventTrackInfo=function(tracks,increment){this._eventTrackIncrement=increment;
- if(tracks>this._eventTracksNeeded){this._eventTracksNeeded=tracks;
- }};
- Timeline._Band.prototype.checkAutoWidth=function(){if(!this._timeline.autoWidth){return ;
- }var overviewBand=this._eventPainter.getType()=="overview";
- var margin=overviewBand?this._theme.event.overviewTrack.autoWidthMargin:this._theme.event.track.autoWidthMargin;
- var desiredWidth=Math.ceil((this._eventTracksNeeded+margin)*this._eventTrackIncrement);
- desiredWidth+=overviewBand?this._theme.event.overviewTrack.offset:this._theme.event.track.offset;
- var bandInfo=this._bandInfo;
- if(desiredWidth!=bandInfo.width){bandInfo.width=desiredWidth;
- }};
- Timeline._Band.prototype.layout=function(){this.paint();
- };
- Timeline._Band.prototype.paint=function(){this._etherPainter.paint();
- this._paintDecorators();
- this._paintEvents();
- };
- Timeline._Band.prototype.softLayout=function(){this.softPaint();
- };
- Timeline._Band.prototype.softPaint=function(){this._etherPainter.softPaint();
- this._softPaintDecorators();
- this._softPaintEvents();
- };
- Timeline._Band.prototype.setBandShiftAndWidth=function(shift,width){var inputDiv=this._keyboardInput.parentNode;
- var middle=shift+Math.floor(width/2);
- if(this._timeline.isHorizontal()){this._div.style.top=shift+"px";
- this._div.style.height=width+"px";
- inputDiv.style.top=middle+"px";
- inputDiv.style.left="-1em";
- }else{this._div.style.left=shift+"px";
- this._div.style.width=width+"px";
- inputDiv.style.left=middle+"px";
- inputDiv.style.top="-1em";
- }};
- Timeline._Band.prototype.getViewWidth=function(){if(this._timeline.isHorizontal()){return this._div.offsetHeight;
- }else{return this._div.offsetWidth;
- }};
- Timeline._Band.prototype.setViewLength=function(length){this._viewLength=length;
- this._recenterDiv();
- this._onChanging();
- };
- Timeline._Band.prototype.getViewLength=function(){return this._viewLength;
- };
- Timeline._Band.prototype.getTotalViewLength=function(){return Timeline._Band.SCROLL_MULTIPLES*this._viewLength;
- };
- Timeline._Band.prototype.getViewOffset=function(){return this._viewOffset;
- };
- Timeline._Band.prototype.getMinDate=function(){return this._ether.pixelOffsetToDate(this._viewOffset);
- };
- Timeline._Band.prototype.getMaxDate=function(){return this._ether.pixelOffsetToDate(this._viewOffset+Timeline._Band.SCROLL_MULTIPLES*this._viewLength);
- };
- Timeline._Band.prototype.getMinVisibleDate=function(){return this._ether.pixelOffsetToDate(0);
- };
- Timeline._Band.prototype.getMinVisibleDateAfterDelta=function(delta){return this._ether.pixelOffsetToDate(delta);
- };
- Timeline._Band.prototype.getMaxVisibleDate=function(){return this._ether.pixelOffsetToDate(this._viewLength);
- };
- Timeline._Band.prototype.getMaxVisibleDateAfterDelta=function(delta){return this._ether.pixelOffsetToDate(this._viewLength+delta);
- };
- Timeline._Band.prototype.getCenterVisibleDate=function(){return this._ether.pixelOffsetToDate(this._viewLength/2);
- };
- Timeline._Band.prototype.setMinVisibleDate=function(date){if(!this._changing){this._moveEther(Math.round(-this._ether.dateToPixelOffset(date)));
- }};
- Timeline._Band.prototype.setMaxVisibleDate=function(date){if(!this._changing){this._moveEther(Math.round(this._viewLength-this._ether.dateToPixelOffset(date)));
- }};
- Timeline._Band.prototype.setCenterVisibleDate=function(date){if(!this._changing){this._moveEther(Math.round(this._viewLength/2-this._ether.dateToPixelOffset(date)));
- }};
- Timeline._Band.prototype.dateToPixelOffset=function(date){return this._ether.dateToPixelOffset(date)-this._viewOffset;
- };
- Timeline._Band.prototype.pixelOffsetToDate=function(pixels){return this._ether.pixelOffsetToDate(pixels+this._viewOffset);
- };
- Timeline._Band.prototype.getViewOrthogonalOffset=function(){return this._viewOrthogonalOffset;
- };
- Timeline._Band.prototype.setViewOrthogonalOffset=function(offset){this._viewOrthogonalOffset=Math.max(0,offset);
- };
- Timeline._Band.prototype.createLayerDiv=function(zIndex,className){var div=this._timeline.getDocument().createElement("div");
- div.className="timeline-band-layer"+(typeof className=="string"?(" "+className):"");
- div.style.zIndex=zIndex;
- this._innerDiv.appendChild(div);
- var innerDiv=this._timeline.getDocument().createElement("div");
- innerDiv.className="timeline-band-layer-inner";
- if(SimileAjax.Platform.browser.isIE){innerDiv.style.cursor="move";
- }else{innerDiv.style.cursor="-moz-grab";
- }div.appendChild(innerDiv);
- return innerDiv;
- };
- Timeline._Band.prototype.removeLayerDiv=function(div){this._innerDiv.removeChild(div.parentNode);
- };
- Timeline._Band.prototype.scrollToCenter=function(date,f){var pixelOffset=this._ether.dateToPixelOffset(date);
- if(pixelOffset<-this._viewLength/2){this.setCenterVisibleDate(this.pixelOffsetToDate(pixelOffset+this._viewLength));
- }else{if(pixelOffset>3*this._viewLength/2){this.setCenterVisibleDate(this.pixelOffsetToDate(pixelOffset-this._viewLength));
- }}this._autoScroll(Math.round(this._viewLength/2-this._ether.dateToPixelOffset(date)),f);
- };
- Timeline._Band.prototype.showBubbleForEvent=function(eventID){var evt=this.getEventSource().getEvent(eventID);
- if(evt){var self=this;
- this.scrollToCenter(evt.getStart(),function(){self._eventPainter.showBubble(evt);
- });
- }};
- Timeline._Band.prototype.zoom=function(zoomIn,x,y,target){if(!this._zoomSteps){return ;
- }x+=this._viewOffset;
- var zoomDate=this._ether.pixelOffsetToDate(x);
- var netIntervalChange=this._ether.zoom(zoomIn);
- this._etherPainter.zoom(netIntervalChange);
- this._moveEther(Math.round(-this._ether.dateToPixelOffset(zoomDate)));
- this._moveEther(x);
- };
- Timeline._Band.prototype._onMouseDown=function(elmt,evt,target){if(!this._dragging){this.closeBubble();
- this._dragging=true;
- this._dragX=evt.clientX;
- this._dragY=evt.clientY;
- return this._cancelEvent(evt);
- }};
- Timeline._Band.prototype._onMouseMove=function(elmt,evt,target){if(this._dragging||this._orthogonalDragging){var diffX=evt.clientX-this._dragX;
- var diffY=evt.clientY-this._dragY;
- this._dragX=evt.clientX;
- this._dragY=evt.clientY;
- }if(this._dragging){if(this._timeline.isHorizontal()){this._moveEther(diffX,diffY);
- }else{this._moveEther(diffY,diffX);
- }}else{if(this._orthogonalDragging){var viewWidth=this.getViewWidth();
- var scrollbarThumb=this._scrollBar.firstChild;
- if(this._timeline.isHorizontal()){this._moveEther(0,-diffY*viewWidth/scrollbarThumb.offsetHeight);
- }else{this._moveEther(0,-diffX*viewWidth/scrollbarThumb.offsetWidth);
- }}else{return ;
- }}this._positionHighlight();
- this._showScrollbar();
- return this._cancelEvent(evt);
- };
- Timeline._Band.prototype._onMouseUp=function(elmt,evt,target){if(this._dragging){this._dragging=false;
- }else{if(this._orthogonalDragging){this._orthogonalDragging=false;
- }else{return ;
- }}this._keyboardInput.focus();
- this._bounceBack();
- return this._cancelEvent(evt);
- };
- Timeline._Band.prototype._onMouseOut=function(elmt,evt,target){if(target==document.body){if(this._dragging){this._dragging=false;
- }else{if(this._orthogonalDragging){this._orthogonalDragging=false;
- }else{return ;
- }}this._bounceBack();
- return this._cancelEvent(evt);
- }};
- Timeline._Band.prototype._onScrollBarMouseDown=function(elmt,evt,target){if(!this._orthogonalDragging){this.closeBubble();
- this._orthogonalDragging=true;
- this._dragX=evt.clientX;
- this._dragY=evt.clientY;
- return this._cancelEvent(evt);
- }};
- Timeline._Band.prototype._onMouseScroll=function(innerFrame,evt,target){var now=new Date();
- now=now.getTime();
- if(!this._lastScrollTime||((now-this._lastScrollTime)>50)){this._lastScrollTime=now;
- var delta=0;
- if(evt.wheelDelta){delta=evt.wheelDelta/120;
- }else{if(evt.detail){delta=-evt.detail/3;
- }}var mouseWheel=this._theme.mouseWheel;
- if(this._zoomSteps||mouseWheel==="zoom"){var loc=SimileAjax.DOM.getEventRelativeCoordinates(evt,innerFrame);
- if(delta!=0){var zoomIn;
- if(delta>0){zoomIn=true;
- }if(delta<0){zoomIn=false;
- }this._timeline.zoom(zoomIn,loc.x,loc.y,innerFrame);
- }}else{if(mouseWheel==="scroll"){var move_amt=50*(delta<0?-1:1);
- this._moveEther(move_amt);
- }}}if(evt.stopPropagation){evt.stopPropagation();
- }evt.cancelBubble=true;
- if(evt.preventDefault){evt.preventDefault();
- }evt.returnValue=false;
- };
- Timeline._Band.prototype._onDblClick=function(innerFrame,evt,target){var coords=SimileAjax.DOM.getEventRelativeCoordinates(evt,innerFrame);
- var distance=coords.x-(this._viewLength/2-this._viewOffset);
- this._autoScroll(-distance);
- };
- Timeline._Band.prototype._onKeyDown=function(keyboardInput,evt,target){if(!this._dragging){switch(evt.keyCode){case 27:break;
- case 37:case 38:this._scrollSpeed=Math.min(50,Math.abs(this._scrollSpeed*1.05));
- this._moveEther(this._scrollSpeed);
- break;
- case 39:case 40:this._scrollSpeed=-Math.min(50,Math.abs(this._scrollSpeed*1.05));
- this._moveEther(this._scrollSpeed);
- break;
- default:return true;
- }this.closeBubble();
- SimileAjax.DOM.cancelEvent(evt);
- return false;
- }return true;
- };
- Timeline._Band.prototype._onKeyUp=function(keyboardInput,evt,target){if(!this._dragging){this._scrollSpeed=this._originalScrollSpeed;
- switch(evt.keyCode){case 35:this.setCenterVisibleDate(this._eventSource.getLatestDate());
- break;
- case 36:this.setCenterVisibleDate(this._eventSource.getEarliestDate());
- break;
- case 33:this._autoScroll(this._timeline.getPixelLength());
- break;
- case 34:this._autoScroll(-this._timeline.getPixelLength());
- break;
- default:return true;
- }this.closeBubble();
- SimileAjax.DOM.cancelEvent(evt);
- return false;
- }return true;
- };
- Timeline._Band.prototype._autoScroll=function(distance,f){var b=this;
- var a=SimileAjax.Graphics.createAnimation(function(abs,diff){b._moveEther(diff);
- },0,distance,1000,f);
- a.run();
- };
- Timeline._Band.prototype._moveEther=function(shift,orthogonalShift){if(orthogonalShift===undefined){orthogonalShift=0;
- }this.closeBubble();
- if(!this._timeline.shiftOK(this._index,shift)){return ;
- }this._viewOffset+=shift;
- this._ether.shiftPixels(-shift);
- if(this._timeline.isHorizontal()){this._div.style.left=this._viewOffset+"px";
- }else{this._div.style.top=this._viewOffset+"px";
- }if(this._supportsOrthogonalScrolling){if(this._eventPainter.getOrthogonalExtent()<=this.getViewWidth()){this._viewOrthogonalOffset=0;
- }else{this._viewOrthogonalOffset=this._viewOrthogonalOffset+orthogonalShift;
- }}if(this._viewOffset>-this._viewLength*0.5||this._viewOffset<-this._viewLength*(Timeline._Band.SCROLL_MULTIPLES-1.5)){this._recenterDiv();
- }else{this.softLayout();
- }this._onChanging();
- };
- Timeline._Band.prototype._onChanging=function(){this._changing=true;
- this._fireOnScroll();
- this._setSyncWithBandDate();
- this._changing=false;
- };
- Timeline._Band.prototype.busy=function(){return(this._changing);
- };
- Timeline._Band.prototype._fireOnScroll=function(){for(var i=0;
- i<this._onScrollListeners.length;
- i++){this._onScrollListeners[i](this);
- }};
- Timeline._Band.prototype._fireOnOrthogonalScroll=function(){for(var i=0;
- i<this._onOrthogonalScrollListeners.length;
- i++){this._onOrthogonalScrollListeners[i](this);
- }};
- Timeline._Band.prototype._setSyncWithBandDate=function(){if(this._syncWithBand){var centerDate=this._ether.pixelOffsetToDate(this.getViewLength()/2);
- this._syncWithBand.setCenterVisibleDate(centerDate);
- }};
- Timeline._Band.prototype._onHighlightBandScroll=function(){if(this._syncWithBand){var centerDate=this._syncWithBand.getCenterVisibleDate();
- var centerPixelOffset=this._ether.dateToPixelOffset(centerDate);
- this._moveEther(Math.round(this._viewLength/2-centerPixelOffset));
- this._positionHighlight();
- }};
- Timeline._Band.prototype._onHighlightBandOrthogonalScroll=function(){if(this._syncWithBand){this._positionHighlight();
- }};
- Timeline._Band.prototype._onAddMany=function(){this._paintEvents();
- };
- Timeline._Band.prototype._onClear=function(){this._paintEvents();
- };
- Timeline._Band.prototype._positionHighlight=function(){if(this._syncWithBand){var startDate=this._syncWithBand.getMinVisibleDate();
- var endDate=this._syncWithBand.getMaxVisibleDate();
- if(this._highlight){var offset=0;
- var extent=1;
- var syncEventPainter=this._syncWithBand.getEventPainter();
- if("supportsOrthogonalScrolling" in syncEventPainter&&syncEventPainter.supportsOrthogonalScrolling()){var orthogonalExtent=syncEventPainter.getOrthogonalExtent();
- var visibleWidth=this._syncWithBand.getViewWidth();
- var totalWidth=Math.max(visibleWidth,orthogonalExtent);
- extent=visibleWidth/totalWidth;
- offset=-this._syncWithBand.getViewOrthogonalOffset()/totalWidth;
- }this._etherPainter.setHighlight(startDate,endDate,offset,extent);
- }}};
- Timeline._Band.prototype._recenterDiv=function(){this._viewOffset=-this._viewLength*(Timeline._Band.SCROLL_MULTIPLES-1)/2;
- if(this._timeline.isHorizontal()){this._div.style.left=this._viewOffset+"px";
- this._div.style.width=(Timeline._Band.SCROLL_MULTIPLES*this._viewLength)+"px";
- }else{this._div.style.top=this._viewOffset+"px";
- this._div.style.height=(Timeline._Band.SCROLL_MULTIPLES*this._viewLength)+"px";
- }this.layout();
- };
- Timeline._Band.prototype._paintEvents=function(){this._eventPainter.paint();
- this._showScrollbar();
- this._fireOnOrthogonalScroll();
- };
- Timeline._Band.prototype._softPaintEvents=function(){this._eventPainter.softPaint();
- };
- Timeline._Band.prototype._paintDecorators=function(){for(var i=0;
- i<this._decorators.length;
- i++){this._decorators[i].paint();
- }};
- Timeline._Band.prototype._softPaintDecorators=function(){for(var i=0;
- i<this._decorators.length;
- i++){this._decorators[i].softPaint();
- }};
- Timeline._Band.prototype.closeBubble=function(){SimileAjax.WindowManager.cancelPopups();
- };
- Timeline._Band.prototype._bounceBack=function(f){if(!this._supportsOrthogonalScrolling){return ;
- }var target=0;
- if(this._viewOrthogonalOffset<0){var orthogonalExtent=this._eventPainter.getOrthogonalExtent();
- if(this._viewOrthogonalOffset+orthogonalExtent>=this.getViewWidth()){target=this._viewOrthogonalOffset;
- }else{target=Math.min(0,this.getViewWidth()-orthogonalExtent);
- }}if(target!=this._viewOrthogonalOffset){var self=this;
- SimileAjax.Graphics.createAnimation(function(abs,diff){self._viewOrthogonalOffset=abs;
- self._eventPainter.softPaint();
- self._showScrollbar();
- self._fireOnOrthogonalScroll();
- },this._viewOrthogonalOffset,target,300,function(){self._hideScrollbar();
- }).run();
- }else{this._hideScrollbar();
- }};
- Timeline._Band.prototype._showScrollbar=function(){if(!this._supportsOrthogonalScrolling){return ;
- }var orthogonalExtent=this._eventPainter.getOrthogonalExtent();
- var visibleWidth=this.getViewWidth();
- var totalWidth=Math.max(visibleWidth,orthogonalExtent);
- var ratio=(visibleWidth/totalWidth);
- var thumbWidth=Math.round(visibleWidth*ratio)+"px";
- var thumbOffset=Math.round(-this._viewOrthogonalOffset*ratio)+"px";
- var thumbThickness=12;
- var thumb=this._scrollBar.firstChild;
- if(this._timeline.isHorizontal()){this._scrollBar.style.top=this._div.style.top;
- this._scrollBar.style.height=this._div.style.height;
- this._scrollBar.style.right="0px";
- this._scrollBar.style.width=thumbThickness+"px";
- thumb.style.top=thumbOffset;
- thumb.style.height=thumbWidth;
- }else{this._scrollBar.style.left=this._div.style.left;
- this._scrollBar.style.width=this._div.style.width;
- this._scrollBar.style.bottom="0px";
- this._scrollBar.style.height=thumbThickness+"px";
- thumb.style.left=thumbOffset;
- thumb.style.width=thumbWidth;
- }if(ratio>=1&&this._viewOrthogonalOffset==0){this._scrollBar.style.display="none";
- }else{this._scrollBar.style.display="block";
- }};
- Timeline._Band.prototype._hideScrollbar=function(){if(!this._supportsOrthogonalScrolling){return ;
- }};
- Timeline._Band.prototype._cancelEvent=function(evt){SimileAjax.DOM.cancelEvent(evt);
- return false;
- };
- /* compact-painter.js */
- Timeline.CompactEventPainter=function(params){this._params=params;
- this._onSelectListeners=[];
- this._filterMatcher=null;
- this._highlightMatcher=null;
- this._frc=null;
- this._eventIdToElmt={};
- };
- Timeline.CompactEventPainter.prototype.getType=function(){return"compact";
- };
- Timeline.CompactEventPainter.prototype.initialize=function(band,timeline){this._band=band;
- this._timeline=timeline;
- this._backLayer=null;
- this._eventLayer=null;
- this._lineLayer=null;
- this._highlightLayer=null;
- this._eventIdToElmt=null;
- };
- Timeline.CompactEventPainter.prototype.supportsOrthogonalScrolling=function(){return true;
- };
- Timeline.CompactEventPainter.prototype.addOnSelectListener=function(listener){this._onSelectListeners.push(listener);
- };
- Timeline.CompactEventPainter.prototype.removeOnSelectListener=function(listener){for(var i=0;
- i<this._onSelectListeners.length;
- i++){if(this._onSelectListeners[i]==listener){this._onSelectListeners.splice(i,1);
- break;
- }}};
- Timeline.CompactEventPainter.prototype.getFilterMatcher=function(){return this._filterMatcher;
- };
- Timeline.CompactEventPainter.prototype.setFilterMatcher=function(filterMatcher){this._filterMatcher=filterMatcher;
- };
- Timeline.CompactEventPainter.prototype.getHighlightMatcher=function(){return this._highlightMatcher;
- };
- Timeline.CompactEventPainter.prototype.setHighlightMatcher=function(highlightMatcher){this._highlightMatcher=highlightMatcher;
- };
- Timeline.CompactEventPainter.prototype.paint=function(){var eventSource=this._band.getEventSource();
- if(eventSource==null){return ;
- }this._eventIdToElmt={};
- this._prepareForPainting();
- var metrics=this._computeMetrics();
- var minDate=this._band.getMinDate();
- var maxDate=this._band.getMaxDate();
- var filterMatcher=(this._filterMatcher!=null)?this._filterMatcher:function(evt){return true;
- };
- var highlightMatcher=(this._highlightMatcher!=null)?this._highlightMatcher:function(evt){return -1;
- };
- var iterator=eventSource.getEventIterator(minDate,maxDate);
- var stackConcurrentPreciseInstantEvents="stackConcurrentPreciseInstantEvents" in this._params&&typeof this._params.stackConcurrentPreciseInstantEvents=="object";
- var collapseConcurrentPreciseInstantEvents="collapseConcurrentPreciseInstantEvents" in this._params&&this._params.collapseConcurrentPreciseInstantEvents;
- if(collapseConcurrentPreciseInstantEvents||stackConcurrentPreciseInstantEvents){var bufferedEvents=[];
- var previousInstantEvent=null;
- while(iterator.hasNext()){var evt=iterator.next();
- if(filterMatcher(evt)){if(!evt.isInstant()||evt.isImprecise()){this.paintEvent(evt,metrics,this._params.theme,highlightMatcher(evt));
- }else{if(previousInstantEvent!=null&&previousInstantEvent.getStart().getTime()==evt.getStart().getTime()){bufferedEvents[bufferedEvents.length-1].push(evt);
- }else{bufferedEvents.push([evt]);
- previousInstantEvent=evt;
- }}}}for(var i=0;
- i<bufferedEvents.length;
- i++){var compositeEvents=bufferedEvents[i];
- if(compositeEvents.length==1){this.paintEvent(compositeEvents[0],metrics,this._params.theme,highlightMatcher(evt));
- }else{var match=-1;
- for(var j=0;
- match<0&&j<compositeEvents.length;
- j++){match=highlightMatcher(compositeEvents[j]);
- }if(stackConcurrentPreciseInstantEvents){this.paintStackedPreciseInstantEvents(compositeEvents,metrics,this._params.theme,match);
- }else{this.paintCompositePreciseInstantEvents(compositeEvents,metrics,this._params.theme,match);
- }}}}else{while(iterator.hasNext()){var evt=iterator.next();
- if(filterMatcher(evt)){this.paintEvent(evt,metrics,this._params.theme,highlightMatcher(evt));
- }}}this._highlightLayer.style.display="block";
- this._lineLayer.style.display="block";
- this._eventLayer.style.display="block";
- this._setOrthogonalOffset(metrics);
- };
- Timeline.CompactEventPainter.prototype.softPaint=function(){this._setOrthogonalOffset(this._computeMetrics());
- };
- Timeline.CompactEventPainter.prototype.getOrthogonalExtent=function(){var metrics=this._computeMetrics();
- return 2*metrics.trackOffset+this._tracks.length*metrics.trackHeight;
- };
- Timeline.CompactEventPainter.prototype._setOrthogonalOffset=function(metrics){var orthogonalOffset=this._band.getViewOrthogonalOffset();
- this._highlightLayer.style.top=this._lineLayer.style.top=this._eventLayer.style.top=orthogonalOffset+"px";
- };
- Timeline.CompactEventPainter.prototype._computeMetrics=function(){var theme=this._params.theme;
- var eventTheme=theme.event;
- var metrics={trackOffset:"trackOffset" in this._params?this._params.trackOffset:10,trackHeight:"trackHeight" in this._params?this._params.trackHeight:10,tapeHeight:theme.event.tape.height,tapeBottomMargin:"tapeBottomMargin" in this._params?this._params.tapeBottomMargin:2,labelBottomMargin:"labelBottomMargin" in this._params?this._params.labelBottomMargin:5,labelRightMargin:"labelRightMargin" in this._params?this._params.labelRightMargin:5,defaultIcon:eventTheme.instant.icon,defaultIconWidth:eventTheme.instant.iconWidth,defaultIconHeight:eventTheme.instant.iconHeight,customIconWidth:"iconWidth" in this._params?this._params.iconWidth:eventTheme.instant.iconWidth,customIconHeight:"iconHeight" in this._params?this._params.iconHeight:eventTheme.instant.iconHeight,iconLabelGap:"iconLabelGap" in this._params?this._params.iconLabelGap:2,iconBottomMargin:"iconBottomMargin" in this._params?this._params.iconBottomMargin:2};
- if("compositeIcon" in this._params){metrics.compositeIcon=this._params.compositeIcon;
- metrics.compositeIconWidth=this._params.compositeIconWidth||metrics.customIconWidth;
- metrics.compositeIconHeight=this._params.compositeIconHeight||metrics.customIconHeight;
- }else{metrics.compositeIcon=metrics.defaultIcon;
- metrics.compositeIconWidth=metrics.defaultIconWidth;
- metrics.compositeIconHeight=metrics.defaultIconHeight;
- }metrics.defaultStackIcon=("stackConcurrentPreciseInstantEvents" in this._params&&"icon" in this._params.stackConcurrentPreciseInstantEvents)?this._params.stackConcurrentPreciseInstantEvents.icon:metrics.defaultIcon;
- metrics.defaultStackIconWidth=("stackConcurrentPreciseInstantEvents" in this._params&&"iconWidth" in this._params.stackConcurrentPreciseInstantEvents)?this._params.stackConcurrentPreciseInstantEvents.iconWidth:metrics.defaultIconWidth;
- metrics.defaultStackIconHeight=("stackConcurrentPreciseInstantEvents" in this._params&&"iconHeight" in this._params.stackConcurrentPreciseInstantEvents)?this._params.stackConcurrentPreciseInstantEvents.iconHeight:metrics.defaultIconHeight;
- return metrics;
- };
- Timeline.CompactEventPainter.prototype._prepareForPainting=function(){var band=this._band;
- if(this._backLayer==null){this._backLayer=this._band.createLayerDiv(0,"timeline-band-events");
- this._backLayer.style.visibility="hidden";
- var eventLabelPrototype=document.createElement("span");
- eventLabelPrototype.className="timeline-event-label";
- this._backLayer.appendChild(eventLabelPrototype);
- this._frc=SimileAjax.Graphics.getFontRenderingContext(eventLabelPrototype);
- }this._frc.update();
- this._tracks=[];
- if(this._highlightLayer!=null){band.removeLayerDiv(this._highlightLayer);
- }this._highlightLayer=band.createLayerDiv(105,"timeline-band-highlights");
- this._highlightLayer.style.display="none";
- if(this._lineLayer!=null){band.removeLayerDiv(this._lineLayer);
- }this._lineLayer=band.createLayerDiv(110,"timeline-band-lines");
- this._lineLayer.style.display="none";
- if(this._eventLayer!=null){band.removeLayerDiv(this._eventLayer);
- }this._eventLayer=band.createLayerDiv(115,"timeline-band-events");
- this._eventLayer.style.display="none";
- };
- Timeline.CompactEventPainter.prototype.paintEvent=function(evt,metrics,theme,highlightIndex){if(evt.isInstant()){this.paintInstantEvent(evt,metrics,theme,highlightIndex);
- }else{this.paintDurationEvent(evt,metrics,theme,highlightIndex);
- }};
- Timeline.CompactEventPainter.prototype.paintInstantEvent=function(evt,metrics,theme,highlightIndex){if(evt.isImprecise()){this.paintImpreciseInstantEvent(evt,metrics,theme,highlightIndex);
- }else{this.paintPreciseInstantEvent(evt,metrics,theme,highlightIndex);
- }};
- Timeline.CompactEventPainter.prototype.paintDurationEvent=function(evt,metrics,theme,highlightIndex){if(evt.isImprecise()){this.paintImpreciseDurationEvent(evt,metrics,theme,highlightIndex);
- }else{this.paintPreciseDurationEvent(evt,metrics,theme,highlightIndex);
- }};
- Timeline.CompactEventPainter.prototype.paintPreciseInstantEvent=function(evt,metrics,theme,highlightIndex){var commonData={tooltip:evt.getProperty("tooltip")||evt.getText()};
- var iconData={url:evt.getIcon()};
- if(iconData.url==null){iconData.url=metrics.defaultIcon;
- iconData.width=metrics.defaultIconWidth;
- iconData.height=metrics.defaultIconHeight;
- iconData.className="timeline-event-icon-default";
- }else{iconData.width=evt.getProperty("iconWidth")||metrics.customIconWidth;
- iconData.height=evt.getProperty("iconHeight")||metrics.customIconHeight;
- }var labelData={text:evt.getText(),color:evt.getTextColor()||evt.getColor(),className:evt.getClassName()};
- var result=this.paintTapeIconLabel(evt.getStart(),commonData,null,iconData,labelData,metrics,theme,highlightIndex);
- var self=this;
- var clickHandler=function(elmt,domEvt,target){return self._onClickInstantEvent(result.iconElmtData.elmt,domEvt,evt);
- };
- SimileAjax.DOM.registerEvent(result.iconElmtData.elmt,"mousedown",clickHandler);
- SimileAjax.DOM.registerEvent(result.labelElmtData.elmt,"mousedown",clickHandler);
- this._eventIdToElmt[evt.getID()]=result.iconElmtData.elmt;
- };
- Timeline.CompactEventPainter.prototype.paintCompositePreciseInstantEvents=function(events,metrics,theme,highlightIndex){var evt=events[0];
- var tooltips=[];
- for(var i=0;
- i<events.length;
- i++){tooltips.push(events[i].getProperty("tooltip")||events[i].getText());
- }var commonData={tooltip:tooltips.join("; ")};
- var iconData={url:metrics.compositeIcon,width:metrics.compositeIconWidth,height:metrics.compositeIconHeight,className:"timeline-event-icon-composite"};
- var labelData={text:String.substitute(this._params.compositeEventLabelTemplate,[events.length])};
- var result=this.paintTapeIconLabel(evt.getStart(),commonData,null,iconData,labelData,metrics,theme,highlightIndex);
- var self=this;
- var clickHandler=function(elmt,domEvt,target){return self._onClickMultiplePreciseInstantEvent(result.iconElmtData.elmt,domEvt,events);
- };
- SimileAjax.DOM.registerEvent(result.iconElmtData.elmt,"mousedown",clickHandler);
- SimileAjax.DOM.registerEvent(result.labelElmtData.elmt,"mousedown",clickHandler);
- for(var i=0;
- i<events.length;
- i++){this._eventIdToElmt[events[i].getID()]=result.iconElmtData.elmt;
- }};
- Timeline.CompactEventPainter.prototype.paintStackedPreciseInstantEvents=function(events,metrics,theme,highlightIndex){var limit="limit" in this._params.stackConcurrentPreciseInstantEvents?this._params.stackConcurrentPreciseInstantEvents.limit:10;
- var moreMessageTemplate="moreMessageTemplate" in this._params.stackConcurrentPreciseInstantEvents?this._params.stackConcurrentPreciseInstantEvents.moreMessageTemplate:"%0 More Events";
- var showMoreMessage=limit<=events.length-2;
- var band=this._band;
- var getPixelOffset=function(date){return Math.round(band.dateToPixelOffset(date));
- };
- var getIconData=function(evt){var iconData={url:evt.getIcon()};
- if(iconData.url==null){iconData.url=metrics.defaultStackIcon;
- iconData.width=metrics.defaultStackIconWidth;
- iconData.height=metrics.defaultStackIconHeight;
- iconData.className="timeline-event-icon-stack timeline-event-icon-default";
- }else{iconData.width=evt.getProperty("iconWidth")||metrics.customIconWidth;
- iconData.height=evt.getProperty("iconHeight")||metrics.customIconHeight;
- iconData.className="timeline-event-icon-stack";
- }return iconData;
- };
- var firstIconData=getIconData(events[0]);
- var horizontalIncrement=5;
- var leftIconEdge=0;
- var totalLabelWidth=0;
- var totalLabelHeight=0;
- var totalIconHeight=0;
- var records=[];
- for(var i=0;
- i<events.length&&(!showMoreMessage||i<limit);
- i++){var evt=events[i];
- var text=evt.getText();
- var iconData=getIconData(evt);
- var labelSize=this._frc.computeSize(text);
- var record={text:text,iconData:iconData,labelSize:labelSize,iconLeft:firstIconData.width+i*horizontalIncrement-iconData.width};
- record.labelLeft=firstIconData.width+i*horizontalIncrement+metrics.iconLabelGap;
- record.top=totalLabelHeight;
- records.push(record);
- leftIconEdge=Math.min(leftIconEdge,record.iconLeft);
- totalLabelHeight+=labelSize.height;
- totalLabelWidth=Math.max(totalLabelWidth,record.labelLeft+labelSize.width);
- totalIconHeight=Math.max(totalIconHeight,record.top+iconData.height);
- }if(showMoreMessage){var moreMessage=String.substitute(moreMessageTemplate,[events.length-limit]);
- var moreMessageLabelSize=this._frc.computeSize(moreMessage);
- var moreMessageLabelLeft=firstIconData.width+(limit-1)*horizontalIncrement+metrics.iconLabelGap;
- var moreMessageLabelTop=totalLabelHeight;
- totalLabelHeight+=moreMessageLabelSize.height;
- totalLabelWidth=Math.max(totalLabelWidth,moreMessageLabelLeft+moreMessageLabelSize.width);
- }totalLabelWidth+=metrics.labelRightMargin;
- totalLabelHeight+=metrics.labelBottomMargin;
- totalIconHeight+=metrics.iconBottomMargin;
- var anchorPixel=getPixelOffset(events[0].getStart());
- var newTracks=[];
- var trackCount=Math.ceil(Math.max(totalIconHeight,totalLabelHeight)/metrics.trackHeight);
- var rightIconEdge=firstIconData.width+(events.length-1)*horizontalIncrement;
- for(var i=0;
- i<trackCount;
- i++){newTracks.push({start:leftIconEdge,end:rightIconEdge});
- }var labelTrackCount=Math.ceil(totalLabelHeight/metrics.trackHeight);
- for(var i=0;
- i<labelTrackCount;
- i++){var track=newTracks[i];
- track.end=Math.max(track.end,totalLabelWidth);
- }var firstTrack=this._fitTracks(anchorPixel,newTracks);
- var verticalPixelOffset=firstTrack*metrics.trackHeight+metrics.trackOffset;
- var iconStackDiv=this._timeline.getDocument().createElement("div");
- iconStackDiv.className="timeline-event-icon-stack";
- iconStackDiv.style.position="absolute";
- iconStackDiv.style.overflow="visible";
- iconStackDiv.style.left=anchorPixel+"px";
- iconStackDiv.style.top=verticalPixelOffset+"px";
- iconStackDiv.style.width=rightIconEdge+"px";
- iconStackDiv.style.height=totalIconHeight+"px";
- iconStackDiv.innerHTML="<div style='position: relative'></div>";
- this._eventLayer.appendChild(iconStackDiv);
- var self=this;
- var onMouseOver=function(domEvt){try{var n=parseInt(this.getAttribute("index"));
- var childNodes=iconStackDiv.firstChild.childNodes;
- for(var i=0;
- i<childNodes.length;
- i++){var child=childNodes[i];
- if(i==n){child.style.zIndex=childNodes.length;
- }else{child.style.zIndex=childNodes.length-i;
- }}}catch(e){}};
- var paintEvent=function(index){var record=records[index];
- var evt=events[index];
- var tooltip=evt.getProperty("tooltip")||evt.getText();
- var labelElmtData=self._paintEventLabel({tooltip:tooltip},{text:record.text},anchorPixel+record.labelLeft,verticalPixelOffset+record.top,record.labelSize.width,record.labelSize.height,theme);
- labelElmtData.elmt.setAttribute("index",index);
- labelElmtData.elmt.onmouseover=onMouseOver;
- var img=SimileAjax.Graphics.createTranslucentImage(record.iconData.url);
- var iconDiv=self._timeline.getDocument().createElement("div");
- iconDiv.className="timeline-event-icon"+("className" in record.iconData?(" "+record.iconData.className):"");
- iconDiv.style.left=record.iconLeft+"px";
- iconDiv.style.top=record.top+"px";
- iconDiv.style.zIndex=(records.length-index);
- iconDiv.appendChild(img);
- iconDiv.setAttribute("index",index);
- iconDiv.onmouseover=onMouseOver;
- iconStackDiv.firstChild.appendChild(iconDiv);
- var clickHandler=function(elmt,domEvt,target){return self._onClickInstantEvent(labelElmtData.elmt,domEvt,evt);
- };
- SimileAjax.DOM.registerEvent(iconDiv,"mousedown",clickHandler);
- SimileAjax.DOM.registerEvent(labelElmtData.elmt,"mousedown",clickHandler);
- self._eventIdToElmt[evt.getID()]=iconDiv;
- };
- for(var i=0;
- i<records.length;
- i++){paintEvent(i);
- }if(showMoreMessage){var moreEvents=events.slice(limit);
- var moreMessageLabelElmtData=this._paintEventLabel({tooltip:moreMessage},{text:moreMessage},anchorPixel+moreMessageLabelLeft,verticalPixelOffset+moreMessageLabelTop,moreMessageLabelSize.width,moreMessageLabelSize.height,theme);
- var moreMessageClickHandler=function(elmt,domEvt,target){return self._onClickMultiplePreciseInstantEvent(moreMessageLabelElmtData.elmt,domEvt,moreEvents);
- };
- SimileAjax.DOM.registerEvent(moreMessageLabelElmtData.elmt,"mousedown",moreMessageClickHandler);
- for(var i=0;
- i<moreEvents.length;
- i++){this._eventIdToElmt[moreEvents[i].getID()]=moreMessageLabelElmtData.elmt;
- }}};
- Timeline.CompactEventPainter.prototype.paintImpreciseInstantEvent=function(evt,metrics,theme,highlightIndex){var commonData={tooltip:evt.getProperty("tooltip")||evt.getText()};
- var tapeData={start:evt.getStart(),end:evt.getEnd(),latestStart:evt.getLatestStart(),earliestEnd:evt.getEarliestEnd(),color:evt.getColor()||evt.getTextColor(),isInstant:true};
- var iconData={url:evt.getIcon()};
- if(iconData.url==null){iconData=null;
- }else{iconData.width=evt.getProperty("iconWidth")||metrics.customIconWidth;
- iconData.height=evt.getProperty("iconHeight")||metrics.customIconHeight;
- }var labelData={text:evt.getText(),color:evt.getTextColor()||evt.getColor(),className:evt.getClassName()};
- var result=this.paintTapeIconLabel(evt.getStart(),commonData,tapeData,iconData,labelData,metrics,theme,highlightIndex);
- var self=this;
- var clickHandler=iconData!=null?function(elmt,domEvt,target){return self._onClickInstantEvent(result.iconElmtData.elmt,domEvt,evt);
- }:function(elmt,domEvt,target){return self._onClickInstantEvent(result.labelElmtData.elmt,domEvt,evt);
- };
- SimileAjax.DOM.registerEvent(result.labelElmtData.elmt,"mousedown",clickHandler);
- SimileAjax.DOM.registerEvent(result.impreciseTapeElmtData.elmt,"mousedown",clickHandler);
- if(iconData!=null){SimileAjax.DOM.registerEvent(result.iconElmtData.elmt,"mousedown",clickHandler);
- this._eventIdToElmt[evt.getID()]=result.iconElmtData.elmt;
- }else{this._eventIdToElmt[evt.getID()]=result.labelElmtData.elmt;
- }};
- Timeline.CompactEventPainter.prototype.paintPreciseDurationEvent=function(evt,metrics,theme,highlightIndex){var commonData={tooltip:evt.getProperty("tooltip")||evt.getText()};
- var tapeData={start:evt.getStart(),end:evt.getEnd(),color:evt.getColor()||evt.getTextColor(),isInstant:false};
- var iconData={url:evt.getIcon()};
- if(iconData.url==null){iconData=null;
- }else{iconData.width=evt.getProperty("iconWidth")||metrics.customIconWidth;
- iconData.height=evt.getProperty("iconHeight")||metrics.customIconHeight;
- }var labelData={text:evt.getText(),color:evt.getTextColor()||evt.getColor(),className:evt.getClassName()};
- var result=this.paintTapeIconLabel(evt.getLatestStart(),commonData,tapeData,iconData,labelData,metrics,theme,highlightIndex);
- var self=this;
- var clickHandler=iconData!=null?function(elmt,domEvt,target){return self._onClickInstantEvent(result.iconElmtData.elmt,domEvt,evt);
- }:function(elmt,domEvt,target){return self._onClickInstantEvent(result.labelElmtData.elmt,domEvt,evt);
- };
- SimileAjax.DOM.registerEvent(result.labelElmtData.elmt,"mousedown",clickHandler);
- SimileAjax.DOM.registerEvent(result.tapeElmtData.elmt,"mousedown",clickHandler);
- if(iconData!=null){SimileAjax.DOM.registerEvent(result.iconElmtData.elmt,"mousedown",clickHandler);
- this._eventIdToElmt[evt.getID()]=result.iconElmtData.elmt;
- }else{this._eventIdToElmt[evt.getID()]=result.labelElmtData.elmt;
- }};
- Timeline.CompactEventPainter.prototype.paintImpreciseDurationEvent=function(evt,metrics,theme,highlightIndex){var commonData={tooltip:evt.getProperty("tooltip")||evt.getText()};
- var tapeData={start:evt.getStart(),end:evt.getEnd(),latestStart:evt.getLatestStart(),earliestEnd:evt.getEarliestEnd(),color:evt.getColor()||evt.getTextColor(),isInstant:false};
- var iconData={url:evt.getIcon()};
- if(iconData.url==null){iconData=null;
- }else{iconData.width=evt.getProperty("iconWidth")||metrics.customIconWidth;
- iconData.height=evt.getProperty("iconHeight")||metrics.customIconHeight;
- }var labelData={text:evt.getText(),color:evt.getTextColor()||evt.getColor(),className:evt.getClassName()};
- var result=this.paintTapeIconLabel(evt.getLatestStart(),commonData,tapeData,iconData,labelData,metrics,theme,highlightIndex);
- var self=this;
- var clickHandler=iconData!=null?function(elmt,domEvt,target){return self._onClickInstantEvent(result.iconElmtData.elmt,domEvt,evt);
- }:function(elmt,domEvt,target){return self._onClickInstantEvent(result.labelElmtData.elmt,domEvt,evt);
- };
- SimileAjax.DOM.registerEvent(result.labelElmtData.elmt,"mousedown",clickHandler);
- SimileAjax.DOM.registerEvent(result.tapeElmtData.elmt,"mousedown",clickHandler);
- if(iconData!=null){SimileAjax.DOM.registerEvent(result.iconElmtData.elmt,"mousedown",clickHandler);
- this._eventIdToElmt[evt.getID()]=result.iconElmtData.elmt;
- }else{this._eventIdToElmt[evt.getID()]=result.labelElmtData.elmt;
- }};
- Timeline.CompactEventPainter.prototype.paintTapeIconLabel=function(anchorDate,commonData,tapeData,iconData,labelData,metrics,theme,highlightIndex){var band=this._band;
- var getPixelOffset=function(date){return Math.round(band.dateToPixelOffset(date));
- };
- var anchorPixel=getPixelOffset(anchorDate);
- var newTracks=[];
- var tapeHeightOccupied=0;
- var tapeTrackCount=0;
- var tapeLastTrackExtraSpace=0;
- if(tapeData!=null){tapeHeightOccupied=metrics.tapeHeight+metrics.tapeBottomMargin;
- tapeTrackCount=Math.ceil(metrics.tapeHeight/metrics.trackHeight);
- var tapeEndPixelOffset=getPixelOffset(tapeData.end)-anchorPixel;
- var tapeStartPixelOffset=getPixelOffset(tapeData.start)-anchorPixel;
- for(var t=0;
- t<tapeTrackCount;
- t++){newTracks.push({start:tapeStartPixelOffset,end:tapeEndPixelOffset});
- }tapeLastTrackExtraSpace=metrics.trackHeight-(tapeHeightOccupied%metrics.tapeHeight);
- }var iconStartPixelOffset=0;
- var iconHorizontalSpaceOccupied=0;
- if(iconData!=null){if("iconAlign" in iconData&&iconData.iconAlign=="center"){iconStartPixelOffset=-Math.floor(iconData.width/2);
- }iconHorizontalSpaceOccupied=iconStartPixelOffset+iconData.width+metrics.iconLabelGap;
- if(tapeTrackCount>0){newTracks[tapeTrackCount-1].end=Math.max(newTracks[tapeTrackCount-1].end,iconHorizontalSpaceOccupied);
- }var iconHeight=iconData.height+metrics.iconBottomMargin+tapeLastTrackExtraSpace;
- while(iconHeight>0){newTracks.push({start:iconStartPixelOffset,end:iconHorizontalSpaceOccupied});
- iconHeight-=metrics.trackHeight;
- }}var text=labelData.text;
- var labelSize=this._frc.computeSize(text);
- var labelHeight=labelSize.height+metrics.labelBottomMargin+tapeLastTrackExtraSpace;
- var labelEndPixelOffset=iconHorizontalSpaceOccupied+labelSize.width+metrics.labelRightMargin;
- if(tapeTrackCount>0){newTracks[tapeTrackCount-1].end=Math.max(newTracks[tapeTrackCount-1].end,labelEndPixelOffset);
- }for(var i=0;
- labelHeight>0;
- i++){if(tapeTrackCount+i<newTracks.length){var track=newTracks[tapeTrackCount+i];
- track.end=labelEndPixelOffset;
- }else{newTracks.push({start:0,end:labelEndPixelOffset});
- }labelHeight-=metrics.trackHeight;
- }var firstTrack=this._fitTracks(anchorPixel,newTracks);
- var verticalPixelOffset=firstTrack*metrics.trackHeight+metrics.trackOffset;
- var result={};
- result.labelElmtData=this._paintEventLabel(commonData,labelData,anchorPixel+iconHorizontalSpaceOccupied,verticalPixelOffset+tapeHeightOccupied,labelSize.width,labelSize.height,theme);
- if(tapeData!=null){if("latestStart" in tapeData||"earliestEnd" in tapeData){result.impreciseTapeElmtData=this._paintEventTape(commonData,tapeData,metrics.tapeHeight,verticalPixelOffset,getPixelOffset(tapeData.start),getPixelOffset(tapeData.end),theme.event.duration.impreciseColor,theme.event.duration.impreciseOpacity,metrics,theme);
- }if(!tapeData.isInstant&&"start" in tapeData&&"end" in tapeData){result.tapeElmtData=this._paintEventTape(commonData,tapeData,metrics.tapeHeight,verticalPixelOffset,anchorPixel,getPixelOffset("earliestEnd" in tapeData?tapeData.earliestEnd:tapeData.end),tapeData.color,100,metrics,theme);
- }}if(iconData!=null){result.iconElmtData=this._paintEventIcon(commonData,iconData,verticalPixelOffset+tapeHeightOccupied,anchorPixel+iconStartPixelOffset,metrics,theme);
- }return result;
- };
- Timeline.CompactEventPainter.prototype._fitTracks=function(anchorPixel,newTracks){var firstTrack;
- for(firstTrack=0;
- firstTrack<this._tracks.length;
- firstTrack++){var fit=true;
- for(var j=0;
- j<newTracks.length&&(firstTrack+j)<this._tracks.length;
- j++){var existingTrack=this._tracks[firstTrack+j];
- var newTrack=newTracks[j];
- if(anchorPixel+newTrack.start<existingTrack){fit=false;
- break;
- }}if(fit){break;
- }}for(var i=0;
- i<newTracks.length;
- i++){this._tracks[firstTrack+i]=anchorPixel+newTracks[i].end;
- }return firstTrack;
- };
- Timeline.CompactEventPainter.prototype._paintEventIcon=function(commonData,iconData,top,left,metrics,theme){var img=SimileAjax.Graphics.createTranslucentImage(iconData.url);
- var iconDiv=this._timeline.getDocument().createElement("div");
- iconDiv.className="timeline-event-icon"+("className" in iconData?(" "+iconData.className):"");
- iconDiv.style.left=left+"px";
- iconDiv.style.top=top+"px";
- iconDiv.appendChild(img);
- if("tooltip" in commonData&&typeof commonData.tooltip=="string"){iconDiv.title=commonData.tooltip;
- }this._eventLayer.appendChild(iconDiv);
- return{left:left,top:top,width:metrics.iconWidth,height:metrics.iconHeight,elmt:iconDiv};
- };
- Timeline.CompactEventPainter.prototype._paintEventLabel=function(commonData,labelData,left,top,width,height,theme){var doc=this._timeline.getDocument();
- var labelDiv=doc.createElement("div");
- labelDiv.className="timeline-event-label";
- labelDiv.style.left=left+"px";
- labelDiv.style.width=(width+1)+"px";
- labelDiv.style.top=top+"px";
- labelDiv.innerHTML=labelData.text;
- if("tooltip" in commonData&&typeof commonData.tooltip=="string"){labelDiv.title=commonData.tooltip;
- }if("color" in labelData&&typeof labelData.color=="string"){labelDiv.style.color=labelData.color;
- }if("className" in labelData&&typeof labelData.className=="string"){labelDiv.className+=" "+labelData.className;
- }this._eventLayer.appendChild(labelDiv);
- return{left:left,top:top,width:width,height:height,elmt:labelDiv};
- };
- Timeline.CompactEventPainter.prototype._paintEventTape=function(commonData,tapeData,height,top,startPixel,endPixel,color,opacity,metrics,theme){var width=endPixel-startPixel;
- var tapeDiv=this._timeline.getDocument().createElement("div");
- tapeDiv.className="timeline-event-tape";
- tapeDiv.style.left=startPixel+"px";
- tapeDiv.style.top=top+"px";
- tapeDiv.style.width=width+"px";
- tapeDiv.style.height=height+"px";
- if("tooltip" in commonData&&typeof commonData.tooltip=="string"){tapeDiv.title=commonData.tooltip;
- }if(color!=null&&typeof tapeData.color=="string"){tapeDiv.style.backgroundColor=color;
- }if("backgroundImage" in tapeData&&typeof tapeData.backgroundImage=="string"){tapeDiv.style.backgroundImage="url("+backgroundImage+")";
- tapeDiv.style.backgroundRepeat=("backgroundRepeat" in tapeData&&typeof tapeData.backgroundRepeat=="string")?tapeData.backgroundRepeat:"repeat";
- }SimileAjax.Graphics.setOpacity(tapeDiv,opacity);
- if("className" in tapeData&&typeof tapeData.className=="string"){tapeDiv.className+=" "+tapeData.className;
- }this._eventLayer.appendChild(tapeDiv);
- return{left:startPixel,top:top,width:width,height:height,elmt:tapeDiv};
- };
- Timeline.CompactEventPainter.prototype._createHighlightDiv=function(highlightIndex,dimensions,theme){if(highlightIndex>=0){var doc=this._timeline.getDocument();
- var eventTheme=theme.event;
- var color=eventTheme.highlightColors[Math.min(highlightIndex,eventTheme.highlightColors.length-1)];
- var div=doc.createElement("div");
- div.style.position="absolute";
- div.style.overflow="hidden";
- div.style.left=(dimensions.left-2)+"px";
- div.style.width=(dimensions.width+4)+"px";
- div.style.top=(dimensions.top-2)+"px";
- div.style.height=(dimensions.height+4)+"px";
- this._highlightLayer.appendChild(div);
- }};
- Timeline.CompactEventPainter.prototype._onClickMultiplePreciseInstantEvent=function(icon,domEvt,events){var c=SimileAjax.DOM.getPageCoordinates(icon);
- this._showBubble(c.left+Math.ceil(icon.offsetWidth/2),c.top+Math.ceil(icon.offsetHeight/2),…
Large files files are truncated, but you can click here to view the full file