summaryrefslogtreecommitdiff
path: root/rt/share/html/Elements/PageLayout
diff options
context:
space:
mode:
authorivan <ivan>2009-12-31 13:16:41 +0000
committerivan <ivan>2009-12-31 13:16:41 +0000
commitb4b0c7e72d7eaee2fbfc7022022c9698323203dd (patch)
treeba4cd21399e412c32fe3737eaa8478e3271509f9 /rt/share/html/Elements/PageLayout
parent2dfda73eeb3eae2d4f894099754794ef07d060dd (diff)
import rt 3.8.7
Diffstat (limited to 'rt/share/html/Elements/PageLayout')
-rwxr-xr-xrt/share/html/Elements/PageLayout251
1 files changed, 251 insertions, 0 deletions
diff --git a/rt/share/html/Elements/PageLayout b/rt/share/html/Elements/PageLayout
new file mode 100755
index 000000000..981e58a3c
--- /dev/null
+++ b/rt/share/html/Elements/PageLayout
@@ -0,0 +1,251 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# 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., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div id="topactions">
+% foreach my $action (reverse sort keys %{$topactions}) {
+<span class="topaction" id="topaction-<%$action%>"><% $topactions->{"$action"}->{'html'} |n %></span>
+% }
+</div>
+
+%# End of div#quickbar from /Elements/Header
+</div>
+
+% if ( $show_menu ) {
+<div id="nav">
+<& /Elements/Menu, toptabs => $toptabs, current_toptab => $current_toptab &>
+</div>
+% }
+
+<div id="header">
+<h1><% $title %></h1>
+<div id="page-navigation">
+% 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>
+<%perl>
+ if ($page_tabs) {
+ my @tabs = ( sort grep { $_ !~ /^(?:current_toptab|this)$/ } keys %{$page_tabs});
+ my $tab_idx = -1;
+ foreach my $tab ( @tabs ) {
+ $count++;
+ $tab_idx++;
+
+ 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;
+
+ my $next_tab = $tabs[$tab_idx+1];
+ if ($next_tab && $toptabs->{$next_tab}->{'pre_separator'}) {
+ $sep = 1;
+ }
+
+ $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;
+ push @li, 'last' if $tab eq $tabs[-1];
+ $class->{li} = join ' ', @li;
+
+ my $href = $page_tabs->{$tab}->{'path'} || "";
+ $href = RT->Config->Get('WebPath') .'/'. $href
+ unless $path =~ /^\w+:/;
+ my $target = $page_tabs->{$tab}->{'target'} || '';
+ $target = $m->interp->apply_escapes( $target, 'h' );
+</%perl>
+ <li<% $class->{li} ? qq[ class="$class->{li}"] : ''|n %>><% $count > 1 && !$postsep && "&#183; "|n%><a href="<% $href %>"<%$class->{a}|n%><% $class->{a} ? ' name="focus"' : ''|n %><% $target? " target='$target'": '' |n %>><% $page_tabs->{$tab}->{'title'} %></a></li>
+%
+% if ($sep) {
+ <li class="separator">&#183;&#183;&#183;</li>
+% }
+% $postsep = $sep;
+% }
+% } else {
+&nbsp;
+% }
+ </div></div></div>
+ </ul>
+
+% if (($actions && %$actions) || ($subactions && %$subactions)) {
+ <ul id="actions-menu">
+ <div><div><div>
+<%perl>
+ $sep = 0;
+ $postsep = 0;
+ $count = 0;
+ $class = { };
+
+ for my $type ($actions, $subactions) {
+
+ if ($type && %$type) {
+ my @actions = sort keys %{$type};
+ my $action_idx = -1;
+ foreach my $action (@actions) {
+ $count++;
+ $action_idx++;
+
+ $sep = $type->{$action}->{'separator'} ? 1 : 0;
+
+ my $next_action = $actions[$action_idx+1];
+ if ($next_action && $type->{$next_action}->{'pre_separator'}) {
+ $sep = 1;
+ }
+
+ my @li;
+ push @li, 'first' if $count == 1;
+ push @li, 'pre-separator' if $sep;
+ push @li, 'post-separator' if $postsep;
+ push @li, 'last' if $action eq $actions[-1];
+
+ $class->{li} = join ' ', @li;
+</%perl>
+ <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->Config->Get('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;
+% }
+% }
+% }
+ </div></div></div>
+ </ul>
+% }
+</div>
+</div>
+<div id="body">
+% $m->callback( %ARGS, CallbackName => 'BeforeBody' );
+% $m->flush_buffer(); # we've got the page laid out, let's flush the buffer;
+
+<%INIT>
+if ( defined $current_toptab ) {
+ foreach my $tab ( values %{$toptabs} ) {
+ next unless $tab->{'path'} eq $current_toptab;
+ @{ $tab }{ qw(subtabs current_subtab) } = ($tabs, $current_tab);
+ }
+}
+
+my ($menu_depth, $almost_last, $page_tabs);
+
+if (RT->Config->Get( 'WebDefaultStylesheet', $session{'CurrentUser'} ) ne '3.4-compat') {
+ ($menu_depth, $almost_last) = @{ $m->comp('.menu_recurse', data => $toptabs, current => $current_toptab ) };
+
+ 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 => { }
+ $current => ''
+ $pdata => { }
+ $ppdata => { }
+ $level => 0
+ </%args>
+ <%init>
+ if ($current) {
+ for my $key (keys %$data) {
+ next if !defined $data->{$key}->{'path'}
+ || $data->{$key}->{'path'} ne $current;
+ next unless ref( $data->{$key} ) eq 'HASH'
+ && ref( $data->{$key}->{'subtabs'} ) eq 'HASH'
+ && keys %{ $data->{$key}->{'subtabs'} };
+ return $m->comp('.menu_recurse',
+ data => $data->{$key}->{'subtabs'},
+ current => $data->{$key}->{'current_subtab'} || '',
+ pdata => $data->{$key},
+ ppdata => $pdata,
+ level => $level + 1,
+ );
+ }
+ }
+ $ppdata->{last_system_menu_level}++;
+ return [$level, $pdata];
+ </%init>
+</%def>
+
+<%ARGS>
+$current_toptab => undef
+$current_tab => undef
+$toptabs => undef
+$topactions => undef
+$tabs => undef
+$actions => undef
+$subactions => undef
+$title => $m->callers(-1)->path
+$show_menu => 1
+</%ARGS>