[freeside-commits] freeside/rt/share/html/m/_elements footer, NONE, 1.1 full_site_link, NONE, 1.1 header, NONE, 1.1 menu, NONE, 1.1 raw_style, NONE, 1.1 ticket_list, NONE, 1.1 ticket_menu, NONE, 1.1 wrapper, NONE, 1.1

Mark Wells mark at wavetail.420.am
Wed Apr 27 01:31:04 PDT 2011


Update of /home/cvs/cvsroot/freeside/rt/share/html/m/_elements
In directory wavetail.420.am:/tmp/cvs-serv23959/rt/share/html/m/_elements

Added Files:
	footer full_site_link header menu raw_style ticket_list 
	ticket_menu wrapper 
Log Message:
RT mobile UI, #11630

--- NEW FILE: full_site_link ---
<a id="fullsite" href="<%RT->Config->Get('WebPath')%>/m/index.html?NotMobile=1"><&|/l&>Not using a mobile browser?</&></a>

--- NEW FILE: footer ---
<& /elements/footer.html &>
% if ( 0 ) {
  <div id="bpscredits">
    <& /Elements/Logo, ShowName => 0 &>
    <div id="copyright">
<&|/l,     '', '', '2010', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>', &>[_1] RT [_2] Copyright 1996-[_3] [_4].</&>
</div>
</div>
</body>
</html>
% }

--- NEW FILE: menu ---
<&| /Widgets/TitleBox, class => 'menu'&>
<ul class="menu">
% for my $item (@menu) {
% if (exists $item->{html}) {
<li><%$item->{html} |n%></li>
% } else {
<li><a href="<%RT->Config->Get('WebPath')%><%$item->{url}%>"><%$item->{label}%></a></li>
% }
% }
</ul>
</&>
<%init>
use RT::SavedSearches;
my @menu = (
    {         html => '<form method="GET" id="search" action="'
            . RT->Config->Get('WebPath')
            . '/m/tickets/search">'
            . loc("Search")
            . ': <input type="text" name="q" id="q" value=""/>'
            . '<input type="submit" value="'
            . loc("Go")
            . '"/></form>'
    },
    {   label => loc("New ticket"),
        url   => '/m/ticket/select_create_queue',
    },
    {   label => loc("Bookmarked tickets"),
        url   => '/m/tickets/search?name=Bookmarked%20Tickets',
    },
    {   label => loc("Tickets I own"),
        url   => '/m/tickets/search?name=My%20Tickets',
    },
    {   label => loc("Unowned tickets"),
        url   => '/m/tickets/search?name=Unowned%20Tickets',
    },
    {   label => loc("All tickets"),
        url   => '/m/tickets/search?query=id!%3d0&order_by=id&order=DESC'
    },
);


if ( $session{'CurrentUser'}->HasRight( Right  => 'LoadSavedSearch', Object => $RT::System))
    {

        my @Objects = RT::SavedSearches->new( $session{CurrentUser} )->_PrivacyObjects;
        push @Objects, RT::System->new( $session{'CurrentUser'} )
            if $session{'CurrentUser'}->HasRight(
            Object => $RT::System,
            Right  => 'SuperUser'
            );

        foreach my $object (@Objects) {
            my @searches = $object->Attributes->Named('SavedSearch');
            foreach my $search (@searches) {
                next unless $search->SubValue("SearchType") eq 'Ticket';
                push @menu, { label => $search->Description, url => '/m/tickets/search?query=' . $search->SubValue("Query").'&order='.$search->SubValue("Order").'&order_by='.$search->SubValue("OrderBy") };

            }
        }
}
push @menu,  {   label => loc("Logout"), url   => '/m/logout', } 
  if !RT->Config->Get('WebExternalAuth');
</%init>

--- NEW FILE: wrapper ---
<%args>
$title => ''
$show_home_button => 1
</%args>
<%init>
if ($m->request_args->{'NotMobile'}) {
    $session{'NotMobile'} = 1;
    RT::Interface::Web::Redirect(RT->Config->Get('WebURL'));
    $m->abort();
}
$m->comp('header', title => $title, show_home_button => $show_home_button);
$m->out($m->content);
$m->comp('footer');
$m->abort();
</%init>

