/*==================================================
* Span Highlight Decorator
*==================================================
*/
Timeline.SpanHighlightDecorator = function(params) {
this._startDate = Timeline.DateTime.parseGregorianDateTime(params.startDate);
this._endDate = Timeline.DateTime.parseGregorianDateTime(params.endDate);
this._startLabel = params.startLabel;
this._endLabel = params.endLabel;
this._color = params.color;
this._opacity = ("opacity" in params) ? params.opacity : 100;
};
Timeline.SpanHighlightDecorator.prototype.initialize = function(band, timeline) {
this._band = band;
this._timeline = timeline;
this._layerDiv = null;
};
Timeline.SpanHighlightDecorator.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"); // for debugging
this._layerDiv.style.display = "none";
var minDate = this._band.getMinDate();
var maxDate = this._band.getMaxDate();
if (this._startDate.getTime() < maxDate.getTime() &&
this._endDate.getTime() > minDate.getTime()) {
minDate = new Date(Math.max(minDate.getTime(), this._startDate.getTime()));
maxDate = new Date(Math.min(maxDate.getTime(), this._endDate.getTime()));
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() {
};
/*==================================================
* Point Highlight Decorator
*==================================================
*/
Timeline.PointHighlightDecorator = function(params) {
this._date = Timeline.DateTime.parseGregorianDateTime(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"); // for debugging
this._layerDiv.style.display = "none";
var minDate = this._band.getMinDate();
var maxDate = this._band.getMaxDate();
if (this._date.getTime() < maxDate.getTime() &&
this._date.getTime() > minDate.getTime()) {
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() {
};