From 1e47ab18a003df93e749211271554981e3af7689 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 07 Apr 2011 17:59:56 -0400
Subject: [PATCH] Localized all strings for translation.  Removed old resources.

---
 src/com/gitblit/wicket/panels/TagLinksPanel.html          |   10 
 src/com/gitblit/wicket/panels/PathLinksPanel.java         |   12 
 src/com/gitblit/wicket/panels/BranchLinksPanel.java       |   10 
 src/com/gitblit/wicket/pages/ShortLogPage.java            |    5 
 src/com/gitblit/wicket/panels/PathLinksPanel.html         |   10 
 src/com/gitblit/wicket/panels/AnnotatedTagLinksPanel.html |   10 
 src/com/gitblit/wicket/pages/ShortLogPage.html            |    8 
 gitblit.properties                                        |    2 
 src/com/gitblit/wicket/GitBlitWebApp.properties           |   37 ++
 src/com/gitblit/wicket/WicketUtils.java                   |   26 ++
 src/com/gitblit/wicket/pages/BlobPage.html                |    9 
 src/com/gitblit/wicket/panels/TagLinksPanel.java          |    9 
 src/com/gitblit/wicket/panels/AnnotatedTagLinksPanel.java |   11 
 src/com/gitblit/wicket/pages/BlobPage.java                |    9 
 src/com/gitblit/wicket/pages/DiffPage.html                |    8 
 src/com/gitblit/wicket/RepositoryPage.java                |   19 +
 src/com/gitblit/wicket/pages/CommitPage.html              |   20 
 src/com/gitblit/wicket/resources/gitblit.css              |    3 
 src/com/gitblit/wicket/pages/TicGitTicketPage.java        |   31 --
 src/com/gitblit/wicket/panels/PageLinksPanel.java         |   71 ++--
 src/com/gitblit/wicket/pages/TicGitTicketPage.html        |   20 
 src/com/gitblit/wicket/pages/DiffPage.java                |    9 
 src/com/gitblit/wicket/panels/PathBreadcrumbsPanel.html   |    8 
 src/com/gitblit/wicket/pages/TagsPage.java                |    5 
 src/com/gitblit/wicket/LinkPanel.html                     |    9 
 src/com/gitblit/wicket/panels/TreeLinksPanel.html         |   10 
 src/com/gitblit/wicket/pages/TagPage.html                 |   12 
 src/com/gitblit/wicket/panels/PageLinksPanel.html         |   10 
 src/com/gitblit/wicket/panels/TreeBlobLinksPanel.html     |   10 
 src/com/gitblit/wicket/pages/CommitPage.java              |    7 
 src/com/gitblit/wicket/pages/BranchesPage.java            |    7 
 src/com/gitblit/wicket/panels/AdminLinksPanel.java        |   11 
 src/com/gitblit/wicket/panels/ShortLogLinksPanel.html     |   10 
 src/com/gitblit/wicket/pages/RepositoriesPage.html        |   16 
 src/com/gitblit/wicket/panels/TreeLinksPanel.java         |   10 
 src/com/gitblit/wicket/LinkPanel.java                     |   31 +-
 src/com/gitblit/wicket/panels/ShortLogLinksPanel.java     |   11 
 src/com/gitblit/wicket/panels/TreeBlobLinksPanel.java     |   12 
 src/com/gitblit/wicket/pages/BranchesPage.html            |    8 
 src/com/gitblit/wicket/panels/RefsPanel.html              |    8 
 src/com/gitblit/Constants.java                            |   12 
 src/com/gitblit/wicket/panels/AdminLinksPanel.html        |   10 
 src/com/gitblit/wicket/pages/SummaryPage.html             |   16 
 src/com/gitblit/wicket/pages/TreePage.java                |    7 
 src/com/gitblit/wicket/pages/TicGitPage.java              |   19 -
 src/com/gitblit/wicket/pages/TreePage.html                |    8 
 src/com/gitblit/wicket/BasePage.java                      |    8 
 src/com/gitblit/wicket/panels/BranchLinksPanel.html       |   10 
 src/com/gitblit/wicket/BasePage.html                      |    8 
 /dev/null                                                 |   33 --
 src/com/gitblit/wicket/panels/BasePanel.java              |   17 +
 src/com/gitblit/wicket/pages/TagsPage.html                |    8 
 src/com/gitblit/wicket/pages/TicGitPage.html              |    8 
 src/com/gitblit/wicket/pages/SummaryPage.java             |   20 -
 src/com/gitblit/wicket/pages/TagPage.java                 |    5 
 55 files changed, 408 insertions(+), 325 deletions(-)

diff --git a/gitblit.properties b/gitblit.properties
index b7a879b..2f03da0 100644
--- a/gitblit.properties
+++ b/gitblit.properties
@@ -52,7 +52,7 @@
 #
 # Git:Blit UI Settings
 #
-siteName = Repositories
+siteName =
 allowAdministration = true
 repositoriesMessage = Welcome to Git:Blit!<br>A quick and easy way to host your own Git repositories.<br>Built with <a href="http://eclipse.org/jgit">JGit</a>, <a href="http://wicket.apache.org">Wicket</a>, <a href="http://code.google.com/p/google-code-prettify/">google-code-prettify</a>, <a href="http://eclipse.org/jetty">Jetty</a>, <a href="http://www.slf4j.org">SLF4J</a>, <a href="http://logging.apache.org/log4j">Log4j</a>, and <a href="http://jcommander.org">JCommander</a>.
 
