/* timeline.js */ Timeline.strings={}; Timeline.create=function(elmt,bandInfos,orientation,unit){ window.__simile_api_state = "used"; return new Timeline._Impl(elmt,bandInfos,orientation,unit); }; Timeline.HORIZONTAL=0; Timeline.VERTICAL=1; Timeline._defaultTheme=null; Timeline.createBandInfo=function(params){ var theme=("theme"in params)?params.theme:Timeline.getDefaultTheme(); var eventSource=("eventSource"in params)?params.eventSource:null; var ether=new Timeline.LinearEther({ centersOn:("date"in params)?params.date:new Date(), interval:Timeline.DateTime.gregorianUnitLengths[params.intervalUnit], pixelsPerInterval:params.intervalPixels }); var etherPainter=new Timeline.GregorianEtherPainter({ unit:params.intervalUnit, multiple:("multiple"in params)?params.multiple:1, theme:theme, align:("align"in params)?params.align:undefined }); var layout=new Timeline.StaticTrackBasedLayout({ eventSource:eventSource, ether:ether, showText:("showEventText"in params)?params.showEventText:true, theme:theme }); var eventPainterParams={ showText:("showEventText"in params)?params.showEventText:true, layout:layout, theme:theme }; if("trackHeight"in params){ eventPainterParams.trackHeight=params.trackHeight; } if("trackGap"in params){ eventPainterParams.trackGap=params.trackGap; } var eventPainter=new Timeline.DurationEventPainter(eventPainterParams); return{ width:params.width, eventSource:eventSource, timeZone:("timeZone"in params)?params.timeZone:0, ether:ether, etherPainter:etherPainter, eventPainter:eventPainter }; }; Timeline.createHotZoneBandInfo=function(params){ var theme=("theme"in params)?params.theme:Timeline.getDefaultTheme(); var eventSource=("eventSource"in params)?params.eventSource:null; var ether=new Timeline.HotZoneEther({ centersOn:("date"in params)?params.date:new Date(), interval:Timeline.DateTime.gregorianUnitLengths[params.intervalUnit], pixelsPerInterval:params.intervalPixels, zones:params.zones }); var etherPainter=new Timeline.HotZoneGregorianEtherPainter({ unit:params.intervalUnit, zones:params.zones, theme:theme, align:("align"in params)?params.align:undefined }); var layout=new Timeline.StaticTrackBasedLayout({ eventSource:eventSource, ether:ether, theme:theme }); var eventPainterParams={ showText:("showEventText"in params)?params.showEventText:true, layout:layout, theme:theme }; if("trackHeight"in params){ eventPainterParams.trackHeight=params.trackHeight; } if("trackGap"in params){ eventPainterParams.trackGap=params.trackGap; } var eventPainter=new Timeline.DurationEventPainter(eventPainterParams); return{ width:params.width, eventSource:eventSource, timeZone:("timeZone"in params)?params.timeZone:0, ether:ether, etherPainter:etherPainter, eventPainter:eventPainter }; }; Timeline.getDefaultTheme=function(){ if(Timeline._defaultTheme==null){ Timeline._defaultTheme=Timeline.ClassicTheme.create(Timeline.Platform.getDefaultLocale()); } return Timeline._defaultTheme; }; Timeline.setDefaultTheme=function(theme){ Timeline._defaultTheme=theme; }; Timeline.loadXML=function(url,f){ var fError=function(statusText,status,xmlhttp){ alert("Failed to load data xml from "+url+"\n"+statusText); }; var fDone=function(xmlhttp){ var xml=xmlhttp.responseXML; if(!xml.documentElement&&xmlhttp.responseStream){ xml.load(xmlhttp.responseStream); } f(xml,url); }; Timeline.XmlHttp.get(url,fError,fDone); }; Timeline.loadJSON=function(url,f){ var fError=function(statusText,status,xmlhttp){ alert("Failed to load json data from "+url+"\n"+statusText); }; var fDone=function(xmlhttp){ f(eval('('+xmlhttp.responseText+')'),url); }; Timeline.XmlHttp.get(url,fError,fDone); }; Timeline._Impl=function(elmt,bandInfos,orientation,unit){ this._containerDiv=elmt; this._bandInfos=bandInfos; this._orientation=orientation==null?Timeline.HORIZONTAL:orientation; this._unit=(unit!=null)?unit:Timeline.NativeDateUnit; this._initialize(); }; Timeline._Impl.prototype.dispose=function(){ for(var i=0;i Loading..."; this.showLoadingMessage=function(){message.containerDiv.style.display="block";}; this.hideLoadingMessage=function(){message.containerDiv.style.display="none";}; }; Timeline._Impl.prototype._distributeWidths=function(){ var length=this.getPixelLength(); var width=this.getPixelWidth(); var cumulativeWidth=0; for(var i=0;i0){ var percent=parseInt(widthString.substr(0,x)); var bandWidth=percent*width/100; }else{ var bandWidth=parseInt(widthString); } band.setBandShiftAndWidth(cumulativeWidth,bandWidth); band.setViewLength(length); cumulativeWidth+=bandWidth; } }; Timeline._Band=function(timeline,bandInfo,index){ this._timeline=timeline; this._bandInfo=bandInfo; this._index=index; this._locale=("locale"in bandInfo)?bandInfo.locale:Timeline.Platform.getDefaultLocale(); this._timeZone=("timeZone"in bandInfo)?bandInfo.timeZone:0; this._labeller=("labeller"in bandInfo)?bandInfo.labeller: timeline.getUnit().createLabeller(this._locale,this._timeZone); this._dragging=false; this._changing=false; this._originalScrollSpeed=5; this._scrollSpeed=this._originalScrollSpeed; this._onScrollListeners=[]; var b=this; this._syncWithBand=null; this._syncWithBandHandler=function(band){ b._onHighlightBandScroll(); }; 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); Timeline.DOM.registerEventWithObject(this._keyboardInput,"keydown",this,this._onKeyDown); Timeline.DOM.registerEventWithObject(this._keyboardInput,"keyup",this,this._onKeyUp); this._div=this._timeline.getDocument().createElement("div"); this._div.className="timeline-band"; this._timeline.addDiv(this._div); Timeline.DOM.registerEventWithObject(this._div,"mousedown",this,this._onMouseDown); Timeline.DOM.registerEventWithObject(this._div,"mousemove",this,this._onMouseMove); Timeline.DOM.registerEventWithObject(this._div,"mouseup",this,this._onMouseUp); Timeline.DOM.registerEventWithObject(this._div,"mouseout",this,this._onMouseOut); Timeline.DOM.registerEventWithObject(this._div,"dblclick",this,this._onDblClick); 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(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; bandInfo.eventPainter.initialize(this,timeline); this._decorators=("decorators"in bandInfo)?bandInfo.decorators:[]; for(var i=0;i3*this._viewLength/2){ this.setCenterVisibleDate(this.pixelOffsetToDate(pixelOffset-this._viewLength)); } this._autoScroll(Math.round(this._viewLength/2-this._ether.dateToPixelOffset(date))); }; Timeline._Band.prototype._onMouseDown=function(innerFrame,evt,target){ this.closeBubble(); this._dragging=true; this._dragX=evt.clientX; this._dragY=evt.clientY; }; Timeline._Band.prototype._onMouseMove=function(innerFrame,evt,target){ if(this._dragging){ var diffX=evt.clientX-this._dragX; var diffY=evt.clientY-this._dragY; this._dragX=evt.clientX; this._dragY=evt.clientY; this._moveEther(this._timeline.isHorizontal()?diffX:diffY); this._positionHighlight(); } }; Timeline._Band.prototype._onMouseUp=function(innerFrame,evt,target){ this._dragging=false; this._keyboardInput.focus(); }; Timeline._Band.prototype._onMouseOut=function(innerFrame,evt,target){ var coords=Timeline.DOM.getEventRelativeCoordinates(evt,innerFrame); coords.x+=this._viewOffset; if(coords.x<0||coords.x>innerFrame.offsetWidth|| coords.y<0||coords.y>innerFrame.offsetHeight){ this._dragging=false; } }; Timeline._Band.prototype._onDblClick=function(innerFrame,evt,target){ var coords=Timeline.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(); Timeline.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(); Timeline.DOM.cancelEvent(evt); return false; } return true; }; Timeline._Band.prototype._autoScroll=function(distance){ var b=this; var a=Timeline.Graphics.createAnimation(function(abs,diff){ b._moveEther(diff); },0,distance,1000); a.run(); }; Timeline._Band.prototype._moveEther=function(shift){ this.closeBubble(); 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._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._fireOnScroll=function(){ for(var i=0;i=0?i:s.length; }; if(Timeline.Platform.browser.isMozilla){ var offset=ua.indexOf("mozilla/"); if(offset>=0){ parseVersionString(ua.substring(offset+8,indexOf(ua," ",offset))); } } if(Timeline.Platform.browser.isIE){ var offset=ua.indexOf("msie "); if(offset>=0){ parseVersionString(ua.substring(offset+5,indexOf(ua,";",offset))); } } if(Timeline.Platform.browser.isNetscape){ var offset=ua.indexOf("rv:"); if(offset>=0){ parseVersionString(ua.substring(offset+3,indexOf(ua,")",offset))); } } if(Timeline.Platform.browser.isFirefox){ var offset=ua.indexOf("firefox/"); if(offset>=0){ parseVersionString(ua.substring(offset+8,indexOf(ua," ",offset))); } } })(); Timeline.Platform.getDefaultLocale=function(){ return Timeline.Platform.clientLocale; }; /* data-structure.js */ Timeline.SortedArray=function(compare,initialArray){ this._a=(initialArray instanceof Array)?initialArray:[]; this._compare=compare; }; Timeline.SortedArray.prototype.add=function(elmt){ var sa=this; var index=this.find(function(elmt2){ return sa._compare(elmt2,elmt); }); if(index0)?this._a[0]:null; }; Timeline.SortedArray.prototype.getLast=function(){ return(this._a.length>0)?this._a[this._a.length-1]:null; }; Timeline.EventIndex=function(unit){ var eventIndex=this; this._unit=(unit!=null)?unit:Timeline.NativeDateUnit; this._events=new Timeline.SortedArray( function(event1,event2){ return eventIndex._unit.compare(event1.getStart(),event2.getStart()); } ); this._indexed=true; }; Timeline.EventIndex.prototype.getUnit=function(){ return this._unit; }; Timeline.EventIndex.prototype.add=function(evt){ this._events.add(evt); this._indexed=false; }; Timeline.EventIndex.prototype.removeAll=function(){ this._events.removeAll(); this._indexed=false; }; Timeline.EventIndex.prototype.getCount=function(){ return this._events.length(); }; Timeline.EventIndex.prototype.getIterator=function(startDate,endDate){ if(!this._indexed){ this._index(); } return new Timeline.EventIndex._Iterator(this._events,startDate,endDate,this._unit); }; Timeline.EventIndex.prototype.getAllIterator=function(){ return new Timeline.EventIndex._AllIterator(this._events); }; Timeline.EventIndex.prototype.getEarliestDate=function(){ var evt=this._events.getFirst(); return(evt==null)?null:evt.getStart(); }; Timeline.EventIndex.prototype.getLatestDate=function(){ var evt=this._events.getLast(); if(evt==null){ return null; } if(!this._indexed){ this._index(); } var index=evt._earliestOverlapIndex; var date=this._events.elementAt(index).getEnd(); for(var i=index+1;i=0){ this._currentIndex=this._events.elementAt(this._currentIndex-1)._earliestOverlapIndex; } this._currentIndex--; this._maxIndex=events.find(function(evt){ return unit.compare(evt.getStart(),endDate); }); this._hasNext=false; this._next=null; this._findNext(); }; Timeline.EventIndex._Iterator.prototype={ hasNext:function(){return this._hasNext;}, next:function(){ if(this._hasNext){ var next=this._next; this._findNext(); return next; }else{ return null; } }, _findNext:function(){ var unit=this._unit; while((++this._currentIndex)0){ this._next=evt; this._hasNext=true; return; } } this._next=null; this._hasNext=false; } }; Timeline.EventIndex._AllIterator=function(events){ this._events=events; this._index=0; }; Timeline.EventIndex._AllIterator.prototype={ hasNext:function(){ return this._index0&&s.length<8){ var space=s.indexOf(" "); if(space>0){ var year=parseInt(s.substr(0,space)); var suffix=s.substr(space+1); if(suffix.toLowerCase()=="bc"){ year=1-year; } }else{ var year=parseInt(s); } var d=new Date(0); d.setUTCFullYear(year); return d; } try{ return new Date(Date.parse(s)); }catch(e){ return null; } }; Timeline.DateTime._iso8601DateRegExp="^(-?)([0-9]{4})("+[ "(-?([0-9]{2})(-?([0-9]{2}))?)", "(-?([0-9]{3}))", "(-?W([0-9]{2})(-?([1-7]))?)" ].join("|")+")?$"; Timeline.DateTime.setIso8601Date=function(dateObject,string){ var regexp=Timeline.DateTime._iso8601DateRegExp; var d=string.match(new RegExp(regexp)); if(!d){ throw new Error("Invalid date string: "+string); } var sign=(d[1]=="-")?-1:1; var year=sign*d[2]; var month=d[5]; var date=d[7]; var dayofyear=d[9]; var week=d[11]; var dayofweek=(d[13])?d[13]:1; dateObject.setUTCFullYear(year); if(dayofyear){ dateObject.setUTCMonth(0); dateObject.setUTCDate(Number(dayofyear)); }else if(week){ dateObject.setUTCMonth(0); dateObject.setUTCDate(1); var gd=dateObject.getUTCDay(); var day=(gd)?gd:7; var offset=Number(dayofweek)+(7*Number(week)); if(day<=4){ dateObject.setUTCDate(offset+1-day); }else{ dateObject.setUTCDate(offset+8-day); } }else{ if(month){ dateObject.setUTCDate(1); dateObject.setUTCMonth(month-1); } if(date){ dateObject.setUTCDate(date); } } return dateObject; }; Timeline.DateTime.setIso8601Time=function(dateObject,string){ var timezone="Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$"; var d=string.match(new RegExp(timezone)); var offset=0; if(d){ if(d[0]!='Z'){ offset=(Number(d[3])*60)+Number(d[5]); offset*=((d[2]=='-')?1:-1); } string=string.substr(0,string.length-d[0].length); } var regexp="^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(\.([0-9]+))?)?)?$"; var d=string.match(new RegExp(regexp)); if(!d){ dojo.debug("invalid time string: "+string); return false; } var hours=d[1]; var mins=Number((d[3])?d[3]:0); var secs=(d[5])?d[5]:0; var ms=d[7]?(Number("0."+d[7])*1000):0; dateObject.setUTCHours(hours); dateObject.setUTCMinutes(mins); dateObject.setUTCSeconds(secs); dateObject.setUTCMilliseconds(ms); return dateObject; }; Timeline.DateTime.setIso8601=function(dateObject,string){ var comps=(string.indexOf("T")==-1)?string.split(" "):string.split("T"); Timeline.DateTime.setIso8601Date(dateObject,comps[0]); if(comps.length==2){ Timeline.DateTime.setIso8601Time(dateObject,comps[1]); } return dateObject; }; Timeline.DateTime.parseIso8601DateTime=function(string){ try{ return Timeline.DateTime.setIso8601(new Date(0),string); }catch(e){ return null; } }; Timeline.DateTime.roundDownToInterval=function(date,intervalUnit,timeZone,multiple,firstDayOfWeek){ var timeShift=timeZone* Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.HOUR]; var date2=new Date(date.getTime()+timeShift); var clearInDay=function(d){ d.setUTCMilliseconds(0); d.setUTCSeconds(0); d.setUTCMinutes(0); d.setUTCHours(0); }; var clearInYear=function(d){ clearInDay(d); d.setUTCDate(1); d.setUTCMonth(0); }; switch(intervalUnit){ case Timeline.DateTime.MILLISECOND: var x=date2.getUTCMilliseconds(); date2.setUTCMilliseconds(x-(x%multiple)); break; case Timeline.DateTime.SECOND: date2.setUTCMilliseconds(0); var x=date2.getUTCSeconds(); date2.setUTCSeconds(x-(x%multiple)); break; case Timeline.DateTime.MINUTE: date2.setUTCMilliseconds(0); date2.setUTCSeconds(0); var x=date2.getUTCMinutes(); date2.setTime(date2.getTime()- (x%multiple)*Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.MINUTE]); break; case Timeline.DateTime.HOUR: date2.setUTCMilliseconds(0); date2.setUTCSeconds(0); date2.setUTCMinutes(0); var x=date2.getUTCHours(); date2.setUTCHours(x-(x%multiple)); break; case Timeline.DateTime.DAY: clearInDay(date2); break; case Timeline.DateTime.WEEK: clearInDay(date2); var d=(date2.getUTCDay()+7-firstDayOfWeek)%7; date2.setTime(date2.getTime()- d*Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.DAY]); break; case Timeline.DateTime.MONTH: clearInDay(date2); date2.setUTCDate(1); var x=date2.getUTCMonth(); date2.setUTCMonth(x-(x%multiple)); break; case Timeline.DateTime.YEAR: clearInYear(date2); var x=date2.getUTCFullYear(); date2.setUTCFullYear(x-(x%multiple)); break; case Timeline.DateTime.DECADE: clearInYear(date2); date2.setUTCFullYear(Math.floor(date2.getUTCFullYear()/10)*10); break; case Timeline.DateTime.CENTURY: clearInYear(date2); date2.setUTCFullYear(Math.floor(date2.getUTCFullYear()/100)*100); break; case Timeline.DateTime.MILLENNIUM: clearInYear(date2); date2.setUTCFullYear(Math.floor(date2.getUTCFullYear()/1000)*1000); break; } date.setTime(date2.getTime()-timeShift); }; Timeline.DateTime.roundUpToInterval=function(date,intervalUnit,timeZone,multiple,firstDayOfWeek){ var originalTime=date.getTime(); Timeline.DateTime.roundDownToInterval(date,intervalUnit,timeZone,multiple,firstDayOfWeek); if(date.getTime()6); Timeline.Graphics.createTranslucentImage=function(doc,url,verticalAlign){ var elmt; if(Timeline.Graphics.pngIsTranslucent){ elmt=doc.createElement("img"); elmt.setAttribute("src",url); }else{ elmt=doc.createElement("img"); elmt.style.display="inline"; elmt.style.width="1px"; elmt.style.height="1px"; elmt.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"', sizingMethod='image')"; } elmt.style.verticalAlign=(verticalAlign!=null)?verticalAlign:"middle"; return elmt; }; Timeline.Graphics.setOpacity=function(elmt,opacity){ if(Timeline.Platform.browser.isIE){ elmt.style.filter="progid:DXImageTransform.Microsoft.Alpha(Style=0,Opacity="+opacity+")"; }else{ var o=(opacity/100).toString(); elmt.style.opacity=o; elmt.style.MozOpacity=o; } }; Timeline.Graphics._bubbleMargins={ top:33, bottom:42, left:33, right:40 } Timeline.Graphics._arrowOffsets={ top:0, bottom:9, left:1, right:8 } Timeline.Graphics._bubblePadding=15; Timeline.Graphics._bubblePointOffset=6; Timeline.Graphics._halfArrowWidth=18; Timeline.Graphics.createBubbleForPoint=function(doc,pageX,pageY,contentWidth,contentHeight){ function getWindowDims(){ if(typeof window.innerWidth=='number'){ return{w:window.innerWidth,h:window.innerHeight}; }else if(document.documentElement&&document.documentElement.clientWidth){ return{ w:document.documentElement.clientWidth, h:document.documentElement.clientHeight }; }else if(document.body&&document.body.clientWidth){ return{ w:document.body.clientWidth, h:document.body.clientHeight }; } } var bubble={ _closed:false, _doc:doc, close:function(){ if(!this._closed){ this._doc.body.removeChild(this._div); this._doc=null; this._div=null; this._content=null; this._closed=true; } } }; var dims=getWindowDims(); var docWidth=dims.w; var docHeight=dims.h; var margins=Timeline.Graphics._bubbleMargins; contentWidth=parseInt(contentWidth,10); contentHeight=parseInt(contentHeight,10); var bubbleWidth=margins.left+contentWidth+margins.right; var bubbleHeight=margins.top+contentHeight+margins.bottom; var pngIsTranslucent=Timeline.Graphics.pngIsTranslucent; var urlPrefix=Timeline.urlPrefix; var setImg=function(elmt,url,width,height){ elmt.style.position="absolute"; elmt.style.width=width+"px"; elmt.style.height=height+"px"; if(pngIsTranslucent){ elmt.style.background="url("+url+")"; }else{ elmt.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"', sizingMethod='crop')"; } } var div=doc.createElement("div"); div.style.width=bubbleWidth+"px"; div.style.height=bubbleHeight+"px"; div.style.position="absolute"; div.style.zIndex=1000; bubble._div=div; var divInner=doc.createElement("div"); divInner.style.width="100%"; divInner.style.height="100%"; divInner.style.position="relative"; div.appendChild(divInner); var createImg=function(url,left,top,width,height){ var divImg=doc.createElement("div"); divImg.style.left=left+"px"; divImg.style.top=top+"px"; setImg(divImg,url,width,height); divInner.appendChild(divImg); } createImg(urlPrefix+"images/bubble-top-left.png",0,0,margins.left,margins.top); createImg(urlPrefix+"images/bubble-top.png",margins.left,0,contentWidth,margins.top); createImg(urlPrefix+"images/bubble-top-right.png",margins.left+contentWidth,0,margins.right,margins.top); createImg(urlPrefix+"images/bubble-left.png",0,margins.top,margins.left,contentHeight); createImg(urlPrefix+"images/bubble-right.png",margins.left+contentWidth,margins.top,margins.right,contentHeight); createImg(urlPrefix+"images/bubble-bottom-left.png",0,margins.top+contentHeight,margins.left,margins.bottom); createImg(urlPrefix+"images/bubble-bottom.png",margins.left,margins.top+contentHeight,contentWidth,margins.bottom); createImg(urlPrefix+"images/bubble-bottom-right.png",margins.left+contentWidth,margins.top+contentHeight,margins.right,margins.bottom); var divClose=doc.createElement("div"); divClose.style.left=(bubbleWidth-margins.right+Timeline.Graphics._bubblePadding-16-2)+"px"; divClose.style.top=(margins.top-Timeline.Graphics._bubblePadding+1)+"px"; divClose.style.cursor="pointer"; setImg(divClose,urlPrefix+"images/close-button.png",16,16); Timeline.DOM.registerEventWithObject(divClose,"click",bubble,bubble.close); divInner.appendChild(divClose); var divContent=doc.createElement("div"); divContent.style.position="absolute"; divContent.style.left=margins.left+"px"; divContent.style.top=margins.top+"px"; divContent.style.width=contentWidth+"px"; divContent.style.height=contentHeight+"px"; divContent.style.overflow="auto"; divContent.style.background="white"; divInner.appendChild(divContent); bubble.content=divContent; (function(){ if(pageX-Timeline.Graphics._halfArrowWidth-Timeline.Graphics._bubblePadding>0&& pageX+Timeline.Graphics._halfArrowWidth+Timeline.Graphics._bubblePadding0){ var divImg=doc.createElement("div"); divImg.style.left=(pageX-Timeline.Graphics._halfArrowWidth-left)+"px"; divImg.style.top=(margins.top+contentHeight)+"px"; setImg(divImg,urlPrefix+"images/bubble-bottom-arrow.png",37,margins.bottom); divInner.appendChild(divImg); div.style.left=left+"px"; div.style.top=(pageY-Timeline.Graphics._bubblePointOffset-bubbleHeight+ Timeline.Graphics._arrowOffsets.bottom)+"px"; return; }else if(pageY+Timeline.Graphics._bubblePointOffset+bubbleHeight0){ var divImg=doc.createElement("div"); divImg.style.left=(margins.left+contentWidth)+"px"; divImg.style.top=(pageY-Timeline.Graphics._halfArrowWidth-top)+"px"; setImg(divImg,urlPrefix+"images/bubble-right-arrow.png",margins.right,37); divInner.appendChild(divImg); div.style.left=(pageX-Timeline.Graphics._bubblePointOffset-bubbleWidth+ Timeline.Graphics._arrowOffsets.right)+"px"; div.style.top=top+"px"; }else{ var divImg=doc.createElement("div"); divImg.style.left="0px"; divImg.style.top=(pageY-Timeline.Graphics._halfArrowWidth-top)+"px"; setImg(divImg,urlPrefix+"images/bubble-left-arrow.png",margins.left,37); divInner.appendChild(divImg); div.style.left=(pageX+Timeline.Graphics._bubblePointOffset- Timeline.Graphics._arrowOffsets.left)+"px"; div.style.top=top+"px"; } })(); doc.body.appendChild(div); return bubble; }; Timeline.Graphics.createMessageBubble=function(doc){ var containerDiv=doc.createElement("div"); if(Timeline.Graphics.pngIsTranslucent){ var topDiv=doc.createElement("div"); topDiv.style.height="33px"; topDiv.style.background="url("+Timeline.urlPrefix+"images/message-top-left.png) top left no-repeat"; topDiv.style.paddingLeft="44px"; containerDiv.appendChild(topDiv); var topRightDiv=doc.createElement("div"); topRightDiv.style.height="33px"; topRightDiv.style.background="url("+Timeline.urlPrefix+"images/message-top-right.png) top right no-repeat"; topDiv.appendChild(topRightDiv); var middleDiv=doc.createElement("div"); middleDiv.style.background="url("+Timeline.urlPrefix+"images/message-left.png) top left repeat-y"; middleDiv.style.paddingLeft="44px"; containerDiv.appendChild(middleDiv); var middleRightDiv=doc.createElement("div"); middleRightDiv.style.background="url("+Timeline.urlPrefix+"images/message-right.png) top right repeat-y"; middleRightDiv.style.paddingRight="44px"; middleDiv.appendChild(middleRightDiv); var contentDiv=doc.createElement("div"); middleRightDiv.appendChild(contentDiv); var bottomDiv=doc.createElement("div"); bottomDiv.style.height="55px"; bottomDiv.style.background="url("+Timeline.urlPrefix+"images/message-bottom-left.png) bottom left no-repeat"; bottomDiv.style.paddingLeft="44px"; containerDiv.appendChild(bottomDiv); var bottomRightDiv=doc.createElement("div"); bottomRightDiv.style.height="55px"; bottomRightDiv.style.background="url("+Timeline.urlPrefix+"images/message-bottom-right.png) bottom right no-repeat"; bottomDiv.appendChild(bottomRightDiv); }else{ containerDiv.style.border="2px solid #7777AA"; containerDiv.style.padding="20px"; containerDiv.style.background="white"; Timeline.Graphics.setOpacity(containerDiv,90); var contentDiv=doc.createElement("div"); containerDiv.appendChild(contentDiv); } return{ containerDiv:containerDiv, contentDiv:contentDiv }; }; Timeline.Graphics.createAnimation=function(f,from,to,duration){ return new Timeline.Graphics._Animation(f,from,to,duration); }; Timeline.Graphics._Animation=function(f,from,to,duration){ this.f=f; this.from=from; this.to=to; this.current=from; this.duration=duration; this.start=new Date().getTime(); this.timePassed=0; }; Timeline.Graphics._Animation.prototype.run=function(){ var a=this; window.setTimeout(function(){a.step();},100); }; Timeline.Graphics._Animation.prototype.step=function(){ this.timePassed+=100; var timePassedFraction=this.timePassed/this.duration; var parameterFraction=-Math.cos(timePassedFraction*Math.PI)/2+0.5; var current=parameterFraction*(this.to-this.from)+this.from; try{ this.f(current,current-this.current); }catch(e){ } this.current=current; if(this.timePassed0){ minDate=this._unit.later(minDate,this._startDate); maxDate=this._unit.earlier(maxDate,this._endDate); var minPixel=this._band.dateToPixelOffset(minDate); var maxPixel=this._band.dateToPixelOffset(maxDate); var doc=this._timeline.getDocument(); var createTable=function(){ var table=doc.createElement("table"); table.insertRow(0).insertCell(0); return table; }; var div=doc.createElement("div"); div.style.position="absolute"; div.style.overflow="hidden"; div.style.background=this._color; if(this._opacity<100){ Timeline.Graphics.setOpacity(div,this._opacity); } this._layerDiv.appendChild(div); var tableStartLabel=createTable(); tableStartLabel.style.position="absolute"; tableStartLabel.style.overflow="hidden"; tableStartLabel.style.fontSize="300%"; tableStartLabel.style.fontWeight="bold"; tableStartLabel.style.color=this._color; tableStartLabel.rows[0].cells[0].innerHTML=this._startLabel; this._layerDiv.appendChild(tableStartLabel); var tableEndLabel=createTable(); tableEndLabel.style.position="absolute"; tableEndLabel.style.overflow="hidden"; tableEndLabel.style.fontSize="300%"; tableEndLabel.style.fontWeight="bold"; tableEndLabel.style.color=this._color; tableEndLabel.rows[0].cells[0].innerHTML=this._endLabel; this._layerDiv.appendChild(tableEndLabel); if(this._timeline.isHorizontal()){ div.style.left=minPixel+"px"; div.style.width=(maxPixel-minPixel)+"px"; div.style.top="0px"; div.style.height="100%"; tableStartLabel.style.right=(this._band.getTotalViewLength()-minPixel)+"px"; tableStartLabel.style.width=(this._startLabel.length)+"em"; tableStartLabel.style.top="0px"; tableStartLabel.style.height="100%"; tableStartLabel.style.textAlign="right"; tableEndLabel.style.left=maxPixel+"px"; tableEndLabel.style.width=(this._endLabel.length)+"em"; tableEndLabel.style.top="0px"; tableEndLabel.style.height="100%"; }else{ div.style.top=minPixel+"px"; div.style.height=(maxPixel-minPixel)+"px"; div.style.left="0px"; div.style.width="100%"; tableStartLabel.style.bottom=minPixel+"px"; tableStartLabel.style.height="1.5px"; tableStartLabel.style.left="0px"; tableStartLabel.style.width="100%"; tableEndLabel.style.top=maxPixel+"px"; tableEndLabel.style.height="1.5px"; tableEndLabel.style.left="0px"; tableEndLabel.style.width="100%"; } } this._layerDiv.style.display="block"; }; Timeline.SpanHighlightDecorator.prototype.softPaint=function(){ }; Timeline.PointHighlightDecorator=function(params){ this._unit=("unit"in params)?params.unit:Timeline.NativeDateUnit; this._date=(typeof params.date=="string")? this._unit.parseFromObject(params.date):params.date; this._width=("width"in params)?params.width:10; this._color=params.color; this._opacity=("opacity"in params)?params.opacity:100; }; Timeline.PointHighlightDecorator.prototype.initialize=function(band,timeline){ this._band=band; this._timeline=timeline; this._layerDiv=null; }; Timeline.PointHighlightDecorator.prototype.paint=function(){ if(this._layerDiv!=null){ this._band.removeLayerDiv(this._layerDiv); } this._layerDiv=this._band.createLayerDiv(10); this._layerDiv.setAttribute("name","span-highlight-decorator"); this._layerDiv.style.display="none"; var minDate=this._band.getMinDate(); var maxDate=this._band.getMaxDate(); if(this._unit.compare(this._date,maxDate)<0&& this._unit.compare(this._date,minDate)>0){ var pixel=this._band.dateToPixelOffset(this._date); var minPixel=pixel-Math.round(this._width/2); var doc=this._timeline.getDocument(); var div=doc.createElement("div"); div.style.position="absolute"; div.style.overflow="hidden"; div.style.background=this._color; if(this._opacity<100){ Timeline.Graphics.setOpacity(div,this._opacity); } this._layerDiv.appendChild(div); if(this._timeline.isHorizontal()){ div.style.left=minPixel+"px"; div.style.width=this._width+"px"; div.style.top="0px"; div.style.height="100%"; }else{ div.style.top=minPixel+"px"; div.style.height=this._width+"px"; div.style.left="0px"; div.style.width="100%"; } } this._layerDiv.style.display="block"; }; Timeline.PointHighlightDecorator.prototype.softPaint=function(){ }; /* ether-painters.js */ Timeline.GregorianEtherPainter=function(params){ this._params=params; this._theme=params.theme; this._unit=params.unit; this._multiple=("multiple"in params)?params.multiple:1; }; Timeline.GregorianEtherPainter.prototype.initialize=function(band,timeline){ this._band=band; this._timeline=timeline; this._backgroundLayer=band.createLayerDiv(0); this._backgroundLayer.setAttribute("name","ether-background"); this._backgroundLayer.style.background=this._theme.ether.backgroundColors[band.getIndex()]; this._markerLayer=null; this._lineLayer=null; var align=("align"in this._params&&this._params.align!=undefined)?this._params.align: this._theme.ether.interval.marker[timeline.isHorizontal()?"hAlign":"vAlign"]; var showLine=("showLine"in this._params)?this._params.showLine: this._theme.ether.interval.line.show; this._intervalMarkerLayout=new Timeline.EtherIntervalMarkerLayout( this._timeline,this._band,this._theme,align,showLine); this._highlight=new Timeline.EtherHighlight( this._timeline,this._band,this._theme,this._backgroundLayer); } Timeline.GregorianEtherPainter.prototype.setHighlight=function(startDate,endDate){ this._highlight.position(startDate,endDate); } Timeline.GregorianEtherPainter.prototype.paint=function(){ if(this._markerLayer){ this._band.removeLayerDiv(this._markerLayer); } this._markerLayer=this._band.createLayerDiv(100); this._markerLayer.setAttribute("name","ether-markers"); this._markerLayer.style.display="none"; if(this._lineLayer){ this._band.removeLayerDiv(this._lineLayer); } this._lineLayer=this._band.createLayerDiv(1); this._lineLayer.setAttribute("name","ether-lines"); this._lineLayer.style.display="none"; var minDate=this._band.getMinDate(); var maxDate=this._band.getMaxDate(); var timeZone=this._band.getTimeZone(); var labeller=this._band.getLabeller(); Timeline.DateTime.roundDownToInterval(minDate,this._unit,timeZone,this._multiple,this._theme.firstDayOfWeek); var p=this; var incrementDate=function(date){ for(var i=0;izoneStart;j++){ var zone2=this._zones[j]; if(zoneStartzone2.startTime){ this._zones.splice(j,0,{ startTime:zone2.startTime, endTime:zoneStart, unit:zone2.unit, multiple:zone2.multiple }); j++; zone2.startTime=zoneStart; } if(zoneEnd=0){ if(maxDate.getTime()>this._zones[zEnd].startTime){ break; } zEnd--; } for(var z=zStart;z<=zEnd;z++){ var zone=this._zones[z]; var minDate2=new Date(Math.max(minDate.getTime(),zone.startTime)); var maxDate2=new Date(Math.min(maxDate.getTime(),zone.endTime)); Timeline.DateTime.roundDownToInterval(minDate2,zone.unit,timeZone,zone.multiple,this._theme.firstDayOfWeek); Timeline.DateTime.roundUpToInterval(maxDate2,zone.unit,timeZone,zone.multiple,this._theme.firstDayOfWeek); while(minDate2.getTime()0;j++){ var zone2=this._zones[j]; if(this._unit.compare(zoneStart,zone2.endTime)<0){ if(this._unit.compare(zoneStart,zone2.startTime)>0){ this._zones.splice(j,0,{ startTime:zone2.startTime, endTime:zoneStart, magnify:zone2.magnify }); j++; zone2.startTime=zoneStart; } if(this._unit.compare(zoneEnd,zone2.endTime)<0){ this._zones.splice(j,0,{ startTime:zoneStart, endTime:zoneEnd, magnify:zone.magnify*zone2.magnify }); j++; zone2.startTime=zoneEnd; zoneStart=zoneEnd; }else{ zone2.magnify*=zone.magnify; zoneStart=zone2.endTime; } } } } if("startsOn"in this._params){ this._start=this._unit.parseFromObject(this._params.startsOn); }else if("endsOn"in this._params){ this._start=this._unit.parseFromObject(this._params.endsOn); this.shiftPixels(-this._timeline.getPixelLength()); }else if("centersOn"in this._params){ this._start=this._unit.parseFromObject(this._params.centersOn); this.shiftPixels(-this._timeline.getPixelLength()/2); }else{ this._start=this._unit.makeDefaultValue(); this.shiftPixels(-this._timeline.getPixelLength()/2); } }; Timeline.HotZoneEther.prototype.setDate=function(date){ this._start=this._unit.cloneValue(date); }; Timeline.HotZoneEther.prototype.shiftPixels=function(pixels){ this._start=this.pixelOffsetToDate(pixels); }; Timeline.HotZoneEther.prototype.dateToPixelOffset=function(date){ return this._dateDiffToPixelOffset(this._start,date); }; Timeline.HotZoneEther.prototype.pixelOffsetToDate=function(pixels){ return this._pixelOffsetToDate(pixels,this._start); }; Timeline.HotZoneEther.prototype._dateDiffToPixelOffset=function(fromDate,toDate){ var scale=this._getScale(); var fromTime=fromDate; var toTime=toDate; var pixels=0; if(this._unit.compare(fromTime,toTime)<0){ var z=0; while(z=0){ if(this._unit.compare(fromTime,this._zones[z].startTime)>0){ break; } z--; } while(this._unit.compare(fromTime,toTime)>0){ var zone=this._zones[z]; var toTime2=this._unit.later(toTime,zone.startTime); pixels+=(this._unit.compare(toTime2,fromTime)/(scale/zone.magnify)); fromTime=toTime2; z--; } } return pixels; }; Timeline.HotZoneEther.prototype._pixelOffsetToDate=function(pixels,fromDate){ var scale=this._getScale(); var time=fromDate; if(pixels>0){ var z=0; while(z0){ var zone=this._zones[z]; var scale2=scale/zone.magnify; if(zone.endTime==Number.POSITIVE_INFINITY){ time=this._unit.change(time,pixels*scale2); pixels=0; }else{ var pixels2=this._unit.compare(zone.endTime,time)/scale2; if(pixels2>pixels){ time=this._unit.change(time,pixels*scale2); pixels=0; }else{ time=zone.endTime; pixels-=pixels2; } } z++; } }else{ var z=this._zones.length-1; while(z>=0){ if(this._unit.compare(time,this._zones[z].startTime)>0){ break; } z--; } pixels=-pixels; while(pixels>0){ var zone=this._zones[z]; var scale2=scale/zone.magnify; if(zone.startTime==Number.NEGATIVE_INFINITY){ time=this._unit.change(time,-pixels*scale2); pixels=0; }else{ var pixels2=this._unit.compare(time,zone.startTime)/scale2; if(pixels2>pixels){ time=this._unit.change(time,-pixels*scale2); pixels=0; }else{ time=zone.startTime; pixels-=pixels2; } } z--; } } return time; }; Timeline.HotZoneEther.prototype._getScale=function(){ return this._interval/this._pixelsPerInterval; }; /* labellers.js */ Timeline.GregorianDateLabeller=function(locale,timeZone){ this._locale=locale; this._timeZone=timeZone; }; Timeline.GregorianDateLabeller.monthNames=[]; Timeline.GregorianDateLabeller.dayNames=[]; Timeline.GregorianDateLabeller.labelIntervalFunctions=[]; Timeline.GregorianDateLabeller.getMonthName=function(month,locale){ return Timeline.GregorianDateLabeller.monthNames[locale][month]; }; Timeline.GregorianDateLabeller.prototype.labelInterval=function(date,intervalUnit){ var f=Timeline.GregorianDateLabeller.labelIntervalFunctions[this._locale]; if(f==null){ f=Timeline.GregorianDateLabeller.prototype.defaultLabelInterval; } return f.call(this,date,intervalUnit); }; Timeline.GregorianDateLabeller.prototype.labelPrecise=function(date){ return Timeline.DateTime.removeTimeZoneOffset( date, this._timeZone ).toUTCString(); }; Timeline.GregorianDateLabeller.prototype.defaultLabelInterval=function(date,intervalUnit){ var text; var emphasized=false; date=Timeline.DateTime.removeTimeZoneOffset(date,this._timeZone); switch(intervalUnit){ case Timeline.DateTime.MILLISECOND: text=date.getUTCMilliseconds(); break; case Timeline.DateTime.SECOND: text=date.getUTCSeconds(); break; case Timeline.DateTime.MINUTE: var m=date.getUTCMinutes(); if(m==0){ text=date.getUTCHours()+":00"; emphasized=true; }else{ text=m; } break; case Timeline.DateTime.HOUR: text=date.getUTCHours()+"hr"; break; case Timeline.DateTime.DAY: text=Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(),this._locale)+" "+date.getUTCDate(); break; case Timeline.DateTime.WEEK: text=Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(),this._locale)+" "+date.getUTCDate(); break; case Timeline.DateTime.MONTH: var m=date.getUTCMonth(); if(m!=0){ text=Timeline.GregorianDateLabeller.getMonthName(m,this._locale); break; } case Timeline.DateTime.YEAR: case Timeline.DateTime.DECADE: case Timeline.DateTime.CENTURY: case Timeline.DateTime.MILLENNIUM: var y=date.getUTCFullYear(); if(y>0){ text=date.getUTCFullYear(); }else{ text=(1-y)+"BC"; } emphasized= (intervalUnit==Timeline.DateTime.MONTH)|| (intervalUnit==Timeline.DateTime.DECADE&&y%100==0)|| (intervalUnit==Timeline.DateTime.CENTURY&&y%1000==0); break; default: text=date.toUTCString(); } return{text:text,emphasized:emphasized}; } /* layouts.js */ Timeline.StaticTrackBasedLayout=function(params){ this._eventSource=params.eventSource; this._ether=params.ether; this._theme=params.theme; this._showText=("showText"in params)?params.showText:true; this._laidout=false; var layout=this; if(this._eventSource!=null){ this._eventSource.addListener({ onAddMany:function(){ layout._laidout=false; } }); } }; Timeline.StaticTrackBasedLayout.prototype.initialize=function(timeline){ this._timeline=timeline; }; Timeline.StaticTrackBasedLayout.prototype.getTrack=function(evt){ if(!this._laidout){ this._tracks=[]; this._layout(); this._laidout=true; } return this._tracks[evt.getID()]; }; Timeline.StaticTrackBasedLayout.prototype.getTrackCount=function(){ if(!this._laidout){ this._tracks=[]; this._layout(); this._laidout=true; } return this._trackCount; }; Timeline.StaticTrackBasedLayout.prototype._layout=function(){ if(this._eventSource==null){ return; } var streams=[Number.NEGATIVE_INFINITY]; var layout=this; var showText=this._showText; var theme=this._theme; var eventTheme=theme.event; var layoutInstant=function(evt,startPixel,endPixel,streamOffset){ var finalPixel=startPixel-1; if(evt.isImprecise()){ finalPixel=endPixel; } if(showText){ finalPixel=Math.max(finalPixel,startPixel+eventTheme.label.width); } return finalPixel; }; var layoutDuration=function(evt,startPixel,endPixel,streamOffset){ if(evt.isImprecise()){ var startDate=evt.getStart(); var endDate=evt.getEnd(); var startPixel2=Math.round(layout._ether.dateToPixelOffset(startDate)); var endPixel2=Math.round(layout._ether.dateToPixelOffset(endDate)); }else{ var startPixel2=startPixel; var endPixel2=endPixel; } var finalPixel=endPixel2; var length=Math.max(endPixel2-startPixel2,1); if(showText){ if(length=streams.length){ streams.push(Number.NEGATIVE_INFINITY); } var streamOffset=(eventTheme.track.offset+ streamIndex*(eventTheme.track.height+eventTheme.track.gap))+"em"; layout._tracks[evt.getID()]=streamIndex; if(evt.isInstant()){ streams[streamIndex]=layoutInstant(evt,startPixel,endPixel,streamOffset); }else{ streams[streamIndex]=layoutDuration(evt,startPixel,endPixel,streamOffset); } }; var iterator=this._eventSource.getAllEventIterator(); while(iterator.hasNext()){ var evt=iterator.next(); layoutEvent(evt); } this._trackCount=streams.length; }; /* painters.js */ Timeline.DurationEventPainter=function(params){ this._params=params; this._theme=params.theme; this._layout=params.layout; this._showText=params.showText; this._showLineForNoText=("showLineForNoText"in params)? params.showLineForNoText:params.theme.event.instant.showLineForNoText; this._filterMatcher=null; this._highlightMatcher=null; }; Timeline.DurationEventPainter.prototype.initialize=function(band,timeline){ this._band=band; this._timeline=timeline; this._layout.initialize(band,timeline); this._eventLayer=null; this._highlightLayer=null; }; Timeline.DurationEventPainter.prototype.getLayout=function(){ return this._layout; }; Timeline.DurationEventPainter.prototype.setLayout=function(layout){ this._layout=layout; }; Timeline.DurationEventPainter.prototype.getFilterMatcher=function(){ return this._filterMatcher; }; Timeline.DurationEventPainter.prototype.setFilterMatcher=function(filterMatcher){ this._filterMatcher=filterMatcher; }; Timeline.DurationEventPainter.prototype.getHighlightMatcher=function(){ return this._highlightMatcher; }; Timeline.DurationEventPainter.prototype.setHighlightMatcher=function(highlightMatcher){ this._highlightMatcher=highlightMatcher; }; Timeline.DurationEventPainter.prototype.paint=function(){ var eventSource=this._band.getEventSource(); if(eventSource==null){ return; } if(this._highlightLayer!=null){ this._band.removeLayerDiv(this._highlightLayer); } this._highlightLayer=this._band.createLayerDiv(105); this._highlightLayer.setAttribute("name","event-highlights"); this._highlightLayer.style.display="none"; if(this._eventLayer!=null){ this._band.removeLayerDiv(this._eventLayer); } this._eventLayer=this._band.createLayerDiv(110); this._eventLayer.setAttribute("name","events"); this._eventLayer.style.display="none"; var minDate=this._band.getMinDate(); var maxDate=this._band.getMaxDate(); var doc=this._timeline.getDocument(); var p=this; var eventLayer=this._eventLayer; var highlightLayer=this._highlightLayer; var showText=this._showText; var theme=this._params.theme; var eventTheme=theme.event; var trackOffset=eventTheme.track.offset; var trackHeight=("trackHeight"in this._params)?this._params.trackHeight:eventTheme.track.height; var trackGap=("trackGap"in this._params)?this._params.trackGap:eventTheme.track.gap; var appendIcon=function(evt,div){ var icon=evt.getIcon(); var img=Timeline.Graphics.createTranslucentImage( doc,icon!=null?icon:eventTheme.instant.icon ); div.appendChild(img); div.style.cursor="pointer"; Timeline.DOM.registerEvent(div,"mousedown",function(elmt,domEvt,target){ p._onClickInstantEvent(img,domEvt,evt); }); }; var createHighlightDiv=function(highlightIndex,startPixel,length,highlightOffset,highlightWidth){ if(highlightIndex>=0){ 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=(startPixel-3)+"px"; div.style.width=(length+6)+"px"; div.style.top=highlightOffset+"em"; div.style.height=highlightWidth+"em"; div.style.background=color; highlightLayer.appendChild(div); } }; var createInstantDiv=function(evt,startPixel,endPixel,streamOffset,highlightIndex,highlightOffset,highlightWidth){ if(evt.isImprecise()){ var length=Math.max(endPixel-startPixel,1); var divImprecise=doc.createElement("div"); divImprecise.style.position="absolute"; divImprecise.style.overflow="hidden"; divImprecise.style.top=streamOffset; divImprecise.style.height=trackHeight+"em"; divImprecise.style.left=startPixel+"px"; divImprecise.style.width=length+"px"; divImprecise.style.background=eventTheme.instant.impreciseColor; if(eventTheme.instant.impreciseOpacity<100){ Timeline.Graphics.setOpacity(divImprecise,eventTheme.instant.impreciseOpacity); } eventLayer.appendChild(divImprecise); } var div=doc.createElement("div"); div.style.position="absolute"; div.style.overflow="hidden"; eventLayer.appendChild(div); var foreground=evt.getTextColor(); var background=evt.getColor(); var realign=-8; var length=16; if(showText){ div.style.width=eventTheme.label.width+"px"; div.style.color=foreground!=null?foreground:eventTheme.label.outsideColor; appendIcon(evt,div); div.appendChild(doc.createTextNode(evt.getText())); }else{ if(p._showLineForNoText){ div.style.width="10px"; div.style.borderLeft="10px solid "+(background!=null?background:eventTheme.instant.lineColor); realign=0; length=1; }else{ appendIcon(evt,div); } } div.style.top=streamOffset; div.style.height=trackHeight+"em"; div.style.left=(startPixel+realign)+"px"; createHighlightDiv(highlightIndex,(startPixel+realign),length,highlightOffset,highlightWidth); }; var createDurationDiv=function(evt,startPixel,endPixel,streamOffset,highlightIndex,highlightOffset,highlightWidth){ var attachClickEvent=function(elmt){ elmt.style.cursor="pointer"; Timeline.DOM.registerEvent(elmt,"mousedown",function(elmt,domEvt,target){ p._onClickDurationEvent(domEvt,evt,target); }); }; var length=Math.max(endPixel-startPixel,1); if(evt.isImprecise()){ var div=doc.createElement("div"); div.style.position="absolute"; div.style.overflow="hidden"; div.style.top=streamOffset; div.style.height=trackHeight+"em"; div.style.left=startPixel+"px"; div.style.width=length+"px"; div.style.background=eventTheme.duration.impreciseColor; if(eventTheme.duration.impreciseOpacity<100){ Timeline.Graphics.setOpacity(div,eventTheme.duration.impreciseOpacity); } eventLayer.appendChild(div); var startDate=evt.getLatestStart(); var endDate=evt.getEarliestEnd(); var startPixel2=Math.round(p._band.dateToPixelOffset(startDate)); var endPixel2=Math.round(p._band.dateToPixelOffset(endDate)); }else{ var startPixel2=startPixel; var endPixel2=endPixel; } var foreground=evt.getTextColor(); var outside=true; if(startPixel2<=endPixel2){ length=Math.max(endPixel2-startPixel2,1); outside=!(length>eventTheme.label.width); div=doc.createElement("div"); div.style.position="absolute"; div.style.overflow="hidden"; div.style.top=streamOffset; div.style.height=trackHeight+"em"; div.style.left=startPixel2+"px"; div.style.width=length+"px"; var background=evt.getColor(); div.style.background=background!=null?background:eventTheme.duration.color; if(eventTheme.duration.opacity<100){ Timeline.Graphics.setOpacity(div,eventTheme.duration.opacity); } eventLayer.appendChild(div); }else{ var temp=startPixel2; startPixel2=endPixel2; endPixel2=temp; } if(div==null){ console.log(evt); } attachClickEvent(div); if(showText){ var divLabel=doc.createElement("div"); divLabel.style.position="absolute"; divLabel.style.top=streamOffset; divLabel.style.height=trackHeight+"em"; divLabel.style.left=((length>eventTheme.label.width)?startPixel2:endPixel2)+"px"; divLabel.style.width=eventTheme.label.width+"px"; divLabel.style.color=foreground!=null?foreground:(outside?eventTheme.label.outsideColor:eventTheme.label.insideColor); divLabel.style.overflow="hidden"; divLabel.appendChild(doc.createTextNode(evt.getText())); eventLayer.appendChild(divLabel); attachClickEvent(divLabel); } createHighlightDiv(highlightIndex,startPixel,endPixel-startPixel,highlightOffset,highlightWidth); }; var createEventDiv=function(evt,highlightIndex){ var startDate=evt.getStart(); var endDate=evt.getEnd(); var startPixel=Math.round(p._band.dateToPixelOffset(startDate)); var endPixel=Math.round(p._band.dateToPixelOffset(endDate)); var streamOffset=(trackOffset+ p._layout.getTrack(evt)*(trackHeight+trackGap)); if(evt.isInstant()){ createInstantDiv(evt,startPixel,endPixel,streamOffset+"em", highlightIndex,streamOffset-trackGap,trackHeight+2*trackGap); }else{ createDurationDiv(evt,startPixel,endPixel,streamOffset+"em", highlightIndex,streamOffset-trackGap,trackHeight+2*trackGap); } }; 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); while(iterator.hasNext()){ var evt=iterator.next(); if(filterMatcher(evt)){ createEventDiv(evt,highlightMatcher(evt)); } } this._highlightLayer.style.display="block"; this._eventLayer.style.display="block"; }; Timeline.DurationEventPainter.prototype.softPaint=function(){ }; Timeline.DurationEventPainter.prototype._onClickInstantEvent=function(icon,domEvt,evt){ domEvt.cancelBubble=true; var c=Timeline.DOM.getPageCoordinates(icon); this._showBubble( c.left+Math.ceil(icon.offsetWidth/2), c.top+Math.ceil(icon.offsetHeight/2), evt ); }; Timeline.DurationEventPainter.prototype._onClickDurationEvent=function(domEvt,evt,target){ domEvt.cancelBubble=true; if("pageX"in domEvt){ var x=domEvt.pageX; var y=domEvt.pageY; }else{ var c=Timeline.DOM.getPageCoordinates(target); var x=domEvt.offsetX+c.left; var y=domEvt.offsetY+c.top; } this._showBubble(x,y,evt); }; Timeline.DurationEventPainter.prototype._showBubble=function(x,y,evt){ var div=this._band.openBubbleForPoint( x,y, this._theme.event.bubble.width, this._theme.event.bubble.height ); evt.fillInfoBubble(div,this._theme,this._band.getLabeller()); }; /* sources.js */ Timeline.DefaultEventSource=function(eventIndex){ this._events=(eventIndex instanceof Object)?eventIndex:new Timeline.EventIndex(); this._listeners=[]; }; Timeline.DefaultEventSource.prototype.addListener=function(listener){ this._listeners.push(listener); }; Timeline.DefaultEventSource.prototype.removeListener=function(listener){ for(var i=0;i0){ return url; }else if(url.substr(0,1)=="/"){ return base.substr(0,base.indexOf("/",base.indexOf("://")+3))+url; }else{ return base+url; } }; Timeline.DefaultEventSource.Event=function( start,end,latestStart,earliestEnd,instant, text,description,image,link, icon,color,textColor){ this._id="e"+Math.floor(Math.random()*1000000); this._instant=instant||(end==null); this._start=start; this._end=(end!=null)?end:start; this._latestStart=(latestStart!=null)?latestStart:(instant?this._end:this._start); this._earliestEnd=(earliestEnd!=null)?earliestEnd:(instant?this._start:this._end); this._text=Timeline.HTML.deEntify(text); this._description=Timeline.HTML.deEntify(description); this._image=(image!=null&&image!="")?image:null; this._link=(link!=null&&link!="")?link:null; this._icon=(icon!=null&&icon!="")?icon:null; this._color=(color!=null&&color!="")?color:null; this._textColor=(textColor!=null&&textColor!="")?textColor:null; this._wikiURL=null; this._wikiSection=null; }; Timeline.DefaultEventSource.Event.prototype={ getID:function(){return this._id;}, isInstant:function(){return this._instant;}, isImprecise:function(){return this._start!=this._latestStart||this._end!=this._earliestEnd;}, getStart:function(){return this._start;}, getEnd:function(){return this._end;}, getLatestStart:function(){return this._latestStart;}, getEarliestEnd:function(){return this._earliestEnd;}, getText:function(){return this._text;}, getDescription:function(){return this._description;}, getImage:function(){return this._image;}, getLink:function(){return this._link;}, getIcon:function(){return this._icon;}, getColor:function(){return this._color;}, getTextColor:function(){return this._textColor;}, getProperty:function(name){return null;}, getWikiURL:function(){return this._wikiURL;}, getWikiSection:function(){return this._wikiSection;}, setWikiInfo:function(wikiURL,wikiSection){ this._wikiURL=wikiURL; this._wikiSection=wikiSection; }, fillDescription:function(elmt){ elmt.innerHTML=this._description; }, fillWikiInfo:function(elmt){ if(this._wikiURL!=null&&this._wikiSection!=null){ var wikiID=this.getProperty("wikiID"); if(wikiID==null||wikiID.length==0){ wikiID=this.getText(); } wikiID=wikiID.replace(/\s/g,"_"); var url=this._wikiURL+this._wikiSection.replace(/\s/g,"_")+"/"+wikiID; var a=document.createElement("a"); a.href=url; a.target="new"; a.innerHTML=Timeline.strings[Timeline.Platform.clientLocale].wikiLinkLabel; elmt.appendChild(document.createTextNode("[")); elmt.appendChild(a); elmt.appendChild(document.createTextNode("]")); }else{ elmt.style.display="none"; } }, fillTime:function(elmt,labeller){ if(this._instant){ if(this.isImprecise()){ elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start))); elmt.appendChild(elmt.ownerDocument.createElement("br")); elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end))); }else{ elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start))); } }else{ if(this.isImprecise()){ elmt.appendChild(elmt.ownerDocument.createTextNode( labeller.labelPrecise(this._start)+" ~ "+labeller.labelPrecise(this._latestStart))); elmt.appendChild(elmt.ownerDocument.createElement("br")); elmt.appendChild(elmt.ownerDocument.createTextNode( labeller.labelPrecise(this._earliestEnd)+" ~ "+labeller.labelPrecise(this._end))); }else{ elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start))); elmt.appendChild(elmt.ownerDocument.createElement("br")); elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end))); } } }, fillInfoBubble:function(elmt,theme,labeller){ var doc=elmt.ownerDocument; var title=this.getText(); var link=this.getLink(); var image=this.getImage(); if(image!=null){ var img=doc.createElement("img"); img.src=image; theme.event.bubble.imageStyler(img); elmt.appendChild(img); } var divTitle=doc.createElement("div"); var textTitle=doc.createTextNode(title); if(link!=null){ var a=doc.createElement("a"); a.href=link; a.appendChild(textTitle); divTitle.appendChild(a); }else{ divTitle.appendChild(textTitle); } theme.event.bubble.titleStyler(divTitle); elmt.appendChild(divTitle); var divBody=doc.createElement("div"); this.fillDescription(divBody); theme.event.bubble.bodyStyler(divBody); elmt.appendChild(divBody); var divTime=doc.createElement("div"); this.fillTime(divTime,labeller); theme.event.bubble.timeStyler(divTime); elmt.appendChild(divTime); var divWiki=doc.createElement("div"); this.fillWikiInfo(divWiki); theme.event.bubble.wikiStyler(divWiki); elmt.appendChild(divWiki); } }; /* themes.js */ Timeline.ClassicTheme=new Object(); Timeline.ClassicTheme.implementations=[]; Timeline.ClassicTheme.create=function(locale){ if(locale==null){ locale=Timeline.Platform.getDefaultLocale(); } var f=Timeline.ClassicTheme.implementations[locale]; if(f==null){ f=Timeline.ClassicTheme._Impl; } return new f(); }; Timeline.ClassicTheme._Impl=function(){ this.firstDayOfWeek=0; this.ether={ backgroundColors:[ "#fff", "#daecf2", "#82cee7", "#fe3ef" ], highlightColor:"white", highlightOpacity:50, interval:{ line:{ show:true, color:"#aaa", opacity:25 }, weekend:{ color:"#FFFFE0", opacity:30 }, marker:{ hAlign:"Bottom", hBottomStyler:function(elmt){ elmt.className="timeline-ether-marker-bottom"; }, hBottomEmphasizedStyler:function(elmt){ elmt.className="timeline-ether-marker-bottom-emphasized"; }, hTopStyler:function(elmt){ elmt.className="timeline-ether-marker-top"; }, hTopEmphasizedStyler:function(elmt){ elmt.className="timeline-ether-marker-top-emphasized"; }, vAlign:"Right", vRightStyler:function(elmt){ elmt.className="timeline-ether-marker-right"; }, vRightEmphasizedStyler:function(elmt){ elmt.className="timeline-ether-marker-right-emphasized"; }, vLeftStyler:function(elmt){ elmt.className="timeline-ether-marker-left"; }, vLeftEmphasizedStyler:function(elmt){ elmt.className="timeline-ether-marker-left-emphasized"; } } } }; this.event={ track:{ offset:0.5, height:1.5, gap:0.5 }, instant:{ icon:Timeline.urlPrefix+"images/dull-blue-circle.png", lineColor:"#00AFE9", impreciseColor:"#00AFE9", impreciseOpacity:20, showLineForNoText:true }, duration:{ color:"#00AFE9", opacity:100, impreciseColor:"#00AFE9", impreciseOpacity:20 }, label:{ insideColor:"white", outsideColor:"#00AFE9", width:500 }, highlightColors:[ "#FFFF00", "#FFC000", "#FF0000", "#0000FF" ], bubble:{ width:250, height:200, titleStyler:function(elmt){ elmt.className="timeline-event-bubble-title"; }, bodyStyler:function(elmt){ elmt.className="timeline-event-bubble-body"; }, imageStyler:function(elmt){ elmt.className="timeline-event-bubble-image"; }, wikiStyler:function(elmt){ elmt.className="timeline-event-bubble-wiki"; }, timeStyler:function(elmt){ elmt.className="timeline-event-bubble-time"; } } }; }; /* units.js */ Timeline.NativeDateUnit=new Object(); Timeline.NativeDateUnit.createLabeller=function(locale,timeZone){ return new Timeline.GregorianDateLabeller(locale,timeZone); }; Timeline.NativeDateUnit.makeDefaultValue=function(){ return new Date(); }; Timeline.NativeDateUnit.cloneValue=function(v){ return new Date(v.getTime()); }; Timeline.NativeDateUnit.getParser=function(format){ if(typeof format=="string"){ format=format.toLowerCase(); } return(format=="iso8601"||format=="iso 8601")? Timeline.DateTime.parseIso8601DateTime: Timeline.DateTime.parseGregorianDateTime; }; Timeline.NativeDateUnit.parseFromObject=function(o){ return Timeline.DateTime.parseGregorianDateTime(o); }; Timeline.NativeDateUnit.toNumber=function(v){ return v.getTime(); }; Timeline.NativeDateUnit.fromNumber=function(n){ return new Date(n); }; Timeline.NativeDateUnit.compare=function(v1,v2){ var n1,n2; if(typeof v1=="object"){ n1=v1.getTime(); }else{ n1=Number(v1); } if(typeof v2=="object"){ n2=v2.getTime(); }else{ n2=Number(v2); } return n1-n2; }; Timeline.NativeDateUnit.earlier=function(v1,v2){ return Timeline.NativeDateUnit.compare(v1,v2)<0?v1:v2; }; Timeline.NativeDateUnit.later=function(v1,v2){ return Timeline.NativeDateUnit.compare(v1,v2)>0?v1:v2; }; Timeline.NativeDateUnit.change=function(v,n){ return new Date(v.getTime()+n); };