##// END OF EJS Templates
Fixed TOC positionning in wiki pages....
Jean-Philippe Lang -
r780:48fb20f5407c
parent child
Show More
@@ -1,121 +1,122
1 require 'redcloth'
1 require 'redcloth'
2 require 'coderay'
2 require 'coderay'
3 require 'pp'
3 require 'pp'
4 module Redmine
4 module Redmine
5 module WikiFormatting
5 module WikiFormatting
6
6
7 private
7 private
8
8
9 class TextileFormatter < RedCloth
9 class TextileFormatter < RedCloth
10 RULES = [:inline_auto_link, :inline_auto_mailto, :textile, :inline_toc]
10 RULES = [:inline_auto_link, :inline_auto_mailto, :textile, :inline_toc]
11
11
12 def initialize(*args)
12 def initialize(*args)
13 super
13 super
14 self.hard_breaks=true
14 self.hard_breaks=true
15 self.no_span_caps=true
15 self.no_span_caps=true
16 end
16 end
17
17
18 def to_html
18 def to_html
19 @toc = []
19 @toc = []
20 super(*RULES).to_s
20 super(*RULES).to_s
21 end
21 end
22
22
23 private
23 private
24
24
25 # Patch for RedCloth. Fixed in RedCloth r128 but _why hasn't released it yet.
25 # Patch for RedCloth. Fixed in RedCloth r128 but _why hasn't released it yet.
26 # <a href="http://code.whytheluckystiff.net/redcloth/changeset/128">http://code.whytheluckystiff.net/redcloth/changeset/128</a>
26 # <a href="http://code.whytheluckystiff.net/redcloth/changeset/128">http://code.whytheluckystiff.net/redcloth/changeset/128</a>
27 def hard_break( text )
27 def hard_break( text )
28 text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1<br />" ) if hard_breaks
28 text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1<br />" ) if hard_breaks
29 end
29 end
30
30
31 # Patch to add code highlighting support to RedCloth
31 # Patch to add code highlighting support to RedCloth
32 def smooth_offtags( text )
32 def smooth_offtags( text )
33 unless @pre_list.empty?
33 unless @pre_list.empty?
34 ## replace <pre> content
34 ## replace <pre> content
35 text.gsub!(/<redpre#(\d+)>/) do
35 text.gsub!(/<redpre#(\d+)>/) do
36 content = @pre_list[$1.to_i]
36 content = @pre_list[$1.to_i]
37 if content.match(/<code\s+class="(\w+)">\s?(.+)/m)
37 if content.match(/<code\s+class="(\w+)">\s?(.+)/m)
38 content = "<code class=\"#{$1} CodeRay\">" +
38 content = "<code class=\"#{$1} CodeRay\">" +
39 CodeRay.scan($2, $1).html(:escape => false, :line_numbers => :inline)
39 CodeRay.scan($2, $1).html(:escape => false, :line_numbers => :inline)
40 end
40 end
41 content
41 content
42 end
42 end
43 end
43 end
44 end
44 end
45
45
46 # Patch to add 'table of content' support to RedCloth
46 # Patch to add 'table of content' support to RedCloth
47 def textile_p_withtoc(tag, atts, cite, content)
47 def textile_p_withtoc(tag, atts, cite, content)
48 if tag =~ /^h(\d)$/
48 if tag =~ /^h(\d)$/
49 @toc << [$1.to_i, content]
49 @toc << [$1.to_i, content]
50 end
50 end
51 content = "<a name=\"#{@toc.length}\" class=\"wiki-page\"></a>" + content
51 content = "<a name=\"#{@toc.length}\" class=\"wiki-page\"></a>" + content
52 textile_p(tag, atts, cite, content)
52 textile_p(tag, atts, cite, content)
53 end
53 end
54
54
55 alias :textile_h1 :textile_p_withtoc
55 alias :textile_h1 :textile_p_withtoc
56 alias :textile_h2 :textile_p_withtoc
56 alias :textile_h2 :textile_p_withtoc
57 alias :textile_h3 :textile_p_withtoc
57 alias :textile_h3 :textile_p_withtoc
58
58
59 def inline_toc(text)
59 def inline_toc(text)
60 text.gsub!(/<p>\{\{([<>]?)toc\}\}<\/p>/i) do
60 text.gsub!(/<p>\{\{([<>]?)toc\}\}<\/p>/i) do
61 div_class = 'toc'
61 div_class = 'toc'
62 div_class << ' right' if $1 == '>'
62 div_class << ' right' if $1 == '>'
63 div_class << ' left' if $1 == '<'
63 out = "<div class=\"#{div_class}\">"
64 out = "<div class=\"#{div_class}\">"
64 @toc.each_with_index do |heading, index|
65 @toc.each_with_index do |heading, index|
65 # remove wiki links from the item
66 # remove wiki links from the item
66 toc_item = heading.last.gsub(/(\[\[|\]\])/, '')
67 toc_item = heading.last.gsub(/(\[\[|\]\])/, '')
67 out << "<a href=\"##{index+1}\" class=\"heading#{heading.first}\">#{toc_item}</a>"
68 out << "<a href=\"##{index+1}\" class=\"heading#{heading.first}\">#{toc_item}</a>"
68 end
69 end
69 out << '</div>'
70 out << '</div>'
70 out
71 out
71 end
72 end
72 end
73 end
73
74
74 AUTO_LINK_RE = %r{
75 AUTO_LINK_RE = %r{
75 ( # leading text
76 ( # leading text
76 <\w+.*?>| # leading HTML tag, or
77 <\w+.*?>| # leading HTML tag, or
77 [^=<>!:'"/]| # leading punctuation, or
78 [^=<>!:'"/]| # leading punctuation, or
78 ^ # beginning of line
79 ^ # beginning of line
79 )
80 )
80 (
81 (
81 (?:https?://)| # protocol spec, or
82 (?:https?://)| # protocol spec, or
82 (?:www\.) # www.*
83 (?:www\.) # www.*
83 )
84 )
84 (
85 (
85 (\S+?) # url
86 (\S+?) # url
86 (\/)? # slash
87 (\/)? # slash
87 )
88 )
88 ([^\w\=\/;]*?) # post
89 ([^\w\=\/;]*?) # post
89 (?=<|\s|$)
90 (?=<|\s|$)
90 }x unless const_defined?(:AUTO_LINK_RE)
91 }x unless const_defined?(:AUTO_LINK_RE)
91
92
92 # Turns all urls into clickable links (code from Rails).
93 # Turns all urls into clickable links (code from Rails).
93 def inline_auto_link(text)
94 def inline_auto_link(text)
94 text.gsub!(AUTO_LINK_RE) do
95 text.gsub!(AUTO_LINK_RE) do
95 all, leading, proto, url, post = $&, $1, $2, $3, $6
96 all, leading, proto, url, post = $&, $1, $2, $3, $6
96 if leading =~ /<a\s/i || leading =~ /![<>=]?/
97 if leading =~ /<a\s/i || leading =~ /![<>=]?/
97 # don't replace URL's that are already linked
98 # don't replace URL's that are already linked
98 # and URL's prefixed with ! !> !< != (textile images)
99 # and URL's prefixed with ! !> !< != (textile images)
99 all
100 all
100 else
101 else
101 %(#{leading}<a href="#{proto=="www."?"http://www.":proto}#{url}">#{proto + url}</a>#{post})
102 %(#{leading}<a href="#{proto=="www."?"http://www.":proto}#{url}">#{proto + url}</a>#{post})
102 end
103 end
103 end
104 end
104 end
105 end
105
106
106 # Turns all email addresses into clickable links (code from Rails).
107 # Turns all email addresses into clickable links (code from Rails).
107 def inline_auto_mailto(text)
108 def inline_auto_mailto(text)
108 text.gsub!(/([\w\.!#\$%\-+.]+@[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)+)/) do
109 text.gsub!(/([\w\.!#\$%\-+.]+@[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)+)/) do
109 text = $1
110 text = $1
110 %{<a href="mailto:#{$1}" class="email">#{text}</a>}
111 %{<a href="mailto:#{$1}" class="email">#{text}</a>}
111 end
112 end
112 end
113 end
113 end
114 end
114
115
115 public
116 public
116
117
117 def self.to_html(text, options = {})
118 def self.to_html(text, options = {})
118 TextileFormatter.new(text).to_html
119 TextileFormatter.new(text).to_html
119 end
120 end
120 end
121 end
121 end
122 end
@@ -1,464 +1,462
1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
2
2
3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
4 h1 {margin:0; padding:0; font-size: 24px;}
4 h1 {margin:0; padding:0; font-size: 24px;}
5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
7 h4, .wiki h3 {font-size: 12px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
7 h4, .wiki h3 {font-size: 12px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
8
8
9 /***** Layout *****/
9 /***** Layout *****/
10 #top-menu {background: #2C4056;color: #fff;height:1.5em; padding: 2px 6px 0px 6px;}
10 #top-menu {background: #2C4056;color: #fff;height:1.5em; padding: 2px 6px 0px 6px;}
11 #top-menu a {color: #fff; padding-right: 4px;}
11 #top-menu a {color: #fff; padding-right: 4px;}
12 #account {float:right;}
12 #account {float:right;}
13
13
14 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px;}
14 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px;}
15 #header a {color:#f8f8f8;}
15 #header a {color:#f8f8f8;}
16 #quick-search {float:right;}
16 #quick-search {float:right;}
17
17
18 #main-menu {position: absolute; top: 5.5em; left:6px;}
18 #main-menu {position: absolute; top: 5.5em; left:6px;}
19 #main-menu ul {margin: 0; padding: 0;}
19 #main-menu ul {margin: 0; padding: 0;}
20 #main-menu li {
20 #main-menu li {
21 float:left;
21 float:left;
22 list-style-type:none;
22 list-style-type:none;
23 margin: 0px 10px 0px 0px;
23 margin: 0px 10px 0px 0px;
24 padding: 0px 0px 0px 0px;
24 padding: 0px 0px 0px 0px;
25 white-space:nowrap;
25 white-space:nowrap;
26 }
26 }
27 #main-menu li a {
27 #main-menu li a {
28 display: block;
28 display: block;
29 color: #fff;
29 color: #fff;
30 text-decoration: none;
30 text-decoration: none;
31 margin: 0;
31 margin: 0;
32 padding: 4px 4px 4px 4px;
32 padding: 4px 4px 4px 4px;
33 background: #2C4056;
33 background: #2C4056;
34 }
34 }
35 #main-menu li a:hover {background:#759FCF;}
35 #main-menu li a:hover {background:#759FCF;}
36
36
37 #main {background: url(../images/mainbg.png) repeat-x; background-color:#EEEEEE;}
37 #main {background: url(../images/mainbg.png) repeat-x; background-color:#EEEEEE;}
38
38
39 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
39 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
40 * html #sidebar{ width: 17%; }
40 * html #sidebar{ width: 17%; }
41 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
41 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
42 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
42 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
43 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
43 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
44
44
45 #content { width: 80%; background: url(../images/contentbg.png) repeat-x; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; position: relative; z-index: 10; height:600px; min-height: 600px;}
45 #content { width: 80%; background: url(../images/contentbg.png) repeat-x; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; position: relative; z-index: 10; height:600px; min-height: 600px;}
46 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
46 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
47 html>body #content {
47 html>body #content {
48 height: auto;
48 height: auto;
49 min-height: 600px;
49 min-height: 600px;
50 }
50 }
51
51
52 #main.nosidebar #sidebar{ display: none; }
52 #main.nosidebar #sidebar{ display: none; }
53 #main.nosidebar #content{ width: auto; border-right: 0; }
53 #main.nosidebar #content{ width: auto; border-right: 0; }
54
54
55 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
55 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
56
56
57 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
57 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
58 #login-form table td {padding: 6px;}
58 #login-form table td {padding: 6px;}
59 #login-form label {font-weight: bold;}
59 #login-form label {font-weight: bold;}
60
60
61 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
61 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
62
62
63 /***** Links *****/
63 /***** Links *****/
64 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
64 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
65 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
65 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
66 a img{ border: 0; }
66 a img{ border: 0; }
67
67
68 /***** Tables *****/
68 /***** Tables *****/
69 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
69 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
70 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
70 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
71 table.list tbody th { padding: 0px; }
71 table.list tbody th { padding: 0px; }
72 table.list td { overflow: hidden; text-overflow: ellipsis; vertical-align: top;}
72 table.list td { overflow: hidden; text-overflow: ellipsis; vertical-align: top;}
73 table.list tbody tr:hover { background-color:#ffffdd; }
73 table.list tbody tr:hover { background-color:#ffffdd; }
74 table td {padding:2px;}
74 table td {padding:2px;}
75 table p {margin:0;}
75 table p {margin:0;}
76 .odd {background-color:#f6f7f8;}
76 .odd {background-color:#f6f7f8;}
77 .even {background-color: #fff;}
77 .even {background-color: #fff;}
78
78
79 .highlight { background-color: #FCFD8D;}
79 .highlight { background-color: #FCFD8D;}
80
80
81 .box{
81 .box{
82 padding:6px;
82 padding:6px;
83 margin-bottom: 10px;
83 margin-bottom: 10px;
84 background-color:#f6f6f6;
84 background-color:#f6f6f6;
85 color:#505050;
85 color:#505050;
86 line-height:1.5em;
86 line-height:1.5em;
87 border: 1px solid #e4e4e4;
87 border: 1px solid #e4e4e4;
88 }
88 }
89
89
90 div.square {
90 div.square {
91 border: 1px solid #999;
91 border: 1px solid #999;
92 float: left;
92 float: left;
93 margin: .3em .4em 0 .4em;
93 margin: .3em .4em 0 .4em;
94 overflow: hidden;
94 overflow: hidden;
95 width: .6em; height: .6em;
95 width: .6em; height: .6em;
96 }
96 }
97
97
98 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px;font-size:0.9em;}
98 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px;font-size:0.9em;}
99 .splitcontentleft{float:left; width:49%;}
99 .splitcontentleft{float:left; width:49%;}
100 .splitcontentright{float:right; width:49%;}
100 .splitcontentright{float:right; width:49%;}
101 form {display: inline;}
101 form {display: inline;}
102 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
102 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
103 fieldset {border: 1px solid #e4e4e4; margin:0;}
103 fieldset {border: 1px solid #e4e4e4; margin:0;}
104 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
104 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
105 textarea.wiki-edit { width: 99%; }
105 textarea.wiki-edit { width: 99%; }
106 li p {margin-top: 0;}
106 li p {margin-top: 0;}
107 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
107 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
108 .autoscroll {overflow-x: auto; padding:1px; width:100%;}
108 .autoscroll {overflow-x: auto; padding:1px; width:100%;}
109
109
110 /***** Tabular forms ******/
110 /***** Tabular forms ******/
111 .tabular p{
111 .tabular p{
112 margin: 0;
112 margin: 0;
113 padding: 5px 0 8px 0;
113 padding: 5px 0 8px 0;
114 padding-left: 180px; /*width of left column containing the label elements*/
114 padding-left: 180px; /*width of left column containing the label elements*/
115 height: 1%;
115 height: 1%;
116 clear:left;
116 clear:left;
117 }
117 }
118
118
119 .tabular label{
119 .tabular label{
120 font-weight: bold;
120 font-weight: bold;
121 float: left;
121 float: left;
122 text-align: right;
122 text-align: right;
123 margin-left: -180px; /*width of left column*/
123 margin-left: -180px; /*width of left column*/
124 width: 175px; /*width of labels. Should be smaller than left column to create some right
124 width: 175px; /*width of labels. Should be smaller than left column to create some right
125 margin*/
125 margin*/
126 }
126 }
127
127
128 #settings .tabular p{ padding-left: 300px; }
128 #settings .tabular p{ padding-left: 300px; }
129 #settings .tabular label{ margin-left: -300px; width: 295px; }
129 #settings .tabular label{ margin-left: -300px; width: 295px; }
130
130
131 .required {color: #bb0000;}
131 .required {color: #bb0000;}
132 .summary {font-style: italic;}
132 .summary {font-style: italic;}
133
133
134 div.attachments p { margin:4px 0 2px 0; }
134 div.attachments p { margin:4px 0 2px 0; }
135
135
136 /***** Issue list ****/
136 /***** Issue list ****/
137 tr.issue { text-align: center; white-space: nowrap; }
137 tr.issue { text-align: center; white-space: nowrap; }
138 tr.issue th.checkbox { width: 15px; }
138 tr.issue th.checkbox { width: 15px; }
139 tr.issue td.subject, tr.issue td.category { white-space: normal; }
139 tr.issue td.subject, tr.issue td.category { white-space: normal; }
140 tr.issue td.subject { text-align: left; }
140 tr.issue td.subject { text-align: left; }
141
141
142 /***** Flash & error messages ****/
142 /***** Flash & error messages ****/
143 #flash div, #errorExplanation, .nodata {
143 #flash div, #errorExplanation, .nodata {
144 padding: 4px 4px 4px 30px;
144 padding: 4px 4px 4px 30px;
145 margin-bottom: 12px;
145 margin-bottom: 12px;
146 font-size: 1.1em;
146 font-size: 1.1em;
147 border: 2px solid;
147 border: 2px solid;
148 }
148 }
149
149
150 #flash div {margin-top: 6px;}
150 #flash div {margin-top: 6px;}
151
151
152 #flash div.error, #errorExplanation {
152 #flash div.error, #errorExplanation {
153 background: url(../images/false.png) 8px 5px no-repeat;
153 background: url(../images/false.png) 8px 5px no-repeat;
154 background-color: #ffe3e3;
154 background-color: #ffe3e3;
155 border-color: #dd0000;
155 border-color: #dd0000;
156 color: #550000;
156 color: #550000;
157 }
157 }
158
158
159 #flash div.notice {
159 #flash div.notice {
160 background: url(../images/true.png) 8px 5px no-repeat;
160 background: url(../images/true.png) 8px 5px no-repeat;
161 background-color: #dfffdf;
161 background-color: #dfffdf;
162 border-color: #9fcf9f;
162 border-color: #9fcf9f;
163 color: #005f00;
163 color: #005f00;
164 }
164 }
165
165
166 .nodata {
166 .nodata {
167 text-align: center;
167 text-align: center;
168 background-color: #FFEBC1;
168 background-color: #FFEBC1;
169 border-color: #FDBF3B;
169 border-color: #FDBF3B;
170 color: #A6750C;
170 color: #A6750C;
171 }
171 }
172
172
173 #errorExplanation ul { font-size: 0.9em;}
173 #errorExplanation ul { font-size: 0.9em;}
174
174
175 /***** Ajax indicator ******/
175 /***** Ajax indicator ******/
176 #ajax-indicator {
176 #ajax-indicator {
177 position: absolute; /* fixed not supported by IE */
177 position: absolute; /* fixed not supported by IE */
178 background-color:#eee;
178 background-color:#eee;
179 border: 1px solid #bbb;
179 border: 1px solid #bbb;
180 top:35%;
180 top:35%;
181 left:40%;
181 left:40%;
182 width:20%;
182 width:20%;
183 font-weight:bold;
183 font-weight:bold;
184 text-align:center;
184 text-align:center;
185 padding:0.6em;
185 padding:0.6em;
186 z-index:100;
186 z-index:100;
187 filter:alpha(opacity=50);
187 filter:alpha(opacity=50);
188 -moz-opacity:0.5;
188 -moz-opacity:0.5;
189 opacity: 0.5;
189 opacity: 0.5;
190 -khtml-opacity: 0.5;
190 -khtml-opacity: 0.5;
191 }
191 }
192
192
193 html>body #ajax-indicator { position: fixed; }
193 html>body #ajax-indicator { position: fixed; }
194
194
195 #ajax-indicator span {
195 #ajax-indicator span {
196 background-position: 0% 40%;
196 background-position: 0% 40%;
197 background-repeat: no-repeat;
197 background-repeat: no-repeat;
198 background-image: url(../images/loading.gif);
198 background-image: url(../images/loading.gif);
199 padding-left: 26px;
199 padding-left: 26px;
200 vertical-align: bottom;
200 vertical-align: bottom;
201 }
201 }
202
202
203 /***** Calendar *****/
203 /***** Calendar *****/
204 table.cal {border-collapse: collapse; width: 100%; margin: 8px 0 6px 0;border: 1px solid #d7d7d7;}
204 table.cal {border-collapse: collapse; width: 100%; margin: 8px 0 6px 0;border: 1px solid #d7d7d7;}
205 table.cal th { background-color:#EEEEEE; padding: 4px; }
205 table.cal th { background-color:#EEEEEE; padding: 4px; }
206 table.cal td {border: 1px solid #d7d7d7;}
206 table.cal td {border: 1px solid #d7d7d7;}
207 table.cal td.today {background:#ffffdd;}
207 table.cal td.today {background:#ffffdd;}
208
208
209 /***** Tooltips ******/
209 /***** Tooltips ******/
210 .tooltip{position:relative;z-index:24;}
210 .tooltip{position:relative;z-index:24;}
211 .tooltip:hover{z-index:25;color:#000;}
211 .tooltip:hover{z-index:25;color:#000;}
212 .tooltip span.tip{display: none; text-align:left;}
212 .tooltip span.tip{display: none; text-align:left;}
213
213
214 div.tooltip:hover span.tip{
214 div.tooltip:hover span.tip{
215 display:block;
215 display:block;
216 position:absolute;
216 position:absolute;
217 top:12px; left:24px; width:270px;
217 top:12px; left:24px; width:270px;
218 border:1px solid #555;
218 border:1px solid #555;
219 background-color:#fff;
219 background-color:#fff;
220 padding: 4px;
220 padding: 4px;
221 font-size: 0.8em;
221 font-size: 0.8em;
222 color:#505050;
222 color:#505050;
223 }
223 }
224
224
225 /***** Progress bar *****/
225 /***** Progress bar *****/
226 .progress {
226 .progress {
227 border: 1px solid #D7D7D7;
227 border: 1px solid #D7D7D7;
228 border-collapse: collapse;
228 border-collapse: collapse;
229 border-spacing: 0pt;
229 border-spacing: 0pt;
230 empty-cells: show;
230 empty-cells: show;
231 padding: 3px;
231 padding: 3px;
232 width: 40em;
232 width: 40em;
233 text-align: center;
233 text-align: center;
234 }
234 }
235
235
236 .progress td { height: 1em; }
236 .progress td { height: 1em; }
237 .progress .closed { background: #BAE0BA none repeat scroll 0%; }
237 .progress .closed { background: #BAE0BA none repeat scroll 0%; }
238 .progress .open { background: #FFF none repeat scroll 0%; }
238 .progress .open { background: #FFF none repeat scroll 0%; }
239
239
240 /***** Tabs *****/
240 /***** Tabs *****/
241 #content .tabs{height: 2.6em;}
241 #content .tabs{height: 2.6em;}
242 #content .tabs ul{margin:0;}
242 #content .tabs ul{margin:0;}
243 #content .tabs ul li{
243 #content .tabs ul li{
244 float:left;
244 float:left;
245 list-style-type:none;
245 list-style-type:none;
246 white-space:nowrap;
246 white-space:nowrap;
247 margin-right:8px;
247 margin-right:8px;
248 background:#fff;
248 background:#fff;
249 }
249 }
250 #content .tabs ul li a{
250 #content .tabs ul li a{
251 display:block;
251 display:block;
252 font-size: 0.9em;
252 font-size: 0.9em;
253 text-decoration:none;
253 text-decoration:none;
254 line-height:1em;
254 line-height:1em;
255 padding:4px;
255 padding:4px;
256 border: 1px solid #c0c0c0;
256 border: 1px solid #c0c0c0;
257 }
257 }
258
258
259 #content .tabs ul li a.selected, #content .tabs ul li a:hover{
259 #content .tabs ul li a.selected, #content .tabs ul li a:hover{
260 background-color: #507AAA;
260 background-color: #507AAA;
261 border: 1px solid #507AAA;
261 border: 1px solid #507AAA;
262 color: #fff;
262 color: #fff;
263 text-decoration:none;
263 text-decoration:none;
264 }
264 }
265
265
266 /***** Diff *****/
266 /***** Diff *****/
267 .diff_out { background: #fcc; }
267 .diff_out { background: #fcc; }
268 .diff_in { background: #cfc; }
268 .diff_in { background: #cfc; }
269
269
270 /***** Wiki *****/
270 /***** Wiki *****/
271 div.wiki table {
271 div.wiki table {
272 border: 1px solid #505050;
272 border: 1px solid #505050;
273 border-collapse: collapse;
273 border-collapse: collapse;
274 }
274 }
275
275
276 div.wiki table, div.wiki td, div.wiki th {
276 div.wiki table, div.wiki td, div.wiki th {
277 border: 1px solid #bbb;
277 border: 1px solid #bbb;
278 padding: 4px;
278 padding: 4px;
279 }
279 }
280
280
281 div.wiki a {
281 div.wiki a {
282 background-position: 0% 60%;
282 background-position: 0% 60%;
283 background-repeat: no-repeat;
283 background-repeat: no-repeat;
284 padding-left: 12px;
284 padding-left: 12px;
285 background-image: url(../images/external.png);
285 background-image: url(../images/external.png);
286 }
286 }
287
287
288 div.wiki a.wiki-page, div.wiki a.issue, div.wiki a.changeset, div.wiki a.email, div.wiki div.toc a {
288 div.wiki a.wiki-page, div.wiki a.issue, div.wiki a.changeset, div.wiki a.email, div.wiki div.toc a {
289 padding-left: 0;
289 padding-left: 0;
290 background-image: none;
290 background-image: none;
291 }
291 }
292
292
293 div.wiki a.new {
293 div.wiki a.new {
294 color: #b73535;
294 color: #b73535;
295 }
295 }
296
296
297 div.wiki pre {
297 div.wiki pre {
298 margin: 1em 1em 1em 1.6em;
298 margin: 1em 1em 1em 1.6em;
299 padding: 2px;
299 padding: 2px;
300 background-color: #fafafa;
300 background-color: #fafafa;
301 border: 1px solid #dadada;
301 border: 1px solid #dadada;
302 width:95%;
302 width:95%;
303 overflow-x: auto;
303 overflow-x: auto;
304 }
304 }
305
305
306 div.wiki div.toc {
306 div.wiki div.toc {
307 background-color: #ffffdd;
307 background-color: #ffffdd;
308 border: 1px solid #e4e4e4;
308 border: 1px solid #e4e4e4;
309 padding: 4px;
309 padding: 4px;
310 line-height: 1.2em;
310 line-height: 1.2em;
311 margin-bottom: 12px;
311 margin-bottom: 12px;
312 margin-right: 12px;
312 margin-right: 12px;
313 float: left;
313 display: table
314 }
314 }
315 * html div.wiki div.toc { width: 50%; } /* IE6 doesn't autosize div */
315
316
316 div.wiki div.toc.right {
317 div.wiki div.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
317 float: right;
318 div.wiki div.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
318 margin-left: 12px;
319 margin-right: 0;
320 }
321
319
322 div.wiki div.toc a {
320 div.wiki div.toc a {
323 display: block;
321 display: block;
324 font-size: 0.9em;
322 font-size: 0.9em;
325 font-weight: normal;
323 font-weight: normal;
326 text-decoration: none;
324 text-decoration: none;
327 color: #606060;
325 color: #606060;
328 }
326 }
329 div.wiki div.toc a:hover { color: #c61a1a; text-decoration: underline;}
327 div.wiki div.toc a:hover { color: #c61a1a; text-decoration: underline;}
330
328
331 div.wiki div.toc a.heading2 { margin-left: 6px; }
329 div.wiki div.toc a.heading2 { margin-left: 6px; }
332 div.wiki div.toc a.heading3 { margin-left: 12px; font-size: 0.8em; }
330 div.wiki div.toc a.heading3 { margin-left: 12px; font-size: 0.8em; }
333
331
334 /***** My page layout *****/
332 /***** My page layout *****/
335 .block-receiver {
333 .block-receiver {
336 border:1px dashed #c0c0c0;
334 border:1px dashed #c0c0c0;
337 margin-bottom: 20px;
335 margin-bottom: 20px;
338 padding: 15px 0 15px 0;
336 padding: 15px 0 15px 0;
339 }
337 }
340
338
341 .mypage-box {
339 .mypage-box {
342 margin:0 0 20px 0;
340 margin:0 0 20px 0;
343 color:#505050;
341 color:#505050;
344 line-height:1.5em;
342 line-height:1.5em;
345 }
343 }
346
344
347 .handle {
345 .handle {
348 cursor: move;
346 cursor: move;
349 }
347 }
350
348
351 a.close-icon {
349 a.close-icon {
352 display:block;
350 display:block;
353 margin-top:3px;
351 margin-top:3px;
354 overflow:hidden;
352 overflow:hidden;
355 width:12px;
353 width:12px;
356 height:12px;
354 height:12px;
357 background-repeat: no-repeat;
355 background-repeat: no-repeat;
358 cursor:pointer;
356 cursor:pointer;
359 background-image:url('../images/close.png');
357 background-image:url('../images/close.png');
360 }
358 }
361
359
362 a.close-icon:hover {
360 a.close-icon:hover {
363 background-image:url('../images/close_hl.png');
361 background-image:url('../images/close_hl.png');
364 }
362 }
365
363
366 /***** Gantt chart *****/
364 /***** Gantt chart *****/
367 .gantt_hdr {
365 .gantt_hdr {
368 position:absolute;
366 position:absolute;
369 top:0;
367 top:0;
370 height:16px;
368 height:16px;
371 border-top: 1px solid #c0c0c0;
369 border-top: 1px solid #c0c0c0;
372 border-bottom: 1px solid #c0c0c0;
370 border-bottom: 1px solid #c0c0c0;
373 border-right: 1px solid #c0c0c0;
371 border-right: 1px solid #c0c0c0;
374 text-align: center;
372 text-align: center;
375 overflow: hidden;
373 overflow: hidden;
376 }
374 }
377
375
378 .task {
376 .task {
379 position: absolute;
377 position: absolute;
380 height:8px;
378 height:8px;
381 font-size:0.8em;
379 font-size:0.8em;
382 color:#888;
380 color:#888;
383 padding:0;
381 padding:0;
384 margin:0;
382 margin:0;
385 line-height:0.8em;
383 line-height:0.8em;
386 }
384 }
387
385
388 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
386 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
389 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
387 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
390 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
388 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
391 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
389 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
392
390
393 /***** Icons *****/
391 /***** Icons *****/
394 .icon {
392 .icon {
395 background-position: 0% 40%;
393 background-position: 0% 40%;
396 background-repeat: no-repeat;
394 background-repeat: no-repeat;
397 padding-left: 20px;
395 padding-left: 20px;
398 padding-top: 2px;
396 padding-top: 2px;
399 padding-bottom: 3px;
397 padding-bottom: 3px;
400 }
398 }
401
399
402 .icon22 {
400 .icon22 {
403 background-position: 0% 40%;
401 background-position: 0% 40%;
404 background-repeat: no-repeat;
402 background-repeat: no-repeat;
405 padding-left: 26px;
403 padding-left: 26px;
406 line-height: 22px;
404 line-height: 22px;
407 vertical-align: middle;
405 vertical-align: middle;
408 }
406 }
409
407
410 .icon-add { background-image: url(../images/add.png); }
408 .icon-add { background-image: url(../images/add.png); }
411 .icon-edit { background-image: url(../images/edit.png); }
409 .icon-edit { background-image: url(../images/edit.png); }
412 .icon-del { background-image: url(../images/delete.png); }
410 .icon-del { background-image: url(../images/delete.png); }
413 .icon-move { background-image: url(../images/move.png); }
411 .icon-move { background-image: url(../images/move.png); }
414 .icon-save { background-image: url(../images/save.png); }
412 .icon-save { background-image: url(../images/save.png); }
415 .icon-cancel { background-image: url(../images/cancel.png); }
413 .icon-cancel { background-image: url(../images/cancel.png); }
416 .icon-pdf { background-image: url(../images/pdf.png); }
414 .icon-pdf { background-image: url(../images/pdf.png); }
417 .icon-csv { background-image: url(../images/csv.png); }
415 .icon-csv { background-image: url(../images/csv.png); }
418 .icon-html { background-image: url(../images/html.png); }
416 .icon-html { background-image: url(../images/html.png); }
419 .icon-image { background-image: url(../images/image.png); }
417 .icon-image { background-image: url(../images/image.png); }
420 .icon-txt { background-image: url(../images/txt.png); }
418 .icon-txt { background-image: url(../images/txt.png); }
421 .icon-file { background-image: url(../images/file.png); }
419 .icon-file { background-image: url(../images/file.png); }
422 .icon-folder { background-image: url(../images/folder.png); }
420 .icon-folder { background-image: url(../images/folder.png); }
423 .icon-package { background-image: url(../images/package.png); }
421 .icon-package { background-image: url(../images/package.png); }
424 .icon-home { background-image: url(../images/home.png); }
422 .icon-home { background-image: url(../images/home.png); }
425 .icon-user { background-image: url(../images/user.png); }
423 .icon-user { background-image: url(../images/user.png); }
426 .icon-mypage { background-image: url(../images/user_page.png); }
424 .icon-mypage { background-image: url(../images/user_page.png); }
427 .icon-admin { background-image: url(../images/admin.png); }
425 .icon-admin { background-image: url(../images/admin.png); }
428 .icon-projects { background-image: url(../images/projects.png); }
426 .icon-projects { background-image: url(../images/projects.png); }
429 .icon-logout { background-image: url(../images/logout.png); }
427 .icon-logout { background-image: url(../images/logout.png); }
430 .icon-help { background-image: url(../images/help.png); }
428 .icon-help { background-image: url(../images/help.png); }
431 .icon-attachment { background-image: url(../images/attachment.png); }
429 .icon-attachment { background-image: url(../images/attachment.png); }
432 .icon-index { background-image: url(../images/index.png); }
430 .icon-index { background-image: url(../images/index.png); }
433 .icon-history { background-image: url(../images/history.png); }
431 .icon-history { background-image: url(../images/history.png); }
434 .icon-feed { background-image: url(../images/feed.png); }
432 .icon-feed { background-image: url(../images/feed.png); }
435 .icon-time { background-image: url(../images/time.png); }
433 .icon-time { background-image: url(../images/time.png); }
436 .icon-stats { background-image: url(../images/stats.png); }
434 .icon-stats { background-image: url(../images/stats.png); }
437 .icon-warning { background-image: url(../images/warning.png); }
435 .icon-warning { background-image: url(../images/warning.png); }
438 .icon-fav { background-image: url(../images/fav.png); }
436 .icon-fav { background-image: url(../images/fav.png); }
439 .icon-fav-off { background-image: url(../images/fav_off.png); }
437 .icon-fav-off { background-image: url(../images/fav_off.png); }
440 .icon-reload { background-image: url(../images/reload.png); }
438 .icon-reload { background-image: url(../images/reload.png); }
441 .icon-lock { background-image: url(../images/locked.png); }
439 .icon-lock { background-image: url(../images/locked.png); }
442 .icon-unlock { background-image: url(../images/unlock.png); }
440 .icon-unlock { background-image: url(../images/unlock.png); }
443 .icon-note { background-image: url(../images/note.png); }
441 .icon-note { background-image: url(../images/note.png); }
444
442
445 .icon22-projects { background-image: url(../images/22x22/projects.png); }
443 .icon22-projects { background-image: url(../images/22x22/projects.png); }
446 .icon22-users { background-image: url(../images/22x22/users.png); }
444 .icon22-users { background-image: url(../images/22x22/users.png); }
447 .icon22-tracker { background-image: url(../images/22x22/tracker.png); }
445 .icon22-tracker { background-image: url(../images/22x22/tracker.png); }
448 .icon22-role { background-image: url(../images/22x22/role.png); }
446 .icon22-role { background-image: url(../images/22x22/role.png); }
449 .icon22-workflow { background-image: url(../images/22x22/workflow.png); }
447 .icon22-workflow { background-image: url(../images/22x22/workflow.png); }
450 .icon22-options { background-image: url(../images/22x22/options.png); }
448 .icon22-options { background-image: url(../images/22x22/options.png); }
451 .icon22-notifications { background-image: url(../images/22x22/notifications.png); }
449 .icon22-notifications { background-image: url(../images/22x22/notifications.png); }
452 .icon22-authent { background-image: url(../images/22x22/authent.png); }
450 .icon22-authent { background-image: url(../images/22x22/authent.png); }
453 .icon22-info { background-image: url(../images/22x22/info.png); }
451 .icon22-info { background-image: url(../images/22x22/info.png); }
454 .icon22-comment { background-image: url(../images/22x22/comment.png); }
452 .icon22-comment { background-image: url(../images/22x22/comment.png); }
455 .icon22-package { background-image: url(../images/22x22/package.png); }
453 .icon22-package { background-image: url(../images/22x22/package.png); }
456 .icon22-settings { background-image: url(../images/22x22/settings.png); }
454 .icon22-settings { background-image: url(../images/22x22/settings.png); }
457 .icon22-plugin { background-image: url(../images/22x22/plugin.png); }
455 .icon22-plugin { background-image: url(../images/22x22/plugin.png); }
458
456
459 /***** Media print specific styles *****/
457 /***** Media print specific styles *****/
460 @media print {
458 @media print {
461 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual { display:none; }
459 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual { display:none; }
462 #main { background: #fff; }
460 #main { background: #fff; }
463 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; }
461 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; }
464 }
462 }
General Comments 0
You need to be logged in to leave comments. Login now