diff --git a/resources/arrow_down.png b/resources/arrow_down.png
deleted file mode 100644
index f31cc81..0000000
--- a/resources/arrow_down.png
+++ /dev/null
Binary files differ
diff --git a/resources/arrow_off.png b/resources/arrow_off.png
deleted file mode 100644
index f9b1ced..0000000
--- a/resources/arrow_off.png
+++ /dev/null
Binary files differ
diff --git a/resources/arrow_up.png b/resources/arrow_up.png
deleted file mode 100644
index 63031c3..0000000
--- a/resources/arrow_up.png
+++ /dev/null
Binary files differ
diff --git a/resources/blank.png b/resources/blank.png
deleted file mode 100644
index 109296b..0000000
--- a/resources/blank.png
+++ /dev/null
Binary files differ
diff --git a/resources/gitblit.css b/resources/gitblit.css
deleted file mode 100644
index 675a258..0000000
--- a/resources/gitblit.css
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- Git:Blit css.
-*/
-html, body, table, dl, dt, dd, ol, ul, li, form, a, span, tr, th, td, div, em {
-	font-family: verdana, sans-serif;
-	font-size: 12px;
-	line-height: 15px;
-}
-
-body {
-	width: 980px;
-	margin: 5px;
-	background-color: #ffffff;
-	color: #000000;
-    margin-right: auto;
-    margin-left: auto;
-    margin-top: none;
-    padding: 0px;
-}
-
-pre, pre.prettyprint, pre.plainprint {
-	color: black;
-	font-family: monospace;
-	font-size:12px;
-	border:0px;
-}
-
-/* age0: age < 60*60*2 */
-.age0 {
-	color: #009900;
-	font-style: italic;
-	font-weight: bold;
-}
-
-/* age1: 60*60*2 <= age < 60*60*24*2 */
-.age1 {
-	color: #009900;
-	font-style: italic;
-}
-
-/* age2: 60*60*24*2 <= age */
-.age2 {
-	font-style: italic;
-}
-
-
-a {
-	color: #0000cc;
-}
-
-a:hover, a:visited, a:active {
-	color: #880000;
-}
-
-img.logo {
-	float: right;
-	border-width: 0px;
-}
-
-img.activityGraph {
-	float: right;
-	border-width: 0px;
-	padding: 8px;
-}
-
-div.repositories_message {
-	line-height: inherit;
-}
-
-div.header {
-	background-color: #D2C3AF;
-	padding: 3px;
-	border: 1px solid #808080;
-}
-
-div.header a {
-	color: black;
-	text-decoration: none;
-	font-weight: bold;
-}
-
-div.header a:hover {
-	text-decoration: underline;
-}
-
-div.pager {
-	padding: 0px 0px 15px 5px;
-}
-
-div.link {
-	padding: 2px 5px;
-	font-family: sans-serif;
-	font-size: 11px;
-}
-
-div.link span {
-	font-family: inherit;
-	font-size: inherit;
-}
-
-div.link a {
-	font-family: inherit;
-	font-size: inherit;
-}
-
-div.page_header {
-	height: 25px;
-	padding: 5px;
-	font-family: sans-serif;
-	font-weight: bold;
-	font-size: 150%;
-	color: #bbb;
-	background-color: #ffffff;
-}
-
-div.page_header span {	
-	font-family: inherit;
-	font-size: inherit;	
-}
-
-div.page_header a  {
-	font-size: inherit;	
-	font-family: inherit;
-	text-decoration: none;
-}
-
-div.page_header a:visited {
-	color: #000000;
-}
-
-div.page_header a:hover {
-	color: E66C2C;
-	text-decoration: underline;
-}
-
-div.page_footer {
-	height: 17px;
-	color: black;
-	background-color: #ffffff;
-	padding: 5px;
-	border-top: 1px solid #bbb;
-	font-style: italic;
-}
-
-div.page_nav {
-	color: #ddd;
-	background-color: #000070;
-	padding: 5px;
-}
-
-div.page_nav a {
-	color: yellow;
-	text-decoration: none;
-}
-
-div.page_nav a:hover {	
-	text-decoration: underline;
-}
-
-div.page_nav2 {
-	padding: 2px 5px 7px 5px;	
-}
-
-.repositories_message {
-	border: solid #bbb;
-	border-width: 0px 0px 1px;
-	padding: 8px;
-}
-
-div.page_path {
-	padding: 8px;
-	font-weight: bold;
-	border: solid #bbb;
-	border-width: 0px 0px 1px;
-}
-
-div.commit_message {
-	padding: 8px;
-	border: solid #bbb;
-	border-width: 1px 0px 1px;
-}
-
-div.bug_open, span.bug_open {
-	padding: 2px;
-	background-color: #800000;
-	color: white;	
-	text-align: center;
-}
-
-div.bug_resolved, span.bug_resolved {
-	padding: 2px;
-	background-color: #008000;
-	color: white;
-	text-align: center;
-}
-
-div.bug_invalid, span.bug_invalid {
-	padding: 2px;
-	background-color: gray;
-	text-align: center;
-}
-
-div.bug_hold, span.bug_hold {
-	padding: 2px;
-	background-color: orange;
-	text-align: center;
-}
-
-div.diff {
-	font-family: monospace;
-}
-
-div.diff.header {
-	-moz-border-bottom-colors: none;
-    -moz-border-image: none;
-    -moz-border-left-colors: none;
-    -moz-border-right-colors: none;
-    -moz-border-top-colors: none;
-    background-color: #EDECE6;
-    border-color: #D9D8D1;
-    border-style: solid;
-    border-width: 1px 0;
-    font-weight: bold;
-    margin-top: 4px;
-    padding: 4px 0 2px;
-}
-
-div.diff.extended_header {
-	background-color: #F6F5EE;
-    padding: 2px 0;
-    font-family: inherit;
-}
-
-div.diff.add {
-	color: #008800;
-	font-family: inherit;
-}
-
-div.diff.remove {
-	color: #cc0000;
-	font-family: inherit;
-}
-
-div.diff.unchanged {
-	color: inherit;
-	font-family: inherit;
-}
-
-div.diff.hunk_header {
-	-moz-border-bottom-colors: none;
-    -moz-border-image: none;
-    -moz-border-left-colors: none;
-    -moz-border-right-colors: none;
-    -moz-border-top-colors: none;
-    border-color: #FFE0FF;
-    border-style: dotted;
-    border-width: 1px 0 0;
-    margin-top: 2px;
-    font-family: inherit;
-}
-
-span.diff.hunk_info {
-	background-color: #FFEEFF;	
-	color: #990099;
-	font-family: inherit;
-}
-
-span.diff.hunk_section {	
-	color: #AA22AA;
-	font-family: inherit;
-}
-
-a.list {
-	text-decoration: none;
-	color: #000000;
-}
-
-a.list:hover {
-	text-decoration: underline;
-	color: #880000;
-}
-
-table {
-	border-spacing: 0px;
-}
-
-th {
-	padding: 2px 5px;
-	font-size: 100%;
-	text-align: left;
-}
-
-table.plain {
-	padding: 8px;
-}
-
-table.pretty, table.repositories {
-	margin-top:5px;
-	margin-bottom:5px;
-	border-spacing: 0px;
-	border-top: 1px solid #bbb;
-	border-left: 1px solid #bbb;
-	border-right: 1px solid #bbb;	
-}
-
-table.repositories {
-	width:100%;	
-}
-
-table.repositories th {
-	background-color:#D2C3AF;
-	padding: 4px;
-	border-bottom: 1px solid #808080;
-}
-
-table.repositories td {
-	padding: 4px;
-}
-
-table.repositories th a {
-	color:black;/*#ddd;*/
-	text-decoration: none;
-	font-weight: normal;
-}
-
-table.repositories th a:hover {
-	text-decoration: underline;
-}
-
-table.repositories th.wicket_orderDown a, table.repositories th.wicket_orderUp a {
-	color: black;
-	font-weight: bold;
-}
-
-tr th a { padding-right: 15px; background-position: right; background-repeat:no-repeat; }
-tr th.wicket_orderDown a {background-image: url(arrow_down.png); }
-tr th.wicket_orderUp a { background-image: url(arrow_up.png); }
-tr th.wicket_orderNone a { background-image: url(arrow_off.png); }
-
-tr.light {
-	background-color: #ffffff;
-}
-
-tr.light td {
-	border-bottom: 1px solid #bbb;	
-}
-
-tr.dark {
-	background-color: #faf8dc;
-	border-bottom: 1px solid #bbb;	
-}
-
-tr.dark td {
-	border-bottom: 1px solid #bbb;	
-}
-
-/* currently both use the same, but it can change */
-tr.light:hover,
-tr.dark:hover {
-	/*background-color: #0099b7;*/
-	background-color: #000070;
-	color: white;
-}
-
-tr.light:hover a,
-tr.dark:hover a {
-	color: white;	
-}
-
-td {
-	padding-left: 7px;
-	padding-right: 7px;
-}
-
-td.author {
-	font-style: italic;
-}
-
-td.date {
-	font-style: italic;
-	width:90px;
-}
-
-td.sha1, td.sha1 span {
-	font-family: monospace;
-	font-size: 13px;
-}
-
-td.mode {
-	font-family: monospace;
-	width:90px;
-	padding-right:15px;
-}
-
-td.size {
-	text-align: right;
-	width:100px;	
-	padding-right:15px;
-}
-
-td.rightAlign {
-	text-align: right;
-}
-
-span.refs span {
-	padding: 0px 4px;
-	font-family: sans-serif;
-	font-size: 70%;
-	font-weight: normal;
-	border: 1px solid;
-	background-color: #ffaaff;
-	border-color: #ffccff #ff00ee #ff00ee #ffccff;
-	color: black;
-}
-
-span.refs span a {
-	text-decoration: none;
-	color: inherit;
-}
-
-span.refs span a:hover {
-	text-decoration: underline;
-}
-
-span.refs span.indirect {
-	font-style: italic;
-}
-
-span.refs span.ref {
-	background-color: #aaaaff;
-	border-color: #ccccff #0033cc #0033cc #ccccff;
-}
-
-span.refs span.tag {
-	background-color: #ffffaa;
-	border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
-}
-
-span.refs span.head {
-	background-color: #aaffaa;
-	border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
-}
\ No newline at end of file
diff --git a/resources/gitblt-favicon.png b/resources/gitblt-favicon.png
deleted file mode 100644
index f6ac154..0000000
--- a/resources/gitblt-favicon.png
+++ /dev/null
Binary files differ
diff --git a/resources/gitblt-logo.png b/resources/gitblt-logo.png
deleted file mode 100644
index 7ec945b..0000000
--- a/resources/gitblt-logo.png
+++ /dev/null
Binary files differ
diff --git a/resources/gitblt.png b/resources/gitblt.png
deleted file mode 100644
index 7535bc3..0000000
--- a/resources/gitblt.png
+++ /dev/null
Binary files differ
diff --git a/resources/gitblt2.png b/resources/gitblt2.png
deleted file mode 100644
index c164294..0000000
--- a/resources/gitblt2.png
+++ /dev/null
Binary files differ
diff --git a/resources/gitblt3.png b/resources/gitblt3.png
deleted file mode 100644
index f178d03..0000000
--- a/resources/gitblt3.png
+++ /dev/null
Binary files differ
diff --git a/resources/gitblt_25.png b/resources/gitblt_25.png
deleted file mode 100644
index ad580fa..0000000
--- a/resources/gitblt_25.png
+++ /dev/null
Binary files differ
diff --git a/resources/prettify/lang-apollo.js b/resources/prettify/lang-apollo.js
deleted file mode 100644
index bfc0014..0000000
--- a/resources/prettify/lang-apollo.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/,
-null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["apollo","agc","aea"])
\ No newline at end of file
diff --git a/resources/prettify/lang-css.js b/resources/prettify/lang-css.js
deleted file mode 100644
index 61157f3..0000000
--- a/resources/prettify/lang-css.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[ \t\r\n\f]+/,null," \t\r\n\u000c"]],[["str",/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],["str",/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],["kwd",/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],
-["com",/^(?:<!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#(?:[0-9a-f]{3}){1,2}/i],["pln",/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],["pun",/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^\)\"\']+/]]),["css-str"])
\ No newline at end of file
diff --git a/resources/prettify/lang-hs.js b/resources/prettify/lang-hs.js
deleted file mode 100644
index 00cea7c..0000000
--- a/resources/prettify/lang-hs.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\x0B\x0C\r ]+/,null,"\t\n\u000b\u000c\r "],["str",/^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\'(?:[^\'\\\n\x0C\r]|\\[^&])\'?/,null,"'"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,null,"0123456789"]],[["com",/^(?:(?:--+(?:[^\r\n\x0C]*)?)|(?:\{-(?:[^-]|-+[^-\}])*-\}))/],["kwd",/^(?:case|class|data|default|deriving|do|else|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|then|type|where|_)(?=[^a-zA-Z0-9\']|$)/,
-null],["pln",/^(?:[A-Z][\w\']*\.)*[a-zA-Z][\w\']*/],["pun",/^[^\t\n\x0B\x0C\r a-zA-Z0-9\'\"]+/]]),["hs"])
\ No newline at end of file
diff --git a/resources/prettify/lang-lisp.js b/resources/prettify/lang-lisp.js
deleted file mode 100644
index fab992b..0000000
--- a/resources/prettify/lang-lisp.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(/,null,"("],["clo",/^\)/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,
-null],["lit",/^[+\-]?(?:0x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["cl","el","lisp","scm"])
\ No newline at end of file
diff --git a/resources/prettify/lang-lua.js b/resources/prettify/lang-lua.js
deleted file mode 100644
index 45d0ba2..0000000
--- a/resources/prettify/lang-lua.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])*(?:\'|$))/,null,"\"'"]],[["com",/^--(?:\[(=*)\[[\s\S]*?(?:\]\1\]|$)|[^\r\n]*)/],["str",/^\[(=*)\[[\s\S]*?(?:\]\1\]|$)/],["kwd",/^(?:and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,null],["lit",/^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],
-["pln",/^[a-z_]\w*/i],["pun",/^[^\w\t\n\r \xA0][^\w\t\n\r \xA0\"\'\-\+=]*/]]),["lua"])
\ No newline at end of file
diff --git a/resources/prettify/lang-ml.js b/resources/prettify/lang-ml.js
deleted file mode 100644
index 5879726..0000000
--- a/resources/prettify/lang-ml.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^#(?:if[\t\n\r \xA0]+(?:[a-z_$][\w\']*|``[^\r\n\t`]*(?:``|$))|else|endif|light)/i,null,"#"],["str",/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])*(?:\'|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\r\n]*|\(\*[\s\S]*?\*\))/],["kwd",/^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/],
-["lit",/^[+\-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],["pln",/^(?:[a-z_]\w*[!?#]?|``[^\r\n\t`]*(?:``|$))/i],["pun",/^[^\t\n\r \xA0\"\'\w]+/]]),["fs","ml"])
\ No newline at end of file
diff --git a/resources/prettify/lang-proto.js b/resources/prettify/lang-proto.js
deleted file mode 100644
index f713420..0000000
--- a/resources/prettify/lang-proto.js
+++ /dev/null
@@ -1 +0,0 @@
-PR.registerLangHandler(PR.sourceDecorator({keywords:"bool bytes default double enum extend extensions false fixed32 fixed64 float group import int32 int64 max message option optional package repeated required returns rpc service sfixed32 sfixed64 sint32 sint64 string syntax to true uint32 uint64",cStyleComments:true}),["proto"])
\ No newline at end of file
diff --git a/resources/prettify/lang-scala.js b/resources/prettify/lang-scala.js
deleted file mode 100644
index 00f4e0c..0000000
--- a/resources/prettify/lang-scala.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:"(?:(?:""(?:""?(?!")|[^\\"]|\\.)*"{0,3})|(?:[^"\r\n\\]|\\.)*"?))/,null,'"'],["lit",/^`(?:[^\r\n\\`]|\\.)*`?/,null,"`"],["pun",/^[!#%&()*+,\-:;<=>?@\[\\\]^{|}~]+/,null,"!#%&()*+,-:;<=>?@[\\]^{|}~"]],[["str",/^'(?:[^\r\n\\']|\\(?:'|[^\r\n']+))'/],["lit",/^'[a-zA-Z_$][\w$]*(?!['$\w])/],["kwd",/^(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|object|override|package|private|protected|requires|return|sealed|super|throw|trait|try|type|val|var|while|with|yield)\b/],
-["lit",/^(?:true|false|null|this)\b/],["lit",/^(?:(?:0(?:[0-7]+|X[0-9A-F]+))L?|(?:(?:0|[1-9][0-9]*)(?:(?:\.[0-9]+)?(?:E[+\-]?[0-9]+)?F?|L?))|\\.[0-9]+(?:E[+\-]?[0-9]+)?F?)/i],["typ",/^[$_]*[A-Z][_$A-Z0-9]*[a-z][\w$]*/],["pln",/^[$a-zA-Z_][\w$]*/],["com",/^\/(?:\/.*|\*(?:\/|\**[^*/])*(?:\*+\/?)?)/],["pun",/^(?:\.+|\/)/]]),["scala"])
\ No newline at end of file
diff --git a/resources/prettify/lang-sql.js b/resources/prettify/lang-sql.js
deleted file mode 100644
index 800b13e..0000000
--- a/resources/prettify/lang-sql.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:"(?:[^\"\\]|\\.)*"|'(?:[^\'\\]|\\.)*')/,null,"\"'"]],[["com",/^(?:--[^\r\n]*|\/\*[\s\S]*?(?:\*\/|$))/],["kwd",/^(?:ADD|ALL|ALTER|AND|ANY|AS|ASC|AUTHORIZATION|BACKUP|BEGIN|BETWEEN|BREAK|BROWSE|BULK|BY|CASCADE|CASE|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COMMIT|COMPUTE|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATABASE|DBCC|DEALLOCATE|DECLARE|DEFAULT|DELETE|DENY|DESC|DISK|DISTINCT|DISTRIBUTED|DOUBLE|DROP|DUMMY|DUMP|ELSE|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|GOTO|GRANT|GROUP|HAVING|HOLDLOCK|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IN|INDEX|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KILL|LEFT|LIKE|LINENO|LOAD|NATIONAL|NOCHECK|NONCLUSTERED|NOT|NULL|NULLIF|OF|OFF|OFFSETS|ON|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUTER|OVER|PERCENT|PLAN|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROWCOUNT|ROWGUIDCOL|RULE|SAVE|SCHEMA|SELECT|SESSION_USER|SET|SETUSER|SHUTDOWN|SOME|STATISTICS|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|UNION|UNIQUE|UPDATE|UPDATETEXT|USE|USER|VALUES|VARYING|VIEW|WAITFOR|WHEN|WHERE|WHILE|WITH|WRITETEXT)(?=[^\w-]|$)/i,
-null],["lit",/^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],["pln",/^[a-z_][\w-]*/i],["pun",/^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0+\-\"\']*/]]),["sql"])
\ No newline at end of file
diff --git a/resources/prettify/lang-vb.js b/resources/prettify/lang-vb.js
deleted file mode 100644
index c479c11..0000000
--- a/resources/prettify/lang-vb.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0\u2028\u2029]+/,null,"\t\n\r \u00a0\u2028\u2029"],["str",/^(?:[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})(?:[\"\u201C\u201D]c|$)|[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})*(?:[\"\u201C\u201D]|$))/i,null,'"\u201c\u201d'],["com",/^[\'\u2018\u2019][^\r\n\u2028\u2029]*/,null,"'\u2018\u2019"]],[["kwd",/^(?:AddHandler|AddressOf|Alias|And|AndAlso|Ansi|As|Assembly|Auto|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|CBool|CByte|CChar|CDate|CDbl|CDec|Char|CInt|Class|CLng|CObj|Const|CShort|CSng|CStr|CType|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get|GetType|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|Let|Lib|Like|Long|Loop|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|Namespace|New|Next|Not|NotInheritable|NotOverridable|Object|On|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|ParamArray|Preserve|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TypeOf|Unicode|Until|Variant|Wend|When|While|With|WithEvents|WriteOnly|Xor|EndIf|GoSub|Let|Variant|Wend)\b/i,
-null],["com",/^REM[^\r\n\u2028\u2029]*/i],["lit",/^(?:True\b|False\b|Nothing\b|\d+(?:E[+\-]?\d+[FRD]?|[FRDSIL])?|(?:&H[0-9A-F]+|&O[0-7]+)[SIL]?|\d*\.\d+(?:E[+\-]?\d+)?[FRD]?|#\s+(?:\d+[\-\/]\d+[\-\/]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)?|\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)\s+#)/i],["pln",/^(?:(?:[a-z]|_\w)\w*|\[(?:[a-z]|_\w)\w*\])/i],["pun",/^[^\w\t\n\r \"\'\[\]\xA0\u2018\u2019\u201C\u201D\u2028\u2029]+/],["pun",/^(?:\[|\])/]]),["vb","vbs"])
\ No newline at end of file
diff --git a/resources/prettify/lang-vhdl.js b/resources/prettify/lang-vhdl.js
deleted file mode 100644
index dc81a3f..0000000
--- a/resources/prettify/lang-vhdl.js
+++ /dev/null
@@ -1,3 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"]],[["str",/^(?:[BOX]?"(?:[^\"]|"")*"|'.')/i],["com",/^--[^\r\n]*/],["kwd",/^(?:abs|access|after|alias|all|and|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|mod|nand|new|next|nor|not|null|of|on|open|or|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|rem|report|return|rol|ror|select|severity|shared|signal|sla|sll|sra|srl|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|xnor|xor)(?=[^\w-]|$)/i,
-null],["typ",/^(?:bit|bit_vector|character|boolean|integer|real|time|string|severity_level|positive|natural|signed|unsigned|line|text|std_u?logic(?:_vector)?)(?=[^\w-]|$)/i,null],["typ",/^\'(?:ACTIVE|ASCENDING|BASE|DELAYED|DRIVING|DRIVING_VALUE|EVENT|HIGH|IMAGE|INSTANCE_NAME|LAST_ACTIVE|LAST_EVENT|LAST_VALUE|LEFT|LEFTOF|LENGTH|LOW|PATH_NAME|POS|PRED|QUIET|RANGE|REVERSE_RANGE|RIGHT|RIGHTOF|SIMPLE_NAME|STABLE|SUCC|TRANSACTION|VAL|VALUE)(?=[^\w-]|$)/i,null],["lit",/^\d+(?:_\d+)*(?:#[\w\\.]+#(?:[+\-]?\d+(?:_\d+)*)?|(?:\.\d+(?:_\d+)*)?(?:E[+\-]?\d+(?:_\d+)*)?)/i],
-["pln",/^(?:[a-z]\w*|\\[^\\]*\\)/i],["pun",/^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0\-\"\']*/]]),["vhdl","vhd"])
\ No newline at end of file
diff --git a/resources/prettify/lang-wiki.js b/resources/prettify/lang-wiki.js
deleted file mode 100644
index 3b8fb50..0000000
--- a/resources/prettify/lang-wiki.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t \xA0a-gi-z0-9]+/,null,"\t \u00a0abcdefgijklmnopqrstuvwxyz0123456789"],["pun",/^[=*~\^\[\]]+/,null,"=*~^[]"]],[["lang-wiki.meta",/(?:^^|\r\n?|\n)(#[a-z]+)\b/],["lit",/^(?:[A-Z][a-z][a-z0-9]+[A-Z][a-z][a-zA-Z0-9]+)\b/],["lang-",/^\{\{\{([\s\S]+?)\}\}\}/],["lang-",/^`([^\r\n`]+)`/],["str",/^https?:\/\/[^\/?#\s]*(?:\/[^?#\s]*)?(?:\?[^#\s]*)?(?:#\S*)?/i],["pln",/^(?:\r\n|[\s\S])[^#=*~^A-Zh\{`\[\r\n]*/]]),["wiki"]);
-PR.registerLangHandler(PR.createSimpleLexer([["kwd",/^#[a-z]+/i,null,"#"]],[]),["wiki.meta"])
\ No newline at end of file
diff --git a/resources/prettify/lang-yaml.js b/resources/prettify/lang-yaml.js
deleted file mode 100644
index f2f3607..0000000
--- a/resources/prettify/lang-yaml.js
+++ /dev/null
@@ -1,2 +0,0 @@
-PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:|>?]+/,null,":|>?"],["dec",/^%(?:YAML|TAG)[^#\r\n]+/,null,"%"],["typ",/^[&]\S+/,null,"&"],["typ",/^!\S*/,null,"!"],["str",/^"(?:[^\\"]|\\.)*(?:"|$)/,null,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,null,"'"],["com",/^#[^\r\n]*/,null,"#"],["pln",/^\s+/,null," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\r\n]|$)/],["pun",/^-/],["kwd",/^\w+:[ \r\n]/],["pln",/^\w+/]]),
-["yaml","yml"])
\ No newline at end of file
diff --git a/resources/prettify/prettify.css b/resources/prettify/prettify.css
deleted file mode 100644
index 2925d13..0000000
--- a/resources/prettify/prettify.css
+++ /dev/null
@@ -1 +0,0 @@
-.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun{color:#660}.pln{color:#000}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec{color:#606}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}@media print{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun{color:#440}.pln{color:#000}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}
\ No newline at end of file
diff --git a/resources/prettify/prettify.js b/resources/prettify/prettify.js
deleted file mode 100644
index c9161da..0000000
--- a/resources/prettify/prettify.js
+++ /dev/null
@@ -1,33 +0,0 @@
-window.PR_SHOULD_USE_CONTINUATION=true;window.PR_TAB_WIDTH=8;window.PR_normalizedHtml=window.PR=window.prettyPrintOne=window.prettyPrint=void 0;window._pr_isIE6=function(){var y=navigator&&navigator.userAgent&&navigator.userAgent.match(/\bMSIE ([678])\./);y=y?+y[1]:false;window._pr_isIE6=function(){return y};return y};
-(function(){function y(b){return b.replace(L,"&amp;").replace(M,"&lt;").replace(N,"&gt;")}function H(b,f,i){switch(b.nodeType){case 1:var o=b.tagName.toLowerCase();f.push("<",o);var l=b.attributes,n=l.length;if(n){if(i){for(var r=[],j=n;--j>=0;)r[j]=l[j];r.sort(function(q,m){return q.name<m.name?-1:q.name===m.name?0:1});l=r}for(j=0;j<n;++j){r=l[j];r.specified&&f.push(" ",r.name.toLowerCase(),'="',r.value.replace(L,"&amp;").replace(M,"&lt;").replace(N,"&gt;").replace(X,"&quot;"),'"')}}f.push(">");
-for(l=b.firstChild;l;l=l.nextSibling)H(l,f,i);if(b.firstChild||!/^(?:br|link|img)$/.test(o))f.push("</",o,">");break;case 3:case 4:f.push(y(b.nodeValue));break}}function O(b){function f(c){if(c.charAt(0)!=="\\")return c.charCodeAt(0);switch(c.charAt(1)){case "b":return 8;case "t":return 9;case "n":return 10;case "v":return 11;case "f":return 12;case "r":return 13;case "u":case "x":return parseInt(c.substring(2),16)||c.charCodeAt(1);case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":return parseInt(c.substring(1),
-8);default:return c.charCodeAt(1)}}function i(c){if(c<32)return(c<16?"\\x0":"\\x")+c.toString(16);c=String.fromCharCode(c);if(c==="\\"||c==="-"||c==="["||c==="]")c="\\"+c;return c}function o(c){var d=c.substring(1,c.length-1).match(RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));c=[];for(var a=[],k=d[0]==="^",e=k?1:0,h=d.length;e<h;++e){var g=d[e];switch(g){case "\\B":case "\\b":case "\\D":case "\\d":case "\\S":case "\\s":case "\\W":case "\\w":c.push(g);
-continue}g=f(g);var s;if(e+2<h&&"-"===d[e+1]){s=f(d[e+2]);e+=2}else s=g;a.push([g,s]);if(!(s<65||g>122)){s<65||g>90||a.push([Math.max(65,g)|32,Math.min(s,90)|32]);s<97||g>122||a.push([Math.max(97,g)&-33,Math.min(s,122)&-33])}}a.sort(function(v,w){return v[0]-w[0]||w[1]-v[1]});d=[];g=[NaN,NaN];for(e=0;e<a.length;++e){h=a[e];if(h[0]<=g[1]+1)g[1]=Math.max(g[1],h[1]);else d.push(g=h)}a=["["];k&&a.push("^");a.push.apply(a,c);for(e=0;e<d.length;++e){h=d[e];a.push(i(h[0]));if(h[1]>h[0]){h[1]+1>h[0]&&a.push("-");
-a.push(i(h[1]))}}a.push("]");return a.join("")}function l(c){for(var d=c.source.match(RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g")),a=d.length,k=[],e=0,h=0;e<a;++e){var g=d[e];if(g==="(")++h;else if("\\"===g.charAt(0))if((g=+g.substring(1))&&g<=h)k[g]=-1}for(e=1;e<k.length;++e)if(-1===k[e])k[e]=++n;for(h=e=0;e<a;++e){g=d[e];if(g==="("){++h;if(k[h]===undefined)d[e]="(?:"}else if("\\"===
-g.charAt(0))if((g=+g.substring(1))&&g<=h)d[e]="\\"+k[h]}for(h=e=0;e<a;++e)if("^"===d[e]&&"^"!==d[e+1])d[e]="";if(c.ignoreCase&&r)for(e=0;e<a;++e){g=d[e];c=g.charAt(0);if(g.length>=2&&c==="[")d[e]=o(g);else if(c!=="\\")d[e]=g.replace(/[a-zA-Z]/g,function(s){s=s.charCodeAt(0);return"["+String.fromCharCode(s&-33,s|32)+"]"})}return d.join("")}for(var n=0,r=false,j=false,q=0,m=b.length;q<m;++q){var t=b[q];if(t.ignoreCase)j=true;else if(/[a-z]/i.test(t.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,
-""))){r=true;j=false;break}}var p=[];q=0;for(m=b.length;q<m;++q){t=b[q];if(t.global||t.multiline)throw Error(""+t);p.push("(?:"+l(t)+")")}return RegExp(p.join("|"),j?"gi":"g")}function Y(b){var f=0;return function(i){for(var o=null,l=0,n=0,r=i.length;n<r;++n)switch(i.charAt(n)){case "\t":o||(o=[]);o.push(i.substring(l,n));l=b-f%b;for(f+=l;l>=0;l-=16)o.push("                ".substring(0,l));l=n+1;break;case "\n":f=0;break;default:++f}if(!o)return i;o.push(i.substring(l));return o.join("")}}function I(b,
-f,i,o){if(f){b={source:f,c:b};i(b);o.push.apply(o,b.d)}}function B(b,f){var i={},o;(function(){for(var r=b.concat(f),j=[],q={},m=0,t=r.length;m<t;++m){var p=r[m],c=p[3];if(c)for(var d=c.length;--d>=0;)i[c.charAt(d)]=p;p=p[1];c=""+p;if(!q.hasOwnProperty(c)){j.push(p);q[c]=null}}j.push(/[\0-\uffff]/);o=O(j)})();var l=f.length;function n(r){for(var j=r.c,q=[j,z],m=0,t=r.source.match(o)||[],p={},c=0,d=t.length;c<d;++c){var a=t[c],k=p[a],e=void 0,h;if(typeof k==="string")h=false;else{var g=i[a.charAt(0)];
-if(g){e=a.match(g[1]);k=g[0]}else{for(h=0;h<l;++h){g=f[h];if(e=a.match(g[1])){k=g[0];break}}e||(k=z)}if((h=k.length>=5&&"lang-"===k.substring(0,5))&&!(e&&typeof e[1]==="string")){h=false;k=P}h||(p[a]=k)}g=m;m+=a.length;if(h){h=e[1];var s=a.indexOf(h),v=s+h.length;if(e[2]){v=a.length-e[2].length;s=v-h.length}k=k.substring(5);I(j+g,a.substring(0,s),n,q);I(j+g+s,h,Q(k,h),q);I(j+g+v,a.substring(v),n,q)}else q.push(j+g,k)}r.d=q}return n}function x(b){var f=[],i=[];if(b.tripleQuotedStrings)f.push([A,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
-null,"'\""]);else b.multiLineStrings?f.push([A,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"]):f.push([A,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"]);b.verbatimStrings&&i.push([A,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null]);if(b.hashComments)if(b.cStyleComments){f.push([C,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"]);i.push([A,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
-null])}else f.push([C,/^#[^\r\n]*/,null,"#"]);if(b.cStyleComments){i.push([C,/^\/\/[^\r\n]*/,null]);i.push([C,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}b.regexLiterals&&i.push(["lang-regex",RegExp("^"+Z+"(/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/)")]);b=b.keywords.replace(/^\s+|\s+$/g,"");b.length&&i.push([R,RegExp("^(?:"+b.replace(/\s+/g,"|")+")\\b"),null]);f.push([z,/^\s+/,null," \r\n\t\u00a0"]);i.push([J,/^@[a-z_$][a-z_$@0-9]*/i,null],[S,/^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/,
-null],[z,/^[a-z_$][a-z_$@0-9]*/i,null],[J,/^(?:0x[a-f0-9]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+\-]?\d+)?)[a-z]*/i,null,"0123456789"],[E,/^.[^\s\w\.$@\'\"\`\/\#]*/,null]);return B(f,i)}function $(b){function f(D){if(D>r){if(j&&j!==q){n.push("</span>");j=null}if(!j&&q){j=q;n.push('<span class="',j,'">')}var T=y(p(i.substring(r,D))).replace(e?d:c,"$1&#160;");e=k.test(T);n.push(T.replace(a,s));r=D}}var i=b.source,o=b.g,l=b.d,n=[],r=0,j=null,q=null,m=0,t=0,p=Y(window.PR_TAB_WIDTH),c=/([\r\n ]) /g,
-d=/(^| ) /gm,a=/\r\n?|\n/g,k=/[ \r\n]$/,e=true,h=window._pr_isIE6();h=h?b.b.tagName==="PRE"?h===6?"&#160;\r\n":h===7?"&#160;<br>\r":"&#160;\r":"&#160;<br />":"<br />";var g=b.b.className.match(/\blinenums\b(?::(\d+))?/),s;if(g){for(var v=[],w=0;w<10;++w)v[w]=h+'</li><li class="L'+w+'">';var F=g[1]&&g[1].length?g[1]-1:0;n.push('<ol class="linenums"><li class="L',F%10,'"');F&&n.push(' value="',F+1,'"');n.push(">");s=function(){var D=v[++F%10];return j?"</span>"+D+'<span class="'+j+'">':D}}else s=h;
-for(;;)if(m<o.length?t<l.length?o[m]<=l[t]:true:false){f(o[m]);if(j){n.push("</span>");j=null}n.push(o[m+1]);m+=2}else if(t<l.length){f(l[t]);q=l[t+1];t+=2}else break;f(i.length);j&&n.push("</span>");g&&n.push("</li></ol>");b.a=n.join("")}function u(b,f){for(var i=f.length;--i>=0;){var o=f[i];if(G.hasOwnProperty(o))"console"in window&&console.warn("cannot override language handler %s",o);else G[o]=b}}function Q(b,f){b&&G.hasOwnProperty(b)||(b=/^\s*</.test(f)?"default-markup":"default-code");return G[b]}
-function U(b){var f=b.f,i=b.e;b.a=f;try{var o,l=f.match(aa);f=[];var n=0,r=[];if(l)for(var j=0,q=l.length;j<q;++j){var m=l[j];if(m.length>1&&m.charAt(0)==="<"){if(!ba.test(m))if(ca.test(m)){f.push(m.substring(9,m.length-3));n+=m.length-12}else if(da.test(m)){f.push("\n");++n}else if(m.indexOf(V)>=0&&m.replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,' $1="$2$3$4"').match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/)){var t=m.match(W)[2],p=1,c;c=j+1;a:for(;c<q;++c){var d=l[c].match(W);if(d&&
-d[2]===t)if(d[1]==="/"){if(--p===0)break a}else++p}if(c<q){r.push(n,l.slice(j,c+1).join(""));j=c}else r.push(n,m)}else r.push(n,m)}else{var a;p=m;var k=p.indexOf("&");if(k<0)a=p;else{for(--k;(k=p.indexOf("&#",k+1))>=0;){var e=p.indexOf(";",k);if(e>=0){var h=p.substring(k+3,e),g=10;if(h&&h.charAt(0)==="x"){h=h.substring(1);g=16}var s=parseInt(h,g);isNaN(s)||(p=p.substring(0,k)+String.fromCharCode(s)+p.substring(e+1))}}a=p.replace(ea,"<").replace(fa,">").replace(ga,"'").replace(ha,'"').replace(ia," ").replace(ja,
-"&")}f.push(a);n+=a.length}}o={source:f.join(""),h:r};var v=o.source;b.source=v;b.c=0;b.g=o.h;Q(i,v)(b);$(b)}catch(w){if("console"in window)console.log(w&&w.stack?w.stack:w)}}var A="str",R="kwd",C="com",S="typ",J="lit",E="pun",z="pln",P="src",V="nocode",Z=function(){for(var b=["!","!=","!==","#","%","%=","&","&&","&&=","&=","(","*","*=","+=",",","-=","->","/","/=",":","::",";","<","<<","<<=","<=","=","==","===",">",">=",">>",">>=",">>>",">>>=","?","@","[","^","^=","^^","^^=","{","|","|=","||","||=",
-"~","break","case","continue","delete","do","else","finally","instanceof","return","throw","try","typeof"],f="(?:^^|[+-]",i=0;i<b.length;++i)f+="|"+b[i].replace(/([^=<>:&a-z])/g,"\\$1");f+=")\\s*";return f}(),L=/&/g,M=/</g,N=/>/g,X=/\"/g,ea=/&lt;/g,fa=/&gt;/g,ga=/&apos;/g,ha=/&quot;/g,ja=/&amp;/g,ia=/&nbsp;/g,ka=/[\r\n]/g,K=null,aa=RegExp("[^<]+|<!--[\\s\\S]*?--\>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>|</?[a-zA-Z](?:[^>\"']|'[^']*'|\"[^\"]*\")*>|<","g"),ba=/^<\!--/,ca=/^<!\[CDATA\[/,da=/^<br\b/i,W=/^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/,
-la=x({keywords:"break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename using virtual wchar_t where break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof abstract boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params partial readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof debugger eval export function get null set undefined var with Infinity NaN caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END break continue do else for if return while and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None break continue do else for if return while alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END break continue do else for if return while case done elif esac eval fi function in local set then until ",
-hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true}),G={};u(la,["default-code"]);u(B([],[[z,/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],[C,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[E,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup",
-"htm","html","mxml","xhtml","xml","xsl"]);u(B([[z,/^[\s]+/,null," \t\r\n"],["atv",/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[E,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],
-["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);u(B([],[["atv",/^[\s\S]+/]]),["uq.val"]);u(x({keywords:"break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename using virtual wchar_t where ",
-hashComments:true,cStyleComments:true}),["c","cc","cpp","cxx","cyc","m"]);u(x({keywords:"null true false"}),["json"]);u(x({keywords:"break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof abstract boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params partial readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var ",
-hashComments:true,cStyleComments:true,verbatimStrings:true}),["cs"]);u(x({keywords:"break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof abstract boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient ",
-cStyleComments:true}),["java"]);u(x({keywords:"break continue do else for if return while case done elif esac eval fi function in local set then until ",hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);u(x({keywords:"break continue do else for if return while and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None ",hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);
-u(x({keywords:"caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END ",hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);u(x({keywords:"break continue do else for if return while alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END ",hashComments:true,
-multiLineStrings:true,regexLiterals:true}),["rb"]);u(x({keywords:"break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof debugger eval export function get null set undefined var with Infinity NaN ",cStyleComments:true,regexLiterals:true}),["js"]);u(B([],[[A,/^[\s\S]+/]]),
-["regex"]);window.PR_normalizedHtml=H;window.prettyPrintOne=function(b,f){var i={f:b,e:f};U(i);return i.a};window.prettyPrint=function(b){function f(){for(var t=window.PR_SHOULD_USE_CONTINUATION?j.now()+250:Infinity;q<o.length&&j.now()<t;q++){var p=o[q];if(p.className&&p.className.indexOf("prettyprint")>=0){var c=p.className.match(/\blang-(\w+)\b/);if(c)c=c[1];for(var d=false,a=p.parentNode;a;a=a.parentNode)if((a.tagName==="pre"||a.tagName==="code"||a.tagName==="xmp")&&a.className&&a.className.indexOf("prettyprint")>=
-0){d=true;break}if(!d){a=p;if(null===K){d=document.createElement("PRE");d.appendChild(document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));K=!/</.test(d.innerHTML)}if(K){d=a.innerHTML;if("XMP"===a.tagName)d=y(d);else{a=a;if("PRE"===a.tagName)a=true;else if(ka.test(d)){var k="";if(a.currentStyle)k=a.currentStyle.whiteSpace;else if(window.getComputedStyle)k=window.getComputedStyle(a,null).whiteSpace;a=!k||k==="pre"}else a=true;a||(d=d.replace(/(<br\s*\/?>)[\r\n]+/g,"$1").replace(/(?:[\r\n]+[ \t]*)+/g,
-" "))}d=d}else{d=[];for(a=a.firstChild;a;a=a.nextSibling)H(a,d);d=d.join("")}d=d.replace(/(?:\r\n?|\n)$/,"");m={f:d,e:c,b:p};U(m);if(p=m.a){c=m.b;if("XMP"===c.tagName){d=document.createElement("PRE");for(a=0;a<c.attributes.length;++a){k=c.attributes[a];if(k.specified)if(k.name.toLowerCase()==="class")d.className=k.value;else d.setAttribute(k.name,k.value)}d.innerHTML=p;c.parentNode.replaceChild(d,c)}else c.innerHTML=p}}}}if(q<o.length)setTimeout(f,250);else b&&b()}for(var i=[document.getElementsByTagName("pre"),
-document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],o=[],l=0;l<i.length;++l)for(var n=0,r=i[l].length;n<r;++n)o.push(i[l][n]);i=null;var j=Date;j.now||(j={now:function(){return(new Date).getTime()}});var q=0,m;f()};window.PR={combinePrefixPatterns:O,createSimpleLexer:B,registerLangHandler:u,sourceDecorator:x,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:C,PR_DECLARATION:"dec",PR_KEYWORD:R,PR_LITERAL:J,PR_NOCODE:V,PR_PLAIN:z,PR_PUNCTUATION:E,PR_SOURCE:P,PR_STRING:A,
-PR_TAG:"tag",PR_TYPE:S}})()
\ No newline at end of file
diff --git a/src/com/gitblit/Constants.java b/src/com/gitblit/Constants.java
index 5de10cd..052055a 100644
--- a/src/com/gitblit/Constants.java
+++ b/src/com/gitblit/Constants.java
@@ -4,9 +4,17 @@
 
 	public final static String NAME = "Git:Blit";
 
-	public final static String VERSION = "0.11.3";
+	public final static String VERSION = "0.0.1";
+
+	public static String getGitBlitVersion() {
+		return NAME + " v" + VERSION;
+	}
+	
+	public static String getJGitVersion() {
+		return "JGit 0.11.3";
+	}
 
 	public static String getRunningVersion() {
-		return NAME + " v" + VERSION;
+		return getGitBlitVersion();
 	}
 }
diff --git a/src/com/gitblit/wicket/BasePage.html b/src/com/gitblit/wicket/BasePage.html
index ccd8c12..dabdb56 100644
--- a/src/com/gitblit/wicket/BasePage.html
+++ b/src/com/gitblit/wicket/BasePage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 	<!-- Head with Wicket-controlled resources in this package -->
 	<wicket:head>
    		<title wicket:id="title">[page title]</title>
diff --git a/src/com/gitblit/wicket/BasePage.java b/src/com/gitblit/wicket/BasePage.java
index a1cd413..d24485f 100644
--- a/src/com/gitblit/wicket/BasePage.java
+++ b/src/com/gitblit/wicket/BasePage.java
@@ -29,7 +29,7 @@
 	public BasePage(PageParameters params) {
 		super(params);
 	}
-	
+		
 	protected void setupPage(String repositoryName, String pageName) {
 		if (repositoryName != null && repositoryName.trim().length() > 0) {
 			add(new Label("title", getServerName() + " - " + repositoryName));
@@ -37,7 +37,11 @@
 			add(new Label("title", getServerName()));
 		}
 		// header
-		add(new Label("siteName", StoredSettings.getString("siteName", Constants.NAME)));
+		String siteName = StoredSettings.getString("siteName", Constants.NAME);
+		if (siteName == null || siteName.trim().length() == 0) {
+			siteName = Constants.NAME;
+		}
+		add(new Label("siteName", siteName));
 		add(new LinkPanel("repositoryName", null, repositoryName, SummaryPage.class, new PageParameters("p=" + repositoryName)));
 		add(new Label("pageName", pageName));
 		
diff --git a/src/com/gitblit/wicket/GitBlitWebApp.properties b/src/com/gitblit/wicket/GitBlitWebApp.properties
new file mode 100644
index 0000000..ba077c7
--- /dev/null
+++ b/src/com/gitblit/wicket/GitBlitWebApp.properties
@@ -0,0 +1,37 @@
+gb.repository = repository
+gb.owner = owner
+gb.description = description
+gb.lastChange = last change
+gb.refs = refs
+gb.tag = tag
+gb.tags = tags
+gb.author = author
+gb.committer = committer
+gb.commit = commit
+gb.tree = tree
+gb.parent = parent
+gb.url = URL
+gb.history = history
+gb.raw = raw
+gb.object = object
+gb.ticketId = ticket id
+gb.ticketAssigned = assigned
+gb.ticketOpenDate = open date
+gb.ticketState = state
+gb.ticketComments = comments
+gb.view = view
+gb.local = local
+gb.remote = remote
+gb.branches = branches
+gb.patch = patch
+gb.diff = diff
+gb.shortlog = shortlog
+gb.more = more
+gb.allTags = all tags
+gb.allBranches = all branches
+gb.summary = summary
+gb.ticket = ticket
+gb.newRepository = new repository
+gb.newUser = new user
+gb.commitdiff = commitdiff
+gb.ticgit = ticgit
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/LinkPanel.html b/src/com/gitblit/wicket/LinkPanel.html
index 7abf14c..e7e9ff5 100644
--- a/src/com/gitblit/wicket/LinkPanel.html
+++ b/src/com/gitblit/wicket/LinkPanel.html
@@ -1,6 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en">
 <wicket:panel>
-<a href="#" wicket:id="link"><span wicket:id="label">link</span></a>
+<a href="#" wicket:id="link"><span wicket:id="label">[link]</span></a>
 </wicket:panel>
 </html>
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/LinkPanel.java b/src/com/gitblit/wicket/LinkPanel.java
index afa2647..716ed49 100644
--- a/src/com/gitblit/wicket/LinkPanel.java
+++ b/src/com/gitblit/wicket/LinkPanel.java
@@ -1,13 +1,12 @@
 package com.gitblit.wicket;
 
-import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.PageParameters;
+import org.apache.wicket.behavior.SimpleAttributeModifier;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
@@ -15,28 +14,24 @@
 
 	private static final long serialVersionUID = 1L;
 
-	private IModel<String> labelModel = new Model<String>();
+	private final IModel<String> labelModel;
 
-	@SuppressWarnings({ "unchecked", "rawtypes" })
-	public LinkPanel(String wicketId, final String linkCssClass, String label, Class<? extends WebPage> clazz, PageParameters parameters) {
+	public LinkPanel(String wicketId, String linkCssClass, String label, Class<? extends WebPage> clazz, PageParameters parameters) {
+		this(wicketId, linkCssClass, new Model<String>(label), clazz, parameters);
+	}
+
+	public LinkPanel(String wicketId, String linkCssClass, IModel<String> model, Class<? extends WebPage> clazz, PageParameters parameters) {
 		super(wicketId);
-		Link<?> link = null;
+		this.labelModel = model;
+		Link<Void> link = null;
 		if (parameters == null) {
-			link = new BookmarkablePageLink("link", clazz);
+			link = new BookmarkablePageLink<Void>("link", clazz);
 		} else {
-			link = new BookmarkablePageLink("link", clazz, parameters);
+			link = new BookmarkablePageLink<Void>("link", clazz, parameters);
 		}
 		if (linkCssClass != null) {
-			link.add(new AttributeModifier("class", true, new AbstractReadOnlyModel<String>() {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				public String getObject() {
-					return linkCssClass;
-				}
-			}));
-		}
-		labelModel.setObject(label);
+			link.add(new SimpleAttributeModifier("class", linkCssClass));
+		}		
 		link.add(new Label("label", labelModel));
 		add(link);
 	}
diff --git a/src/com/gitblit/wicket/RepositoryPage.java b/src/com/gitblit/wicket/RepositoryPage.java
index d3e0589..1a764a3 100644
--- a/src/com/gitblit/wicket/RepositoryPage.java
+++ b/src/com/gitblit/wicket/RepositoryPage.java
@@ -37,7 +37,11 @@
 
 		Repository r = getRepository();
 
-		add(new PageLinksPanel("pageLinks", r, repositoryName, getPageName()));
+		// setup the page links and disable this page's link
+		PageLinksPanel pageLinks = new PageLinksPanel("pageLinks", r, repositoryName, getPageName());
+		add(pageLinks);
+		pageLinks.disablePageLink(getPageName());
+
 		setStatelessHint(true);
 	}
 
@@ -92,12 +96,19 @@
 		}
 		add(new Label(wicketId, html).setEscapeModelStrings(false));
 	}
-	
+
 	protected abstract String getPageName();
 
-	protected void addFooter() {
-		r.close();
+	@Override
+	protected void onBeforeRender() {
+		// dispose of repository object
+		if (r != null) {
+			r.close();
+			r = null;
+		}
+		// setup page header and footer
 		setupPage(repositoryName, "/ " + getPageName());
+		super.onBeforeRender();
 	}
 
 	protected PageParameters newRepositoryParameter() {
diff --git a/src/com/gitblit/wicket/WicketUtils.java b/src/com/gitblit/wicket/WicketUtils.java
index e46a473..ee055c1 100644
--- a/src/com/gitblit/wicket/WicketUtils.java
+++ b/src/com/gitblit/wicket/WicketUtils.java
@@ -1,5 +1,7 @@
 package com.gitblit.wicket;
 
+import java.util.List;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.behavior.SimpleAttributeModifier;
 
@@ -20,4 +22,28 @@
 	public static String breakLines(String string) {
 		return string.replace("\r", "<br/>").replace("\n", "<br/>");
 	}
+	
+	public static void setTicketCssClass(Component container, String state) {
+		String css = null;
+		if (state.equals("open")) {
+			css = "bug_open";
+		} else if (state.equals("hold")) {
+			css = "bug_hold";
+		} else if (state.equals("resolved")) {
+			css = "bug_resolved";
+		} else if (state.equals("invalid")) {
+			css = "bug_invalid";
+		}
+		if (css != null) {
+			setCssClass(container, css);
+		}
+	}
+	
+	public static String flattenStrings(List<String> values) {
+		StringBuilder sb = new StringBuilder();
+		for (String value : values) {
+			sb.append(value).append(" ");
+		}
+		return sb.toString().trim();
+	}
 }
diff --git a/src/com/gitblit/wicket/pages/BlobPage.html b/src/com/gitblit/wicket/pages/BlobPage.html
index 3eff62d..913ab0b 100644
--- a/src/com/gitblit/wicket/pages/BlobPage.html
+++ b/src/com/gitblit/wicket/pages/BlobPage.html
@@ -1,6 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
-
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en">
+      
 <!-- contribute google-code-prettify resources to the page header -->
 <wicket:head>
   <wicket:link>
diff --git a/src/com/gitblit/wicket/pages/BlobPage.java b/src/com/gitblit/wicket/pages/BlobPage.java
index b9cdc03..3ba2f84 100644
--- a/src/com/gitblit/wicket/pages/BlobPage.java
+++ b/src/com/gitblit/wicket/pages/BlobPage.java
@@ -28,8 +28,8 @@
 		RevCommit commit = JGitUtils.getCommit(r, commitId);
 
 		// blob page links
-		add(new Label("historyLink", "history"));
-		add(new Label("rawLink", "raw"));
+		add(new Label("historyLink", getString("gb.history")));
+		add(new Label("rawLink", getString("gb.raw")));
 		add(new Label("headLink", "HEAD"));
 
 		add(new LinkPanel("shortlog", "title", commit.getShortMessage(), CommitPage.class, newCommitParameter()));
@@ -84,13 +84,10 @@
 			WicketUtils.setCssClass(blobLabel, "plainprint");
 			add(blobLabel);
 		}
-
-		// footer
-		addFooter();
 	}
 	
 	@Override
 	protected String getPageName() {
-		return "view";
+		return getString("gb.view");
 	}
 }
diff --git a/src/com/gitblit/wicket/pages/BranchesPage.html b/src/com/gitblit/wicket/pages/BranchesPage.html
index 0d0657e..33d5082 100644
--- a/src/com/gitblit/wicket/pages/BranchesPage.html
+++ b/src/com/gitblit/wicket/pages/BranchesPage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <body>
 <wicket:extend>
 
diff --git a/src/com/gitblit/wicket/pages/BranchesPage.java b/src/com/gitblit/wicket/pages/BranchesPage.java
index 8257799..30fac1a 100644
--- a/src/com/gitblit/wicket/pages/BranchesPage.java
+++ b/src/com/gitblit/wicket/pages/BranchesPage.java
@@ -53,7 +53,7 @@
 				item.add(new LinkPanel("branchName", "list name", entry.getDisplayName(), ShortLogPage.class, newCommitParameter(entry.getName())));
 
 				boolean remote = entry.getName().startsWith(Constants.R_REMOTES);
-				item.add(new Label("branchType", remote ? "remote":"local"));
+				item.add(new Label("branchType", remote ? getString("gb.remote"):getString("gb.local")));
 				
 				item.add(new BranchLinksPanel("branchLinks", repositoryName, entry));
 				
@@ -63,13 +63,10 @@
 			}
 		};
 		add(branchView);
-
-		// footer
-		addFooter();
 	}
 	
 	@Override
 	protected String getPageName() {
-		return "branches";
+		return getString("gb.branches");
 	}
 }
diff --git a/src/com/gitblit/wicket/pages/CommitPage.html b/src/com/gitblit/wicket/pages/CommitPage.html
index da455d6..1b79e63 100644
--- a/src/com/gitblit/wicket/pages/CommitPage.html
+++ b/src/com/gitblit/wicket/pages/CommitPage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <body>
 <wicket:extend>
 
@@ -16,14 +20,14 @@
 	
 	<!-- commit info -->
 	<table class="plain">
-		<tr><th>refs</th><td><div wicket:id="refsPanel">[references]</div></td></tr>
-		<tr><th>author</th><td><span wicket:id="commitAuthor">[author</span></td></tr>
+		<tr><th><wicket:message key="gb.refs">refs</wicket:message></th><td><div wicket:id="refsPanel">[references]</div></td></tr>
+		<tr><th><wicket:message key="gb.author">author</wicket:message></th><td><span wicket:id="commitAuthor">[author</span></td></tr>
 		<tr><th></th><td><span wicket:id="commitAuthorDate">[author date]</span></td></tr>
-		<tr><th>committer</th><td><span wicket:id="commitCommitter">[committer]</span></td></tr>
+		<tr><th><wicket:message key="gb.committer">committer</wicket:message></th><td><span wicket:id="commitCommitter">[committer]</span></td></tr>
 		<tr><th></th><td><span wicket:id="commitCommitterDate">[commit date]</span></td></tr>
-		<tr><th>commit</th><td class="sha1"><span wicket:id="commitId">[commit id]</span></td></tr>
-		<tr><th>tree</th><td class="sha1"><span wicket:id="commitTree">[commit tree]</span></td></tr>
-		<tr><th>parent</th><td class="sha1"><span wicket:id="commitParents">
+		<tr><th><wicket:message key="gb.commit">commit</wicket:message></th><td class="sha1"><span wicket:id="commitId">[commit id]</span></td></tr>
+		<tr><th><wicket:message key="gb.tree">tree</wicket:message></th><td class="sha1"><span wicket:id="commitTree">[commit tree]</span></td></tr>
+		<tr><th><wicket:message key="gb.parent">parent</wicket:message></th><td class="sha1"><span wicket:id="commitParents">
 			<div wicket:id="commitParent">[commit parents]</div></span></td></tr>
 	</table>
 	
diff --git a/src/com/gitblit/wicket/pages/CommitPage.java b/src/com/gitblit/wicket/pages/CommitPage.java
index 662ba4c..f460827 100644
--- a/src/com/gitblit/wicket/pages/CommitPage.java
+++ b/src/com/gitblit/wicket/pages/CommitPage.java
@@ -43,7 +43,7 @@
 		} else {
 			add(new LinkPanel("parentLink", null, parents.get(0).substring(0, 8), CommitPage.class, newCommitParameter(parents.get(0))));
 		}
-		add(new Label("patchLink", "patch"));
+		add(new Label("patchLink", getString("gb.patch")));
 		
 		add(new LinkPanel("shortlog", "title", c.getShortMessage(), ShortLogPage.class, newRepositoryParameter()));
 		
@@ -96,13 +96,10 @@
 			}
 		};
 		add(pathsView);
-		
-		// footer
-		addFooter();
 	}
 	
 	@Override
 	protected String getPageName() {
-		return "commit";
+		return getString("gb.commit");
 	}
 }
diff --git a/src/com/gitblit/wicket/pages/DiffPage.html b/src/com/gitblit/wicket/pages/DiffPage.html
index afec6d6..6a5d21b 100644
--- a/src/com/gitblit/wicket/pages/DiffPage.html
+++ b/src/com/gitblit/wicket/pages/DiffPage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <body>
 <wicket:extend>
 
diff --git a/src/com/gitblit/wicket/pages/DiffPage.java b/src/com/gitblit/wicket/pages/DiffPage.java
index 7f72f0f..70c5c55 100644
--- a/src/com/gitblit/wicket/pages/DiffPage.java
+++ b/src/com/gitblit/wicket/pages/DiffPage.java
@@ -29,8 +29,8 @@
 		}
 
 		// diff page links
-		add(new Label("historyLink", "history"));
-		add(new Label("rawLink", "raw"));
+		add(new Label("historyLink", getString("gb.history")));
+		add(new Label("rawLink", getString("gb.raw")));
 		add(new Label("headLink", "HEAD"));
 
 		add(new LinkPanel("shortlog", "title", commit.getShortMessage(), CommitPage.class, newCommitParameter()));
@@ -38,13 +38,10 @@
 		add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, blobPath, commitId));
 
 		add(new Label("diffText", diff).setEscapeModelStrings(false));
-
-		// footer
-		addFooter();
 	}
 	
 	@Override
 	protected String getPageName() {
-		return "diff";
+		return getString("gb.diff");
 	}
 }
diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.html b/src/com/gitblit/wicket/pages/RepositoriesPage.html
index 252af4f..5a84ee2 100644
--- a/src/com/gitblit/wicket/pages/RepositoriesPage.html
+++ b/src/com/gitblit/wicket/pages/RepositoriesPage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <body>
 <wicket:extend>
 	<div wicket:id="adminPanel">[admin links]</div>
@@ -8,10 +12,10 @@
 		
 	<table class="repositories">
 		<tr>
-			<th wicket:id="orderByRepository">Repository</th>
-			<th wicket:id="orderByDescription">Description</th>
-			<th wicket:id="orderByOwner">Owner</th>
-			<th wicket:id="orderByDate">Last Change</th>
+			<th wicket:id="orderByRepository"><wicket:message key="gb.repository">Repository</wicket:message></th>
+			<th wicket:id="orderByDescription"><wicket:message key="gb.description">Description</wicket:message></th>
+			<th wicket:id="orderByOwner"><wicket:message key="gb.owner">Owner</wicket:message></th>
+			<th wicket:id="orderByDate"><wicket:message key="gb.lastChange">Last Change</wicket:message></th>
 		</tr>
 		<tbody>
        		<tr wicket:id="repository">
diff --git a/src/com/gitblit/wicket/pages/ShortLogPage.html b/src/com/gitblit/wicket/pages/ShortLogPage.html
index 5a688fd..3336931 100644
--- a/src/com/gitblit/wicket/pages/ShortLogPage.html
+++ b/src/com/gitblit/wicket/pages/ShortLogPage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <body>
 <wicket:extend>
 
diff --git a/src/com/gitblit/wicket/pages/ShortLogPage.java b/src/com/gitblit/wicket/pages/ShortLogPage.java
index cc12aac..c83050d 100644
--- a/src/com/gitblit/wicket/pages/ShortLogPage.java
+++ b/src/com/gitblit/wicket/pages/ShortLogPage.java
@@ -68,13 +68,10 @@
 		shortlogView.setItemsPerPage(GitBlitWebApp.PAGING_ITEM_COUNT);
 		add(shortlogView);
 		add(new PagingNavigator("navigator", shortlogView));
-
-		// footer
-		addFooter();
 	}
 	
 	@Override
 	protected String getPageName() {
-		return "shortlog";
+		return getString("gb.shortlog");
 	}
 }
diff --git a/src/com/gitblit/wicket/pages/SummaryPage.html b/src/com/gitblit/wicket/pages/SummaryPage.html
index ccfb6ae..cba149e 100644
--- a/src/com/gitblit/wicket/pages/SummaryPage.html
+++ b/src/com/gitblit/wicket/pages/SummaryPage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <body>
 <wicket:extend>
 
@@ -15,10 +19,10 @@
 		<!-- Repository info -->
 		<div style="margin-right:410px;"> 
 			<table class="plain">
-				<tr><th>description</th><td><span wicket:id="repositoryDescription">[repository description]</span></td></tr>
-				<tr><th>owner</th><td><span wicket:id="repositoryOwner">[repository owner]</span></td></tr>
-				<tr><th>last change</th><td><span wicket:id="repositoryLastChange">[repository last change]</span></td></tr>
-				<tr><th>URL</th><td><span wicket:id="repositoryCloneUrl">[repository clone url]</span></td></tr>
+				<tr><th><wicket:message key="gb.description">description</wicket:message></th><td><span wicket:id="repositoryDescription">[repository description]</span></td></tr>
+				<tr><th><wicket:message key="gb.owner">owner</wicket:message></th><td><span wicket:id="repositoryOwner">[repository owner]</span></td></tr>
+				<tr><th><wicket:message key="gb.lastChange">last change</wicket:message></th><td><span wicket:id="repositoryLastChange">[repository last change]</span></td></tr>
+				<tr><th><wicket:message key="gb.url">URL</wicket:message></th><td><span wicket:id="repositoryCloneUrl">[repository clone url]</span></td></tr>
 			</table>
 		</div>
 	</div>
diff --git a/src/com/gitblit/wicket/pages/SummaryPage.java b/src/com/gitblit/wicket/pages/SummaryPage.java
index c086480..0fef375 100644
--- a/src/com/gitblit/wicket/pages/SummaryPage.java
+++ b/src/com/gitblit/wicket/pages/SummaryPage.java
@@ -72,7 +72,7 @@
 		add(new Label("repositoryCloneUrl", cloneurl));
 
 		// shortlog
-		add(new LinkPanel("shortlog", "title", "shortlog", ShortLogPage.class, newRepositoryParameter()));
+		add(new LinkPanel("shortlog", "title", getString("gb.shortlog"), ShortLogPage.class, newRepositoryParameter()));
 
 		List<RevCommit> commits = JGitUtils.getRevLog(r, numberCommits);
 		ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits);
@@ -109,12 +109,12 @@
 		if (commits.size() < numberCommits) {
 			add(new Label("shortlogMore", "").setVisible(false));
 		} else {
-			add(new LinkPanel("shortlogMore", "link", "more...", ShortLogPage.class, newRepositoryParameter()));
+			add(new LinkPanel("shortlogMore", "link", getString("gb.more") + "...", ShortLogPage.class, newRepositoryParameter()));
 		}
 
 		// tags
 		List<RefModel> tags = JGitUtils.getTags(r, numberRefs);
-		add(new LinkPanel("tags", "title", "tags", TagsPage.class, newRepositoryParameter()));
+		add(new LinkPanel("tags", "title", getString("gb.tags"), TagsPage.class, newRepositoryParameter()));
 
 		ListDataProvider<RefModel> tagsDp = new ListDataProvider<RefModel>(tags);
 		DataView<RefModel> tagView = new DataView<RefModel>("tag", tagsDp) {
@@ -146,7 +146,7 @@
 		if (tags.size() < numberRefs) {
 			add(new Label("allTags", "").setVisible(false));
 		} else {
-			add(new LinkPanel("allTags", "link", "all tags...", TagsPage.class, newRepositoryParameter()));
+			add(new LinkPanel("allTags", "link", getString("gb.allTags") + "...", TagsPage.class, newRepositoryParameter()));
 		}
 
 		// branches
@@ -159,7 +159,7 @@
 			branches = new ArrayList<RefModel>(branches.subList(0, numberRefs));
 		}
 
-		add(new LinkPanel("branches", "title", "branches", BranchesPage.class, newRepositoryParameter()));
+		add(new LinkPanel("branches", "title", getString("gb.branches"), BranchesPage.class, newRepositoryParameter()));
 
 		ListDataProvider<RefModel> branchesDp = new ListDataProvider<RefModel>(branches);
 		DataView<RefModel> branchesView = new DataView<RefModel>("branch", branchesDp) {
@@ -183,22 +183,16 @@
 		if (branches.size() < numberRefs) {
 			add(new Label("allBranches", "").setVisible(false));
 		} else {
-			add(new LinkPanel("allBranches", "link", "all branches...", BranchesPage.class, newRepositoryParameter()));
+			add(new LinkPanel("allBranches", "link", getString("gb.allBranches") + "...", BranchesPage.class, newRepositoryParameter()));
 		}
 		
 		// Display an activity line graph
 		insertActivityGraph(r);
-
-		// close the repository
-		r.close();
-
-		// footer
-		addFooter();
 	}
 	
 	@Override
 	protected String getPageName() {
-		return "summary";
+		return getString("gb.summary");
 	}
 
 	private void insertActivityGraph(Repository r) {
diff --git a/src/com/gitblit/wicket/pages/TagPage.html b/src/com/gitblit/wicket/pages/TagPage.html
index 41a604d..34c240c 100644
--- a/src/com/gitblit/wicket/pages/TagPage.html
+++ b/src/com/gitblit/wicket/pages/TagPage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <body>
 <wicket:extend>
 	
@@ -11,8 +15,8 @@
 	
 	<!-- commit info -->
 	<table class="plain">
-		<tr><th>object</th><td><span wicket:id="tagId">[tag id]</span></td></tr>
-		<tr><th>author</th><td><span wicket:id="tagAuthor">[tag author]</span></td></tr>
+		<tr><th><wicket:message key="gb.object">object</wicket:message></th><td><span wicket:id="tagId">[tag id]</span></td></tr>
+		<tr><th><wicket:message key="gb.author">author</wicket:message></th><td><span wicket:id="tagAuthor">[tag author]</span></td></tr>
 		<tr><th></th><td><span wicket:id="tagDate">[tag date]</span></td></tr>
 	</table>
 	
diff --git a/src/com/gitblit/wicket/pages/TagPage.java b/src/com/gitblit/wicket/pages/TagPage.java
index ccceea8..d6b6c68 100644
--- a/src/com/gitblit/wicket/pages/TagPage.java
+++ b/src/com/gitblit/wicket/pages/TagPage.java
@@ -27,13 +27,10 @@
 		add(new Label("tagDate", authorDate));
 
 		addFullText("fullMessage", c.getFullMessage(), true);
-
-		// footer
-		addFooter();
 	}
 	
 	@Override
 	protected String getPageName() {
-		return "tag";
+		return getString("gb.tag");
 	}
 }
diff --git a/src/com/gitblit/wicket/pages/TagsPage.html b/src/com/gitblit/wicket/pages/TagsPage.html
index 4cface1..f2bce49 100644
--- a/src/com/gitblit/wicket/pages/TagsPage.html
+++ b/src/com/gitblit/wicket/pages/TagsPage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <body>
 <wicket:extend>
 
diff --git a/src/com/gitblit/wicket/pages/TagsPage.java b/src/com/gitblit/wicket/pages/TagsPage.java
index 0fa1cdf..2f5b029 100644
--- a/src/com/gitblit/wicket/pages/TagsPage.java
+++ b/src/com/gitblit/wicket/pages/TagsPage.java
@@ -53,13 +53,10 @@
 			}
 		};
 		add(tagView);
