Add a popup menu in the main menu which allows to quickly jump between projects.

* refactor out the common menu code from several base*.html classes into main-menu.html
  and put the raw links into a unordered list (which makes it easier to create dynamic
  menus as we cannot insert block items into inline items in strict mode)
* query the list of available projects on every request and set them for every template
  in Middleware.php
* make the popup menu pretty
This commit is contained in:
Thomas Keller 2010-10-15 00:40:09 +00:00
parent c3ff90c4f8
commit 7e10524f92
7 changed files with 298 additions and 203 deletions

View File

@ -112,6 +112,7 @@ function IDF_Middleware_ContextPreProcessor($request)
$c = array_merge($c, $request->rights); $c = array_merge($c, $request->rights);
} }
$c['usherConfigured'] = Pluf::f("mtn_usher_conf", null) !== null; $c['usherConfigured'] = Pluf::f("mtn_usher_conf", null) !== null;
$c['allProjects'] = IDF_Views::getProjects($request->user);
return $c; return $c;
} }

View File

@ -29,22 +29,19 @@
<![endif]--> <![endif]-->
{block extraheader}{/block} {block extraheader}{/block}
<title>{block pagetitle}{$page_title|strip_tags}{/block}{if $project} - {$project.shortdesc}{/if}</title> <title>{block pagetitle}{$page_title|strip_tags}{/block}{if $project} - {$project.shortdesc}{/if}</title>
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
</head> </head>
<body> <body>
<div id="{block docid}doc3{/block}"> <div id="{block docid}doc3{/block}">
<div id="hd"> <div id="hd">
{if $project}<h1 class="project-title">{$project}</h1>{/if} {if $project}<h1 class="project-title">{$project}</h1>{/if}
<p class="top"><a href="#title" accesskey="2"></a> {include 'idf/main-menu.html'}
{if !$user.isAnonymous()}{aurl 'url', 'idf_dashboard'}{blocktrans}Welcome, <strong><a class="userw" href="{$url}">{$user}</a></strong>.{/blocktrans} <a href="{url 'IDF_Views::logout'}">{trans 'Sign Out'}</a>{else}<a href="{url 'IDF_Views::login'}">{trans 'Sign in or create your account'}</a>{/if}
{if $project} | <a href="{url 'IDF_Views::index'}">{trans 'Project List'}</a>{/if}
| <a href="{url 'IDF_Views::faq'}" title="{trans 'Help and accessibility features'}">{trans 'Help'}</a>
</p>
<div id="header"> <div id="header">
<div id="main-tabs"> <div id="main-tabs">
{if $project} {if $project}
<a accesskey="1" href="{url 'IDF_Views_Project::home', array($project.shortname)}"{block tabhome}{/block}>{trans 'Project Home'}</a> <a accesskey="1" href="{url 'IDF_Views_Project::home', array($project.shortname)}"{block tabhome}{/block}>{trans 'Project Home'}</a>
{if $hasDownloadsAccess} <a href="{url 'IDF_Views_Download::index', array($project.shortname)}"{block tabdownloads}{/block}>{trans 'Downloads'}</a>{/if} {if $hasDownloadsAccess} <a href="{url 'IDF_Views_Download::index', array($project.shortname)}"{block tabdownloads}{/block}>{trans 'Downloads'}</a>{/if}
{if $hasWikiAccess} <a href="{url 'IDF_Views_Wiki::index', array($project.shortname)}"{block tabwiki}{/block}>{trans 'Documentation'}</a>{/if} {if $hasWikiAccess} <a href="{url 'IDF_Views_Wiki::index', array($project.shortname)}"{block tabwiki}{/block}>{trans 'Documentation'}</a>{/if}
{if $hasIssuesAccess} <a href="{url 'IDF_Views_Issue::index', array($project.shortname)}"{block tabissues}{/block}>{trans 'Issues'}</a>{/if} {if $hasIssuesAccess} <a href="{url 'IDF_Views_Issue::index', array($project.shortname)}"{block tabissues}{/block}>{trans 'Issues'}</a>{/if}
{if $hasSourceAccess} <a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, $project.getScmRoot())}"{block tabsource}{/block}>{trans 'Source'}</a>{/if} {if $hasSourceAccess} <a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, $project.getScmRoot())}"{block tabsource}{/block}>{trans 'Source'}</a>{/if}
{if $hasReviewAccess} <a href="{url 'IDF_Views_Review::index', array($project.shortname)}"{block tabreview}{/block}>{trans 'Code Review'}</a>{/if} {if $hasReviewAccess} <a href="{url 'IDF_Views_Review::index', array($project.shortname)}"{block tabreview}{/block}>{trans 'Code Review'}</a>{/if}
@ -54,35 +51,34 @@
{block subtabs}{if $user.isAnonymous()} | {aurl 'url', 'IDF_Views::login'}{blocktrans}<a href="{$url}">Sign in or create your account</a> to create issues or add comments{/blocktrans}{/if}{/block} {block subtabs}{if $user.isAnonymous()} | {aurl 'url', 'IDF_Views::login'}{blocktrans}<a href="{$url}">Sign in or create your account</a> to create issues or add comments{/blocktrans}{/if}{/block}
</div> </div>
<h1 class="title" id="title">{block titleicon}{/block}{block title}{$page_title}{/block}</h1> <h1 class="title" id="title">{block titleicon}{/block}{block title}{$page_title}{/block}</h1>
</div> </div>
<div id="bd"> <div id="bd">
<div id="yui-main"> <div id="yui-main">
<div class="yui-b"> <div class="yui-b">
<div class="yui-g"> <div class="yui-g">
{if $user and $user.id}{getmsgs $user}{/if} {if $user and $user.id}{getmsgs $user}{/if}
<div class="content">{block body}{/block}</div> <div class="content">{block body}{/block}</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div id="ft">{block foot}{/block}</div> <div id="ft">{block foot}{/block}</div>
</div> </div>
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
{include 'idf/js-hotkeys.html'} {include 'idf/js-hotkeys.html'}
{block javascript}{/block} {block javascript}{/block}
{if $project} {if $project}
<script type="text/javascript" charset="utf-8">{literal} <script type="text/javascript" charset="utf-8">{literal}
//<![CDATA[ //<![CDATA[
$(document).ready(function(){ $(document).ready(function(){
var frag = location.hash; var frag = location.hash;
if ($('#preview').length) { if ($('#preview').length) {
location.hash = '#preview'; location.hash = '#preview';
} }
else if (frag.length > 3 && frag.substring(0, 3) == '#ic') { else if (frag.length > 3 && frag.substring(0, 3) == '#ic') {
$(frag).addClass("issue-comment-focus"); $(frag).addClass("issue-comment-focus");
} }
}); });
//]]>{/literal} //]]>{/literal}
</script>{/if} </script>{/if}

