From: <mp...@kr...> - 2007-06-18 20:19:32
|
Revision: 3909 Author: mpeters Date: 2007-06-18 15:19:24 -0500 (Mon, 18 Jun 2007) Log Message: ----------- changed make_internal_template() to be a little fancier when building the pager. Uses pagination template, CSS classes for first, even and last rows as well picking the best width for the columns. Modified Paths: -------------- branches/ajax_and_new_skin/lib/Krang/HTMLPager.pm Property Changed: ---------------- branches/ajax_and_new_skin/ Property changes on: branches/ajax_and_new_skin ___________________________________________________________________ Name: svk:merge - 10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/branches/ajax_and_new_skin:22350 10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/branches/ajax_and_new_skin:22350\\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/branches/ajax_and_new_skin:22350\\\\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:27412\\\\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:22312\\\\\\\\n689d98c0-9023-0410-9c0b-f79783857903:/branches/ajax_and_new_skin:3771\\\\\\\\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3802\\\\\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\\\\\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\\\\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3823\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\\\\nef85ff6a-427b-4ddd-bce6-61dc0fed61e7:/local/krang/trunk/krang:13148\\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:27412\\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:22312\\\\n689d98c0-9023-0410-9c0b-f79783857903:/branches/ajax_and_new_skin:3771\\\\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3802\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\\n689d98c0-9023-0410-9c0b-f79783857903:/branches/ajax_and_new_skin:3857\\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3823\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\\nef85ff6a-427b-4ddd-bce6-61dc0fed61e7:/local/krang/trunk/krang:13148\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:27412\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3861\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\nef85ff6a-427b-4ddd-bce6-61dc0fed61e7:/local/krang/trunk/krang:14260 10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/branches/ajax_and_new_skin:22350\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:27412\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:22312\\n689d98c0-9023-0410-9c0b-f79783857903:/branches/ajax_and_new_skin:3771\\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3802\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3823\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\nef85ff6a-427b-4ddd-bce6-61dc0fed61e7:/local/krang/trunk/krang:13148 10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:22312\n689d98c0-9023-0410-9c0b-f79783857903:/branches/ajax_and_new_skin:3771\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3802\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397 689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3570 6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207 ef85ff6a-427b-4ddd-bce6-61dc0fed61e7:/local/krang/branches/ajax_and_new_skin:15016 + 10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/branches/ajax_and_new_skin:22350 10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/branches/ajax_and_new_skin:22350\\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/branches/ajax_and_new_skin:22350\\\\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:27412\\\\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:22312\\\\\\\\n689d98c0-9023-0410-9c0b-f79783857903:/branches/ajax_and_new_skin:3771\\\\\\\\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3802\\\\\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\\\\\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\\\\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3823\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\\\\nef85ff6a-427b-4ddd-bce6-61dc0fed61e7:/local/krang/trunk/krang:13148\\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:27412\\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:22312\\\\n689d98c0-9023-0410-9c0b-f79783857903:/branches/ajax_and_new_skin:3771\\\\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3802\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\\\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\\n689d98c0-9023-0410-9c0b-f79783857903:/branches/ajax_and_new_skin:3857\\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3823\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\\nef85ff6a-427b-4ddd-bce6-61dc0fed61e7:/local/krang/trunk/krang:13148\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:27412\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3861\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\nef85ff6a-427b-4ddd-bce6-61dc0fed61e7:/local/krang/trunk/krang:14260 10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/branches/ajax_and_new_skin:22350\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:27412\n10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:22312\\n689d98c0-9023-0410-9c0b-f79783857903:/branches/ajax_and_new_skin:3771\\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3802\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3823\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397\nef85ff6a-427b-4ddd-bce6-61dc0fed61e7:/local/krang/trunk/krang:13148 10549753-5feb-4f4b-83d4-04f87d4b0a0d:/local/krang/trunk/krang:22312\n689d98c0-9023-0410-9c0b-f79783857903:/branches/ajax_and_new_skin:3771\n689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3802\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207\n6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_trunk/krang:27397 689d98c0-9023-0410-9c0b-f79783857903:/trunk/krang:3570 6cb60ec2-19fc-4f48-ba02-516b4c84136d:/local/krang_ajax_and_new_skin:28207 ef85ff6a-427b-4ddd-bce6-61dc0fed61e7:/local/krang/branches/ajax_and_new_skin:15017 Modified: branches/ajax_and_new_skin/lib/Krang/HTMLPager.pm =================================================================== --- branches/ajax_and_new_skin/lib/Krang/HTMLPager.pm 2007-06-18 20:17:52 UTC (rev 3908) +++ branches/ajax_and_new_skin/lib/Krang/HTMLPager.pm 2007-06-18 20:19:24 UTC (rev 3909) @@ -251,82 +251,89 @@ sub make_internal_template { my $self = shift; - - # Verify that pager specification is sane before proceeding $self->validate_pager(); - my $q = $self->cgi_query(); - my $pager_tmpl = ''; - # Start pager form 'krang_pager_form' + my $pager_tmpl = ""; + my @columns = @{$self->columns()}; + + # don't show a label for thumbnail columns since it gets cut off + my $labels = $self->column_labels() || {}; + $labels->{thumbnail} = "" if exists $labels->{thumbnail}; + # we need to put the action attribute in here since - # when using ajax, it might not be the current URL that's supposed to - # receive the submission - my $action = $q->url(-relative => 1); - $pager_tmpl .= qq|<form name="krang_pager_form" action="$action" method="post">|; + # when using ajax, it might not be the current URL + # that's supposed to receive the submission + my $script_name = $q->url(-relative => 1); - # Include javascript and hidden data template elements - $pager_tmpl .= "\n\n<tmpl_include HTMLPager/pager-internals.tmpl>\n\n"; + # build colgroup that sets column layout widths through CSS + my $colgroup = $self->create_colgroup(); - # Major TMPL_IF block for results, start - $pager_tmpl .= "<tmpl_if krang_pager_rows>\n\n"; + # build column headers + my $thead = "<thead>\n<tr>\n"; - # Result count/page status display - $pager_tmpl .= '<div class="no-border"> Found <tmpl_var found_count>: Showing <tmpl_var start_row> to <tmpl_var end_row></div>'; + foreach (0 .. $#columns) { + $thead .= '<th'; - # Build up table and header row - my @columns = @{$self->columns()}; - $pager_tmpl .= '<table class="form-cell" border="0" cellspacing="0" cellpadding="0" width="571"><tr class="form-head"><td class="form-head2">' - . join("</td>\n<td class=\"form-head2\">", (map { "<tmpl_var colhead_$_><tmpl_unless colhead_$_> </tmpl_unless>" } @columns) ) ."</td></tr>\n\n\n"; + if ( $_ == 0 ) { + $thead .= ' class="f"'; + } elsif ( $_ == $#columns ) { + $thead .= ' class="l"'; + } - # Build loop for data - my $row_tmpl = "<tr>\n<td class=\"form-cell\">" - . join("</td>\n <td class=\"form-cell\">", (map { "<tmpl_var $_>" } @columns)) ."</td>\n</tr>"; + $thead .= "><tmpl_var colhead_$columns[$_]></th>\n"; + } - $pager_tmpl .= <<EOF; - <tmpl_loop krang_pager_rows> - $row_tmpl - </tmpl_loop> - - </table> -EOF - # Make page jump, next/prev navigation tmpl - $pager_tmpl .= <<EOF; -<div class="no-border"><p class="left2"> <tmpl_if prev_page_number><a href="javascript:Krang.Pager.goto_page('<tmpl_var prev_page_number>')"><<</a></tmpl_if> + $thead .= "</tr>\n</thead>"; -<tmpl_loop page_numbers> - <tmpl_if is_current_page><b><tmpl_var page_number></b> - <tmpl_else><a href="javascript:Krang.Pager.goto_page('<tmpl_var page_number>')"><tmpl_var page_number_label></a> - </tmpl_if> - <tmpl_unless __last__>|</tmpl_unless> -</tmpl_loop> + # setup pager output + $pager_tmpl .= <<"END"; +<tmpl_if krang_pager_rows> -<tmpl_if next_page_number><a href="javascript:Krang.Pager.goto_page('<tmpl_var next_page_number>')">>></a></tmpl_if> +<form name="krang_pager_form" action="$script_name" method="post"> -<tmpl_if show_big_view> - <a href="javascript:Krang.Pager.show_big_view('0')">show <tmpl_var user_page_size> per page</a></p></div> +<tmpl_include HTMLPager/pager-internals.tmpl> + +<tmpl_include HTMLPager/pager-pagination.tmpl> + +<table class="result select_row" summary=""> + +$colgroup + +$thead + +<tbody><tmpl_loop krang_pager_rows> +END + + # build loop for data + $pager_tmpl .= qq{<tr<tmpl_unless __odd__> class="even"</tmpl_unless>>\n} + . join("\n", map { qq{<td><tmpl_var $_></td>} } @columns) + . "\n</tr>\n"; + + # finish pager output + $pager_tmpl .= <<"EOF"; +</tmpl_loop></tbody> + +</table> + +<tmpl_include HTMLPager/pager-pagination.tmpl> + +</form> + <tmpl_else> - <tmpl_if page_numbers> - <a href="javascript:Krang.Pager.show_big_view('1')">show <tmpl_var big_view_page_size> per page</a></p></div> - </tmpl_if> -</tmpl_if> -<tmpl_else> - <div class="no-border"><p class="left2"><b> None Found</b></p></div> +<p class="naught"> +None found +</p> + </tmpl_if> EOF - # Close pager form - $pager_tmpl .= "\n</form>\n"; - return $pager_tmpl; } - - =back - =head2 Krang::HTMLPager Properties Krang::HTMLPager expects a number of parameters to be set via the @@ -1216,6 +1223,86 @@ # DONE! } +sub create_colgroup { + my $self = shift; + my $columns = $self->columns; + + my $html = "<colgroup>\n"; + foreach my $name (@$columns) { + my %attr; + + # assign classes to columns when possible + if ($name =~ /_id$/i or $name =~ /^id$/i) { + $attr{class} = 'c-id'; + } elsif ( $name =~ /deployed/i + or $name =~ /published/ + or $name =~ /^pub_/) + { + $attr{class} = 'c-flag'; + } elsif ($name eq 'checkbox_column') { + $attr{class} = 'tick'; + } elsif ($name =~ /date/ or $name =~ /timestamp/) { + $attr{class} = 'c-date'; + } elsif ($name =~ /thumbnail/) { + $attr{class} = 'c-thumb'; + } elsif ($name =~ /status/ or $name =~ /attr/ or $name =~ /is_hidden/) + { + $attr{class} = 'c-stat'; + } elsif ( $name =~ /length/ + or $name =~ /_count/ + or $name =~ /circulation/) + { + $attr{class} = 'c-sum'; + } elsif ($name =~ /dollars/) { + $attr{class} = 'c-big-sum'; + } elsif ($name =~ /user/) { + $attr{class} = 'c-user'; + } elsif ($name =~ /command/) { + $attr{class} = 'c-link'; + + # make a guess about how wide to make the command-column + my $commands = $self->command_column_commands || []; + my $labels = $self->command_column_labels || {}; + my $size = 0; + foreach my $command (@$commands) { + my $label = $labels->{$command} || $command; + $size += length($label); + } + + # many modules don't declare their columns, or declare + # them with values smaller than they actually produce, so + # guess if possible (this is worth doing because truncated + # command columns are unusable) + my $module = $self->use_module; + if ($module eq pkg('Story')) { + # room for View Detail, View Log, Edit + $size = 13; + } elsif ( $module eq pkg('Template') or $module eq pkg('Media') ) { + # room for View Detail, Edit + $size = 9; + } + + if ($size) { + # scale upwards to account for visual formatting as buttons + # (is there a better way to do this?) + $size = int($size * 1.5); + + $attr{style} = "width:${size}em"; + } + } + + $html .= "<!-- '$name' column -->\n"; + $html .= "<col" + . (%attr ? " " : "") + . join(" ", map { qq{$_="$attr{$_}"} } keys %attr) . ">\n"; + + } + $html .= "</colgroup>"; + + return $html; +} + + sub _get_cache_key { my $self = shift; return defined $self->cache_key ? $self->cache_key : $self->use_module; |