-
-		// footer
-		addFooter();
 	}
 	
 	@Override
 	protected String getPageName() {
-		return "tags";
+		return getString("gb.tags");
 	}
 }
diff --git a/src/com/gitblit/wicket/pages/TicGitPage.html b/src/com/gitblit/wicket/pages/TicGitPage.html
index 78edc63..262257e 100644
--- a/src/com/gitblit/wicket/pages/TicGitPage.html
+++ b/src/com/gitblit/wicket/pages/TicGitPage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <body>
 <wicket:extend>
 
diff --git a/src/com/gitblit/wicket/pages/TicGitPage.java b/src/com/gitblit/wicket/pages/TicGitPage.java
index 16b07b9..001002c 100644
--- a/src/com/gitblit/wicket/pages/TicGitPage.java
+++ b/src/com/gitblit/wicket/pages/TicGitPage.java
@@ -34,19 +34,7 @@
 			public void populateItem(final Item<TicGitTicket> item) {
 				final TicGitTicket entry = item.getModelObject();
 				Label stateLabel = new Label("ticketState", entry.state);
-				String css = null;
-				if (entry.state.equals("open")) {
-					css = "bug_open";
-				} else if (entry.state.equals("hold")) {
-					css = "bug_hold";
-				} else if (entry.state.equals("resolved")) {
-					css = "bug_resolved";
-				} else if (entry.state.equals("invalid")) {
-					css = "bug_invalid";
-				}
-				if (css != null) {
-					WicketUtils.setCssClass(stateLabel, css);
-				}
+				WicketUtils.setTicketCssClass(stateLabel, entry.state);
 				item.add(stateLabel);
 				item.add(createDateLabel("ticketDate", entry.date));
 				item.add(new Label("ticketHandler", trimString(entry.handler, 30)));
@@ -57,13 +45,10 @@
 			}
 		};
 		add(ticketsView);
