From 171bedf24bca7bd195dd4a8ee79cb3f04e6de5d5 Mon Sep 17 00:00:00 2001 From: csarven Date: Thu, 20 Nov 2008 18:26:55 -0500 Subject: [PATCH] (Un)Subscribe form using ajaxForm() darcs-hash:20081120232655-eefa4-cf6a71e246828793d3bfa413db724ab33bc58bcf.gz --- actions/showstream.php | 34 +++++----------------------------- actions/subscribe.php | 5 ++++- actions/unsubscribe.php | 4 +++- js/util.js | 30 +++++++++++++++++++++++++++++- lib/util.php | 21 +++++++++++++++++++-- theme/default/display.css | 4 ++-- theme/identica/display.css | 2 +- 7 files changed, 63 insertions(+), 37 deletions(-) diff --git a/actions/showstream.php b/actions/showstream.php index 3eae5eb0ff..419c4421ad 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -174,9 +174,9 @@ class ShowstreamAction extends StreamAction { if ($cur) { if ($cur->id != $profile->id) { if ($cur->isSubscribed($profile)) { - $this->show_unsubscribe_form($profile); + common_unsubscribe_form($profile); } else { - $this->show_subscribe_form($profile); + common_subscribe_form($profile); } } } else { @@ -185,19 +185,9 @@ class ShowstreamAction extends StreamAction { common_element_end('li'); $user = User::staticGet('id', $profile->id); - - if ($cur && $cur->id != $user->id && $cur->mutuallySubscribed($user)) { - common_element_start('li', array('id' => 'profile_send_a_new_message')); - common_element('a', array('href' => common_local_url('newmessage', array('to' => $user->id))), - _('Send a message')); - common_element_end('li'); - if ($user->email && $user->emailnotifynudge) { - common_element_start('li', array('id' => 'profile_nudge')); - common_nudge_form($user); - common_element_end('li'); - } - } - common_element_end('ul'); + common_profile_new_message_nudge($cur, $user, $profile); + + common_element_end('ul'); common_element_end('div'); @@ -229,20 +219,6 @@ class ShowstreamAction extends StreamAction { common_element_end('div'); } - function show_subscribe_form($profile) { - common_element_start('form', array('id' => 'subscribe', 'method' => 'post', - 'action' => common_local_url('subscribe'))); - common_hidden('token', common_session_token()); - common_element('input', array('id' => 'subscribeto', - 'name' => 'subscribeto', - 'type' => 'hidden', - 'value' => $profile->nickname)); - common_element('input', array('type' => 'submit', - 'class' => 'submit', - 'value' => _('Subscribe'))); - common_element_end('form'); - } - function show_remote_subscribe_link($profile) { $url = common_local_url('remotesubscribe', array('nickname' => $profile->nickname)); diff --git a/actions/subscribe.php b/actions/subscribe.php index 10951dc3b4..856586f87a 100644 --- a/actions/subscribe.php +++ b/actions/subscribe.php @@ -54,13 +54,16 @@ class SubscribeAction extends Action { return; } + $cur = common_current_user(); + $profile = Profile::staticGet('nickname', $other_nickname); if ($this->boolean('ajax')) { common_start_html('text/xml'); common_element_start('head'); common_element('title', null, _('Subscribed')); common_element_end('head'); common_element_start('body'); - common_subscribe_response(); + common_unsubscribe_form($profile); + common_profile_new_message_nudge($cur, $profile); common_element_end('body'); common_element_end('html'); } else { diff --git a/actions/unsubscribe.php b/actions/unsubscribe.php index 562dd00fc4..ad4f04a020 100644 --- a/actions/unsubscribe.php +++ b/actions/unsubscribe.php @@ -49,13 +49,15 @@ class UnsubscribeAction extends Action { return; } + $profile = Profile::staticGet('nickname', $other_nickname); + if ($this->boolean('ajax')) { common_start_html('text/xml'); common_element_start('head'); common_element('title', null, _('Unsubscribed')); common_element_end('head'); common_element_start('body'); - common_unsubscribe_response(); + common_subscribe_form($profile); common_element_end('body'); common_element_end('html'); } else { diff --git a/js/util.js b/js/util.js index 53fc58011e..b3165647f7 100644 --- a/js/util.js +++ b/js/util.js @@ -90,7 +90,35 @@ $(document).ready(function(){ success: function(xml) { $("#nudge").replaceWith(document._importNode($("#nudge_response", xml).get(0),true)); } }); $("#nudge").each(addAjaxHidden); - $("#nudge .submit").bind('click', function(e) { $(this).addClass("processing"); }); + $("#nudge .submit").bind('click', function(e) { $(this).addClass("processing"); }); + + + var Subscribe = { dataType: 'xml', + success: function(xml) { var form_unsubscribe = document._importNode($('form', xml).get(0), true); + var form_unsubscribe_id = form_unsubscribe.id; + var form_subscribe_id = form_unsubscribe_id.replace('unsubscribe', 'subscribe'); + $("form#"+form_subscribe_id).replaceWith(form_unsubscribe); + $("form#"+form_unsubscribe_id).ajaxForm(UnSubscribe).each(addAjaxHidden); + $("#profile_actions").append(document._importNode($('#profile_send_a_new_message', xml).get(0), true)); + $("#profile_actions").append(document._importNode($('#profile_nudge', xml).get(0), true)); + } + }; + + var UnSubscribe = { dataType: 'xml', + success: function(xml) { var form_subscribe = document._importNode($('form', xml).get(0), true); + var form_subscribe_id = form_subscribe.id; + var form_unsubscribe_id = form_subscribe_id.replace('subscribe', 'unsubscribe'); + $("form#"+form_unsubscribe_id).replaceWith(form_subscribe); + $("form#"+form_subscribe_id).ajaxForm(Subscribe).each(addAjaxHidden); + $("#profile_send_a_new_message").remove(); + $("#profile_nudge").remove(); + } + }; + + $("form.subscribe").ajaxForm(Subscribe); + $("form.unsubscribe").ajaxForm(UnSubscribe); + $("form.subscribe").each(addAjaxHidden); + $("form.unsubscribe").each(addAjaxHidden); }); function doreply(nick,id) { diff --git a/lib/util.php b/lib/util.php index 2f64ea5991..1365380ab9 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1903,6 +1903,9 @@ function common_nudge_form($profile) { 'value' => _('Send a nudge'))); common_element_end('form'); } +function common_nudge_response() { + common_element('p', array('id' => 'nudge_response'), _('Nudge sent!')); +} function common_subscribe_form($profile) { common_element_start('form', array('id' => 'subscribe-' . $profile->nickname, @@ -1936,8 +1939,22 @@ function common_unsubscribe_form($profile) { common_element_end('form'); } -function common_nudge_response() { - common_element('p', array('id' => 'nudge_response'), _('Nudge sent!')); +// XXX: Refactor this code +function common_profile_new_message_nudge ($cur, $profile) { + $user = User::staticGet('id', $profile->id); + + if ($cur && $cur->id != $user->id && $cur->mutuallySubscribed($user)) { + common_element_start('li', array('id' => 'profile_send_a_new_message')); + common_element('a', array('href' => common_local_url('newmessage', array('to' => $user->id))), + _('Send a message')); + common_element_end('li'); + + if ($user->email && $user->emailnotifynudge) { + common_element_start('li', array('id' => 'profile_nudge')); + common_nudge_form($user); + common_element_end('li'); + } + } } function common_cache_key($extra) { diff --git a/theme/default/display.css b/theme/default/display.css index 6c230ea0a5..eb2c262355 100644 --- a/theme/default/display.css +++ b/theme/default/display.css @@ -672,7 +672,7 @@ textarea { text-align: right; } /* ----- Subscribe Form ----- */ -#subscribe .submit, #unsubscribe .submit, #remotesubscribe .button, #remotesubscribe { +#content .subscribe .submit, #content .unsubscribe .submit, #remotesubscribe .button, #remotesubscribe { clear: left; margin: 0; width: 96px; @@ -691,7 +691,7 @@ textarea { padding: 5px 0 0 0; text-align: center; } -#subscribe .button:hover, #unsubscribe .button:hover { +#content .subscribe .button:hover, #content .unsubscribe .button:hover { background-color: #904632; cursor: pointer; } diff --git a/theme/identica/display.css b/theme/identica/display.css index a3ef07f90b..52a63a5ae6 100644 --- a/theme/identica/display.css +++ b/theme/identica/display.css @@ -158,7 +158,7 @@ textarea:focus, input:focus { background-color: #904632; } -#subscribe .submit, #unsubscribe .submit, #remotesubscribe .button, #remotesubscribe { +#content .subscribe .submit, #content .unsubscribe .submit, #remotesubscribe .button, #remotesubscribe { background-color: #c15d42; color: #fcfff5; }