From 9689bda21c0f001b3f331423805831ee1fd7801e Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 4 Mar 2011 14:11:11 -0800 Subject: [PATCH] Loading the original form instead of faking up our own. Sorta works but not pretty :D --- actions/newnotice.php | 33 ++++++++++++++++++++-- js/util.js | 65 ++++++++++++++++++++++++++++--------------- 2 files changed, 74 insertions(+), 24 deletions(-) diff --git a/actions/newnotice.php b/actions/newnotice.php index faafd9551d..bc7ab28950 100644 --- a/actions/newnotice.php +++ b/actions/newnotice.php @@ -269,6 +269,31 @@ class NewnoticeAction extends Action $this->elementEnd('html'); } + /** + * Show an Ajax-y notice form + * + * Goes back to the browser, where it's shown in a popup. + * + * @param string $msg Message to show + * + * @return void + */ + + function ajaxShowForm() + { + $this->startHTML('text/xml;charset=utf-8', true); + $this->elementStart('head'); + $this->element('title', null, _('New notice')); + $this->elementEnd('head'); + $this->elementStart('body'); + + $form = new NoticeForm($this); + $form->show(); + + $this->elementEnd('body'); + $this->elementEnd('html'); + } + /** * Formerly page output * @@ -286,8 +311,12 @@ class NewnoticeAction extends Action function showForm($msg=null) { - if ($msg && $this->boolean('ajax')) { - $this->ajaxErrorMsg($msg); + if ($this->boolean('ajax')) { + if ($msg) { + $this->ajaxErrorMsg($msg); + } else { + $this->ajaxShowForm(); + } return; } diff --git a/js/util.js b/js/util.js index 6d0998aa42..3a901b6c09 100644 --- a/js/util.js +++ b/js/util.js @@ -553,13 +553,54 @@ var SN = { // StatusNet // See if the form's already open... var replyForm = $('.notice-reply-form', list); - if (replyForm.length == 0) { + + var nextStep = function() { + // Override...? + replyForm.find('input[name=inreplyto]').val(id); + + // Set focus... + var text = replyForm.find('textarea'); + if (text.length == 0) { + throw "No textarea"; + } + var replyto = ''; + if (initialText) { + replyto = initialText + ' '; + } + text.val(replyto + text.val().replace(RegExp(replyto, 'i'), '')); + text.data('initialText', $.trim(initialText + '')); + text.focus(); + if (text[0].setSelectionRange) { + var len = text.val().length; + text[0].setSelectionRange(len,len); + } + }; + if (replyForm.length > 0) { + // Update the existing form... + nextStep(); + } else { // Remove placeholder if any $('li.notice-reply-placeholder').remove(); // Create the reply form entry at the end var replyItem = $('li.notice-reply', list); if (replyItem.length == 0) { + var url = $('#form_notice').attr('action'); + replyItem = $('
  • '); + $.get(url, {ajax: 1}, function(data, textStatus, xhr) { + var formEl = document._importNode($('form', data)[0], true); + replyItem.append(formEl); + list.append(replyItem); + + var form = replyForm = $(formEl); + SN.U.NoticeLocationAttach(form); + SN.U.FormNoticeXHR(form); + SN.U.FormNoticeEnhancements(form); + SN.U.NoticeDataAttach(form); + + nextStep(); + }); + /* replyItem = $('
  • ' + '
    ' + '' + @@ -570,7 +611,6 @@ var SN = { // StatusNet '' + '
    ' + '
  • '); - var baseForm = $('#form_notice'); replyForm = replyItem.find('form'); replyForm.attr('action', baseForm.attr('action')); @@ -630,28 +670,9 @@ var SN = { // StatusNet event.preventDefault(); return false; }); + */ } } - - // Override...? - replyForm.find('input[name=inreplyto]').val(id); - - // Set focus... - var text = replyForm.find('textarea'); - if (text.length == 0) { - throw "No textarea"; - } - var replyto = ''; - if (initialText) { - replyto = initialText + ' '; - } - text.val(replyto + text.val().replace(RegExp(replyto, 'i'), '')); - text.data('initialText', $.trim(initialText + '')); - text.focus(); - if (text[0].setSelectionRange) { - var len = text.val().length; - text[0].setSelectionRange(len,len); - } }, /** -- 2.39.2