-
-		// footer
-		addFooter();
 	}
 	
 	@Override
 	protected String getPageName() {
-		return "ticgit";
+		return getString("gb.ticgit");
 	}
 }
diff --git a/src/com/gitblit/wicket/pages/TicGitTicketPage.html b/src/com/gitblit/wicket/pages/TicGitTicketPage.html
index b36c3ae..5b39268 100644
--- a/src/com/gitblit/wicket/pages/TicGitTicketPage.html
+++ b/src/com/gitblit/wicket/pages/TicGitTicketPage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <body>
 <wicket:extend>
 
@@ -11,15 +15,15 @@
 		
 	<!-- ticket info -->
 	<table class="plain">
-		<tr><th>ticket id</th><td class="sha1"><span wicket:id="ticketId">[ticket id]</span></td></tr>
-		<tr><th>assigned</th><td><span wicket:id=ticketHandler>[ticket title]</span></td></tr>
-		<tr><th>open date</th><td><span wicket:id="ticketOpenDate">[ticket open date]</span></td></tr>
-		<tr><th>state</th><td><span wicket:id="ticketState">[ticket state]</span></td></tr>
-		<tr><th>tags</th><td><span wicket:id="ticketTags">[ticket tags]</span></td></tr>
+		<tr><th><wicket:message key="gb.ticketId">ticket id</wicket:message></th><td class="sha1"><span wicket:id="ticketId">[ticket id]</span></td></tr>
+		<tr><th><wicket:message key="gb.ticketAssigned">assigned</wicket:message></th><td><span wicket:id=ticketHandler>[ticket title]</span></td></tr>
+		<tr><th><wicket:message key="gb.ticketOpenDate">open date</wicket:message></th><td><span wicket:id="ticketOpenDate">[ticket open date]</span></td></tr>
+		<tr><th><wicket:message key="gb.ticketState">state</wicket:message></th><td><span wicket:id="ticketState">[ticket state]</span></td></tr>
+		<tr><th><wicket:message key="gb.tags">tags</wicket:message></th><td><span wicket:id="ticketTags">[ticket tags]</span></td></tr>
 	</table>
 	
 	<!-- comments header -->