View File

@ -29,31 +29,27 @@
<![endif]--> <![endif]-->
{block extraheader}{/block} {block extraheader}{/block}
<title>{block pagetitle}{$page_title|strip_tags}{/block}</title> <title>{block pagetitle}{$page_title|strip_tags}{/block}</title>
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
</head> </head>
<body> <body>
<div id="{block docid}doc3{/block}" class="{block docclass}yui-t3{/block}"> <div id="{block docid}doc3{/block}" class="{block docclass}yui-t3{/block}">
<div id="hd"> <div id="hd">
<p class="top"><a href="#title" accesskey="2"></a> {include 'idf/main-menu.html'}
{if !$user.isAnonymous()}{aurl 'url', 'idf_dashboard'}{blocktrans}Welcome, <strong><a class="userw" href="{$url}">{$user}</a></strong>.{/blocktrans} <a href="{url 'IDF_Views::logout'}">{trans 'Sign Out'}</a>{else}<a href="{url 'IDF_Views::login'}">{trans 'Sign in or create your account'}</a>{/if} <h1 id="title" class="title">{block title}{$page_title}{/block}</h1>
| <a href="{url 'IDF_Views::index'}">{trans 'Project List'}</a> {if $isAdmin}| <a href="{url 'IDF_Views_Admin::projects'}">{trans 'Forge Management'}</a>{/if}
| <a href="{url 'IDF_Views::faq'}" title="{trans 'Help and accessibility features'}">{trans 'Help'}</a>
</p>
<h1 id="title" class="title">{block title}{$page_title}{/block}</h1>
</div> </div>
<div id="bd"> <div id="bd">
<div id="yui-main"> <div id="yui-main">
<div class="yui-b"> <div class="yui-b">
<div class="yui-g"> <div class="yui-g">
{if $user and $user.id}{getmsgs $user}{/if} {if $user and $user.id}{getmsgs $user}{/if}
<div class="content">{block body}{/block}</div> <div class="content">{block body}{/block}</div>
</div> </div>
</div> </div>
</div> </div>
<div class="yui-b context">{block context}{/block}</div> <div class="yui-b context">{block context}{/block}</div>
</div> </div>
<div id="ft">{block foot}{/block}</div> <div id="ft">{block foot}{/block}</div>
</div> </div>
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
{include 'idf/js-hotkeys.html'} {include 'idf/js-hotkeys.html'}
{block javascript}{/block} {block javascript}{/block}
</body> </body>

View File