--- NEW FILE: header ---
<%args>
$title => undef
$show_home_button => 1
</%args>
<%init>
$r->headers_out->{'Pragma'} = 'no-cache';
$r->headers_out->{'Cache-control'} = 'no-cache';

my $head = '';

my $etc = '';

</%init>
<& /elements/header.html, {
    'title'   => $title,
    'head'    => $head,
    'etc'     => $etc,
    'nocss'   => 1,
    'nobr'    => 1,
    'mobile'  => 1,
} &>
<link rel="stylesheet" type="text/css" href="<%RT->Config->Get('WebPath')|n%>/m/style.css"/>
% if ( 0 ) { # Disabled in favor of Freeside header
<html>
<head>
<title><%$title%></title>
</head>
<body>
% if ($show_home_button) {
% # The align is for older browsers, like the blackberry
<div id="gohome" align="right">
<a href="<%RT->Config->Get('WebPath')%>/m/"><&|/l&>Homepage</&></a>
</div>
% }
% if ($title) {
<h1><%$title%></h1>
% }
% } # disabled

--- NEW FILE: ticket_list ---
<%args>
$order => undef
$order_by => undef
$query => ''
$page => 1
</%args>
<%init>
my $collection = RT::Tickets->new($session{'CurrentUser'});
$collection->FromSQL($query);
$collection->RowsPerPage(10);
$collection->GotoPage($page-1);
# XXX: ->{'order_by'} is hacky, but there is no way to check if
# collection is ordered or not
if ( $order_by) {
        my @order_by = split /\|/, $order_by;
        my @order = split /\|/,$order;
    $collection->OrderByCols(
        map { { FIELD => $order_by[$_], ORDER => $order[$_] } }
        ( 0 .. $#order_by )
    );
}



$collection->RedoSearch();
 
if ($page > 1 && ! @{$collection->ItemsArrayRef||[]}) {
    RT::Interface::Web::Redirect( RT->Config->Get('WebURL')."m/tickets/search?page=".($page-1)."&query=".$query."&order=$order&order_by=$order_by");
}

</%init>
<&| /m/_elements/wrapper, title => 
loc("Found [quant,_1,ticket]",$collection->Count) &>
<&|/Widgets/TitleBox, class => 'search'
&>
<ul class="ticketlist">
% while (my $ticket = $collection->Next()) {
<li class="ticket">
<a class="ticket" href="<%RT->Config->Get('WebPath')%>/m/ticket/show?id=<%$ticket->id%>"><%$ticket->id%>: <%$ticket->Subject%></a>
<div class="metadata">
<%perl>

</%perl>
<div class="requestors"><span class="label"><&|/l&>Requestors</&>:</span> <& /Ticket/Elements/ShowGroupMembers, Group => $ticket->Requestors, Ticket => $ticket &></div>
<div class="status"><span class="label"><&|/l&>Status</&>:</span> <%$ticket->Status%></div>
<div class="owner"><span class="label"><&|/l&>Owner</&>:</span> <& /Elements/ShowUser, User => $ticket->OwnerObj, Ticket => $ticket &></div>
<div class="created"><span class="label"><&|/l&>Created</&>:</span> <%$ticket->CreatedObj->AgeAsString()%></div>
% if ($ticket->Priority) {
<div class="priority"><span class="label"><&|/l&>Priority</&>:</span> <%$ticket->Priority%></div>
% }
</div>
</li>
% }
</ul>
<div id="paging">
% if ($page > 1) { 
<a href="<%RT->Config->Get('WebPath')%>/m/tickets/search?page=<%$page-1%>&query=<%$query%>&order=<%$order%>&order_by=<%$order_by%>">Back</a>
% }
Page <%$page%>

<a href="<%RT->Config->Get('WebPath')%>/m/tickets/search?page=<%$page+1%>&query=<%$query%>&order=<%$order%>&order_by=<%$order_by%>">Next</a>
</div>
</&>
</&>

--- NEW FILE: ticket_menu ---
<%args>
$ticket
</%args>
<div class="ticket_menu">
<ul>
% for my $item (@menu) {
<li><a href="<%RT->Config->Get('WebPath')%><%$item->{url}%>"><%$item->{label}%></a></li>
% }
</ul>
</div>
<%init>
my @menu = ( 
{ label =>  loc("Basics"),
  url => '/m/ticket/show?id='.$ticket->id
},
 {
    label => loc("History"),
  url => '/m/ticket/history?id='.$ticket->id
    },
 #{ label => loc("Modify"), url => '/m/ticket/modify?id='.$ticket->id },
{
    label => loc("Reply"),
    url => '/m/ticket/reply?id='.$ticket->id
}


); 

my $width = int(100/ ($#menu +1))-5;

</%init>

--- NEW FILE: raw_style ---
body {
    font-family: helvetica, arial, sans-serif;
    /*background-color: #ccf;*/
    background-color: #f8f8f8;
    margin: 0;
}

h1 { 
    font-size: 1.2em;
    padding-top: 0.5em;
    padding-left: 0.2em;
    display: block; 
    background-color: #f8f8f8;

}

div.buttons {
    text-align: right;
    padding-right: 0.5em;
    padding-bottom: 0.5em;
}

.titlebox-title {
    font-size: 1.1em;
    margin-left: 0.5em;
    margin-top: -1.2em;
    top: -0.5em;
    padding: 0.5em;
    position: relative;
    display: inline-block;
    text-decoration: none;
    /*background-color: #fff;*/
    background-color: #ccc;
    -moz-border-radius: 0.25em;
    -webkit-border-radius: 0.25em;
    -webkit-box-shadow: #333 0px 0px 5px;
    -moz-box-shadow: #333 0px 0px 5px;
    box-shadow: #333 0px 0px 5px;
}

ul.menu
{
    text-align: left;
    list-style: none;
    padding: 0;
    margin: -0.6em;
    left: 0;
}

ul.menu li
{
    display: block;
    margin: 0;
    padding: 0;
    font-weight: bold;
}

ul.ticketlist li:active, ul.ticketlist li:hover,
ul.menu li:active, ul.menu li:hover {
    background-color: #eee;
}


ul.menu li
{
    display: block;
    padding: 1em;
    margin: 0;
    border:0;
    border-top-width: 1px;
    border-top-color: #666;
    border-style: solid;
    text-decoration: none;
}

ul.menu li:first-child{
    border: none;
}

ul.menu li#active a
{
    color: #800000;
}

div.titlebox, #bpscredits, .ticket_menu{
    -moz-border-radius: 1em;
    -webkit-border-radius: 1em;
    margin: 0.5em;
    background-color: #fff;
    padding-top: 1em;
    padding-bottom: 0.8em;
    margin-top: 1.25em;
    -webkit-box-shadow: #333 0px 0px 5px;
    -moz-box-shadow: #333 0px 0px 5px;
    box-shadow: #333 0px 0px 5px;
    margin-bottom: 1em;
}

div .titlebox-content {
    padding-left: 0.5em;
    padding-right: 0.5em;
}

hr.clear {
    display: none;
}


.label, .labeltop {
    font-weight: normal;
}
.value { 
    font-weight: bold;
    display:inline-block;
}

ul.ticketlist {
    list-style: none;
    padding-left: -0.5em;
    padding-right: -0.5em; /* to counteract the titlebox and get shading to the end*/
    margin-left: -0.5em;
    margin-right: -0.5em;
    padding: 0em;
    padding-bottom: 1em;
}

ul.ticketlist li.ticket {
    padding: 0.5em;
    font-weight: bold;
    border-bottom: 1px solid #999;
    
}
ul.ticketlist li.ticket:first-child {
    border-top: 1px solid #999;
}

ul.ticketlist li.ticket a.ticket{
    display: inline-block;
    font-size: 1em;
    width: 100%;
    padding: 0.5em;
    padding-bottom: 5em;
    margin-bottom: -5em;
}
ul.ticketlist li.ticket div.metadata {
}


ul.ticketlist li.ticket div.metadata div {
    padding: 0.2em;
    font-size:0.8em;
    display: block;
}

ul.ticketlist li.ticket div.metadata .label {
    display: inline-block;
    width: 6em;
    font-size: 0.8em;
    text-align: right;
    color: #666;
}

div#paging {
    text-align: center;
}

.ticket-reply .titlebox-title, .titlebox.search .titlebox-title, .titlebox.menu .titlebox-title, .ticket_menu .titlebox-title, .history .titlebox-title, #ticket-create-basics .titlebox-title{
    display: none;
}

