Fix for ticket #2910: fix inconsistencies in notice posting response display that broke help command, could be generally wonky

Previous code was importing nodes from the XHR result into current document, then pulling text content of what might be the right element, then concat'ing that straight into HTML. Eww! Now pulling the text content straight from the XHR result -- same element that we check for existence of -- and using jQuery's own text() to do the getting and setting of text. Also note that some browsers might have been pulling HTML instead of text, or other funkiness.
This commit is contained in:
Brion Vibber 2010-12-16 16:18:49 -08:00
parent f901c25012
commit 532178e3ee
2 changed files with 38 additions and 17 deletions

View File

@ -315,6 +315,29 @@ var SN = { // StatusNet
FormNoticeXHR: function(form) { FormNoticeXHR: function(form) {
SN.C.I.NoticeDataGeo = {}; SN.C.I.NoticeDataGeo = {};
form.append('<input type="hidden" name="ajax" value="1"/>'); form.append('<input type="hidden" name="ajax" value="1"/>');
/**
* Show a response feedback bit under the new-notice dialog.
*
* @param {String} cls: CSS class name to use ('error' or 'success')
* @param {String} text
* @access private
*/
var showFeedback = function(cls, text) {
form.append(
$('<p class="form_response"></p>')
.addClass(cls)
.text(text)
);
};
/**
* Hide the previous response feedback, if any.
*/
var removeFeedback = function() {
form.find('.form_response').remove();
};
form.ajaxForm({ form.ajaxForm({
dataType: 'xml', dataType: 'xml',
timeout: '60000', timeout: '60000',
@ -361,9 +384,10 @@ var SN = { // StatusNet
.find('#'+SN.C.S.NoticeActionSubmit) .find('#'+SN.C.S.NoticeActionSubmit)
.removeClass(SN.C.S.Disabled) .removeClass(SN.C.S.Disabled)
.removeAttr(SN.C.S.Disabled, SN.C.S.Disabled); .removeAttr(SN.C.S.Disabled, SN.C.S.Disabled);
form.find('.form_response').remove(); removeFeedback();
if (textStatus == 'timeout') { if (textStatus == 'timeout') {
form.append('<p class="form_response error">Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.</p>'); // @fixme i18n
showFeedback('error', 'Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.');
} }
else { else {
var response = SN.U.GetResponseXML(xhr); var response = SN.U.GetResponseXML(xhr);
@ -378,28 +402,27 @@ var SN = { // StatusNet
SN.U.FormNoticeEnhancements(form); SN.U.FormNoticeEnhancements(form);
} }
else { else {
form.append('<p class="form_response error">(Sorry! We had trouble sending your notice ('+xhr.status+' '+xhr.statusText+'). Please report the problem to the site administrator if this happens again.</p>'); // @fixme i18n
showFeedback('error', '(Sorry! We had trouble sending your notice ('+xhr.status+' '+xhr.statusText+'). Please report the problem to the site administrator if this happens again.');
} }
} }
} }
}, },
success: function(data, textStatus) { success: function(data, textStatus) {
form.find('.form_response').remove(); removeFeedback();
var result; var errorResult = $('#'+SN.C.S.Error, data);
if ($('#'+SN.C.S.Error, data).length > 0) { if (errorResult.length > 0) {
result = document._importNode($('p', data)[0], true); showFeedback('error', errorResult.text());
result = result.textContent || result.innerHTML;
form.append('<p class="form_response error">'+result+'</p>');
} }
else { else {
if($('body')[0].id == 'bookmarklet') { if($('body')[0].id == 'bookmarklet') {
// @fixme self is not referenced anywhere?
self.close(); self.close();
} }
if ($('#'+SN.C.S.CommandResult, data).length > 0) { var commandResult = $('#'+SN.C.S.CommandResult, data);
result = document._importNode($('p', data)[0], true); if (commandResult.length > 0) {
result = result.textContent || result.innerHTML; showFeedback('success', commandResult.text());
form.append('<p class="form_response success">'+result+'</p>');
} }
else { else {
// New notice post was successful. If on our timeline, show it! // New notice post was successful. If on our timeline, show it!
@ -428,9 +451,7 @@ var SN = { // StatusNet
else { else {
// Not on a timeline that this belongs on? // Not on a timeline that this belongs on?
// Just show a success message. // Just show a success message.
result = document._importNode($('title', data)[0], true); showFeedback('success', $('title', data).text());
result_title = result.textContent || result.innerHTML;
form.append('<p class="form_response success">'+result_title+'</p>');
} }
} }
form.resetForm(); form.resetForm();

2
js/util.min.js vendored

File diff suppressed because one or more lines are too long