web/data/cubicweb.ajax.js
author Rémi Cardona <remi.cardona@logilab.fr>
Wed, 28 Jan 2015 11:53:20 +0100
changeset 10165 7f1f7f710b16
parent 10164 2094262d6553
child 10215 96085e379066
child 10279 d7479a5ac553
permissions -rw-r--r--
[web/data] Never hide JS errors in our Deferred implementation Modern browsers have good debugging tools, let exceptions go all the way up. This only affects exceptions raised in the js code, if there's an issue on the server/python side, they'll keep going through our error callbacks. Closes #4881300
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9785
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
     1
/* copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
     2
 * contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
     3
 *
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
     4
 * This file is part of CubicWeb.
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
     5
 *
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
     6
 * CubicWeb is free software: you can redistribute it and/or modify it under the
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
     7
 * terms of the GNU Lesser General Public License as published by the Free
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
     8
 * Software Foundation, either version 2.1 of the License, or (at your option)
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
     9
 * any later version.
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
    10
 *
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
    11
 * CubicWeb is distributed in the hope that it will be useful, but WITHOUT
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
    13
 * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
    14
 * details.
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
    15
 *
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
    16
 * You should have received a copy of the GNU Lesser General Public License along
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
    17
 * with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    18
 */
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
5698
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    20
/**
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    21
 * .. function:: Deferred
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    22
 *
5727
29afb9e715bb [3.9] api update (mostly js) + add support for FCKEditor in formContents js function
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5699
diff changeset
    23
 * dummy ultra minimalist implementation of deferred for jQuery
5698
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    24
 */
7427
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
    25
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
    26
cw.ajax = new Namespace('cw.ajax');
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
    27
5698
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    28
function Deferred() {
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    29
    this.__init__(this);
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    30
}
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    31
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    32
jQuery.extend(Deferred.prototype, {
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    33
    __init__: function() {
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    34
        this._onSuccess = [];
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    35
        this._onFailure = [];
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    36
        this._req = null;
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    37
        this._result = null;
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    38
        this._error = null;
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    39
    },
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    40
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    41
    addCallback: function(callback) {
6556
64b39aa0b047 [js/ajax] use proper operator
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6552
diff changeset
    42
        if ((this._req.readyState == 4) && this._result) {
6552
256725d4e3ec [js/ajax] fix deferred race condition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6215
diff changeset
    43
            var args = [this._result, this._req];
256725d4e3ec [js/ajax] fix deferred race condition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6215
diff changeset
    44
            jQuery.merge(args, cw.utils.sliceList(arguments, 1));
256725d4e3ec [js/ajax] fix deferred race condition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6215
diff changeset
    45
            callback.apply(null, args);
5698
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    46
        }
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    47
        else {
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    48
            this._onSuccess.push([callback, cw.utils.sliceList(arguments, 1)]);
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    49
        }
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    50
        return this;
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    51
    },
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    52
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    53
    addErrback: function(callback) {
6560
48ba5069e051 [js/ajax] fix deferred race condition (errback case)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6556
diff changeset
    54
        if (this._req.readyState == 4 && this._error) {
48ba5069e051 [js/ajax] fix deferred race condition (errback case)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6556
diff changeset
    55
            callback.apply(null, [this._error, this._req]);
5698
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    56
        }
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    57
        else {
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    58
            this._onFailure.push([callback, cw.utils.sliceList(arguments, 1)]);
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    59
        }
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    60
        return this;
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    61
    },
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    62
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    63
    success: function(result) {
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    64
        this._result = result;
10165
7f1f7f710b16 [web/data] Never hide JS errors in our Deferred implementation
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10164
diff changeset
    65
        for (var i = 0; i < this._onSuccess.length; i++) {
7f1f7f710b16 [web/data] Never hide JS errors in our Deferred implementation
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10164
diff changeset
    66
            var callback = this._onSuccess[i][0];
7f1f7f710b16 [web/data] Never hide JS errors in our Deferred implementation
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10164
diff changeset
    67
            var args = [result, this._req];
7f1f7f710b16 [web/data] Never hide JS errors in our Deferred implementation
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10164
diff changeset
    68
            jQuery.merge(args, this._onSuccess[i][1]);
7f1f7f710b16 [web/data] Never hide JS errors in our Deferred implementation
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10164
diff changeset
    69
            callback.apply(null, args);
5698
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    70
        }
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    71
    },
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    72
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    73
    error: function(xhr, status, error) {
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    74
        this._error = error;
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    75
        for (var i = 0; i < this._onFailure.length; i++) {
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    76
            var callback = this._onFailure[i][0];
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    77
            var args = [error, this._req];
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    78
            jQuery.merge(args, this._onFailure[i][1]);
8879
982a49239420 [web] move qunit test back into web and fix the hanging
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8590
diff changeset
    79
            if (callback !== undefined)
982a49239420 [web] move qunit test back into web and fix the hanging
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8590
diff changeset
    80
                callback.apply(null, args);
5698
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    81
        }
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    82
    }
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    83
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    84
});
5c8fa1650299 [javascript] move Deferred implementation to cubicweb.ajax.js
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5658
diff changeset
    85
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
    86