a {
    color: #000;
}

.ticket_menu a, .menu a {
    text-decoration: none;
}

ul.menu a {
    padding: 0.5em;
    margin-top: -0.5em;
    margin-bottom: -0.5em;
    display: inline-block;
    width: 100%;
}

ul.menu a:after {
    color: #666;
    float: right;
    content: ">";
    font-size: 1.5em;
    padding: 0;
    margin: 0;
    padding-right: 1em;

}

ul.menu form {
    display: inline;
}

ul.menu form * {
    display: inline;
}


ul.menu form input[type=text] { 
    width: 7em;
}

ul.menu form input{ 

    width: auto;
    padding: 0.5em;
    margin: -0.5em;
    margin-left: 1em;
}

.ticket_menu {
    text-align: center;
}

.ticket_menu ul {
    display: block;
    margin: 0;
    padding: 0;
}

.ticket_menu ul li {

    display: inline-block;
    text-align: center;
    padding-bottom: 0.25em;
    padding-top: 0.25em;
    font-size: 1em;
    width: 28%;
    padding-right: 0.3em;
    padding-left: 0.2em;
    border-right: 1px solid #000;
}
.ticket_menu ul li:last-child {
    padding-right: 0;
    border-right: 0; 
}

.ticket-info-reminders table {

    width: 100%;
}