-	<div class="header">Comments</div>
+	<div class="header"><wicket:message key="gb.ticketComments">comments</wicket:message></div>
 	
 	<!-- comments -->
 	<table style="width:100%;" class="pretty">
diff --git a/src/com/gitblit/wicket/pages/TicGitTicketPage.java b/src/com/gitblit/wicket/pages/TicGitTicketPage.java
index 76d9c1a..06a7a5a 100644
--- a/src/com/gitblit/wicket/pages/TicGitTicketPage.java
+++ b/src/com/gitblit/wicket/pages/TicGitTicketPage.java
@@ -1,7 +1,5 @@
 package com.gitblit.wicket.pages;
 
-import java.util.List;
-
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.repeater.Item;
@@ -32,21 +30,9 @@
 		String openDate = GitBlitWebSession.get().formatDateTimeLong(t.date);
 		add(new Label("ticketOpenDate", openDate));
 		Label stateLabel = new Label("ticketState", t.state);
-		String css = null;
-		if (t.state.equals("open")) {
-			css = "bug_open";
-		} else if (t.state.equals("hold")) {
-			css = "bug_hold";
-		} else if (t.state.equals("resolved")) {
-			css = "bug_resolved";
-		} else if (t.state.equals("invalid")) {
-			css = "bug_invalid";
-		}
-		if (css != null) {
-			WicketUtils.setCssClass(stateLabel, css);
-		}
+		WicketUtils.setTicketCssClass(stateLabel, t.state);
 		add(stateLabel);
