web/data/cubicweb.timeline-ext.js
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Thu, 17 Jun 2010 15:15:52 +0200
changeset 5774 0d792bceb25d
parent 5658 7b9553a9db65
parent 5767 1d811df051c2
permissions -rw-r--r--
backport stable

/**
 *  :organization: Logilab
 *  :copyright: 2008-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
 *  :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
 *
 */

/**
 * provide our own custom date parser since the default
 * one only understands iso8601 and gregorian dates
 */
SimileAjax.NativeDateUnit.getParser = Timeline.NativeDateUnit.getParser = function(format) {
    if (typeof format == "string") {
        if (format.indexOf('%') != - 1) {
            return function(datestring) {
                if (datestring) {
                    return strptime(datestring, format);
                }
                return null;
            };
        }
        format = format.toLowerCase();
    }
    if (format == "iso8601" || format == "iso 8601") {
        return Timeline.DateTime.parseIso8601DateTime;
    }
    return Timeline.DateTime.parseGregorianDateTime;
};

/*** CUBICWEB EVENT PAINTER *****************************************************/
Timeline.CubicWebEventPainter = function(params) {
    //  Timeline.OriginalEventPainter.apply(this, arguments);
    this._params = params;
    this._onSelectListeners = [];

    this._filterMatcher = null;
    this._highlightMatcher = null;
    this._frc = null;

    this._eventIdToElmt = {};
};

Timeline.CubicWebEventPainter.prototype = new Timeline.OriginalEventPainter();

Timeline.CubicWebEventPainter.prototype._paintEventLabel = function(
evt, text, 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 + "px";
    labelDiv.style.top = top + "px";

    if (evt._obj.onclick) {
        labelDiv.appendChild(A({
            'href': evt._obj.onclick
        },
        text));
    } else if (evt._obj.image) {
        labelDiv.appendChild(IMG({
            src: evt._obj.image,
            width: '30px',
            height: '30px'
        }));
    } else {
        labelDiv.innerHTML = text;
    }

    if (evt._title != null) labelDiv.title = evt._title;

    var color = evt.getTextColor();
    if (color == null) {
        color = evt.getColor();
    }
    if (color != null) {
        labelDiv.style.color = color;
    }
    var classname = evt.getClassName();
    if (classname) labelDiv.className += ' ' + classname;

    this._eventLayer.appendChild(labelDiv);

    return {
        left: left,
        top: top,
        width: width,
        height: height,
        elmt: labelDiv
    };
};

Timeline.CubicWebEventPainter.prototype._showBubble = function(x, y, evt) {
    var div = DIV({
        id: 'xxx'
    });
    var width = this._params.theme.event.bubble.width;
    if (!evt._obj.bubbleUrl) {
        evt.fillInfoBubble(div, this._params.theme, this._band.getLabeller());
    }
    SimileAjax.WindowManager.cancelPopups();
    SimileAjax.Graphics.createBubbleForContentAndPoint(div, x, y, width);
    if (evt._obj.bubbleUrl) {
        jQuery('#xxx').loadxhtml(evt._obj.bubbleUrl, null, 'post', 'replace');
    }
};