From 054b4d0be6f3d524a602d787380d9da5986c1f9f Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 18 Sep 2008 09:56:08 -0400 Subject: [PATCH] if favor/disfavor submitted through ajax, return micro-html of form darcs-hash:20080918135608-5ed1f-d753cb01f96e04871eb4f503ccd258674a03623a.gz --- actions/disfavor.php | 17 ++++++++++--- actions/favor.php | 15 +++++++++-- js/util.js | 15 +++++++++-- lib/util.php | 60 +++++++++++++++++++++++++------------------- 4 files changed, 73 insertions(+), 34 deletions(-) diff --git a/actions/disfavor.php b/actions/disfavor.php index 6f4a078862..ef01e891f8 100644 --- a/actions/disfavor.php +++ b/actions/disfavor.php @@ -64,9 +64,18 @@ class DisfavorAction extends Action { return; } - # XXX: ajax response - - common_redirect(common_local_url('showfavorites', - array('nickname' => $user->nickname))); + if ($this->boolean('ajax')) { + common_start_html('text/xml'); + common_element_start('head'); + common_element('title', _('Favor')); + common_element_end('head'); + common_element_start('body'); + common_favor_form($notice); + common_element_end('body'); + common_element_end('html'); + } else { + common_redirect(common_local_url('showfavorites', + array('nickname' => $user->nickname))); + } } } \ No newline at end of file diff --git a/actions/favor.php b/actions/favor.php index 10ad6b809d..142d83ae1f 100644 --- a/actions/favor.php +++ b/actions/favor.php @@ -63,8 +63,19 @@ class FavorAction extends Action { $this->notify($fave, $notice, $user); - common_redirect(common_local_url('showfavorites', - array('nickname' => $user->nickname))); + if ($this->boolean('ajax')) { + common_start_html('text/xml'); + common_element_start('head'); + common_element('title', _('Disfavor')); + common_element_end('head'); + common_element_start('body'); + common_disfavor_form($notice); + common_element_end('body'); + common_element_end('html'); + } else { + common_redirect(common_local_url('showfavorites', + array('nickname' => $user->nickname))); + } } function notify($fave, $notice, $user) { diff --git a/js/util.js b/js/util.js index d5e1c87200..9f66e393ca 100644 --- a/js/util.js +++ b/js/util.js @@ -68,9 +68,20 @@ $(document).ready(function(){ var id = new_form.id.replace('favor', 'disfavor'); $('form#'+id).replace(new_form); }}; - + + function addAjaxHidden(form) { + ajax = document.newElement('input'); + ajax.addAttribute('type', 'hidden'); + ajax.addAttribute('name', 'ajax'); + ajax.addAttribute('value', 1); + form.appendChild(ajax); + } + $("form.favor").ajaxForm(favoptions); - $("form.disfavor").ajaxForm(disoptions); + $("form.disfavor").ajaxForm(disoptions); + + $("form.favor").each(addAjaxHidden); + $("form.disfavor").each(addAjaxHidden); }); function doreply(nick) { diff --git a/lib/util.php b/lib/util.php index 69fe2a8984..48dd1a1b4a 100644 --- a/lib/util.php +++ b/lib/util.php @@ -151,34 +151,11 @@ function common_init_language() { define('PAGE_TYPE_PREFS', 'text/html,application/xhtml+xml,application/xml;q=0.3,text/xml;q=0.2'); function common_show_header($pagetitle, $callable=NULL, $data=NULL, $headercall=NULL) { + global $config, $xw; - $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : NULL; - - # XXX: allow content negotiation for RDF, RSS, or XRDS - - $type = common_negotiate_type(common_accept_to_prefs($httpaccept), - common_accept_to_prefs(PAGE_TYPE_PREFS)); - - if (!$type) { - common_user_error(_('This page is not available in a media type you accept'), 406); - exit(0); - } - - header('Content-Type: '.$type); - - common_start_xml('html', - '-//W3C//DTD XHTML 1.0 Strict//EN', - 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'); - - # FIXME: correct language for interface - - $language = common_language(); - - common_element_start('html', array('xmlns' => 'http://www.w3.org/1999/xhtml', - 'xml:lang' => $language, - 'lang' => $language)); - + common_start_html(); + common_element_start('head'); common_element('title', NULL, $pagetitle . " - " . $config['site']['name']); @@ -252,6 +229,37 @@ function common_show_header($pagetitle, $callable=NULL, $data=NULL, $headercall= common_element_start('div', array('id' => 'content')); } +function common_start_html($type=NULL) { + + if (!$type) { + $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : NULL; + + # XXX: allow content negotiation for RDF, RSS, or XRDS + + $type = common_negotiate_type(common_accept_to_prefs($httpaccept), + common_accept_to_prefs(PAGE_TYPE_PREFS)); + + if (!$type) { + common_user_error(_('This page is not available in a media type you accept'), 406); + exit(0); + } + } + + header('Content-Type: '.$type); + + common_start_xml('html', + '-//W3C//DTD XHTML 1.0 Strict//EN', + 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'); + + # FIXME: correct language for interface + + $language = common_language(); + + common_element_start('html', array('xmlns' => 'http://www.w3.org/1999/xhtml', + 'xml:lang' => $language, + 'lang' => $language)); +} + function common_show_footer() { global $xw, $config; common_element_end('div'); # content div