@ -29,23 +29,19 @@
<![endif]--> <![endif]-->
{block extraheader}{/block} {block extraheader}{/block}
<title>{block pagetitle}{$page_title|strip_tags}{/block}{if $project} - {$project.shortdesc}{/if}</title> <title>{block pagetitle}{$page_title|strip_tags}{/block}{if $project} - {$project.shortdesc}{/if}</title>
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
</head> </head>
<body> <body>
<div id="{block docid}doc3{/block}" class="{block docclass}yui-t3{/block}"> <div id="{block docid}doc3{/block}" class="{block docclass}yui-t3{/block}">
<div id="hd"> <div id="hd">
{if $project}<h1 class="project-title">{$project}</h1>{/if} {if $project}<h1 class="project-title">{$project}</h1>{/if}
<p class="top"><a href="#title" accesskey="2"></a> {include 'idf/main-menu.html'}
{if !$user.isAnonymous()}{aurl 'url', 'idf_dashboard'}{blocktrans}Welcome, <strong><a class="userw" href="{$url}">{$user}</a></strong>.{/blocktrans} <a href="{url 'IDF_Views::logout'}">{trans 'Sign Out'}</a>{else}<a href="{url 'IDF_Views::login'}">{trans 'Sign in or create your account'}</a>{/if}
{if $project} | <a href="{url 'IDF_Views::index'}">{trans 'Project List'}</a>{/if}
{if $isAdmin}| <a href="{url 'IDF_Views_Admin::projects'}">{trans 'Forge Management'}</a>{/if}
| <a href="{url 'IDF_Views::faq'}" title="{trans 'Help and accessibility features'}">{trans 'Help'}</a>
</p>
<div id="header"> <div id="header">
<div id="main-tabs"> <div id="main-tabs">
{if $project} {if $project}
<a accesskey="1" href="{url 'IDF_Views_Project::home', array($project.shortname)}"{block tabhome}{/block}>{trans 'Project Home'}</a> <a accesskey="1" href="{url 'IDF_Views_Project::home', array($project.shortname)}"{block tabhome}{/block}>{trans 'Project Home'}</a>
{if $hasDownloadsAccess} <a href="{url 'IDF_Views_Download::index', array($project.shortname)}"{block tabdownloads}{/block}>{trans 'Downloads'}</a>{/if} {if $hasDownloadsAccess} <a href="{url 'IDF_Views_Download::index', array($project.shortname)}"{block tabdownloads}{/block}>{trans 'Downloads'}</a>{/if}
{if $hasWikiAccess} <a href="{url 'IDF_Views_Wiki::index', array($project.shortname)}"{block tabwiki}{/block}>{trans 'Documentation'}</a>{/if} {if $hasWikiAccess} <a href="{url 'IDF_Views_Wiki::index', array($project.shortname)}"{block tabwiki}{/block}>{trans 'Documentation'}</a>{/if}
{if $hasIssuesAccess} <a href="{url 'IDF_Views_Issue::index', array($project.shortname)}"{block tabissues}{/block}>{trans 'Issues'}</a>{/if} {if $hasIssuesAccess} <a href="{url 'IDF_Views_Issue::index', array($project.shortname)}"{block tabissues}{/block}>{trans 'Issues'}</a>{/if}
{if $hasSourceAccess} <a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, $project.getScmRoot())}"{block tabsource}{/block}>{trans 'Source'}</a>{/if} {if $hasSourceAccess} <a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, $project.getScmRoot())}"{block tabsource}{/block}>{trans 'Source'}</a>{/if}
{if $hasReviewAccess} <a href="{url 'IDF_Views_Review::index', array($project.shortname)}"{block tabreview}{/block}>{trans 'Code Review'}</a>{/if} {if $hasReviewAccess} <a href="{url 'IDF_Views_Review::index', array($project.shortname)}"{block tabreview}{/block}>{trans 'Code Review'}</a>{/if}
@ -55,36 +51,35 @@
{block subtabs}{if $user.isAnonymous()} | {aurl 'url', 'IDF_Views::login'}{blocktrans}<a href="{$url}">Sign in or create your account</a> to create issues or add comments{/blocktrans}{/if}{/block} {block subtabs}{if $user.isAnonymous()} | {aurl 'url', 'IDF_Views::login'}{blocktrans}<a href="{$url}">Sign in or create your account</a> to create issues or add comments{/blocktrans}{/if}{/block}
</div> </div>
<h1 class="title" id="title">{block titleicon}{/block}{block title}{$page_title}{/block}</h1> <h1 class="title" id="title">{block titleicon}{/block}{block title}{$page_title}{/block}</h1>
</div> </div>
<div id="bd"> <div id="bd">
<div id="yui-main"> <div id="yui-main">
<div class="yui-b"> <div class="yui-b">
<div class="yui-g"> <div class="yui-g">
{if $user and $user.id}{getmsgs $user}{/if} {if $user and $user.id}{getmsgs $user}{/if}
<div class="content">{block body}{/block}</div> <div class="content">{block body}{/block}</div>
</div> </div>
</div> </div>
</div> </div>
<div class="yui-b context">{block context}{/block}</div> <div class="yui-b context">{block context}{/block}</div>
</div> </div>
<div id="ft">{block foot}{/block}</div> <div id="ft">{block foot}{/block}</div>
</div> </div>
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
{include 'idf/js-hotkeys.html'} {include 'idf/js-hotkeys.html'}
{block javascript}{/block} {block javascript}{/block}
{if $project} {if $project}
<script type="text/javascript" charset="utf-8">{literal} <script type="text/javascript" charset="utf-8">{literal}
//<![CDATA[ //<![CDATA[
$(document).ready(function(){ $(document).ready(function(){
var frag = location.hash; var frag = location.hash;
if ($('#preview').length) { if ($('#preview').length) {
location.hash = '#preview'; location.hash = '#preview';
} }
else if (frag.length > 3 && frag.substring(0, 3) == '#ic') { else if (frag.length > 3 && frag.substring(0, 3) == '#ic') {
$(frag).addClass("issue-comment-focus"); $(frag).addClass("issue-comment-focus");
} }
}); });
//]]>{/literal} //]]>{/literal}
</script>{/if} </script>{/if}

