Index: includes/common.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/common.inc,v retrieving revision 1.808 diff -u -p -r1.808 common.inc --- includes/common.inc 12 Oct 2008 19:03:04 -0000 1.808 +++ includes/common.inc 13 Oct 2008 15:18:20 -0000 @@ -2358,6 +2358,26 @@ function drupal_json($var = NULL) { } /** + * Handle a request for JSON data. + * + * @param $id + * A unique ID for the request. + * @param $output + * Output to render. + */ +function drupal_handle_json_request($id, $output) { + if (isset($_REQUEST['json_request']) && $_REQUEST['json_request'] == $id) { + $response = array( + 'status' => TRUE, + 'content' => $output, + ); + drupal_json($response); + return TRUE; + } + return FALSE; +} + +/** * Wrapper around urlencode() which avoids Apache quirks. * * Should be used when placing arbitrary data in an URL. Note that Drupal paths @@ -2989,6 +3009,9 @@ function drupal_common_theme() { 'arguments' => array('size' => 1), ), // from pager.inc + 'pager_wrapper' => array( + 'arguments' => array('contents' => '', 'id' => NULL), + ), 'pager' => array( 'arguments' => array('tags' => array(), 'limit' => 10, 'element' => 0, 'parameters' => array()), ), Index: includes/pager.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/pager.inc,v retrieving revision 1.64 diff -u -p -r1.64 pager.inc --- includes/pager.inc 12 Oct 2008 04:30:05 -0000 1.64 +++ includes/pager.inc 13 Oct 2008 15:18:26 -0000 @@ -91,6 +91,23 @@ function pager_get_querystring() { } /** + * Wrap the output of a pager query, including the pager element. + * + * @param $contents + * The contents of a pager query. + * @param $id + * The id by which the pager element will be identified. Used in requesting JSON output. + * @return + * An HTML string. + * + * @ingroup themeable + */ +function theme_pager_wrapper($contents, $id) { + drupal_add_js('misc/pager.js'); + return '
' . $contents . '
'; +} + +/** * Format a query pager. * * Menu callbacks that display paged query results should call theme('pager') to Index: misc/pager.js =================================================================== RCS file: misc/pager.js diff -N misc/pager.js --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ misc/pager.js 13 Oct 2008 15:18:27 -0000 @@ -0,0 +1,39 @@ +/** + * Ajax behavior for pagers. + */ +Drupal.behaviors.pager = function(context) { + $('div.pager-contents:not(.pager-processed)', context).each(function() { + var $target = $(this); + $target + .addClass('pager-processed') + // Process pager links. + .find('ul.pager > li > a') + .each(function () { + var ajaxPath = $(this).attr('href'); + $(this) + .click(function () { + $(this).addClass('throbber'); + $.ajax({ + url: ajaxPath, + type: 'GET', + data: {'json_request': $target.attr('id')}, + success: function(response) { + $(this).removeClass('throbbing'); + if (response.status && response.content) { + var $newContent = $(response.content); + $target.replaceWith($newContent); + Drupal.attachBehaviors($newContent.parent()); + } + }, + error: function() { + $(this).removeClass('throbber'); + alert(Drupal.t("An error occurred at @path.", {'@path': ajaxPath})); + }, + dataType: 'json' + }); + + return false; + }); + }); + }); +}; Index: misc/throbber-active.gif =================================================================== RCS file: misc/throbber-active.gif diff -N misc/throbber-active.gif Binary files /dev/null and throbber-active.gif differ Index: modules/comment/comment.module =================================================================== RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v retrieving revision 1.658 diff -u -p -r1.658 comment.module --- modules/comment/comment.module 13 Oct 2008 00:33:02 -0000 1.658 +++ modules/comment/comment.module 13 Oct 2008 15:18:35 -0000 @@ -1006,8 +1006,13 @@ function comment_render($node, $cid = 0) while ($divs-- > 0) { $comments .= ''; } - $output .= $comments; - $output .= theme('pager', NULL, $comments_per_page, 0); + $pager_id = 'comment-pager-' . $node->nid; + $comments .= theme('pager', NULL, $comments_per_page, 0); + $output .= theme('pager_wrapper', $comments, $pager_id); + // Enable JSON output, if requested. + if (drupal_handle_json_request($pager_id, $output)) { + return NULL; + } } // If enabled, show new comment form if it's not already being displayed. Index: modules/node/node.module =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.module,v retrieving revision 1.988 diff -u -p -r1.988 node.module --- modules/node/node.module 13 Oct 2008 00:33:03 -0000 1.988 +++ modules/node/node.module 13 Oct 2008 15:18:40 -0000 @@ -1147,7 +1147,13 @@ function node_show($node, $cid, $message $output = node_view($node, FALSE, TRUE); if (function_exists('comment_render') && $node->comment) { - $output .= comment_render($node, $cid); + $comments = comment_render($node, $cid); + if ($comments == NULL) { + return NULL; + } + else { + $output .= $comments; + } } // Update the history table, stating that this user viewed this node. Index: modules/system/system-rtl.css =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system-rtl.css,v retrieving revision 1.13 diff -u -p -r1.13 system-rtl.css --- modules/system/system-rtl.css 25 Apr 2008 18:28:18 -0000 1.13 +++ modules/system/system-rtl.css 13 Oct 2008 15:18:40 -0000 @@ -66,6 +66,12 @@ html.js fieldset.collapsed legend a { background-position: 98% 50%; } +html.js a.throbber, +html.js span.throbber { + background-position: left center; + padding-left: 18px; +} + div.teaser-button-wrapper { float: left; padding-right: 0; Index: modules/system/system.css =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.css,v retrieving revision 1.51 diff -u -p -r1.51 system.css --- modules/system/system.css 5 May 2008 21:10:48 -0000 1.51 +++ modules/system/system.css 13 Oct 2008 15:18:41 -0000 @@ -347,6 +347,13 @@ html.js fieldset.collapsible .fieldset-w overflow: auto; } +/* Animated throbber for links and spans */ +html.js a.throbber, +html.js span.throbber { + background: url(../../misc/throbber-active.gif) no-repeat right center; /* LTR */ + padding-right: 18px; /* LTR */ +} + /* ** Resizable text areas */