import rt 3.6.4
[freeside.git] / rt / html / Elements / PageLayout
index 3d7241d..493f227 100644 (file)
@@ -2,7 +2,7 @@
 %# 
 %# COPYRIGHT:
 %#  
-%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC 
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC 
 %#                                          <jesse@bestpractical.com>
 %# 
 %# (Except where explicitly superseded by other copyright notices)
@@ -22,7 +22,9 @@
 %# 
 %# You should have received a copy of the GNU General Public License
 %# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
 %# 
 %# 
 %# CONTRIBUTION SUBMISSION POLICY:
 %# those contributions and any derivatives thereof.
 %# 
 %# END BPS TAGGED BLOCK }}}
-<table class="darkblue" border=0 cellspacing=0 cellpadding=0 width="100%">
-  <th class="titlebox" align="left"><span class="rtname"><%$AppName%></span>
-  </th>
-      <span class="topactions">
-% foreach my $action (sort keys %{$topactions}) {
-        <td class="darkblueright">
-        <%$topactions->{"$action"}->{'html'} |n %>
-        </td>
+  <div id="topactions">
+% foreach my $action (reverse sort keys %{$topactions}) {
+    <span class="topaction">
+% $m->out($topactions->{"$action"}->{'html'});
+    </span>
 % }
-      </span>
-</table>
-<table border=0 cellspacing=0 cellpadding=0 width="100%" height="100%">
-%# Vertical menu
-<TR height="100%">
-<TD valign="top" width="140" class="blue">
-          <& /Elements/Menu, toptabs => $toptabs, current_toptab => $current_toptab &>
-</TD>
-<td valign="top">
-<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
-<tr>
-  <td class="blue" valign="top">
-    <span class="title"><%$title%></span>
-</td>
-</tr>
-<tr>
-<td class="blueright" valign="top">
-    <span class="nav"> 
-% if ($actions) {
-% my @actions;
-% foreach my $action (sort keys %{$actions}) {
-% if ($actions->{"$action"}->{'html'}) {
-% push @actions, $actions->{"$action"}->{'html'}; 
+  </div>
+
+%# End of div#quickbar from /Elements/Header
+</div>
+
+<div id="nav">
+<& /Elements/Menu, toptabs => $toptabs, current_toptab => $current_toptab &>
+</div>
+
+<div id="header">
+  <h1><%$title%></h1>
+
+% my $sep       = 0;
+% my $postsep   = 0;
+% my $count     = 0;
+% my $class     = { };
+% 
+  <ul id="page-menu"<% (($actions && %$actions) || ($subactions && %$subactions)) && q[ class="actions-present"] | n %>>
+    <div><div><div>
+% if ($page_tabs) {
+%     foreach my $tab (sort keys %{$page_tabs}) {
+%         next if $tab =~ /^(?:current_toptab|this)$/;
+%         $count++;
+%
+%         my $current = $page_tabs->{current_toptab} || "";
+%         my $path    = $page_tabs->{$tab}->{'path'} || "";
+%         
+%         $path    =~ s#/index.html$##gi;
+%         $current =~ s#/index.html$##gi;
+%         
+%         $sep = $toptabs->{$tab}->{'separator'} ? 1 : 0;
+%
+%         $class->{a} = $path eq $current ? ' class="selected"' : undef;
+%
+%         my @li;
+%         push @li, 'first'
+%                if $count == 1;
+%
+%         push @li, 'pre-separator'
+%                if $sep;
+%
+%         push @li, 'post-separator'
+%                if $postsep;
+%
+%         $class->{li} = join ' ', @li;
+%     
+%
+    <li<% $class->{li} ? qq[ class="$class->{li}"] : ''|n %>><% $count > 1 && !$postsep && "&#183; "|n%><a href="<%$RT::WebPath%>/<%$page_tabs->{$tab}->{'path'}%>"<%$class->{a}|n%><% $class->{a} ? ' name="focus"' : ''|n %>><% $page_tabs->{$tab}->{'title'} %></a></li>
+%
+%         if ($sep) {
+    <li class="separator">&#183;&#183;&#183;</li>
+%         }
+%         $postsep = $sep;
+%     }
 % } else {
-% push @actions,  qq|<a class="nav" href="|.$RT::WebPath."/".$actions->{$action}->{'path'}.qq|">|.$actions->{$action}->{'title'}."</a>";
+&nbsp;
 % }
-%  }
-<% join(" | ", @actions) | n %>
-% if ($subactions) {
-% my @actions;
-% foreach my $action (sort keys %{$subactions}) {
-% push @actions, $subactions->{"$action"}->{'html'}; 
-%  }
-<% join(" | ", @actions) | n %>
+    </div></div></div>
+  </ul>
+
+% if (($actions && %$actions) || ($subactions && %$subactions)) {
+  <ul id="actions-menu">
+    <div><div><div>
+% $sep       = 0;
+% $postsep   = 0;
+% $count     = 0;
+% $class     = { };
+%
+% for my $type ($actions, $subactions) {
+%
+% if ($type && %$type) {
+%     foreach my $action (sort keys %{$type}) {
+%         $count++;
+%
+%         $sep = $type->{$action}->{'separator'} ? 1 : 0;
+%
+%         my @li;
+%         push @li, 'first'
+%                if $count == 1;
+%
+%         push @li, 'pre-separator'
+%                if $sep;
+%
+%         push @li, 'post-separator'
+%                if $postsep;
+%
+%         $class->{li} = join ' ', @li;
+%
+    <li<% $class->{li} ? qq[ class="$class->{li}"] : ''|n %>><% $count > 1 && !$postsep && qq[<span class="bullet">&#183; </span>]|n%>
+%         if ($type->{"$action"}->{'html'}) {
+      <% $type->{"$action"}->{'html'} | n %>
+%         } else {
+      <a href="<%$RT::WebPath%>/<%$type->{$action}->{'path'}%>"<% $type->{$action}->{class} && ' class="'.$type->{$action}->{class}.'"' |n %><% $type->{$action}->{id} && ' id="'.$type->{$action}->{id}.'"' |n %>><%$type->{$action}->{'title'}%></a>
+%         }
+    </li>
+%         if ($sep) {
+    <li class="separator">&#183;&#183;&#183;</li>
+%         }
+%         $postsep = $sep;
+%     }
 % }
 % }
-    </span>
-  </td>
-</tr>
-<TR valign="top">
-<TD valign="top" width="100%" height="100%" class="mainbody" >
+    </div></div></div>
+  </ul>
+% }
+</div>
+
+<div id="body">
 <& /Elements/Callback, _CallbackName => 'BeforeBody',  %ARGS &>
 %$m->flush_buffer(); # we've got the page laid out, let's flush the buffer;
-<%INIT>
 
+<%INIT>
   foreach my $tab (sort keys %{$toptabs}) {
     if ($current_toptab && $toptabs->{$tab}->{'path'} eq $current_toptab) {
       $toptabs->{$tab}->{"subtabs"} = $tabs;
@@ -108,7 +174,53 @@ if (! defined($AppName)) {
   $AppName = loc("RT for [_1]", $RT::rtname);
 }
 
+my ($menu_depth, $almost_last, $page_tabs);
+
+if ($RT::WebDefaultStylesheet ne '3.4-compat') {
+    ($menu_depth, $almost_last) = @{$m->comp('.menu_recurse', data => $toptabs)};
+
+    if (defined $almost_last->{subtabs} and %{$almost_last->{subtabs}}) {
+        $page_tabs = {
+            current_toptab => $almost_last->{current_subtab},
+            %{$almost_last->{subtabs}},
+        };
+
+        delete $almost_last->{subtabs};
+        delete $almost_last->{current_subtab};
+    }
+}
 </%INIT>
+
+%# There's probably a better way to do this that involves three times as
+%# much work and redoing the whole menu/tab system... which would seem a
+%# bit out of scope.
+%#
+%# This function recurses through the menu and returns the second to
+%# last menu, that is, the menu holding the last reference to
+%# and submenu.  It also returns the number of menu levels minus
+%# the last submenu.
+<%def .menu_recurse>
+  <%args>
+      $data   => { }
+      $pdata  => { }
+      $ppdata => { }
+      $level  => 0
+  </%args>
+  <%init>
+      for my $key (keys %$data) {
+          return $m->comp('.menu_recurse', data   => $data->{$key}->{subtabs},
+                                           pdata  => $data->{$key},
+                                           ppdata => $pdata,
+                                           level  => $level+1)
+              if ref($data->{$key}) eq 'HASH'
+                 and defined $data->{$key}->{subtabs}
+                 and %{$data->{$key}->{subtabs}};
+      }
+      $ppdata->{last_system_menu_level}++;
+      return [$level, $pdata];
+  </%init>
+</%def>
+
 <%ARGS>
 $current_toptab => undef
 $current_tab => undef