var AJAX_PREFIX_URL = 'ajax';
9819
95902c0b991b [web/js] Deprecate baseuri() and replace with BASE_URL (closes #3955372)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9661
diff changeset
    87
var JSON_BASE_URL = BASE_URL + 'json?';
95902c0b991b [web/js] Deprecate baseuri() and replace with BASE_URL (closes #3955372)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9661
diff changeset
    88
var AJAX_BASE_URL = BASE_URL + AJAX_PREFIX_URL + '?';
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    89
7427
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
    90
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
    91
jQuery.extend(cw.ajax, {
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
    92
    /* variant of jquery evalScript with cache: true in ajax call */
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
    93
    _evalscript: function ( i, elem ) {
7649
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
    94
       var src = elem.getAttribute('src');
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
    95
       if (src) {
7427
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
    96
           jQuery.ajax({
7649
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
    97
               url: src,
7427
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
    98
               async: false,
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
    99
               cache: true,
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   100
               dataType: "script"
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   101
           });
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   102
       } else {
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   103
           jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   104
       }
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   105
       if ( elem.parentNode ) {
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   106
           elem.parentNode.removeChild( elem );
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   107
       }
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   108
    },
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   109
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   110
    evalscripts: function ( scripts ) {
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   111
        if ( scripts.length ) {
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   112
            jQuery.each(scripts, cw.ajax._evalscript);
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   113
        }
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   114
    },
7284
a474cb989546 [js] make _loadAjaxHtmlHead aware of mod_concat-like urls
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7199
diff changeset
   115
7427
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   116
    /**
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   117
     * returns true if `url` is a mod_concat-like url
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   118
     * (e.g. http://..../data??resource1.js,resource2.js)
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   119
     */
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   120
    _modconcatLikeUrl: function(url) {
9819
95902c0b991b [web/js] Deprecate baseuri() and replace with BASE_URL (closes #3955372)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9661
diff changeset
   121
        var modconcat_rgx = new RegExp('(' + BASE_URL + 'data/([a-z0-9]+/)?)\\?\\?(.+)');
7427
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   122
        return modconcat_rgx.exec(url);
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   123
    },
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   124
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   125
    /**
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   126
     * decomposes a mod_concat-like url into its corresponding list of
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   127
     * resources' urls
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   128
     * >>> _listResources('http://foo.com/data/??a.js,b.js,c.js')
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   129
     * ['http://foo.com/data/a.js', 'http://foo.com/data/b.js', 'http://foo.com/data/c.js']
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   130
     */
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   131
    _listResources: function(src) {
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   132
        var resources = [];
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   133
        var groups = cw.ajax._modconcatLikeUrl(src);
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   134
        if (groups == null) {
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   135
            resources.push(src);
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   136
        } else {
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   137
            var dataurl = groups[1];
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   138
            $.each(cw.utils.lastOf(groups).split(','),
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   139
                 function() {
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   140
                     resources.push(dataurl + this);
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   141
                 }
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   142
            );
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   143
        }
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   144
        return resources;
7649
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   145
    },
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   146
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   147
    _buildMissingResourcesUrl: function(url, loadedResources) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   148
        var resources = cw.ajax._listResources(url);
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   149
        var missingResources = $.grep(resources, function(resource) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   150
            return $.inArray(resource, loadedResources) == -1;
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   151
        });
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   152
        cw.utils.extend(loadedResources, missingResources);
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   153
        var missingResourceUrl = null;
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   154
        if (missingResources.length == 1) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   155
            // only one resource missing: build a node with a single resource url
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   156
            // (maybe the browser has it in cache already)
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   157
            missingResourceUrl = missingResources[0];
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   158
        } else if (missingResources.length > 1) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   159
            // several resources missing: build a node with a concatenated
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   160
            // resources url
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   161
            var dataurl = cw.ajax._modconcatLikeUrl(url)[1];
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   162
            var missing_path = $.map(missingResources, function(resource) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   163
                return resource.substring(dataurl.length);
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   164
            });
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   165
            missingResourceUrl = dataurl + '??' + missing_path.join(',');
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   166
        }
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   167
        return missingResourceUrl;
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   168
    },
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   169
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   170
    _loadAjaxStylesheets: function($responseHead, $head) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   171
        $responseHead.find('link[href]').each(function(i) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   172
            var $srcnode = $(this);
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   173
            var url = $srcnode.attr('href');
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   174
            if (url) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   175
                var missingStylesheetsUrl = cw.ajax._buildMissingResourcesUrl(url, cw.loaded_links);
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   176
                // compute concat-like url for missing resources and append <link>
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   177
                // element to $head
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   178
                if (missingStylesheetsUrl) {
8412
09432a572a44 [IE] use document.createStyleSheet to add CSS dynamically (closes #2356261)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8349
diff changeset
   179
                    // IE has problems with dynamic CSS insertions. One symptom (among others)
09432a572a44 [IE] use document.createStyleSheet to add CSS dynamically (closes #2356261)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8349
diff changeset
   180
                    // is a "1 item remaining" message in the status bar. (cf. #2356261)
09432a572a44 [IE] use document.createStyleSheet to add CSS dynamically (closes #2356261)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8349
diff changeset
   181
                    // document.createStyleSheet needs to be used for this, although it seems
09432a572a44 [IE] use document.createStyleSheet to add CSS dynamically (closes #2356261)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8349
diff changeset
   182
                    // that IE can't create more than 31 additional stylesheets with
09432a572a44 [IE] use document.createStyleSheet to add CSS dynamically (closes #2356261)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8349
diff changeset
   183
                    // document.createStyleSheet.
09432a572a44 [IE] use document.createStyleSheet to add CSS dynamically (closes #2356261)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8349
diff changeset
   184
                    if ($.browser.msie) {
09432a572a44 [IE] use document.createStyleSheet to add CSS dynamically (closes #2356261)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8349
diff changeset
   185
                        document.createStyleSheet(missingStylesheetsUrl);
09432a572a44 [IE] use document.createStyleSheet to add CSS dynamically (closes #2356261)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8349
diff changeset
   186
                    } else {
09432a572a44 [IE] use document.createStyleSheet to add CSS dynamically (closes #2356261)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8349
diff changeset
   187
                        $srcnode.attr('href', missingStylesheetsUrl);
09432a572a44 [IE] use document.createStyleSheet to add CSS dynamically (closes #2356261)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8349
diff changeset
   188
                        $srcnode.appendTo($head);
09432a572a44 [IE] use document.createStyleSheet to add CSS dynamically (closes #2356261)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8349
diff changeset
   189
                    }
7649
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   190
                }
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   191
            }
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   192
        });
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   193
        $responseHead.find('link[href]').remove();
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   194
    },
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   195
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   196
    _loadAjaxScripts: function($responseHead, $head) {
9523
cd5738fc440f [ajax] use a custom tag to handle dynamically loaded js
Julien Cristau <julien.cristau@logilab.fr>
parents: 8880
diff changeset
   197
        $responseHead.find('cubicweb\\:script').each(function(i) {
7649
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   198
            var $srcnode = $(this);
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   199
            var url = $srcnode.attr('src');
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   200
            if (url) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   201
                var missingScriptsUrl = cw.ajax._buildMissingResourcesUrl(url, cw.loaded_scripts);
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   202
                if (missingScriptsUrl) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   203
                    $srcnode.attr('src', missingScriptsUrl);
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   204
                    /* special handling of <script> tags: script nodes appended by jquery
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   205
                     * use uncached ajax calls and do not appear in the DOM
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   206
                     * (See comments in response to Syt on // http://api.jquery.com/append/),
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   207
                     * which cause undesired duplicated load in our case. We now handle
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   208
                     * a list of already loaded resources, since bare DOM api gives bugs with the
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   209
                     * server-response event, and we lose control on when the
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   210
                     * script is loaded (jQuery loads it immediately). */
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   211
                    cw.ajax.evalscripts($srcnode);
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   212
                }
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   213
            } else {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   214
                // <script> contains inlined javascript code, node content
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   215
                // must be evaluated
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   216
    	        jQuery.globalEval($srcnode.text());
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   217
    	    }
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   218
        });
9523
cd5738fc440f [ajax] use a custom tag to handle dynamically loaded js
Julien Cristau <julien.cristau@logilab.fr>
parents: 8880
diff changeset
   219
        $responseHead.find('cubicweb\\:script').remove();
7284
a474cb989546 [js] make _loadAjaxHtmlHead aware of mod_concat-like urls
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7199
diff changeset
   220
    }
7427
06444c1233e0 [ajax js/css] modconcat fix: load code exactly once (auc, fcayre)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7377
diff changeset
   221
});
7284
a474cb989546 [js] make _loadAjaxHtmlHead aware of mod_concat-like urls
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7199
diff changeset
   222
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   223
//============= utility function handling remote calls responses. ==============//
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   224
/**
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   225
 * .. function:: function loadAjaxHtmlHead(response)
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   226
 *
4174
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   227
 * inspect dom response (as returned by getDomFromResponse), search for
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   228
 * a <div class="ajaxHtmlHead"> node and put its content into the real
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   229
 * document's head.
642
2cf7b79d8e77 [javascript] rewrote loadxhtml() plugin in order to be able to pass the XHR object to postAjaxLoad
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 540
diff changeset
   230
 * This enables dynamic css and js loading and is used by replacePageChunk
2cf7b79d8e77 [javascript] rewrote loadxhtml() plugin in order to be able to pass the XHR object to postAjaxLoad
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 540
diff changeset
   231
 */
4174
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   232
function loadAjaxHtmlHead(response) {
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   233
    var $head = jQuery('head');
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   234
    var $responseHead = jQuery(response).find('div.ajaxHtmlHead');
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   235
    // no ajaxHtmlHead found, no processing required
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   236
    if (!$responseHead.length) {
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   237
        return response;
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   238
    }
7649
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   239
    cw.ajax._loadAjaxStylesheets($responseHead, $head);
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   240
    cw.ajax._loadAjaxScripts($responseHead, $head);
4174
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   241
    // add any remaining children (e.g. meta)
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   242
    $responseHead.children().appendTo($head);
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   243
    // remove original container, which is now empty
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   244
    $responseHead.remove();
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   245
    // if there was only one actual node in the reponse besides
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   246
    // the ajaxHtmlHead, then remove the wrapper created by
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   247
    // getDomFromResponse() and return this single element
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   248
    // For instance :
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   249
    // 1/ CW returned the following content :
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   250
    //    <div>the-actual-content</div><div class="ajaxHtmlHead">...</div>
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   251
    // 2/ getDomFromReponse() wrapped this into a single DIV to hold everything
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   252
    //    in one, unique, dom element
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   253
    // 3/ now that we've removed the ajaxHtmlHead div, the only
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   254
    //    node left in the wrapper if the 'real' node built by the view,
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   255
    //    we can safely return this node. Otherwise, the view itself
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   256
    //    returned several 'root' nodes and we need to keep the wrapper
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   257
    //    created by getDomFromResponse()
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   258
    if (response.childNodes.length == 1 && response.getAttribute('cubicweb:type') == 'cwResponseWrapper') {
4174
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   259
        return response.firstChild;
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   260
    }
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   261
    return response;
1512
c51ca5f49a78 fix insertion of head content on ajax queries
sylvain.thenault@logilab.fr
parents: 1498
diff changeset
   262
}
c51ca5f49a78 fix insertion of head content on ajax queries
sylvain.thenault@logilab.fr
parents: 1498
diff changeset
   263
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   264
function _postAjaxLoad(node) {
540
e5c97f6f119d [javascript] extract ajax postprocessing in a separate function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 492
diff changeset
   265
    // find textareas and wrap them if there are some
e5c97f6f119d [javascript] extract ajax postprocessing in a separate function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 492
diff changeset
   266
    if (typeof(FCKeditor) != 'undefined') {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   267
        buildWysiwygEditors();
540
e5c97f6f119d [javascript] extract ajax postprocessing in a separate function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 492
diff changeset
   268
    }
e5c97f6f119d [javascript] extract ajax postprocessing in a separate function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 492
diff changeset
   269
    if (typeof initFacetBoxEvents != 'undefined') {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   270
        initFacetBoxEvents(node);
540
e5c97f6f119d [javascript] extract ajax postprocessing in a separate function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 492
diff changeset
   271
    }
e5c97f6f119d [javascript] extract ajax postprocessing in a separate function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 492
diff changeset
   272
    if (typeof buildWidgets != 'undefined') {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   273
        buildWidgets(node);
540
e5c97f6f119d [javascript] extract ajax postprocessing in a separate function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 492
diff changeset
   274
    }
2338
3f7c7fbae94e call postAjaxLoad in reloadComponent; add corners only on reloaded elements
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 2257
diff changeset
   275
    if (typeof roundedCorners != 'undefined') {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   276
        roundedCorners(node);
955
3017a858bbc2 round corders on ajax loads
sylvain.thenault@logilab.fr
parents: 540
diff changeset
   277
    }
3863
fe22502d4ab1 [forms] add setFormsTarget() to the list of postAjaxLoad callbacks to have iframe on ajax-rendered forms
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3784
diff changeset
   278
    if (typeof setFormsTarget != 'undefined') {
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   279
        setFormsTarget(node);
3863
fe22502d4ab1 [forms] add setFormsTarget() to the list of postAjaxLoad callbacks to have iframe on ajax-rendered forms
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3784
diff changeset
   280
    }
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   281
    _loadDynamicFragments(node);
6448
8590d82e9b1b [javascript] update to jQuery 1.4.2 and jQuery-ui 1.8.5
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6215
diff changeset
   282
    jQuery(cw).trigger('server-response', [true, node]);
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   283
    jQuery(node).trigger('server-response', [true, node]);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   284
}
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   285
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   286
function remoteCallFailed(err, req) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   287
    cw.log(err);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   288
    if (req.status == 500) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   289
        updateMessage(err);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   290
    } else {
6109
47d9c0e0f7b7 integrate Celso's work on translation file: proper/complete spanish translation, fixed some typos in french translation, occured -> occurred fix in various places
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5998
diff changeset
   291
        updateMessage(_("an error occurred while processing your request"));
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   292
    }
540
e5c97f6f119d [javascript] extract ajax postprocessing in a separate function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 492
diff changeset
   293
}
e5c97f6f119d [javascript] extract ajax postprocessing in a separate function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 492
diff changeset
   294
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   295
//============= base AJAX functions to make remote calls =====================//
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   296
/**
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   297
 * .. function:: ajaxFuncArgs(fname, form, *args)
3011
657dfe374b08 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2338
diff changeset
   298
 *
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   299
 * extend `form` parameters to call the js_`fname` function of the json
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   300
 * controller with `args` arguments.
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   301
 */
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   302
function ajaxFuncArgs(fname, form /* ... */) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   303
    form = form || {};
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   304
    $.extend(form, {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   305
        'fname': fname,
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   306
        'pageid': pageid,
9661
c170ec8a4525 [web/data] Remove broken jquery-json plugin (closes #3590335)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9550
diff changeset
   307
        'arg': $.map(cw.utils.sliceList(arguments, 2), JSON.stringify)
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   308
    });
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   309
    return form;
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   310
}
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   311
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   312
/**
7571
6386f802fbc6 [cw.ajax] fix loadxhtml documentation and warn when called on an empty elements list
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7422
diff changeset
   313
 * .. function:: loadxhtml(url, form, reqtype='get', mode='replace', cursor=false)
3011
657dfe374b08 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2338
diff changeset
   314
 *
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   315
 * build url given by absolute or relative `url` and `form` parameters
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   316
 * (dictionary), fetch it using `reqtype` method, then evaluate the
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   317
 * returned XHTML and insert it according to `mode` in the
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   318
 * document. Possible modes are :
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   319
 *
3011
657dfe374b08 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2338
diff changeset
   320
 *    - 'replace' to replace the node's content with the generated HTML
657dfe374b08 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2338
diff changeset
   321
 *    - 'swap' to replace the node itself with the generated HTML
657dfe374b08 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2338
diff changeset
   322
 *    - 'append' to append the generated HTML to the node's content
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   323
 *
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   324
 * If `cursor`, turn mouse cursor into 'progress' cursor until the remote call
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   325
 * is back.
3011
657dfe374b08 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2338
diff changeset
   326
 */
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   327
jQuery.fn.loadxhtml = function(url, form, reqtype, mode, cursor) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   328
    if (this.size() > 1) {
7571
6386f802fbc6 [cw.ajax] fix loadxhtml documentation and warn when called on an empty elements list
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7422
diff changeset
   329
        cw.log('loadxhtml called with more than one element');
6386f802fbc6 [cw.ajax] fix loadxhtml documentation and warn when called on an empty elements list
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7422
diff changeset
   330
    } else if (this.size() < 1) {
6386f802fbc6 [cw.ajax] fix loadxhtml documentation and warn when called on an empty elements list
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7422
diff changeset
   331
        cw.log('loadxhtml called without an element');
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   332
    }
642
2cf7b79d8e77 [javascript] rewrote loadxhtml() plugin in order to be able to pass the XHR object to postAjaxLoad
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 540
diff changeset
   333
    var node = this.get(0); // only consider the first element
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   334
    if (cursor) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   335
        setProgressCursor();
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   336
    }
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   337
    var d = loadRemote(url, form, reqtype);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   338
    d.addCallback(function(response) {
4174
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   339
        var domnode = getDomFromResponse(response);
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   340
        domnode = loadAjaxHtmlHead(domnode);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   341
        mode = mode || 'replace';
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   342
        // make sure the component is visible
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   343
        $(node).removeClass("hidden");
4174
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   344
        if (mode == 'swap') {
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   345
            var origId = node.id;
5937
82cac9383dd8 [javascript] more cleanups and deprecation warnings removal
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5909
diff changeset
   346
            node = cw.swapDOM(node, domnode);
4174
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   347
            if (!node.id) {
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   348
                node.id = origId;
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   349
            }
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   350
        } else if (mode == 'replace') {
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   351
            jQuery(node).empty().append(domnode);
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   352
        } else if (mode == 'append') {
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   353
            jQuery(node).append(domnode);
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   354
        }
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   355
        _postAjaxLoad(node);
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   356
    });
5937
82cac9383dd8 [javascript] more cleanups and deprecation warnings removal
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5909
diff changeset
   357
    d.addErrback(remoteCallFailed);
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   358
    if (cursor) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   359
        d.addCallback(resetCursor);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   360
        d.addErrback(resetCursor);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   361
    }
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   362
    return d;
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   363
}
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   364
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   365
/**
5937
82cac9383dd8 [javascript] more cleanups and deprecation warnings removal
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5909
diff changeset
   366
 * .. function:: loadRemote(url, form, reqtype='GET', sync=false)
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   367
 *
9700
da7d341cca76 an URL -> a URL
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9536
diff changeset
   368
 * Asynchronously (unless `sync` argument is set to true) load a URL or path
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   369
 * and return a deferred whose callbacks args are decoded according to the
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   370
 * Content-Type response header. `form` should be additional form params
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   371
 * dictionary, `reqtype` the HTTP request type (get 'GET' or 'POST').
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   372
 */
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   373
function loadRemote(url, form, reqtype, sync) {
9819
95902c0b991b [web/js] Deprecate baseuri() and replace with BASE_URL (closes #3955372)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9661
diff changeset
   374
    if (!url.toLowerCase().startswith(BASE_URL.toLowerCase())) {
95902c0b991b [web/js] Deprecate baseuri() and replace with BASE_URL (closes #3955372)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9661
diff changeset
   375
        url = BASE_URL + url;
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   376
    }
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   377
    if (!sync) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   378
        var deferred = new Deferred();
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   379
        jQuery.ajax({
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   380
            url: url,
6618
1268da8a2dbb [js/ajax] switch to POST by default, fixes an IE7 caching bug
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6560
diff changeset
   381
            type: (reqtype || 'POST').toUpperCase(),
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   382
            data: form,
6448
8590d82e9b1b [javascript] update to jQuery 1.4.2 and jQuery-ui 1.8.5
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6215
diff changeset
   383
            traditional: true,
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   384
            async: true,
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   385
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   386
            beforeSend: function(xhr) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   387
                deferred._req = xhr;
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   388
            },
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   389
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   390
            success: function(data, status) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   391
                deferred.success(data);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   392
            },
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   393
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   394
            error: function(xhr, status, error) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   395
                try {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   396
                    if (xhr.status == 500) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   397
                        var reason_dict = cw.evalJSON(xhr.responseText);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   398
                        deferred.error(xhr, status, reason_dict['reason']);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   399
                        return;
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   400
                    }
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   401
                } catch(exc) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   402
                    cw.log('error with server side error report:' + exc);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   403
                }
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   404
                deferred.error(xhr, status, null);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   405
            }
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   406
        });
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   407
        return deferred;
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   408
    } else {
6555
f8b36b1e98bf [javascript] fix loadRemote implementation for synchronous requests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6448
diff changeset
   409
        var result;
f8b36b1e98bf [javascript] fix loadRemote implementation for synchronous requests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6448
diff changeset
   410
        // jQuery.ajax returns the XHR object, even for synchronous requests,
f8b36b1e98bf [javascript] fix loadRemote implementation for synchronous requests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6448
diff changeset
   411
        // but in that case, the success callback will be called before
f8b36b1e98bf [javascript] fix loadRemote implementation for synchronous requests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6448
diff changeset
   412
        // jQuery.ajax returns. The first argument of the callback will be
f8b36b1e98bf [javascript] fix loadRemote implementation for synchronous requests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6448
diff changeset
   413
        // the server result, interpreted by jQuery according to the reponse's
f8b36b1e98bf [javascript] fix loadRemote implementation for synchronous requests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6448
diff changeset
   414
        // content-type (i.e. json or xml)
f8b36b1e98bf [javascript] fix loadRemote implementation for synchronous requests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6448
diff changeset
   415
        jQuery.ajax({
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   416
            url: url,
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   417
            type: (reqtype || 'GET').toUpperCase(),
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   418
            data: form,
6448
8590d82e9b1b [javascript] update to jQuery 1.4.2 and jQuery-ui 1.8.5
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6215
diff changeset
   419
            traditional: true,
6555
f8b36b1e98bf [javascript] fix loadRemote implementation for synchronous requests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6448
diff changeset
   420
            async: false,
f8b36b1e98bf [javascript] fix loadRemote implementation for synchronous requests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6448
diff changeset
   421
            success: function(res) {
f8b36b1e98bf [javascript] fix loadRemote implementation for synchronous requests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6448
diff changeset
   422
                result = res;
f8b36b1e98bf [javascript] fix loadRemote implementation for synchronous requests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6448
diff changeset
   423
            }
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   424
        });
6121
57dddb6b5913 add missing semi colon in js
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   425
        return result;
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   426
    }
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   427
}
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   428
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   429
//============= higher level AJAX functions using remote calls ===============//
10028
326fbc5c92b0 [web] Cache results from 'i18n' ajax controller (closes #4487856)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9785
diff changeset
   430
326fbc5c92b0 [web] Cache results from 'i18n' ajax controller (closes #4487856)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9785
diff changeset
   431
var _i18ncache = {};
326fbc5c92b0 [web] Cache results from 'i18n' ajax controller (closes #4487856)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9785
diff changeset
   432
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   433
/**
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   434
 * .. function:: _(message)
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   435
 *
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   436
 * emulation of gettext's _ shortcut
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   437
 */
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   438
function _(message) {
10028
326fbc5c92b0 [web] Cache results from 'i18n' ajax controller (closes #4487856)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9785
diff changeset
   439
    var form;
326fbc5c92b0 [web] Cache results from 'i18n' ajax controller (closes #4487856)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9785
diff changeset
   440
    if (!(message in _i18ncache)) {
326fbc5c92b0 [web] Cache results from 'i18n' ajax controller (closes #4487856)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9785
diff changeset
   441
        form = ajaxFuncArgs('i18n', null, [message]);
326fbc5c92b0 [web] Cache results from 'i18n' ajax controller (closes #4487856)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9785
diff changeset
   442
        _i18ncache[message] = loadRemote(AJAX_BASE_URL, form, 'GET', true)[0];
326fbc5c92b0 [web] Cache results from 'i18n' ajax controller (closes #4487856)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9785
diff changeset
   443
    }
326fbc5c92b0 [web] Cache results from 'i18n' ajax controller (closes #4487856)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9785
diff changeset
   444
    return _i18ncache[message];
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   445
}
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   446
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   447
/**
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   448
 * .. function:: _loadDynamicFragments(node)
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   449
 *
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   450
 * finds each dynamic fragment in the page and executes the
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   451
 * the associated RQL to build them (Async call)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   452
 */
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   453
function _loadDynamicFragments(node) {
1512
c51ca5f49a78 fix insertion of head content on ajax queries
sylvain.thenault@logilab.fr
parents: 1498
diff changeset
   454
    if (node) {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   455
        var fragments = jQuery(node).find('div.dynamicFragment');
1512
c51ca5f49a78 fix insertion of head content on ajax queries
sylvain.thenault@logilab.fr
parents: 1498
diff changeset
   456
    } else {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   457
        var fragments = jQuery('div.dynamicFragment');
1512
c51ca5f49a78 fix insertion of head content on ajax queries
sylvain.thenault@logilab.fr
parents: 1498
diff changeset
   458
    }
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   459
    if (fragments.length == 0) {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   460
        return;
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   461
    }
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   462
    if (typeof LOADING_MSG == 'undefined') {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   463
        LOADING_MSG = 'loading'; // this is only a safety belt, it should not happen
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   464
    }
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   465
    for (var i = 0; i < fragments.length; i++) {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   466
        var fragment = fragments[i];
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   467
        fragment.innerHTML = '<h3>' + LOADING_MSG + ' ... <img src="data/loading.gif" /></h3>';
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   468
        var $fragment = jQuery(fragment);
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   469
        // if cubicweb:loadurl is set, just pick the url et send it to loadxhtml
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   470
        var url = $fragment.attr('cubicweb:loadurl');
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   471
        if (url) {
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   472
            $fragment.loadxhtml(url);
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   473
            continue;
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   474
        }
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   475
        // else: rebuild full url by fetching cubicweb:rql, cubicweb:vid, etc.
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   476
        var rql = $fragment.attr('cubicweb:rql');
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   477
        var items = $fragment.attr('cubicweb:vid').split('&');
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   478
        var vid = items[0];
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   479
        var extraparams = {};
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   480
        // case where vid='myvid&param1=val1&param2=val2': this is a deprecated abuse-case
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   481
        if (items.length > 1) {
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   482
            cw.log("[3.5] you're using extraargs in cubicweb:vid " +
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   483
                   "attribute, this is deprecated, consider using " +
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   484
                   "loadurl instead");
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   485
            for (var j = 1; j < items.length; j++) {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   486
                var keyvalue = items[j].split('=');
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   487
                extraparams[keyvalue[0]] = keyvalue[1];
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   488
            }
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   489
        }
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   490
        var actrql = $fragment.attr('cubicweb:actualrql');
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   491
        if (actrql) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   492
            extraparams['actualrql'] = actrql;
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   493
        }
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   494
        var fbvid = $fragment.attr('cubicweb:fallbackvid');
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   495
        if (fbvid) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   496
            extraparams['fallbackvid'] = fbvid;
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   497
        }
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   498
        extraparams['rql'] = rql;
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   499
        extraparams['vid'] = vid;
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   500
        $fragment.loadxhtml(AJAX_BASE_URL, ajaxFuncArgs('view', extraparams));
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   501
    }
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   502
}
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   503
function unloadPageData() {
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   504
    // NOTE: do not make async calls on unload if you want to avoid
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   505
    //       strange bugs
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   506
    loadRemote(AJAX_BASE_URL, ajaxFuncArgs('unload_page_data'), 'GET', true);
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   507
}
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   508
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   509
function removeBookmark(beid) {
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   510
    var d = loadRemote(AJAX_BASE_URL, ajaxFuncArgs('delete_bookmark', null, beid));
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   511
    d.addCallback(function(boxcontent) {
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   512
        $('#bookmarks_box').loadxhtml(AJAX_BASE_URL,
6947
3d72028a6cd4 [js] using the actual registry fixes spurious warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6924
diff changeset
   513
                                      ajaxFuncArgs('render', null, 'ctxcomponents',
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   514
                                                   'bookmarks_box'));
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   515
        document.location.hash = '#header';
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   516
        updateMessage(_("bookmark has been removed"));
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   517
    });
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   518
}
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   519
9785
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   520
userCallback = cw.utils.deprecatedFunction(
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   521
    '[3.19] use a plain ajaxfunc instead of user callbacks',
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   522
    function userCallback(cbname) {
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   523
    setProgressCursor();
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   524
    var d = loadRemote(AJAX_BASE_URL, ajaxFuncArgs('user_callback', null, cbname));
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   525
    d.addCallback(resetCursor);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   526
    d.addErrback(resetCursor);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   527
    d.addErrback(remoteCallFailed);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   528
    return d;
9785
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   529
});
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   530
9785
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   531
userCallbackThenUpdateUI = cw.utils.deprecatedFunction(
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   532
    '[3.19] use a plain ajaxfunc instead of user callbacks',
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   533
    function userCallbackThenUpdateUI(cbname, compid, rql, msg, registry, nodeid) {
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   534
    var d = userCallback(cbname);
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   535
    d.addCallback(function() {
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   536
        $('#' + nodeid).loadxhtml(AJAX_BASE_URL, ajaxFuncArgs('render', {'rql': rql},
10164
2094262d6553 [web/data] Fix userCallbackThenUpdateUI to completely replace old DOM elements
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10074
diff changeset
   537
                                                       registry, compid), null, 'swap');
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   538
        if (msg) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   539
            updateMessage(msg);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   540
        }
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   541
    });
9785
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   542
});
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   543
9785
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   544
userCallbackThenReloadPage = cw.utils.deprecatedFunction(
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   545
    '[3.19] use a plain ajaxfunc instead of user callbacks',
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   546
    function userCallbackThenReloadPage(cbname, msg) {
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   547
    var d = userCallback(cbname);
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   548
    d.addCallback(function() {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   549
        window.location.reload();
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   550
        if (msg) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   551
            updateMessage(msg);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   552
        }
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   553
    });
9785
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   554
});
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   555
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   556
/**
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   557
 * .. function:: unregisterUserCallback(cbname)
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   558
 *
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   559
 * unregisters the python function registered on the server's side
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   560
 * while the page was generated.
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   561
 */
9785
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   562
unregisterUserCallback = cw.utils.deprecatedFunction(
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   563
    '[3.19] use a plain ajaxfunc instead of user callbacks',
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   564
    function unregisterUserCallback(cbname) {
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   565
    setProgressCursor();
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   566
    var d = loadRemote(AJAX_BASE_URL, ajaxFuncArgs('unregister_user_callback',
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   567
                                            null, cbname));
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   568
    d.addCallback(resetCursor);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   569
    d.addErrback(resetCursor);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   570
    d.addErrback(remoteCallFailed);
9785
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   571
});
8125ba3f4f6d [js/ajax] deprecate user-callback support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   572
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   573
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   574
//============= XXX move those functions? ====================================//
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   575
function openHash() {
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   576
    if (document.location.hash) {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   577
        var nid = document.location.hash.replace('#', '');
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   578
        var node = jQuery('#' + nid);
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   579
        if (node) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   580
            $(node).removeClass("hidden");
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   581
        }
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   582
    };
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   583
}
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   584
jQuery(document).ready(openHash);
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   585
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   586
/**
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   587
 * .. function:: buildWysiwygEditors(parent)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   588
 *
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   589
 *XXX: this function should go in edition.js but as for now, htmlReplace
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   590
 * references it.
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   591
 *
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   592
 * replace all textareas with fckeditors.
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   593
 */
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   594
function buildWysiwygEditors(parent) {
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   595
    jQuery('textarea').each(function() {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   596
        if (this.getAttribute('cubicweb:type') == 'wysiwyg') {
3060
ea967a4f6ccb avoid installing editor n times for n ajax loads
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 3011
diff changeset
   597
            // mark editor as instanciated, we may be called a number of times
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   598
            // (see _postAjaxLoad)
3060
ea967a4f6ccb avoid installing editor n times for n ajax loads
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 3011
diff changeset
   599
            this.setAttribute('cubicweb:type', 'fckeditor');
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   600
            if (typeof FCKeditor != "undefined") {
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   601
                var fck = new FCKeditor(this.id);
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   602
                fck.Config['CustomConfigurationsPath'] = fckconfigpath;
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   603
                fck.Config['DefaultLanguage'] = fcklang;
9819
95902c0b991b [web/js] Deprecate baseuri() and replace with BASE_URL (closes #3955372)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9661
diff changeset
   604
                fck.BasePath = BASE_URL + "fckeditor/";
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   605
                fck.ReplaceTextarea();
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   606
            } else {
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   607
                cw.log('fckeditor could not be found.');
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   608
            }
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   609
        }
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   610
    });
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   611
}
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   612
jQuery(document).ready(buildWysiwygEditors);
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   613
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   614
/**
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   615
 * .. function:: stripEmptyTextNodes(nodelist)
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   616
 *
1419
7ff24154351d javascript + json refactoring
sylvain.thenault@logilab.fr
parents: 1407
diff changeset
   617
 * takes a list of DOM nodes and removes all empty text nodes
7ff24154351d javascript + json refactoring
sylvain.thenault@logilab.fr
parents: 1407
diff changeset
   618
 */
7ff24154351d javascript + json refactoring
sylvain.thenault@logilab.fr
parents: 1407
diff changeset
   619
function stripEmptyTextNodes(nodelist) {
4208
b2826afdaf8c fix stripEmptyTextNodes for IE (part of #615337)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4175
diff changeset
   620
    /* this DROPS empty text nodes */
1419
7ff24154351d javascript + json refactoring
sylvain.thenault@logilab.fr
parents: 1407
diff changeset
   621
    var stripped = [];
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   622
    for (var i = 0; i < nodelist.length; i++) {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   623
        var node = nodelist[i];
4208
b2826afdaf8c fix stripEmptyTextNodes for IE (part of #615337)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4175
diff changeset
   624
        if (isTextNode(node)) {
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   625
            /* all browsers but FF -> innerText, FF -> textContent  */
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   626
            var text = node.innerText || node.textContent;
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   627
            if (text && ! text.strip()) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   628
                continue;
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   629
            }
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   630
        } else {
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   631
            stripped.push(node);
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   632
        }
1419
7ff24154351d javascript + json refactoring
sylvain.thenault@logilab.fr
parents: 1407
diff changeset
   633
    }
7ff24154351d javascript + json refactoring
sylvain.thenault@logilab.fr
parents: 1407
diff changeset
   634
    return stripped;
7ff24154351d javascript + json refactoring
sylvain.thenault@logilab.fr
parents: 1407
diff changeset
   635
}
7ff24154351d javascript + json refactoring
sylvain.thenault@logilab.fr
parents: 1407
diff changeset
   636
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   637
/**
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   638
 * .. function:: getDomFromResponse(response)
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   639
 *
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   640
 * convenience function that returns a DOM node based on req's result.
3104
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 3102
diff changeset
   641
 * XXX clarify the need to clone
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 3102
diff changeset
   642
 * */
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   643
function getDomFromResponse(response) {
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   644
    if (typeof(response) == 'string') {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   645
        var doc = html2dom(response);
3073
09c6fe0db381 do postprocessing as in the xhtml case fix #345293
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 3060
diff changeset
   646
    } else {
09c6fe0db381 do postprocessing as in the xhtml case fix #345293
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 3060
diff changeset
   647
        var doc = response.documentElement;
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   648
    }
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   649
    var children = doc.childNodes;
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   650
    if (!children.length) {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   651
        // no child (error cases) => return the whole document
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   652
        return jQuery(doc).clone().context;
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   653
    }
1419
7ff24154351d javascript + json refactoring
sylvain.thenault@logilab.fr
parents: 1407
diff changeset
   654
    children = stripEmptyTextNodes(children);
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   655
    if (children.length == 1) {
4175
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   656
        // only one child => return it
92a10d2a09af [javascript] cleanup, remove tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4174
diff changeset
   657
        return jQuery(children[0]).clone().context;
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   658
    }
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   659
    // several children => wrap them in a single node and return the wrap
4174
860f622a31aa [javascript] remove ajaxHtmlHead from dom response once it has been processed.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3863
diff changeset
   660
    return DIV({'cubicweb:type': "cwResponseWrapper"},
6215
759cf097f5aa [javascript] get rid of tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6121
diff changeset
   661
               $.map(children, function(node) {
759cf097f5aa [javascript] get rid of tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6121
diff changeset
   662
                       return jQuery(node).clone().context;})
759cf097f5aa [javascript] get rid of tabs
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6121
diff changeset
   663
               );
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   664
}
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   665
6924
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   666
/* High-level functions *******************************************************/
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   667
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   668
/**
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   669
 * .. function:: reloadCtxComponentsSection(context, actualEid, creationEid=None)
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   670
 *
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   671
 * reload all components in the section for a given `context`.
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   672
 *
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   673
 * This is necessary for cases where the parent entity (on which the section
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   674
 * apply) has been created during post, hence the section has to be reloaded to
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   675
 * consider its new eid, hence the two additional arguments `actualEid` and
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   676
 * `creationEid`: `actualEid` is the eid of newly created top level entity and
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   677
 * `creationEid` the fake eid that was given as form creation marker (e.g. A).
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   678
 *
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   679
 * You can still call this function with only the actual eid if you're not in
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   680
 * such creation case.
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   681
 */
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   682
function reloadCtxComponentsSection(context, actualEid, creationEid) {
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   683
    // in this case, actualEid is the eid of newly created top level entity and
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   684
    // creationEid the fake eid given as form creation marker (e.g. A)
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   685
    if (!creationEid) { creationEid = actualEid ; }
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   686
    var $compsholder = $('#' + context + creationEid);
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   687
    // reload the whole components section
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   688
    $compsholder.children().each(function (index) {
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   689
	// XXX this.id[:-len(eid)]
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   690
	var compid = this.id.replace("_", ".").rstrip(creationEid);
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   691
	var params = ajaxFuncArgs('render', null, 'ctxcomponents',
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   692
				  compid, actualEid);
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   693
	$(this).loadxhtml(AJAX_BASE_URL, params, null, 'swap', true);
6924
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   694
    });
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   695
    $compsholder.attr('id', context + actualEid);
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   696
}
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   697
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   698
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   699
/**
8590
c9e04bf7690a [js/ajax] documentation of 'reload' is missing an argument
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8412
diff changeset
   700
 * .. function:: reload(domid, compid, registry, formparams, *render_args)
6924
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   701
 *
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   702
 * `js_render` based reloading of views and components.
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   703
 */
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   704
function reload(domid, compid, registry, formparams  /* ... */) {
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   705
    var ajaxArgs = ['render', formparams, registry, compid];
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   706
    ajaxArgs = ajaxArgs.concat(cw.utils.sliceList(arguments, 4));
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   707
    var params = ajaxFuncArgs.apply(null, ajaxArgs);
8569
40b3634eebe8 [ajax] reload function should set 'processing' cursor. Closes #2503899
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8412
diff changeset
   708
    return $('#'+domid).loadxhtml(AJAX_BASE_URL, params, null, 'swap', true);
6924
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   709
}
b88221afe491 [js utils] backport some generic code from comments cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6862
diff changeset
   710
6952
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   711
/* ajax tabs ******************************************************************/
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   712
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   713
function setTab(tabname, cookiename) {
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   714
    // set appropriate cookie
7820
2c73fc529a20 [tabs] do not use an ajax call to set cookie value, use jquery.cookie helper instead (closes #1944522)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7649
diff changeset
   715
    jQuery.cookie(cookiename, tabname, {path: '/'});
6952
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   716
    // trigger show + tabname event
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   717
    triggerLoad(tabname);
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   718
}
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   719
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   720
function loadNow(eltsel, holesel, reloadable) {
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   721
    var lazydiv = jQuery(eltsel);
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   722
    var hole = lazydiv.children(holesel);
8191
eceaf9e21966 [js] better support for no js in tabs (closes #2162092)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 7952
diff changeset
   723
    hole.show();
6952
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   724
    if ((hole.length == 0) && ! reloadable) {
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   725
        /* the hole is already filed */
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   726
        return;
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   727
    }
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   728
    lazydiv.loadxhtml(lazydiv.attr('cubicweb:loadurl'), {'pageid': pageid});
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   729
}
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   730
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   731
function triggerLoad(divid) {
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   732
    jQuery('#lazy-' + divid).trigger('load_' + divid);
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   733
}
7de13eb473e3 [tabs js] merge tabs and lazy js files into cw.ajax.js and use camel case names to satisfy js coding standards
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6947
diff changeset
   734
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   735
/* DEPRECATED *****************************************************************/
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   736
9259
68cde7431c2c [js] remove 3.9 bw compat (where apparently unused)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8880
diff changeset
   737
// still used in cwo and keyword cubes at least
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   738
reloadComponent = cw.utils.deprecatedFunction(
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   739
    '[3.9] reloadComponent() is deprecated, use loadxhtml instead',
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   740
    function(compid, rql, registry, nodeid, extraargs) {
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   741
        registry = registry || 'components';
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   742
        rql = rql || '';
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   743
        nodeid = nodeid || (compid + 'Component');
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   744
        extraargs = extraargs || {};
5909
9af8ac182f53 [javascript] fix some javascript errors and remove some deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5820
diff changeset
   745
        var node = cw.jqNode(nodeid);
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   746
        return node.loadxhtml(AJAX_BASE_URL, ajaxFuncArgs('component', null, compid,
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   747
                                                          rql, registry, extraargs));
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   748
    }
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   749
);
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   750
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   751
7422
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   752
function remoteExec(fname /* ... */) {
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   753
    setProgressCursor();
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   754
    var props = {
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   755
        fname: fname,
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   756
        pageid: pageid,
9661
c170ec8a4525 [web/data] Remove broken jquery-json plugin (closes #3590335)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9550
diff changeset
   757
        arg: $.map(cw.utils.sliceList(arguments, 1), JSON.stringify)
7422
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   758
    };
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   759
    var result = jQuery.ajax({
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   760
        url: AJAX_BASE_URL,
7422
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   761
        data: props,
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   762
        async: false,
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   763
        traditional: true
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   764
    }).responseText;
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   765
    if (result) {
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   766
        result = cw.evalJSON(result);
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   767
    }
7422
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   768
    resetCursor();
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   769
    return result;
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   770
}
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5506
diff changeset
   771
7422
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   772
function asyncRemoteExec(fname /* ... */) {
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   773
    setProgressCursor();
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   774
    var props = {
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   775
        fname: fname,
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   776
        pageid: pageid,
9661
c170ec8a4525 [web/data] Remove broken jquery-json plugin (closes #3590335)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9550
diff changeset
   777
        arg: $.map(cw.utils.sliceList(arguments, 1), JSON.stringify)
7422
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   778
    };
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   779
    // XXX we should inline the content of loadRemote here
8260
5a81fa526b30 [ajax] use AJAX_BASE_URL instead of JSON_BASE_URL
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8191
diff changeset
   780
    var deferred = loadRemote(AJAX_BASE_URL, props, 'POST');
7422
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   781
    deferred = deferred.addErrback(remoteCallFailed);
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   782
    deferred = deferred.addErrback(resetCursor);
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   783
    deferred = deferred.addCallback(resetCursor);
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   784
    return deferred;
9948cdd21b36 [js/ajax] undeprecate (async)remoteExec. closes #1381205
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7374
diff changeset
   785
}
7649
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   786
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   787
jQuery(document).ready(function() {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   788
    _loadDynamicFragments();
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   789
    // build loaded_scripts / loaded_links lists
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   790
    cw.loaded_scripts = [];
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   791
    jQuery('head script[src]').each(function(i) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   792
        cw.utils.extend(cw.loaded_scripts, cw.ajax._listResources(this.getAttribute('src')));
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   793
    });
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   794
    cw.loaded_links = [];
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   795
    jQuery('head link[href]').each(function(i) {
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   796
        cw.utils.extend(cw.loaded_links, cw.ajax._listResources(this.getAttribute('href')));
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   797
    });
ede740bd7077 [ajax, IE] rewrite some code to avoid duplicated evaluation with IE
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7623
diff changeset
   798
});