[uilib] soup2xhtml uses now lxml.html.Cleaner
The lxm cleaner class let you configure more easily the allowed tag elements in parsed content.
Caveats:
- attributes in elements are not dropped (and html layout can be broken if css classes are reused)
- root tag element in snippet is buggy
/**
* toggle visibility of an element by its id
* & set current visibility status in a cookie
* XXX whenever used outside of preferences, don't forget to
* move me in a more appropriate place
*/
var prefsValues = {};
function togglePrefVisibility(elemId) {
clearPreviousMessages();
jQuery('#' + elemId).toggleClass('hidden');
}
function closeFieldset(fieldsetid) {
var linklabel = _('open all');
var linkhref = 'javascript:openFieldset("' + fieldsetid + '")';
_toggleFieldset(fieldsetid, 1, linklabel, linkhref);
}
function openFieldset(fieldsetid) {
var linklabel = _('close all');
var linkhref = 'javascript:closeFieldset("' + fieldsetid + '")';
_toggleFieldset(fieldsetid, 0, linklabel, linkhref);
}
function _toggleFieldset(fieldsetid, closeaction, linklabel, linkhref) {
jQuery('#' + fieldsetid).find('div.openlink').each(function() {
var link = A({
'href': "javascript:noop();",
'onclick': linkhref
},
linklabel);
jQuery(this).empty().append(link);
});
jQuery('#' + fieldsetid).find('fieldset[id]').each(function() {
var fieldset = jQuery(this);
if (closeaction) {
fieldset.addClass('hidden');
} else {
fieldset.removeClass('hidden');
linkLabel = (_('open all'));
}
});
}
function validatePrefsForm(formid) {
clearPreviousMessages();
_clearPreviousErrors(formid);
return validateForm(formid, null, submitSucces, submitFailure);
}
function submitFailure(result, formid, cbargs) {
var $form = jQuery('#' + formid);
var dom = DIV({'class': 'critical'}, _("please correct errors below"));
$form.find('div.formsg').empty().append(dom);
unfreezeFormButtons(formid);
var descr = result[1];
_displayValidationerrors(formid, descr[0], descr[1]);
$form.find('span.error').next().focus();
return false; // so handleFormValidationResponse doesn't try to display error
}
function submitSucces(result, formid, cbargs) {
var $form = jQuery('#' + formid);
setCurrentValues($form);
var dom = DIV({'class': 'msg'}, _("changes applied"));
$form.find('div.formsg').empty().append(dom);
$form.find('input').removeClass('changed');
checkValues(form, true);
return;
}
function clearPreviousMessages() {
jQuery('div#appMsg').addClass('hidden');
jQuery('div.formsg').empty();
}
function checkValues(form, success) {
var unfreezeButtons = false;
jQuery(form).find('select').each(function() {
unfreezeButtons = _checkValue(jQuery(this), unfreezeButtons);
});
jQuery(form).find('[type=text]').each(function() {
unfreezeButtons = _checkValue(jQuery(this), unfreezeButtons);
});
jQuery(form).find('input[type=radio]:checked').each(function() {
unfreezeButtons = _checkValue(jQuery(this), unfreezeButtons);
});
if (unfreezeButtons) {
unfreezeFormButtons(form.attr('id'));
} else {
if (!success) {
clearPreviousMessages();
}
_clearPreviousErrors(form.attr('id'));
freezeFormButtons(form.attr('id'));
}
}
function _checkValue(input, unfreezeButtons) {
var currentValue = prefsValues[input.attr('name')];
if (currentValue != input.val()) {
input.addClass('changed');
unfreezeButtons = true;
} else {
input.removeClass('changed');
jQuery("span[id=err-" + input.attr('id') + "]").remove();
}
input.removeClass('error');
return unfreezeButtons;
}
function setCurrentValues(form) {
jQuery(form).find('[name^=value]').each(function() {
var input = jQuery(this);
var name = input.attr('name');
if (input.attr('type') == 'radio') {
// NOTE: there seems to be a bug with jQuery(input).attr('checked')
// in our case, we can't rely on its value, we use
// the DOM API instead.
if (input[0].checked) {
prefsValues[name] = input.val();
}
} else {
prefsValues[name] = input.val();
}
jQuery(form).find('input[name=edits-' + name + ']').val(prefsValues[name]);
});
}
function initEvents() {
jQuery('form').each(function() {
var form = jQuery(this);
//freezeFormButtons(form.attr('id'));
form.find('.validateButton').attr('disabled', 'disabled');
form.find('input[type=text]').keyup(function() {
checkValues(form);
});
form.find('input[type=radio]').change(function() {
checkValues(form);
});
form.find('select').change(function() {
checkValues(form);
});
setCurrentValues(form);
});
}
$(document).ready(function() {
initEvents();
});