[rtags] Allow to 'derive' rtags
Since some releases, rtags (structure underlying uicfg) have selector and may be
copied using something like:
new_rtags = deepcopy(original_rtags)
new_rtags.__module__ = __name__
new_rtags.__select__ = custom_selector
The problem is that starting from that, both rtags wil diverge and changes in
original_rtags won't be considered, while we usually want to set a few specific
rules only in new_rtags. To fix this problem, this cset introduces the notion of
"derivated/parent" rtag, eg:
new_rtags = original_rtags.derive(__name__, custom_selector)
Beside easier copying, when using the above method changes in original_rtags
which are not overriden by new_rtags will be considered since it only hold its
specific rules but look among its parent chain for non-found keys.
Along the way, flake8 unittest_rtags.
Closes #16164880
cw.reledit = new Namespace('cw.reledit');
jQuery.extend(cw.reledit, {
/* Unhides the part of reledit div containing the form
* hides other parts
*/
showInlineEditionForm: function (divid) {
jQuery('#' + divid).hide();
jQuery('#' + divid + '-value').hide();
jQuery('#' + divid + '-form').show();
},
/* Hides and removes edition parts, incl. messages
* show initial widget state
*/
cleanupAfterCancel: function (divid) {
jQuery('#appMsg').hide();
jQuery('div.errorMessage').remove();
// plus re-set inline style ?
jQuery('#' + divid).show();
jQuery('#' + divid + '-value').show();
jQuery('#' + divid + '-form').hide();
},
/* callback used on form validation success
* refreshes the whole page or just the edited reledit zone
* @param results: [status, ...]
* @param formid: the dom id of the reledit form
* @param cbargs: ...
*/
onSuccess: function (results, formid, cbargs) {
var params = {fname: 'reledit_form'};
jQuery('#' + formid + ' input:hidden').each(function (elt) {
var name = jQuery(this).attr('name');
if (name && name.startswith('__reledit|')) {
params[name.split('|')[1]] = this.value;
}
});
var reload = cw.evalJSON(params.reload);
if (reload || (params.formid == 'deleteconf')) {
if (typeof reload == 'string') {
/* Sometimes we want to reload but the reledit thing
* updated a key attribute which was a component of the
* url
*/
document.location.href = reload;
return;
}
else {
document.location.reload();
return;
}
}
jQuery('#'+params.divid+'-reledit').loadxhtml(AJAX_BASE_URL, params, 'post', 'swap');
jQuery(cw).trigger('reledit-reloaded', params);
},
/* called by reledit forms to submit changes
* @param formid : the dom id of the form used
* @param rtype : the attribute being edited
* @param eid : the eid of the entity being edited
* @param reload: boolean to reload page if true (when changing URL dependant data)
* @param default_value : value if the field is empty
*/
loadInlineEditionForm: function(formid, eid, rtype, role, divid, reload, vid, action) {
var args = {fname: 'reledit_form', rtype: rtype, role: role,
pageid: pageid, action: action,
eid: eid, divid: divid, formid: formid,
reload: reload, vid: vid};
var d = jQuery('#'+divid+'-reledit').loadxhtml(AJAX_BASE_URL, args, 'post', 'swap');
d.addCallback(function () {cw.reledit.showInlineEditionForm(divid);});
}
});