[javascript] update to jQuery 1.4.2 and jQuery-ui 1.8.5
The most notable changes are :
- A bug in jQuery 1.4.2 forces us to add 2 noop() methods
on cw objects to handle event unbinding, see :
http://dev.jquery.com/ticket/6184
for more details.
- jquery.autocomplete.js is not maintained anymore as it now has
a standard implementation in jquery ui. The downside is that
the new autocomplete version needs more work to be used.
cubicweb.widgets.js defines a cwautocomplete plugin which is
just a (not so) thin wrapper around the std autocomplete plugin
to keep backward compatibility and usage simplicty.
The original autocomplete author wrote a nice migration guide :
http://www.learningjquery.com/2010/06/autocomplete-migration-guide
- If you're using jQuery.ajax directly, you might have surprises
with arguments serialization for arrays. To get the old behaviour,
you need to pass a `traditional: true` extra arguments to jQuery.ajax.
Of course, it's transparent if you're using cubicweb higher level
helpers such as loadxhtml, loadRemote, etc.
/**
* Functions for ajax boxes.
*
* :organization: Logilab
* :copyright: 2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
* :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
*
*/
function ajaxBoxValidateSelectorInput(boxid, eid, separator, fname, msg) {
var holderid = cw.utils.domid(boxid) + eid + 'Holder';
var value = $('#' + holderid + 'Input').val();
if (separator) {
value = $.map(value.split(separator), jQuery.trim);
}
var d = loadRemote('json', ajaxFuncArgs(fname, null, eid, value));
d.addCallback(function() {
$('#' + holderid).empty();
var formparams = ajaxFuncArgs('render', null, 'boxes', boxid, eid);
$('#' + cw.utils.domid(boxid) + eid).loadxhtml('json', formparams);
if (msg) {
document.location.hash = '#header';
updateMessage(msg);
}
});
}
function ajaxBoxRemoveLinkedEntity(boxid, eid, relatedeid, delfname, msg) {
var d = loadRemote('json', ajaxFuncArgs(delfname, null, eid, relatedeid));
d.addCallback(function() {
var formparams = ajaxFuncArgs('render', null, 'boxes', boxid, eid);
$('#' + cw.utils.domid(boxid) + eid).loadxhtml('json', formparams);
if (msg) {
document.location.hash = '#header';
updateMessage(msg);
}
});
}
function ajaxBoxShowSelector(boxid, eid,
unrelfname,
addfname, msg,
oklabel, cancellabel,
separator) {
var holderid = cw.utils.domid(boxid) + eid + 'Holder';
var holder = $('#' + holderid);
if (holder.children().length) {
holder.empty();
}
else {
var inputid = holderid + 'Input';
var deferred = loadRemote('json', ajaxFuncArgs(unrelfname, null, eid));
deferred.addCallback(function (unrelated) {
var input = INPUT({'type': 'text', 'id': inputid, 'size': 20});
holder.append(input).show();
var $input = $(input);
$input.keypress(function (evt) {
if (evt.keyCode == $.ui.keyCode.ENTER) {
ajaxBoxValidateSelectorInput(boxid, eid, separator, addfname, msg);
}
});
$input.cwautocomplete(unrelated, {multiple: true});
var buttons = DIV({'class' : "sgformbuttons"},
A({href : "javascript: noop();",
onclick : cw.utils.strFuncCall('ajaxBoxValidateSelectorInput',
boxid, eid, separator, addfname, msg)},
oklabel),
' / ',
A({'href' : "javascript: noop();",
'onclick' : '$("#' + holderid + '").empty()'},
cancellabel));
holder.append(buttons);
$input.focus();
});
}
}