web/data/cubicweb.timeline-ext.js
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Mon, 31 Jan 2011 17:28:51 +0100
branchstable
changeset 6924 b88221afe491
parent 5774 0d792bceb25d
permissions -rw-r--r--
[js utils] backport some generic code from comments cube to handle inline ajax form as you get to add comment to entities. Following stuff has been generalized and backported to ease such things: * lazy_view_holder() method on EntityCtxComponent class, to build place holder where the form will be inserted * ajax_composite_form() function in cw.web.views.ajaxedit, to build the form itself * reload() and reloadCtxComponentsSection() javascript function in cubicweb.ajax.js for the javascript processing side

/**
 *  :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');
    }
};