View File

@ -29,16 +29,12 @@
<![endif]--> <![endif]-->
{block extraheader}{/block} {block extraheader}{/block}
<title>{block pagetitle}{$page_title|strip_tags}{/block}</title> <title>{block pagetitle}{$page_title|strip_tags}{/block}</title>
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
</head> </head>
<body> <body>
<div id="{block docid}doc3{/block}" class="{block docclass}yui-t3{/block}"> <div id="{block docid}doc3{/block}" class="{block docclass}yui-t3{/block}">
<div id="hd"> <div id="hd">
<p class="top"><a href="#title" accesskey="2"></a> {include 'idf/main-menu.html'}
{aurl 'url', 'IDF_Views_User::dashboard'}{blocktrans}Welcome, <strong><a class="userw" href="{$url}">{$user}</a></strong>.{/blocktrans} <a href="{url 'IDF_Views::logout'}">{trans 'Sign Out'}</a>
| <a href="{url 'IDF_Views::index'}">{trans 'Project List'}</a>
| <a href="{url 'IDF_Views_Admin::projects'}">{trans 'Forge Management'}</a>
| <a href="{url 'IDF_Views::faq'}" title="{trans 'Help and accessibility features'}">{trans 'Help'}</a>
</p>
<div id="header"> <div id="header">
<div id="main-tabs"> <div id="main-tabs">
<a href="{url 'IDF_Views_Admin::projects'}"{block tabprojects}{/block}>{trans 'Projects'}</a> <a href="{url 'IDF_Views_Admin::projects'}"{block tabprojects}{/block}>{trans 'Projects'}</a>
@ -64,7 +60,6 @@
</div> </div>
<div id="ft">{block foot}{/block}</div> <div id="ft">{block foot}{/block}</div>
</div> </div>
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
{include 'idf/js-hotkeys.html'} {include 'idf/js-hotkeys.html'}
{block javascript}{/block} {block javascript}{/block}
</body> </body>

View File

@ -0,0 +1,31 @@
<a href="#title" accesskey="2"></a>
<ul id="main-menu">
{if !$user.isAnonymous()}
{aurl 'url', 'idf_dashboard'}
<li>{blocktrans}Welcome, <strong><a class="userw" href="{$url}">{$user}</a></strong>.{/blocktrans}
<a href="{url 'IDF_Views::logout'}">{trans 'Sign Out'}</a></li>{else}<li>
<a href="{url 'IDF_Views::login'}">{trans 'Sign in or create your account'}</a></li>
{/if}<li id="project-list"><a href="{url 'IDF_Views::index'}">{trans 'Project List'} &#x25be;</a>
{if $allProjects.count() != 0}
<ul>{foreach $allProjects as $p}
<li>{if $p.private}<img style="vertical-align: text-bottom;" src="{media '/idf/img/lock.png'}" alt="{trans 'Private project'}" /> {/if}
<a href="{url 'IDF_Views_Project::home', array($p.shortname)}">{$p}</a></li>
{/foreach}</ul>
{/if}</li>{if $isAdmin}<li><a href="{url 'IDF_Views_Admin::projects'}">{trans 'Forge Management'}</a></li>{/if}<li>
<a href="{url 'IDF_Views::faq'}" title="{trans 'Help and accessibility features'}">{trans 'Help'}</a></li>
</ul>
{if $allProjects.count() != 0}
<script type="text/javascript" charset="utf-8">
{literal}
$(document).ready(function() {
$('#project-list').bind('mouseenter', function(ev) {
$(this).find('ul').show();
}).bind('mouseleave', function(ev) {
$(this).find('ul').hide();
});
});
{/literal}
</script>
{/if}

View File

