[server] Port BFSS to py3k
The BFSS API changes in python 3:
* 'defaultdir' MUST be a unicode object
* 'fsencoding' MUST NOT be set
In python 2, fsencoding handles both the encoding of file paths on the
file system (utf-8 by default, but the system may actually be using
something else) and the encoding of file paths that will be stored in
the database.
So in python 3, we wipe the slate clean:
* rely on sys.getfilesystemencoding() to convert unicode objects to
bytes
* always encode paths to utf-8 for storage in the database
Caveat emptor / here be dragons:
* sys.getfilesystemencoding() depends on the current locale, which
therefore MUST be set properly
* when migrating an existing instance from py2 to py3, one MAY need
to reencode file paths stored in the database
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);});
}
});