-		add(new Label("ticketTags", flattenStrings(t.tags)));
+		add(new Label("ticketTags", WicketUtils.flattenStrings(t.tags)));
 
 		ListDataProvider<Comment> commentsDp = new ListDataProvider<Comment>(t.comments);
 		DataView<Comment> commentsView = new DataView<Comment>("comment", commentsDp) {
@@ -63,26 +49,15 @@
 			}
 		};
 		add(commentsView);
-
-		// footer
-		addFooter();
 	}
 	
 	@Override
 	protected String getPageName() {
-		return "ticket";
+		return getString("gb.ticket");
 	}
 
 	private String prepareComment(String comment) {
 		String html = WicketUtils.breakLines(comment).trim();
 		return html.replaceAll("\\bcommit\\s*([A-Za-z0-9]*)\\b", "<a href=\"/commit/" + repositoryName + "/$1\">commit $1</a>");
-	}
-
-	private String flattenStrings(List<String> values) {
-		StringBuilder sb = new StringBuilder();
-		for (String value : values) {
-			sb.append(value).append(" ");
-		}
-		return sb.toString().trim();
 	}
 }
diff --git a/src/com/gitblit/wicket/pages/TreePage.html b/src/com/gitblit/wicket/pages/TreePage.html
index e2b87ef..2bfbb99 100644
--- a/src/com/gitblit/wicket/pages/TreePage.html
+++ b/src/com/gitblit/wicket/pages/TreePage.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <body>
 <wicket:extend>
 
