403d0906e9
Extend unquote subroutine, which unquotes quoted and escaped filenames which git may return, to deal not only with octal char sequence quoting, but also quoting ordinary characters including '\"' and '\\' which are respectively quoted '"' and '\', and to deal also with C escape sequences including '\t' for TAB and '\n' for LF. Add esc_path subroutine for gitweb quoting and HTML escaping filenames (currently it does equivalent of ls' --hide-control-chars, which means showing undisplayable characters (including '\n' and '\t') as '?' (question mark) character, and use 'span' element with cntrl CSS class to help rendering them differently. Convert gitweb to use esc_path correctly to print pathnames. Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
411 lines
5.6 KiB
CSS
411 lines
5.6 KiB
CSS
body {
|
|
font-family: sans-serif;
|
|
font-size: 12px;
|
|
border: solid #d9d8d1;
|
|
border-width: 1px;
|
|
margin: 10px;
|
|
background-color: #ffffff;
|
|
color: #000000;
|
|
}
|
|
|
|
a {
|
|
color: #0000cc;
|
|
}
|
|
|
|
a:hover, a:visited, a:active {
|
|
color: #880000;
|
|
}
|
|
|
|
span.cntrl {
|
|
border: dashed #aaaaaa;
|
|
border-width: 1px;
|
|
padding: 0px 2px 0px 2px;
|
|
margin: 0px 2px 0px 2px;
|
|
}
|
|
|
|
img.logo {
|
|
float: right;
|
|
border-width: 0px;
|
|
}
|
|
|
|
div.page_header {
|
|
height: 25px;
|
|
padding: 8px;
|
|
font-size: 18px;
|
|
font-weight: bold;
|
|
background-color: #d9d8d1;
|
|
}
|
|
|
|
div.page_header a:visited, a.header {
|
|
color: #0000cc;
|
|
}
|
|
|
|
div.page_header a:hover {
|
|
color: #880000;
|
|
}
|
|
|
|
div.page_nav {
|
|
padding: 8px;
|
|
}
|
|
|
|
div.page_nav a:visited {
|
|
color: #0000cc;
|
|
}
|
|
|
|
div.page_path {
|
|
padding: 8px;
|
|
font-weight: bold;
|
|
border: solid #d9d8d1;
|
|
border-width: 0px 0px 1px;
|
|
}
|
|
|
|
div.page_footer {
|
|
height: 17px;
|
|
padding: 4px 8px;
|
|
background-color: #d9d8d1;
|
|
}
|
|
|
|
div.page_footer_text {
|
|
float: left;
|
|
color: #555555;
|
|
font-style: italic;
|
|
}
|
|
|
|
div.page_body {
|
|
padding: 8px;
|
|
font-family: monospace;
|
|
}
|
|
|
|
div.title, a.title {
|
|
display: block;
|
|
padding: 6px 8px;
|
|
font-weight: bold;
|
|
background-color: #edece6;
|
|
text-decoration: none;
|
|
color: #000000;
|
|
}
|
|
|
|
a.title:hover {
|
|
background-color: #d9d8d1;
|
|
}
|
|
|
|
div.title_text {
|
|
padding: 6px 0px;
|
|
border: solid #d9d8d1;
|
|
border-width: 0px 0px 1px;
|
|
font-family: monospace;
|
|
}
|
|
|
|
div.log_body {
|
|
padding: 8px 8px 8px 150px;
|
|
}
|
|
|
|
span.age {
|
|
position: relative;
|
|
float: left;
|
|
width: 142px;
|
|
font-style: italic;
|
|
}
|
|
|
|
div.page_body span.signoff {
|
|
color: #888888;
|
|
}
|
|
|
|
div.log_link {
|
|
padding: 0px 8px;
|
|
font-size: 10px;
|
|
font-family: sans-serif;
|
|
font-style: normal;
|
|
position: relative;
|
|
float: left;
|
|
width: 136px;
|
|
}
|
|
|
|
div.list_head {
|
|
padding: 6px 8px 4px;
|
|
border: solid #d9d8d1;
|
|
border-width: 1px 0px 0px;
|
|
font-style: italic;
|
|
}
|
|
|
|
div.author_date {
|
|
padding: 8px;
|
|
border: solid #d9d8d1;
|
|
border-width: 0px 0px 1px 0px;
|
|
font-style: italic;
|
|
}
|
|
|
|
a.list {
|
|
text-decoration: none;
|
|
color: #000000;
|
|
}
|
|
|
|
a.subject, a.name {
|
|
font-weight: bold;
|
|
}
|
|
|
|
table.tags a.subject {
|
|
font-weight: normal;
|
|
}
|
|
|
|
a.list:hover {
|
|
text-decoration: underline;
|
|
color: #880000;
|
|
}
|
|
|
|
a.text {
|
|
text-decoration: none;
|
|
color: #0000cc;
|
|
}
|
|
|
|
a.text:visited {
|
|
text-decoration: none;
|
|
color: #880000;
|
|
}
|
|
|
|
a.text:hover {
|
|
text-decoration: underline;
|
|
color: #880000;
|
|
}
|
|
|
|
table {
|
|
padding: 8px 4px;
|
|
}
|
|
|
|
table.project_list {
|
|
border-spacing: 0;
|
|
}
|
|
|
|
table.diff_tree {
|
|
border-spacing: 0;
|
|
font-family: monospace;
|
|
}
|
|
|
|
table.blame {
|
|
border-collapse: collapse;
|
|
}
|
|
|
|
table.blame td {
|
|
padding: 0px 5px;
|
|
font-size: 12px;
|
|
vertical-align: top;
|
|
}
|
|
|
|
th {
|
|
padding: 2px 5px;
|
|
font-size: 12px;
|
|
text-align: left;
|
|
}
|
|
|
|
tr.light:hover {
|
|
background-color: #edece6;
|
|
}
|
|
|
|
tr.dark {
|
|
background-color: #f6f6f0;
|
|
}
|
|
|
|
tr.dark2 {
|
|
background-color: #f6f6f0;
|
|
}
|
|
|
|
tr.dark:hover {
|
|
background-color: #edece6;
|
|
}
|
|
|
|
td {
|
|
padding: 2px 5px;
|
|
font-size: 12px;
|
|
vertical-align: top;
|
|
}
|
|
|
|
td.link, td.selflink {
|
|
padding: 2px 5px;
|
|
font-family: sans-serif;
|
|
font-size: 10px;
|
|
}
|
|
|
|
td.selflink {
|
|
padding-right: 0px;
|
|
}
|
|
|
|
td.sha1 {
|
|
font-family: monospace;
|
|
}
|
|
|
|
td.error {
|
|
color: red;
|
|
background-color: yellow;
|
|
}
|
|
|
|
td.current_head {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
table.diff_tree span.file_status.new {
|
|
color: #008000;
|
|
}
|
|
|
|
table.diff_tree span.file_status.deleted {
|
|
color: #c00000;
|
|
}
|
|
|
|
table.diff_tree span.file_status.moved,
|
|
table.diff_tree span.file_status.mode_chnge {
|
|
color: #777777;
|
|
}
|
|
|
|
table.diff_tree span.file_status.copied {
|
|
color: #70a070;
|
|
}
|
|
|
|
/* age2: 60*60*24*2 <= age */
|
|
table.project_list td.age2, table.blame td.age2 {
|
|
font-style: italic;
|
|
}
|
|
|
|
/* age1: 60*60*2 <= age < 60*60*24*2 */
|
|
table.project_list td.age1 {
|
|
color: #009900;
|
|
font-style: italic;
|
|
}
|
|
|
|
table.blame td.age1 {
|
|
color: #009900;
|
|
background: transparent;
|
|
}
|
|
|
|
/* age0: age < 60*60*2 */
|
|
table.project_list td.age0 {
|
|
color: #009900;
|
|
font-style: italic;
|
|
font-weight: bold;
|
|
}
|
|
|
|
table.blame td.age0 {
|
|
color: #009900;
|
|
background: transparent;
|
|
font-weight: bold;
|
|
}
|
|
|
|
td.pre, div.pre, div.diff {
|
|
font-family: monospace;
|
|
font-size: 12px;
|
|
white-space: pre;
|
|
}
|
|
|
|
td.mode {
|
|
font-family: monospace;
|
|
}
|
|
|
|
div.diff a.list {
|
|
text-decoration: none;
|
|
}
|
|
|
|
div.diff a.list:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
div.diff.to_file a.list,
|
|
div.diff.to_file,
|
|
div.diff.add {
|
|
color: #008800;
|
|
}
|
|
|
|
div.diff.from_file a.list,
|
|
div.diff.from_file,
|
|
div.diff.rem {
|
|
color: #cc0000;
|
|
}
|
|
|
|
div.diff.chunk_header {
|
|
color: #990099;
|
|
}
|
|
|
|
div.diff.incomplete {
|
|
color: #cccccc;
|
|
}
|
|
|
|
div.diff_info {
|
|
font-family: monospace;
|
|
color: #000099;
|
|
background-color: #edece6;
|
|
font-style: italic;
|
|
}
|
|
|
|
div.index_include {
|
|
border: solid #d9d8d1;
|
|
border-width: 0px 0px 1px;
|
|
padding: 12px 8px;
|
|
}
|
|
|
|
div.search {
|
|
font-size: 12px;
|
|
font-weight: normal;
|
|
margin: 4px 8px;
|
|
position: absolute;
|
|
top: 56px;
|
|
right: 12px
|
|
}
|
|
|
|
td.linenr {
|
|
text-align: right;
|
|
}
|
|
|
|
a.linenr {
|
|
color: #999999;
|
|
text-decoration: none
|
|
}
|
|
|
|
a.rss_logo {
|
|
float: right;
|
|
padding: 3px 0px;
|
|
width: 35px;
|
|
line-height: 10px;
|
|
border: 1px solid;
|
|
border-color: #fcc7a5 #7d3302 #3e1a01 #ff954e;
|
|
color: #ffffff;
|
|
background-color: #ff6600;
|
|
font-weight: bold;
|
|
font-family: sans-serif;
|
|
font-size: 10px;
|
|
text-align: center;
|
|
text-decoration: none;
|
|
}
|
|
|
|
a.rss_logo:hover {
|
|
background-color: #ee5500;
|
|
}
|
|
|
|
span.refs span {
|
|
padding: 0px 4px;
|
|
font-size: 10px;
|
|
font-weight: normal;
|
|
border: 1px solid;
|
|
background-color: #ffaaff;
|
|
border-color: #ffccff #ff00ee #ff00ee #ffccff;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
span.atnight {
|
|
color: #cc0000;
|
|
}
|
|
|
|
span.match {
|
|
color: #e00000;
|
|
}
|