Index: modules/comment/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v
retrieving revision 1.617
diff -u -p -r1.617 comment.module
--- modules/comment/comment.module 25 Jan 2008 16:19:12 -0000 1.617
+++ modules/comment/comment.module 3 Feb 2008 23:53:51 -0000
@@ -988,27 +988,27 @@ function comment_render($node, $cid = 0)
// Start a form, for use with comment control.
$result = pager_query($query, $comments_per_page, 0, $query_count, $query_args);
- $divs = 0;
+ // Get the total comment count for the current page.
+ // This is needed to flag the last comment inside theme_comment_view.
+ global $pager_page_array, $pager_total, $pager_total_items;
+ if ($pager_page_array[0] == $pager_total[0] -1) {
+ $comment_count = $pager_total_items[0] - ($comments_per_page * ($pager_total[0] -1));
+ }
+ else {
+ $comment_count = $comments_per_page;
+ }
+
$num_rows = FALSE;
$comments = '';
+ $i = 0;
drupal_add_css(drupal_get_path('module', 'comment') .'/comment.css');
while ($comment = db_fetch_object($result)) {
+ $i++;
$comment = drupal_unpack($comment);
$comment->name = $comment->uid ? $comment->registered_name : $comment->name;
$comment->depth = count(explode('.', $comment->thread)) - 1;
-
- if ($mode == COMMENT_MODE_THREADED_COLLAPSED || $mode == COMMENT_MODE_THREADED_EXPANDED) {
- if ($comment->depth > $divs) {
- $divs++;
- $comments .= '
';
- }
- else {
- while ($comment->depth < $divs) {
- $divs--;
- $comments .= '
';
- }
- }
- }
+ // Each comment will increment by 1 except the last which will equal -1.
+ $comment->position = $i != $comment_count ? $i : -1;
if ($mode == COMMENT_MODE_FLAT_COLLAPSED) {
$comments .= theme('comment_flat_collapsed', $comment, $node);
@@ -1025,9 +1025,6 @@ function comment_render($node, $cid = 0)
$num_rows = TRUE;
}
- while ($divs-- > 0) {
- $comments .= '';
- }
$comment_controls = variable_get('comment_controls_'. $node->type, COMMENT_CONTROLS_HIDDEN);
if ($num_rows && ($comment_controls == COMMENT_CONTROLS_ABOVE || $comment_controls == COMMENT_CONTROLS_ABOVE_BELOW)) {
@@ -1556,9 +1553,27 @@ function comment_form_submit($form, &$fo
* @ingroup themeable
*/
function theme_comment_view($comment, $node, $links = array(), $visible = TRUE) {
- static $first_new = TRUE;
+ static $first_new = TRUE, $indent_lvl = 0;
$output = '';
+ // Use wrappers to indent threaded comments.
+ $mode = _comment_get_display_setting('mode', $node);
+ if (isset($comment->depth) && ($mode == COMMENT_MODE_THREADED_COLLAPSED || $mode == COMMENT_MODE_THREADED_EXPANDED)) {
+ if ($comment->depth > $indent_lvl) {
+ // Opening indent wrapper for new children threads.
+ $indent_lvl++;
+ $output .= '';
+ }
+ else {
+ // If the current comment is not a child of the previous comment or the
+ // previous depth is not the same as the current depth, close the wrapper.
+ while ($comment->depth < $indent_lvl) {
+ $indent_lvl--;
+ $output .= '
';
+ }
+ }
+ }
+
$comment->new = node_mark($comment->nid, $comment->timestamp);
if ($first_new && $comment->new != MARK_READ) {
// Assign the anchor only for the first new comment. This avoids duplicate
@@ -1582,6 +1597,13 @@ function theme_comment_view($comment, $n
$output .= theme('comment_folded', $comment);
}
+ // Close all remaining indent wrappers when displaying the last comment.
+ if (isset($comment->position) && $comment->position === -1) {
+ while ($indent_lvl-- > 0) {
+ $output .= '';
+ }
+ }
+
return $output;
}