diff --git a/src/com/gitblit/wicket/pages/TreePage.java b/src/com/gitblit/wicket/pages/TreePage.java
index 082a72c..83b06e5 100644
--- a/src/com/gitblit/wicket/pages/TreePage.java
+++ b/src/com/gitblit/wicket/pages/TreePage.java
@@ -33,7 +33,7 @@
 		List<PathModel> paths = JGitUtils.getFilesInPath(r, basePath, commit);
 
 		// tree page links
-		add(new Label("historyLink", "history"));
+		add(new Label("historyLink", getString("gb.history")));
 		add(new Label("headLink", "HEAD"));
 
 		add(new LinkPanel("shortlog", "title", commit.getShortMessage(), CommitPage.class, newCommitParameter()));
@@ -79,13 +79,10 @@
 			}
 		};
 		add(pathsView);
-
-		// footer
-		addFooter();
 	}
 	
 	@Override
 	protected String getPageName() {
-		return "tree";
+		return getString("gb.tree");
 	}
 }
diff --git a/src/com/gitblit/wicket/panels/AdminLinksPanel.html b/src/com/gitblit/wicket/panels/AdminLinksPanel.html
index 5643c84..9e12823 100644
--- a/src/com/gitblit/wicket/panels/AdminLinksPanel.html
+++ b/src/com/gitblit/wicket/panels/AdminLinksPanel.html
@@ -1,9 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <wicket:panel>
 	<!-- page nav links -->	
 	<div class="page_nav">
-		<span wicket:id="newRepository"></span> | <span wicket:id="newUser"></span>
+		<a wicket:id="newRepository"><wicket:message key="gb.newRepository"></wicket:message></a> | <a wicket:id="newUser"><wicket:message key="gb.newUser"></wicket:message></a>
 	</div>	
 </wicket:panel>
 </html>
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/AdminLinksPanel.java b/src/com/gitblit/wicket/panels/AdminLinksPanel.java
index 2089f48..628036f 100644
--- a/src/com/gitblit/wicket/panels/AdminLinksPanel.java
+++ b/src/com/gitblit/wicket/panels/AdminLinksPanel.java
@@ -1,16 +1,17 @@
 package com.gitblit.wicket.panels;
 
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 
-public class AdminLinksPanel extends Panel {
+import com.gitblit.wicket.pages.RepositoriesPage;
+
+public class AdminLinksPanel extends BasePanel {
 
 	private static final long serialVersionUID = 1L;
 
 	public AdminLinksPanel(String id) {
 		super(id);
 
-		add(new Label("newRepository", "new repository"));
-		add(new Label("newUser", "new user"));
+		add(new BookmarkablePageLink<Void>("newRepository", RepositoriesPage.class));
+		add(new BookmarkablePageLink<Void>("newUser", RepositoriesPage.class));
 	}
 }
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/AnnotatedTagLinksPanel.html b/src/com/gitblit/wicket/panels/AnnotatedTagLinksPanel.html
index 4b1d599..1bedc69 100644
--- a/src/com/gitblit/wicket/panels/AnnotatedTagLinksPanel.html
+++ b/src/com/gitblit/wicket/panels/AnnotatedTagLinksPanel.html
@@ -1,8 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <wicket:panel>
 	<div class="link">
-		<span wicket:id="tag"></span> | <span wicket:id="commit"></span> | <span wicket:id="shortlog"></span>
+		<a wicket:id="tag"><wicket:message key="gb.tag"></wicket:message></a> | <a wicket:id="commit"><wicket:message key="gb.commit"></wicket:message></a> | <a wicket:id="shortlog"><wicket:message key="gb.shortlog"></wicket:message></a>
 	</div>	
 </wicket:panel>
 </html>
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/AnnotatedTagLinksPanel.java b/src/com/gitblit/wicket/panels/AnnotatedTagLinksPanel.java
index 79c6c63..3a494df 100644
--- a/src/com/gitblit/wicket/panels/AnnotatedTagLinksPanel.java
+++ b/src/com/gitblit/wicket/panels/AnnotatedTagLinksPanel.java
@@ -1,23 +1,22 @@
 package com.gitblit.wicket.panels;
 
 import org.apache.wicket.PageParameters;
-import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 
-import com.gitblit.wicket.LinkPanel;
 import com.gitblit.wicket.models.RefModel;
 import com.gitblit.wicket.pages.CommitPage;
 import com.gitblit.wicket.pages.ShortLogPage;
 import com.gitblit.wicket.pages.TagPage;
 
 
-public class AnnotatedTagLinksPanel extends Panel {
+public class AnnotatedTagLinksPanel extends BasePanel {
 
 	private static final long serialVersionUID = 1L;
 
 	public AnnotatedTagLinksPanel(String id, String repositoryName, RefModel tag) {
 		super(id);
-		add(new LinkPanel("tag", null, "tag", TagPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getObjectId().getName())));
-		add(new LinkPanel("commit", null, "commit", CommitPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getCommitId().getName())));
-		add(new LinkPanel("shortlog", null, "shortlog", ShortLogPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getName())));
+		add(new BookmarkablePageLink<Void>("tag", TagPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getObjectId().getName())));
+		add(new BookmarkablePageLink<Void>("commit", CommitPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getCommitId().getName())));
+		add(new BookmarkablePageLink<Void>("shortlog", ShortLogPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getName())));
 	}
 }
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/BasePanel.java b/src/com/gitblit/wicket/panels/BasePanel.java
new file mode 100644
index 0000000..48f5218
--- /dev/null
+++ b/src/com/gitblit/wicket/panels/BasePanel.java
@@ -0,0 +1,17 @@
+package com.gitblit.wicket.panels;
+
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.StringResourceModel;
+
+public abstract class BasePanel extends Panel {
+
+	private static final long serialVersionUID = 1L;
+
+	public BasePanel(String id) {
+		super(id);
+	}
+	
+	public StringResourceModel stringModel(String key) {
+		return new StringResourceModel(key, this, null);
+	}
+}
diff --git a/src/com/gitblit/wicket/panels/BranchLinksPanel.html b/src/com/gitblit/wicket/panels/BranchLinksPanel.html
index 04c6659..3e51948 100644
--- a/src/com/gitblit/wicket/panels/BranchLinksPanel.html
+++ b/src/com/gitblit/wicket/panels/BranchLinksPanel.html
@@ -1,8 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <wicket:panel>
 	<div class="link">
-		<span wicket:id="shortlog"></span> | <span wicket:id="tree"></span>
+		<a wicket:id="shortlog"><wicket:message key="gb.shortlog"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a>
 	</div>	
 </wicket:panel>
 </html>
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/BranchLinksPanel.java b/src/com/gitblit/wicket/panels/BranchLinksPanel.java
index bc74317..ccc8f4e 100644
--- a/src/com/gitblit/wicket/panels/BranchLinksPanel.java
+++ b/src/com/gitblit/wicket/panels/BranchLinksPanel.java
@@ -1,21 +1,19 @@
 package com.gitblit.wicket.panels;
 
 import org.apache.wicket.PageParameters;
-import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 
-import com.gitblit.wicket.LinkPanel;
 import com.gitblit.wicket.models.RefModel;
 import com.gitblit.wicket.pages.ShortLogPage;
 import com.gitblit.wicket.pages.TreePage;
 
-
-public class BranchLinksPanel extends Panel {
+public class BranchLinksPanel extends BasePanel {
 
 	private static final long serialVersionUID = 1L;
 
 	public BranchLinksPanel(String id, String repositoryName, RefModel tag) {
 		super(id);
-		add(new LinkPanel("shortlog", null, "shortlog", ShortLogPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getName())));
-		add(new LinkPanel("tree", null, "tree", TreePage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getName())));
+		add(new BookmarkablePageLink<Void>("shortlog", ShortLogPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getName())));
+		add(new BookmarkablePageLink<Void>("tree", TreePage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getName())));
 	}
 }
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/PageLinksPanel.html b/src/com/gitblit/wicket/panels/PageLinksPanel.html
index 0aabffc..db82728 100644
--- a/src/com/gitblit/wicket/panels/PageLinksPanel.html
+++ b/src/com/gitblit/wicket/panels/PageLinksPanel.html
@@ -1,9 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <wicket:panel>
 	<!-- page nav links -->	
 	<div class="page_nav">
-		<span wicket:id="summary"></span> | <span wicket:id="shortlog"></span> | <span wicket:id="branches"></span> | <span wicket:id="tags"></span> | <span wicket:id="tree"></span> <span wicket:id="extra"><span wicket:id="extraSeparator"></span><span wicket:id="extraLink"></span></span>
+		<a wicket:id="summary"><wicket:message key="gb.summary"></wicket:message></a> | <a wicket:id="shortlog"><wicket:message key="gb.shortlog"></wicket:message></a> | <a wicket:id="branches"><wicket:message key="gb.branches"></wicket:message></a> | <a wicket:id="tags"><wicket:message key="gb.tags"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a> <span wicket:id="extra"><span wicket:id="extraSeparator"></span><span wicket:id="extraLink"></span></span>
 	</div>	
 </wicket:panel>
 </html>
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/PageLinksPanel.java b/src/com/gitblit/wicket/panels/PageLinksPanel.java
index d203426..d9c2527 100644
--- a/src/com/gitblit/wicket/panels/PageLinksPanel.java
+++ b/src/com/gitblit/wicket/panels/PageLinksPanel.java
@@ -1,11 +1,14 @@
 package com.gitblit.wicket.panels;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.data.DataView;
 import org.apache.wicket.markup.repeater.data.ListDataProvider;
@@ -20,47 +23,33 @@
 import com.gitblit.wicket.pages.TicGitPage;
 import com.gitblit.wicket.pages.TreePage;
 