@ -19,92 +19,92 @@
# #
# ***** END LICENSE BLOCK ***** */ # ***** END LICENSE BLOCK ***** */
body { body {
font-family: arial, helvetica, sans-serif; font-family: arial, helvetica, sans-serif;
} }
.top { .top {
margin-top: 5px; margin-top: 5px;
} }
a:link { a:link {
color: #00e; color: #00e;
} }
a:visited { a:visited {
color: #551a8b; color: #551a8b;
}
a:active{
color: #f00;
} }
.yui-g { a:active{
color: #f00;
}
.yui-g {
padding: 0 1em; padding: 0 1em;
} }
.right { .right {
text-align: right; text-align: right;
} }
.a-c { .a-c {
text-align: center !important; text-align: center !important;
} }
.dellink { .dellink {
float: right; float: right;
position: relative; position: relative;
} }
.dellink a { .dellink a {
color: #a00; color: #a00;
} }
a.userw { a.userw {
color: #000; color: #000;
} }
.mono { .mono {
font-family: monospace; font-family: monospace;
} }
.soft { .soft {
color: #777; color: #777;
} }
.soft a { .soft a {
color: #777; color: #777;
} }
a.soft { a.soft {
color: #777; color: #777;
} }
a.soft:visited { a.soft:visited {
color: #777; color: #777;
} }
div.context { div.context {
padding-left: 1em; padding-left: 1em;
} }
/** /**
* Form * Form
*/ */
form.star { form.star {
display: inline; display: inline;
} }
table.form th, table.form td { table.form th, table.form td {
border: none; border: none;
vertical-align: top; vertical-align: top;
} }
table.form th { table.form th {
text-align: right; text-align: right;
font-weight: normal; font-weight: normal;
} }
.px-message-error { .px-message-error {
padding-left: 37px; padding-left: 37px;
background: url("../img/dialog-error.png"); background: url("../img/dialog-error.png");
background-repeat: no-repeat; background-repeat: no-repeat;
@ -114,12 +114,12 @@ table.form th {
padding-bottom: 5px; padding-bottom: 5px;
} }
ul.errorlist { ul.errorlist {
color: #c00; color: #c00;
font-weight: bold; font-weight: bold;
} }
div.user-messages { div.user-messages {
border: 1px solid rgb(229, 225, 169); border: 1px solid rgb(229, 225, 169);
background-color: #fffde3; background-color: #fffde3;
margin-bottom: 1em; margin-bottom: 1em;
@ -127,7 +127,7 @@ div.user-messages {
width: 90%; width: 90%;
} }
div.theterms { div.theterms {
border: 1px solid rgb(229, 225, 169); border: 1px solid rgb(229, 225, 169);
background-color: #fffde3; background-color: #fffde3;
padding: 1em 1em 0 1em; padding: 1em 1em 0 1em;
@ -137,92 +137,92 @@ div.theterms {
/** /**
* Recent issues * Recent issues
*/ */
table.recent-issues { table.recent-issues {
width: 90%; width: 90%;
} }
table.minsize { table.minsize {
width: auto !important; width: auto !important;
} }
table.recent-issues tr.log { table.recent-issues tr.log {
border-bottom: 1px solid #e7ebe3; border-bottom: 1px solid #e7ebe3;
} }
table.recent-issues th { table.recent-issues th {
background-color: #e4e8E0; background-color: #e4e8E0;
vertical-align: top; vertical-align: top;
border-color: #d3d7cf; border-color: #d3d7cf;
} }
table.recent-issues tr { table.recent-issues tr {
border-left: 1px solid #d3d7cf; border-left: 1px solid #d3d7cf;
border-right: 1px solid #d3d7cf; border-right: 1px solid #d3d7cf;
border-bottom: 1px solid #d3d7cf; border-bottom: 1px solid #d3d7cf;
} }
table.recent-issues td { table.recent-issues td {
border: none; border: none;
vertical-align: top; vertical-align: top;
} }
table.recent-issues tfoot th { table.recent-issues tfoot th {
text-align: right; text-align: right;
} }
table.recent-issues tfoot th a { table.recent-issues tfoot th a {
color: #000; color: #000;
font-weight: normal; font-weight: normal;
} }
table.recent-issues th a.px-current-page { table.recent-issues th a.px-current-page {
font-weight: bold; font-weight: bold;
text-decoration: none; text-decoration: none;
} }
span.px-sort { span.px-sort {
font-weight: normal; font-weight: normal;
font-size: 70%; font-size: 70%;
white-space: nowrap; white-space: nowrap;
padding-left: 1em; padding-left: 1em;
} }
span.px-header-title { span.px-header-title {
white-space: nowrap; white-space: nowrap;
} }
span.px-header-title a, span.px-header-title a:link, span.px-header-title a:visited, span.px-header-title a:active { span.px-header-title a, span.px-header-title a:link, span.px-header-title a:visited, span.px-header-title a:active {
color: #000; color: #000;
} }
/** /**
* Issue * Issue
*/ */
a.issue-c { a.issue-c {
text-decoration: line-through; text-decoration: line-through;
} }
pre.issue-comment-text { pre.issue-comment-text {
font-family: monospace; font-family: monospace;
line-height: 1.2; /* to be nice also with links */ line-height: 1.2; /* to be nice also with links */
} }
div.issue-comment { div.issue-comment {
border-left: 3px solid #8ae234; border-left: 3px solid #8ae234;
border-bottom: 1px solid #d3d7cf; border-bottom: 1px solid #d3d7cf;
border-right: 1px solid #d3d7cf; border-right: 1px solid #d3d7cf;
padding: 0.5em; padding: 0.5em;
} }
.issue-comment-focus { .issue-comment-focus {
border-right: 3px solid #8ae234 !important; border-right: 3px solid #8ae234 !important;
} }
div.issue-comment-first { div.issue-comment-first {
border-top: 1px solid #d3d7cf; border-top: 1px solid #d3d7cf;
} }
div.issue-comment-signin { div.issue-comment-signin {
-moz-border-radius: 0 0 3px 3px; -moz-border-radius: 0 0 3px 3px;
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
-webkit-border-top-left-radius: 0; -webkit-border-top-left-radius: 0;
@ -231,11 +231,11 @@ div.issue-comment-signin {
padding: 4px; padding: 4px;
} }
div.issue-comment-signin a { div.issue-comment-signin a {
color: #000; color: #000;
} }
div.issue-changes { div.issue-changes {
background-color: #d3d7cf; background-color: #d3d7cf;
-moz-border-radius: 3px; -moz-border-radius: 3px;
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
@ -243,7 +243,7 @@ div.issue-changes {
width: 60%; width: 60%;
} }
div.issue-changes-timeline { div.issue-changes-timeline {
background-color: #eeeeec; background-color: #eeeeec;
-moz-border-radius: 3px; -moz-border-radius: 3px;
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
@ -253,7 +253,7 @@ div.issue-changes-timeline {
color: #888a85; color: #888a85;
} }
div.issue-submit-info { div.issue-submit-info {
background-color: #d3d7cf; background-color: #d3d7cf;
-moz-border-radius: 3px; -moz-border-radius: 3px;
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
@ -261,47 +261,47 @@ div.issue-submit-info {
margin-bottom: 1em; margin-bottom: 1em;
} }
div.issue-submit-info h2 { div.issue-submit-info h2 {
margin-top: 0; margin-top: 0;
} }
span.label { span.label {
color: #204a87; color: #204a87;
padding-left: 0.5em; padding-left: 0.5em;
} }
a.label { a.label {
color: #204a87; color: #204a87;
text-decoration: none; text-decoration: none;
} }
.label { .label {
color: #204a87; color: #204a87;
} }
span.nobrk { span.nobrk {
white-space: nowrap; white-space: nowrap;
} }
hr { visibility: hidden; } hr { visibility: hidden; }
hr.attach { hr.attach {
visibility: visible; visibility: visible;
border: 0; border: 0;
background-color: #d3d7cf; background-color: #d3d7cf;
color: #d3d7cf; color: #d3d7cf;
width: 40%; width: 40%;
} }
textarea { textarea {
font-family: monospace; font-family: monospace;
} }
h1.title { h1.title {
font-weight: normal; font-weight: normal;
} }
h1.project-title { h1.project-title {
font-weight: normal; font-weight: normal;
float: right; float: right;
z-index: 100; z-index: 100;
@ -310,55 +310,55 @@ h1.project-title {
margin-bottom: 0; margin-bottom: 0;
} }
.note { .note {
font-size: 80%; font-size: 80%;
} }
.smaller { .smaller {
font-size: 90%; font-size: 90%;
} }
span.active { span.active {
font-weight: bold; font-weight: bold;
} }
.helptext { .helptext {
font-size: 80%; font-size: 80%;
color: #555753; color: #555753;
} }
div.container { div.container {
clear: both; clear: both;
} }
.sep { .sep {
margin: 0 0.3em; margin: 0 0.3em;
} }
/** /**
* Tabs * Tabs
*/ */
#main-tabs { #main-tabs {
line-height: normal; line-height: normal;
} }
#main-tabs a { #main-tabs a {
background-color: #d3d7cf; background-color: #d3d7cf;
-moz-border-radius: 3px 3px 0 0; -moz-border-radius: 3px 3px 0 0;
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
-webkit-border-bottom-left-radius: 0; -webkit-border-bottom-left-radius: 0;
-webkit-border-bottom-right-radius: 0; -webkit-border-bottom-right-radius: 0;
padding: 4px 4px 0 4px; padding: 4px 4px 0 4px;
text-decoration: none; text-decoration: none;
color: #2e3436; color: #2e3436;
font-weight: 600; font-weight: 600;
} }
#main-tabs a.active { #main-tabs a.active {
background-color: #a5e26a; background-color: #a5e26a;
} }
#sub-tabs { #sub-tabs {
background-color: #a5e26a; background-color: #a5e26a;
-moz-border-radius: 0 3px 3px 3px; -moz-border-radius: 0 3px 3px 3px;
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
@ -366,63 +366,63 @@ div.container {
padding: 4px; padding: 4px;
} }
#sub-tabs a { #sub-tabs a {
color: #2e3436; color: #2e3436;
} }
#sub-tabs a.active { #sub-tabs a.active {
text-decoration: none; text-decoration: none;
} }
/** /**
* Tree list * Tree list
*/ */
table.tree-list { table.tree-list {
width: 100%; width: 100%;
} }
table.tree-list th { table.tree-list th {
background-color: #e4e8E0; background-color: #e4e8E0;
vertical-align: top; vertical-align: top;
border-color: #d3d7cf; border-color: #d3d7cf;
} }
table.tree-list tr { table.tree-list tr {
border-left: 1px solid #d3d7cf; border-left: 1px solid #d3d7cf;
border-right: 1px solid #d3d7cf; border-right: 1px solid #d3d7cf;
border-bottom: 1px solid #d3d7cf; border-bottom: 1px solid #d3d7cf;
} }
table.tree-list td { table.tree-list td {
border: none; border: none;
vertical-align: top; vertical-align: top;
} }
table.tree-list tfoot th, table.code tfoot th { table.tree-list tfoot th, table.code tfoot th {
text-align: right; text-align: right;
font-weight: normal; font-weight: normal;
} }
table.tree-list tfoot th a, table.code tfoot th a { table.tree-list tfoot th a, table.code tfoot th a {
color: #000; color: #000;
font-weight: normal; font-weight: normal;
} }
table.tree-list tfoot th ul, table.code tfoot th ul { table.tree-list tfoot th ul, table.code tfoot th ul {
text-align: left; text-align: left;
font-size: 85%; font-size: 85%;
} }
table.tree-list tr.log { table.tree-list tr.log {
border-bottom: 1px solid #e7ebe3; border-bottom: 1px solid #e7ebe3;
/* background-color: #eef2ea !important; */ /* background-color: #eef2ea !important; */
} }
table.tree-list tr.extra { table.tree-list tr.extra {
/* border-bottom: 1px solid #e7ebe3; */ /* border-bottom: 1px solid #e7ebe3; */
/* background-color: #eef2ea !important; */ /* background-color: #eef2ea !important; */
} }
table td.fileicon { table td.fileicon {
width: 20px; width: 20px;
} }
@ -452,15 +452,15 @@ table td.fileicon {
padding: 2px 5px; padding: 2px 5px;
cursor: default; cursor: default;
display: block; display: block;
/* /*
if width will be 100% horizontal scrollbar will apear if width will be 100% horizontal scrollbar will apear
when scroll mode will be used when scroll mode will be used
*/ */
/*width: 100%;*/ /*width: 100%;*/
font: menu; font: menu;
font-size: 12px; font-size: 12px;
/* /*
it is very important, if line-height not setted or setted it is very important, if line-height not setted or setted
in relative units scroll will be broken in firefox in relative units scroll will be broken in firefox
*/ */
line-height: 16px; line-height: 16px;
@ -480,7 +480,7 @@ table td.fileicon {
color: white; color: white;
} }
table.disp th, table.disp td { table.disp th, table.disp td {
border: none; border: none;
vertical-align: top; vertical-align: top;
} }
@ -488,48 +488,48 @@ table.disp th, table.disp td {
/** /**
* Commit * Commit
*/ */
table.commit th, table.commit td { table.commit th, table.commit td {
border: none; border: none;
vertical-align: top; vertical-align: top;
} }
table.commit th { table.commit th {
text-align: right; text-align: right;
font-weight: normal; font-weight: normal;
} }
table.commit td, table.commit th { table.commit td, table.commit th {
padding: 3px; padding: 3px;
} }
/** /**
* syntax highlighting of diffs * syntax highlighting of diffs
*/ */
table.diff { table.diff {
border-bottom: 1px solid #d3d7cf; border-bottom: 1px solid #d3d7cf;
width: 100%; width: 100%;
} }
table.diff th { table.diff th {
background-color: #e4e8E0; background-color: #e4e8E0;
vertical-align: top; vertical-align: top;
border-color: #d3d7cf; border-color: #d3d7cf;
} }
table.diff tr { table.diff tr {
border-left: 1px solid #d3d7cf; border-left: 1px solid #d3d7cf;
border-right: 1px solid #d3d7cf; border-right: 1px solid #d3d7cf;
border-bottom: none; border-bottom: none;
border-top: none; border-top: none;
} }
table.diff td { table.diff td {
font-size: 90%; font-size: 90%;
vertical-align: top; vertical-align: top;
padding: 1px; padding: 1px;
border-color: inherit; border-color: inherit;
} }
table.diff td.diff-lc { table.diff td.diff-lc {
text-align: right; text-align: right;
padding: 1px 5px; padding: 1px 5px;
border-color: inherit; border-color: inherit;
@ -538,27 +538,27 @@ table.diff td.diff-lc {
width: 3em; width: 3em;
} }
td.diff-a { td.diff-a {
background-color: #dfd; background-color: #dfd;
} }
td.diff-r { td.diff-r {
background-color: #fdd; background-color: #fdd;
} }
td.diff-a, td.diff-r, td.diff-c { td.diff-a, td.diff-r, td.diff-c {
border-bottom: none; border-bottom: none;
border-top: none; border-top: none;
} }
table.diff tr.diff-next { table.diff tr.diff-next {
background-color: #e4e8E0; background-color: #e4e8E0;
vertical-align: top; vertical-align: top;
text-align: right; text-align: right;
border-color: #d3d7cf; border-color: #d3d7cf;
} }
table.diff tr.diff-next td { table.diff tr.diff-next td {
padding: 1px 5px; padding: 1px 5px;
} }
@ -566,33 +566,33 @@ table.diff tr.diff-next td {
/** /**
* view file content * view file content
*/ */
table.code { table.code {
border-bottom: 1px solid #d3d7cf; border-bottom: 1px solid #d3d7cf;
border-top: 1px solid #d3d7cf; border-top: 1px solid #d3d7cf;
width: 100%; width: 100%;
} }
table.code th { table.code th {
background-color: #e4e8E0; background-color: #e4e8E0;
vertical-align: top; vertical-align: top;
border-color: #d3d7cf; border-color: #d3d7cf;
} }
table.code tr { table.code tr {
border-left: 1px solid #d3d7cf; border-left: 1px solid #d3d7cf;
border-right: 1px solid #d3d7cf; border-right: 1px solid #d3d7cf;
border-bottom: none; border-bottom: none;
border-top: none; border-top: none;
} }
table.code td { table.code td {
font-size: 90%; font-size: 90%;
vertical-align: top; vertical-align: top;
padding: 1px; padding: 1px;
border-color: inherit; border-color: inherit;
} }
table.code td.code { table.code td.code {
border: none; border: none;
/* Whitespace hacking from: http://ln.hixie.ch/ */ /* Whitespace hacking from: http://ln.hixie.ch/ */
white-space: pre; /* CSS2 */ white-space: pre; /* CSS2 */
@ -601,11 +601,11 @@ table.code td.code {
white-space: -o-pre-wrap; /* Opera 7 */ white-space: -o-pre-wrap; /* Opera 7 */
white-space: -pre-wrap; /* Opera 4-6 */ white-space: -pre-wrap; /* Opera 4-6 */
white-space: pre-wrap; /* CSS 2.1 */ white-space: pre-wrap; /* CSS 2.1 */
word-wrap: break-word; /* IE */ word-wrap: break-word; /* IE */
padding-left: 5px; padding-left: 5px;
} }
table.code td.code-lc { table.code td.code-lc {
text-align: right; text-align: right;
padding: 1px 5px; padding: 1px 5px;
border-color: inherit; border-color: inherit;
@ -614,7 +614,7 @@ table.code td.code-lc {
width: 3em; width: 3em;
} }
table.code td.code-lc a { table.code td.code-lc a {
color: #555753; color: #555753;
text-decoration: none; text-decoration: none;
} }
@ -622,7 +622,7 @@ table.code td.code-lc a {
/** /**
* Download * Download
*/ */
div.download-file { div.download-file {
padding: 1em 1em 1em 3em; padding: 1em 1em 1em 3em;
background: url("../img/down-large.png"); background: url("../img/down-large.png");
background-repeat: no-repeat; background-repeat: no-repeat;
@ -635,14 +635,14 @@ div.download-file {
-webkit-border-radius: 5px; -webkit-border-radius: 5px;
} }
table.download { table.download {
margin-top: 1.5em; margin-top: 1.5em;
} }
/** /**
* Wiki * Wiki
*/ */
p.desc { p.desc {
background-color: #eeeeec; background-color: #eeeeec;
-moz-border-radius: 3px; -moz-border-radius: 3px;
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
@ -650,7 +650,7 @@ p.desc {
width: 60%; width: 60%;
} }
div.old-rev { div.old-rev {
padding: 1em 1em 0.1em 1em; padding: 1em 1em 0.1em 1em;
margin-bottom: 1em; margin-bottom: 1em;
background-color: #bbe394; background-color: #bbe394;
@ -659,7 +659,7 @@ div.old-rev {
-webkit-border-radius: 5px; -webkit-border-radius: 5px;
} }
div.deprecated-page { div.deprecated-page {
padding: 1em 1em 0.1em 3em; padding: 1em 1em 0.1em 3em;
margin-bottom: 1em; margin-bottom: 1em;
background: url("../img/warning-large.png"); background: url("../img/warning-large.png");
@ -673,16 +673,16 @@ div.deprecated-page {
} }
.delp { .delp {
float: right; float: right;
position: relative; position: relative;
} }
.delp a { .delp a {
color: #a00; color: #a00;
} }
#branding { #branding {
float: right; float: right;
position: relative; position: relative;
margin-right: -10px; margin-right: -10px;
@ -692,7 +692,7 @@ div.deprecated-page {
text-align: right; text-align: right;
padding-right: 20px; padding-right: 20px;
padding-left: 0px; padding-left: 0px;
background-color: #eeeeec; background-color: #eeeeec;
-moz-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px;
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
-webkit-border-top-right-radius: 0; -webkit-border-top-right-radius: 0;
@ -704,15 +704,96 @@ div.deprecated-page {
background-position: top right; background-position: top right;
} }
#branding a { #branding a {
color: #777; color: #777;
} }
#branding a:visited { #branding a:visited {
color: #777; color: #777;
} }
#ft { #ft {
padding: 0px; padding: 0px;
margin: 0px; margin: 0px;
} }
/**
* main menu
*/
#main-menu {
padding: 0;
margin: 5px 0 13px;
}
#main-menu > li {
list-style-type: none;
margin-left: 5px;
padding-left: 5px;
border-left: 1px solid black;
display: inline-block;
line-height: 1em;
}
#main-menu > li:first-child {
margin-left: 0;
padding-left: 0;
border-left: none;
}
/**
* project list popup
*/
#project-list {
position: relative;
padding-left: 0 !important;
}
#project-list > a {
padding-left: 5px;
padding-right: 5px;
margin-top: -3px;
padding-top: 3px;
}
#project-list + li {
margin-left: 0;
}
#project-list ul {
display: none;
background: #A5E26A;
border-top: 0;
position: absolute;
padding: 5px 5px 5px 20px;
margin: 0;
z-index: 1000;
top: 1.1em;
-moz-border-radius: 0 3px 3px 3px;
border-radius: 0 3px 3px 3px;
-moz-box-shadow: 0 10px 20px #333;
-webkit-box-shadow: 0 10px 20px #333;
box-shadow: 0 10px 20px #333;
}
#project-list ul li {
padding: 5px;
padding-left: 0;
white-space: nowrap;
font-size: 0.95em;
list-style-type: square;
}
#project-list ul li a {
text-decoration: none;
}
#project-list:hover > a {
background: #A5E26A;
text-decoration: none;
}
#project-list:hover a {
color: #2E3436;
}