#ticket-create .label:after {
   content: ": "; 
    padding-right: 0.25em;

}

#ticket-create .content-label {
    width: auto;
    display: block;
    text-align: left;
    
}

#ticket-show .label, .login-body .label {
    display: inline-block;
    text-align: right;
    width: 6em;
    padding-right: 0.25em;
    font-size: 0.8em;
}

.login-body .value {
    width: auto;
}

.history ul.history-list {
    padding: 0;
    margin: 0;
    padding-bottom: 2em;
}


.history ul.history-list li:first-child {
    border-top: 1px solid #ccc;
}

.history ul.history-list li {
    list-style: none;
    border-bottom: 1px solid #ccc;
    padding: 0.5em;
}

.history .age {
    display: inline-block;
    min-width: 8em;
    text-align: right;

}

div#login-box div.titlebox {
    width: 100%;
    margin-left:auto;
    margin-right: auto;
}

div#login-box input[type=text], div#login-box input[type=password] {
    width: 100%;
}

#bpscredits img {
    padding-bottom: 1em;
}



#bpscredits {
    float: right;
    text-align: right;
    width: auto;
    font-size: 0.8em;
    padding: 1em;
}


:focus {
    background-color: #ffc;
    border-color: #000;
    border-weight: 3px;
}

input[type=submit], input[type=button], button, #paging a {
    border: 2px outset;
    margin: 0.3em;
    padding: 0.3em;
    padding-left: 0.6em;
    padding-right: 0.6em;
    -moz-border-radius: 0.5em;
    -webkit-border-radius: 0.5em;
    background-color: #006699;
    color: #fff;
}

form { 

    margin:0;
}

#gohome {
    position: absolute;
    top: 0;
    right: 0;
    border-left: 1px solid black;
    border-bottom: 1px solid black;
    -moz-border-radius-bottomleft: 1em;
    -webkit-border-bottom-left-radius: 1em;
    padding: 0.5em;
    background-color: #fff;
}

#gohome a {
    font-size: 1em;
    padding: 0.25em;
    color: #000;
}

div.txn-content {
    
    font-size:0.8em;
    padding-left:1em;
    padding-top:0.5em;
    margin-top: 0.5em;
    margin-left: 2em;
    padding-bottom: 0.5em;
    border-left: 5px solid #00c;

}

.label {
    text-align: left;
    width: 10em;
    color: #666;
    display: block;
    padding-bottom: 0.2em;
    padding-right: 0.2em;
    
}

div.entry, tr.input-row {
    margin-bottom: 0.25em;
    padding-bottom: 0.25em;
    border-bottom: 1px solid #ccc;
    display: block;
    width: 100%;
    min-height: 1em;
}


input, input[type=text], input[type=password], select {
    width: 100%;
}

.timefield input {
    width: 5em;
}

.timefield select {
    width: auto;
}


textarea {
    width: 100%;
}

a#fullsite {
    padding-left: 1em;
}



More information about the freeside-commits mailing list