-public class PageLinksPanel extends Panel {
+public class PageLinksPanel extends BasePanel {
 
 	private static final long serialVersionUID = 1L;
+
+	private final Map<String, String> knownPages = new HashMap<String, String>() {
+
+		private static final long serialVersionUID = 1L;
+
+		{
+			put("summary", "gb.summary");
+			put("shortlog", "gb.shortlog");
+			put("branches", "gb.branches");
+			put("tags", "gb.tags");
+			put("tree", "gb.tree");
+			put("ticgit", "gb.ticgit");
+		}
+	};
 
 	public PageLinksPanel(String id, Repository r, final String repositoryName, String pageName) {
 		super(id);
 
 		// summary
-		if (pageName.equals("summary")) {
-			add(new Label("summary", pageName));
-		} else {
-			add(new LinkPanel("summary", null, "summary", SummaryPage.class, new PageParameters("p=" + repositoryName)));
-		}
-
-		// shortlog
-		if (pageName.equals("shortlog")) {
-			add(new Label("shortlog", pageName));
-		} else {
-			add(new LinkPanel("shortlog", null, "shortlog", ShortLogPage.class, new PageParameters("p=" + repositoryName)));
-		}
-
-		// branches
-		if (pageName.equals("branches")) {
-			add(new Label("branches", pageName));
-		} else {
-			add(new LinkPanel("branches", null, "branches", BranchesPage.class, new PageParameters("p=" + repositoryName)));
-		}
-
-		// tags
-		if (pageName.equals("tags")) {
-			add(new Label("tags", pageName));
-		} else {
-			add(new LinkPanel("tags", null, "tags", TagsPage.class, new PageParameters("p=" + repositoryName)));
-		}
-
-		// tree
-		if (pageName.equals("tree")) {
-			add(new Label("tree", pageName));
-		} else {
-			add(new LinkPanel("tree", null, "tree", TreePage.class, new PageParameters("p=" + repositoryName + ",h=HEAD")));
-		}
+		add(new BookmarkablePageLink<Void>("summary", SummaryPage.class, new PageParameters("p=" + repositoryName)));
+		add(new BookmarkablePageLink<Void>("shortlog", ShortLogPage.class, new PageParameters("p=" + repositoryName)));
+		add(new BookmarkablePageLink<Void>("branches", BranchesPage.class, new PageParameters("p=" + repositoryName)));
+		add(new BookmarkablePageLink<Void>("tags", TagsPage.class, new PageParameters("p=" + repositoryName)));
+		add(new BookmarkablePageLink<Void>("tree", TreePage.class, new PageParameters("p=" + repositoryName + ",h=HEAD")));
 
 		// Add dynamic repository extras
 		List<String> extras = new ArrayList<String>();
@@ -82,4 +71,16 @@
 		};
 		add(extrasView);
 	}
+
+	public void disablePageLink(String pageName) {
+		for (String wicketId : knownPages.keySet()) {
+			String key = knownPages.get(wicketId);
+			String linkName = getString(key);
+			if (linkName.equals(pageName)) {
+				Component c = get(wicketId);
+				c.setEnabled(false);
+				break;
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/PathBreadcrumbsPanel.html b/src/com/gitblit/wicket/panels/PathBreadcrumbsPanel.html
index ee8bca2..bd4b792 100644
--- a/src/com/gitblit/wicket/panels/PathBreadcrumbsPanel.html
+++ b/src/com/gitblit/wicket/panels/PathBreadcrumbsPanel.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <wicket:panel>
 	<!-- page path links -->
 	<div class="page_path">	
diff --git a/src/com/gitblit/wicket/panels/PathLinksPanel.html b/src/com/gitblit/wicket/panels/PathLinksPanel.html
index 08327b1..8079ecc 100644
--- a/src/com/gitblit/wicket/panels/PathLinksPanel.html
+++ b/src/com/gitblit/wicket/panels/PathLinksPanel.html
@@ -1,8 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <wicket:panel>
 	<div class="link">
-		<span wicket:id="diff"></span> | <span wicket:id="blob"></span> | <span wicket:id="history"></span>
+		<a wicket:id="diff"><wicket:message key="gb.diff"></wicket:message></a> | <a wicket:id="view"><wicket:message key="gb.view"></wicket:message></a> | <a wicket:id="history"><wicket:message key="gb.history"></wicket:message></a>
 	</div>	
 </wicket:panel>
 </html>
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/PathLinksPanel.java b/src/com/gitblit/wicket/panels/PathLinksPanel.java
index 49aeb4a..e1c489f 100644
--- a/src/com/gitblit/wicket/panels/PathLinksPanel.java
+++ b/src/com/gitblit/wicket/panels/PathLinksPanel.java
@@ -1,23 +1,21 @@
 package com.gitblit.wicket.panels;
 
 import org.apache.wicket.PageParameters;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 
-import com.gitblit.wicket.LinkPanel;
 import com.gitblit.wicket.models.PathModel;
 import com.gitblit.wicket.pages.BlobPage;
 import com.gitblit.wicket.pages.DiffPage;
 
 
-public class PathLinksPanel extends Panel {
+public class PathLinksPanel extends BasePanel {
 
 	private static final long serialVersionUID = 1L;
 
 	public PathLinksPanel(String id, String repositoryName, PathModel path) {
 		super(id);
-		add(new LinkPanel("diff", null, "diff", DiffPage.class, new PageParameters("p=" + repositoryName + ",h=" + path.commitId + ",f=" + path.path)));
-		add(new LinkPanel("blob", null, "view", BlobPage.class, new PageParameters("p=" + repositoryName + ",h=" + path.commitId + ",f=" + path.path)));
-		add(new Label("history", "history"));
+		add(new BookmarkablePageLink<Void>("diff", DiffPage.class, new PageParameters("p=" + repositoryName + ",h=" + path.commitId + ",f=" + path.path)));
+		add(new BookmarkablePageLink<Void>("view", BlobPage.class, new PageParameters("p=" + repositoryName + ",h=" + path.commitId + ",f=" + path.path)));
+		add(new BookmarkablePageLink<Void>("history", BlobPage.class, new PageParameters()).setEnabled(false));
 	}
 }
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/RefsPanel.html b/src/com/gitblit/wicket/panels/RefsPanel.html
index e7be7c5..4012ab1 100644
--- a/src/com/gitblit/wicket/panels/RefsPanel.html
+++ b/src/com/gitblit/wicket/panels/RefsPanel.html
@@ -1,5 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <wicket:panel>
 	<span class="refs" wicket:id="ref">
 		<span wicket:id="refName">ref</span>
diff --git a/src/com/gitblit/wicket/panels/ShortLogLinksPanel.html b/src/com/gitblit/wicket/panels/ShortLogLinksPanel.html
index 75d6b1c..2208ceb 100644
--- a/src/com/gitblit/wicket/panels/ShortLogLinksPanel.html
+++ b/src/com/gitblit/wicket/panels/ShortLogLinksPanel.html
@@ -1,8 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <wicket:panel>
 	<div class="link">
-		<span wicket:id="commit"></span> | <span wicket:id="commitdiff"></span> | <span wicket:id="tree"></span>
+		<a wicket:id="commit"><wicket:message key="gb.commit"></wicket:message></a> | <a wicket:id="commitdiff"><wicket:message key="gb.commitdiff"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a>
 	</div>	
 </wicket:panel>
 </html>
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/ShortLogLinksPanel.java b/src/com/gitblit/wicket/panels/ShortLogLinksPanel.java
index 51c894d..bf2c772 100644
--- a/src/com/gitblit/wicket/panels/ShortLogLinksPanel.java
+++ b/src/com/gitblit/wicket/panels/ShortLogLinksPanel.java
@@ -1,23 +1,22 @@
 package com.gitblit.wicket.panels;
 
 import org.apache.wicket.PageParameters;
-import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 
-import com.gitblit.wicket.LinkPanel;
 import com.gitblit.wicket.pages.CommitPage;
 import com.gitblit.wicket.pages.DiffPage;
 import com.gitblit.wicket.pages.TreePage;
 
 
-public class ShortLogLinksPanel extends Panel {
+public class ShortLogLinksPanel extends BasePanel {
 
 	private static final long serialVersionUID = 1L;
 
 	public ShortLogLinksPanel(String id, String repositoryName, String commitId) {
 		super(id);
 
-		add(new LinkPanel("commit", null, "commit", CommitPage.class, new PageParameters("p=" + repositoryName + ",h=" + commitId)));
-		add(new LinkPanel("commitdiff", null, "commitdiff", DiffPage.class, new PageParameters("p=" + repositoryName + ",h=" + commitId)));
-		add(new LinkPanel("tree", null, "tree", TreePage.class, new PageParameters("p=" + repositoryName + ",h=" + commitId)));
+		add(new BookmarkablePageLink<Void>("commit", CommitPage.class, new PageParameters("p=" + repositoryName + ",h=" + commitId)));
+		add(new BookmarkablePageLink<Void>("commitdiff", DiffPage.class, new PageParameters("p=" + repositoryName + ",h=" + commitId)));
+		add(new BookmarkablePageLink<Void>("tree", TreePage.class, new PageParameters("p=" + repositoryName + ",h=" + commitId)));
 	}
 }
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/TagLinksPanel.html b/src/com/gitblit/wicket/panels/TagLinksPanel.html
index 98191a3..34a39c9 100644
--- a/src/com/gitblit/wicket/panels/TagLinksPanel.html
+++ b/src/com/gitblit/wicket/panels/TagLinksPanel.html
@@ -1,8 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <wicket:panel>
 	<div class="link">
-		<span wicket:id="commit"></span> | <span wicket:id="shortlog"></span>
+		<a wicket:id="commit"><wicket:message key="gb.commit"></wicket:message></a> | <a wicket:id="shortlog"><wicket:message key="gb.shortlog"></wicket:message></a>
 	</div>	
 </wicket:panel>
 </html>
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/TagLinksPanel.java b/src/com/gitblit/wicket/panels/TagLinksPanel.java
index 8011716..e7f7c8d 100644
--- a/src/com/gitblit/wicket/panels/TagLinksPanel.java
+++ b/src/com/gitblit/wicket/panels/TagLinksPanel.java
@@ -1,21 +1,20 @@
 package com.gitblit.wicket.panels;
 
 import org.apache.wicket.PageParameters;
-import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 
-import com.gitblit.wicket.LinkPanel;
 import com.gitblit.wicket.models.RefModel;
 import com.gitblit.wicket.pages.CommitPage;
 import com.gitblit.wicket.pages.ShortLogPage;
 
 
-public class TagLinksPanel extends Panel {
+public class TagLinksPanel extends BasePanel {
 
 	private static final long serialVersionUID = 1L;
 
 	public TagLinksPanel(String id, String repositoryName, RefModel tag) {
 		super(id);
-		add(new LinkPanel("commit", null, "commit", CommitPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getCommitId().getName())));
-		add(new LinkPanel("shortlog", null, "shortlog", ShortLogPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getName())));
+		add(new BookmarkablePageLink<Void>("commit", CommitPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getCommitId().getName())));
+		add(new BookmarkablePageLink<Void>("shortlog", ShortLogPage.class, new PageParameters("p=" + repositoryName + ",h=" + tag.getName())));
 	}
 }
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/TreeBlobLinksPanel.html b/src/com/gitblit/wicket/panels/TreeBlobLinksPanel.html
index 14a064f..9f5c6a7 100644
--- a/src/com/gitblit/wicket/panels/TreeBlobLinksPanel.html
+++ b/src/com/gitblit/wicket/panels/TreeBlobLinksPanel.html
@@ -1,8 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <wicket:panel>
 	<div class="link">
-		<span wicket:id="link"></span> | <span wicket:id="raw"></span> | <span wicket:id="history"></span>
+		<a wicket:id="view"><wicket:message key="gb.view"></wicket:message></a> | <a wicket:id="raw"><wicket:message key="gb.raw"></wicket:message></a> | <a wicket:id="history"><wicket:message key="gb.history"></wicket:message></a>
 	</div>	
 </wicket:panel>
 </html>
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/TreeBlobLinksPanel.java b/src/com/gitblit/wicket/panels/TreeBlobLinksPanel.java
index 9c7eb58..c8277ae 100644
--- a/src/com/gitblit/wicket/panels/TreeBlobLinksPanel.java
+++ b/src/com/gitblit/wicket/panels/TreeBlobLinksPanel.java
@@ -1,22 +1,20 @@
 package com.gitblit.wicket.panels;
 
 import org.apache.wicket.PageParameters;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 
-import com.gitblit.wicket.LinkPanel;
 import com.gitblit.wicket.models.PathModel;
 import com.gitblit.wicket.pages.BlobPage;
 
 
-public class TreeBlobLinksPanel extends Panel {
+public class TreeBlobLinksPanel extends BasePanel {
 
 	private static final long serialVersionUID = 1L;
 
 	public TreeBlobLinksPanel(String id, String repositoryName, PathModel path) {
 		super(id);
-		add(new LinkPanel("link", null, "view", BlobPage.class, new PageParameters("p=" + repositoryName + ",h=" + path.commitId + ",f=" + path.path)));
-		add(new Label("raw", "raw"));
-		add(new Label("history", "history"));
+		add(new BookmarkablePageLink<Void>("view", BlobPage.class, new PageParameters("p=" + repositoryName + ",h=" + path.commitId + ",f=" + path.path)));
+		add(new BookmarkablePageLink<Void>("raw", BlobPage.class, new PageParameters()).setEnabled(false));
+		add(new BookmarkablePageLink<Void>("history", BlobPage.class, new PageParameters()).setEnabled(false));
 	}
 }
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/TreeLinksPanel.html b/src/com/gitblit/wicket/panels/TreeLinksPanel.html
index 00d8131..69f3dec 100644
--- a/src/com/gitblit/wicket/panels/TreeLinksPanel.html
+++ b/src/com/gitblit/wicket/panels/TreeLinksPanel.html
@@ -1,8 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"  
+      xml:lang="en"  
+      lang="en"> 
+
 <wicket:panel>
 	<div class="link">
-		<span wicket:id="link"></span> | <span wicket:id="history"></span>
+		<a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a> | <a wicket:id="history"><wicket:message key="gb.history"></wicket:message></a>
 	</div>	
 </wicket:panel>
 </html>
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/TreeLinksPanel.java b/src/com/gitblit/wicket/panels/TreeLinksPanel.java
index af4bbb1..9a42943 100644
--- a/src/com/gitblit/wicket/panels/TreeLinksPanel.java
+++ b/src/com/gitblit/wicket/panels/TreeLinksPanel.java
@@ -1,21 +1,19 @@
 package com.gitblit.wicket.panels;
 
 import org.apache.wicket.PageParameters;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 
-import com.gitblit.wicket.LinkPanel;
 import com.gitblit.wicket.models.PathModel;
 import com.gitblit.wicket.pages.TreePage;
 
 
-public class TreeLinksPanel extends Panel {
+public class TreeLinksPanel extends BasePanel {
 
 	private static final long serialVersionUID = 1L;
 
 	public TreeLinksPanel(String id, String repositoryName, PathModel path) {
 		super(id);
-		add(new LinkPanel("link", null, "tree", TreePage.class, new PageParameters("p=" + repositoryName + ",h=" + path.commitId + ",f=" + path.path)));
-		add(new Label("history", "history"));
+		add(new BookmarkablePageLink<Void>("tree", TreePage.class, new PageParameters("p=" + repositoryName + ",h=" + path.commitId + ",f=" + path.path)));
+		add(new BookmarkablePageLink<Void>("history", TreePage.class, new PageParameters()).setEnabled(false));
 	}
 }
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/resources/gitblit.css b/src/com/gitblit/wicket/resources/gitblit.css
index 675a258..6e1717c 100644
--- a/src/com/gitblit/wicket/resources/gitblit.css
+++ b/src/com/gitblit/wicket/resources/gitblit.css
@@ -377,8 +377,7 @@
 }
 
 td.date {
-	font-style: italic;
-	width:90px;
+	font-style: italic;	
 }
 
 td.sha1, td.sha1 span {

--
Gitblit v1.9.1