##// END OF EJS Templates
hgweb: make followlines button absolutely positioned...
av6 -
r37510:8d05938d default
parent child Browse files
Show More
@@ -1,395 +1,388 b''
1 1 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
2 2 a { color:#0000cc; }
3 3 a:hover, a:visited, a:active { color:#880000; }
4 4 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
5 5 div.page_header a:visited { color:#0000cc; }
6 6 div.page_header a:hover { color:#880000; }
7 7 div.page_nav {
8 8 padding:8px;
9 9 display: flex;
10 10 justify-content: space-between;
11 11 align-items: center;
12 12 }
13 13 div.page_nav a:visited { color:#0000cc; }
14 14 div.extra_nav {
15 15 padding: 8px;
16 16 }
17 17 div.extra_nav a:visited {
18 18 color: #0000cc;
19 19 }
20 20 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
21 21 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
22 22 div.page_footer_text { float:left; color:#555555; font-style:italic; }
23 23 div.page_body { padding:8px; }
24 24 div.title, a.title {
25 25 display:block; padding:6px 8px;
26 26 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
27 27 }
28 28 a.title:hover { background-color: #d9d8d1; }
29 29 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
30 30 div.log_body { padding:8px 8px 8px 150px; }
31 31 .age { white-space:nowrap; }
32 32 a.title span.age { position:relative; float:left; width:142px; font-style:italic; }
33 33 div.log_link {
34 34 padding:0px 8px;
35 35 font-size:10px; font-family:sans-serif; font-style:normal;
36 36 position:relative; float:left; width:136px;
37 37 }
38 38 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
39 39 a.list { text-decoration:none; color:#000000; }
40 40 a.list:hover { text-decoration:underline; color:#880000; }
41 41 table { padding:8px 4px; }
42 42 th { padding:2px 5px; font-size:12px; text-align:left; }
43 43 .parity0 { background-color:#ffffff; }
44 44 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
45 45 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
46 46 pre.sourcelines.stripes > :nth-child(4n+2):hover,
47 47 pre.sourcelines.stripes > :nth-child(4n+4):hover,
48 48 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
49 49 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
50 50 td { padding:2px 5px; font-size:12px; vertical-align:top; }
51 51 td.closed { background-color: #99f; }
52 52 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
53 53 td.indexlinks { white-space: nowrap; }
54 54 td.indexlinks a {
55 55 padding: 2px 5px; line-height: 10px;
56 56 border: 1px solid;
57 57 color: #ffffff; background-color: #7777bb;
58 58 border-color: #aaaadd #333366 #333366 #aaaadd;
59 59 font-weight: bold; text-align: center; text-decoration: none;
60 60 font-size: 10px;
61 61 }
62 62 td.indexlinks a:hover { background-color: #6666aa; }
63 63 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
64 64
65 65 .search {
66 66 margin-right: 8px;
67 67 }
68 68
69 69 div#hint {
70 70 position: absolute;
71 71 display: none;
72 72 width: 250px;
73 73 padding: 5px;
74 74 background: #ffc;
75 75 border: 1px solid yellow;
76 76 border-radius: 5px;
77 77 }
78 78
79 79 #searchform:hover div#hint { display: block; }
80 80
81 81 tr.thisrev a { color:#999999; text-decoration: none; }
82 82 tr.thisrev pre { color:#009900; }
83 83 td.annotate {
84 84 white-space: nowrap;
85 85 }
86 86 div.annotate-info {
87 87 z-index: 5;
88 88 display: none;
89 89 position: absolute;
90 90 background-color: #FFFFFF;
91 91 border: 1px solid #d9d8d1;
92 92 text-align: left;
93 93 color: #000000;
94 94 padding: 5px;
95 95 }
96 96 div.annotate-info a { color: #0000FF; text-decoration: underline; }
97 97 td.annotate:hover div.annotate-info { display: inline; }
98 98
99 99 #diffopts-form {
100 100 padding-left: 8px;
101 101 display: none;
102 102 }
103 103
104 104 .linenr { color:#999999; text-decoration:none }
105 105 div.rss_logo { float: right; white-space: nowrap; }
106 106 div.rss_logo a {
107 107 padding:3px 6px; line-height:10px;
108 108 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
109 109 color:#ffffff; background-color:#ff6600;
110 110 font-weight:bold; font-family:sans-serif; font-size:10px;
111 111 text-align:center; text-decoration:none;
112 112 }
113 113 div.rss_logo a:hover { background-color:#ee5500; }
114 114 pre { margin: 0; }
115 115 span.logtags span {
116 116 padding: 0px 4px;
117 117 font-size: 10px;
118 118 font-weight: normal;
119 119 border: 1px solid;
120 120 background-color: #ffaaff;
121 121 border-color: #ffccff #ff00ee #ff00ee #ffccff;
122 122 }
123 123 span.logtags span.phasetag {
124 124 background-color: #dfafff;
125 125 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
126 126 }
127 127 span.logtags span.obsoletetag {
128 128 background-color: #dddddd;
129 129 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
130 130 }
131 131 span.logtags span.instabilitytag {
132 132 background-color: #ffb1c0;
133 133 border-color: #ffbbc8 #ff4476 #ff4476 #ffbbc8;
134 134 }
135 135 span.logtags span.tagtag {
136 136 background-color: #ffffaa;
137 137 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
138 138 }
139 139 span.logtags span.branchtag {
140 140 background-color: #aaffaa;
141 141 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
142 142 }
143 143 span.logtags span.inbranchtag {
144 144 background-color: #d5dde6;
145 145 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
146 146 }
147 147 span.logtags span.bookmarktag {
148 148 background-color: #afdffa;
149 149 border-color: #ccecff #46ace6 #46ace6 #ccecff;
150 150 }
151 151 span.difflineplus { color:#008800; }
152 152 span.difflineminus { color:#cc0000; }
153 153 span.difflineat { color:#990099; }
154 154 div.diffblocks { counter-reset: lineno; }
155 155 div.diffblock { counter-increment: lineno; }
156 156 pre.sourcelines { position: relative; counter-reset: lineno; }
157 157 pre.sourcelines > span {
158 158 display: inline-block;
159 159 box-sizing: border-box;
160 160 width: 100%;
161 161 padding: 0 0 0 5em;
162 162 counter-increment: lineno;
163 163 vertical-align: top;
164 164 }
165 165 pre.sourcelines > span:before {
166 166 -moz-user-select: -moz-none;
167 167 -khtml-user-select: none;
168 168 -webkit-user-select: none;
169 169 -ms-user-select: none;
170 170 user-select: none;
171 171 display: inline-block;
172 172 margin-left: -6em;
173 173 width: 4em;
174 174 color: #999;
175 175 text-align: right;
176 176 content: counters(lineno,".");
177 177 float: left;
178 178 }
179 179 pre.sourcelines > a {
180 180 display: inline-block;
181 181 position: absolute;
182 182 left: 0px;
183 183 width: 4em;
184 184 height: 1em;
185 185 }
186 186 tr:target td,
187 187 pre.sourcelines > span:target,
188 188 pre.sourcelines.stripes > span:target {
189 189 background-color: #bfdfff;
190 190 }
191 191
192 192 .description {
193 193 font-family: monospace;
194 194 white-space: pre;
195 195 }
196 196
197 197 /* Followlines */
198 198 tbody.sourcelines > tr.followlines-selected,
199 199 pre.sourcelines > span.followlines-selected {
200 200 background-color: #99C7E9 !important;
201 201 }
202 202
203 203 div#followlines {
204 204 background-color: #FFF;
205 205 border: 1px solid #d9d8d1;
206 206 padding: 5px;
207 207 position: fixed;
208 208 }
209 209
210 210 div.followlines-cancel {
211 211 text-align: right;
212 212 }
213 213
214 214 div.followlines-cancel > button {
215 215 line-height: 80%;
216 216 padding: 0;
217 217 border: 0;
218 218 border-radius: 2px;
219 219 background-color: inherit;
220 220 font-weight: bold;
221 221 }
222 222
223 223 div.followlines-cancel > button:hover {
224 224 color: #FFFFFF;
225 225 background-color: #CF1F1F;
226 226 }
227 227
228 228 div.followlines-link {
229 229 margin: 2px;
230 230 margin-top: 4px;
231 231 font-family: sans-serif;
232 232 }
233 233
234 234 .btn-followlines {
235 position: absolute;
235 236 display: none;
236 237 cursor: pointer;
237 238 box-sizing: content-box;
238 239 font-size: 11px;
239 240 width: 13px;
240 241 height: 13px;
241 242 border-radius: 3px;
242 243 margin: 0px;
243 244 margin-top: -2px;
244 245 padding: 0px;
245 246 background-color: #E5FDE5;
246 247 border: 1px solid #9BC19B;
247 248 font-family: monospace;
248 249 text-align: center;
249 250 line-height: 5px;
250 251 }
251 252
252 tr .btn-followlines {
253 position: absolute;
254 }
255
256 span .btn-followlines {
257 float: left;
258 }
259
260 253 span.followlines-select .btn-followlines {
261 254 margin-left: -1.6em;
262 255 }
263 256
264 257 .btn-followlines:hover {
265 258 transform: scale(1.1, 1.1);
266 259 }
267 260
268 261 .btn-followlines .followlines-plus {
269 262 color: green;
270 263 }
271 264
272 265 .btn-followlines .followlines-minus {
273 266 color: red;
274 267 }
275 268
276 269 .btn-followlines-end {
277 270 background-color: #ffdcdc;
278 271 }
279 272
280 273 .sourcelines tr:hover .btn-followlines,
281 274 .sourcelines span.followlines-select:hover > .btn-followlines {
282 275 display: inline;
283 276 }
284 277
285 278 .btn-followlines-hidden,
286 279 .sourcelines tr:hover .btn-followlines-hidden {
287 280 display: none;
288 281 }
289 282
290 283 /* Graph */
291 284 div#wrapper {
292 285 position: relative;
293 286 margin: 0;
294 287 padding: 0;
295 288 margin-top: 3px;
296 289 }
297 290
298 291 canvas {
299 292 position: absolute;
300 293 z-index: 5;
301 294 top: -0.9em;
302 295 margin: 0;
303 296 }
304 297
305 298 ul#graphnodes {
306 299 list-style: none inside none;
307 300 padding: 0;
308 301 margin: 0;
309 302 }
310 303
311 304 ul#graphnodes li {
312 305 position: relative;
313 306 height: 37px;
314 307 overflow: visible;
315 308 padding-top: 2px;
316 309 }
317 310
318 311 ul#graphnodes li .fg {
319 312 position: absolute;
320 313 z-index: 10;
321 314 }
322 315
323 316 ul#graphnodes li .info {
324 317 font-size: 100%;
325 318 font-style: italic;
326 319 }
327 320
328 321 /* Comparison */
329 322 .legend {
330 323 padding: 1.5% 0 1.5% 0;
331 324 }
332 325
333 326 .legendinfo {
334 327 border: 1px solid #d9d8d1;
335 328 font-size: 80%;
336 329 text-align: center;
337 330 padding: 0.5%;
338 331 }
339 332
340 333 .equal {
341 334 background-color: #ffffff;
342 335 }
343 336
344 337 .delete {
345 338 background-color: #faa;
346 339 color: #333;
347 340 }
348 341
349 342 .insert {
350 343 background-color: #ffa;
351 344 }
352 345
353 346 .replace {
354 347 background-color: #e8e8e8;
355 348 }
356 349
357 350 .comparison {
358 351 overflow-x: auto;
359 352 }
360 353
361 354 .header th {
362 355 text-align: center;
363 356 }
364 357
365 358 .block {
366 359 border-top: 1px solid #d9d8d1;
367 360 }
368 361
369 362 .scroll-loading {
370 363 -webkit-animation: change_color 1s linear 0s infinite alternate;
371 364 -moz-animation: change_color 1s linear 0s infinite alternate;
372 365 -o-animation: change_color 1s linear 0s infinite alternate;
373 366 animation: change_color 1s linear 0s infinite alternate;
374 367 }
375 368
376 369 @-webkit-keyframes change_color {
377 370 from { background-color: #A0CEFF; } to { }
378 371 }
379 372 @-moz-keyframes change_color {
380 373 from { background-color: #A0CEFF; } to { }
381 374 }
382 375 @-o-keyframes change_color {
383 376 from { background-color: #A0CEFF; } to { }
384 377 }
385 378 @keyframes change_color {
386 379 from { background-color: #A0CEFF; } to { }
387 380 }
388 381
389 382 .scroll-loading-error {
390 383 background-color: #FFCCCC !important;
391 384 }
392 385
393 386 #doc {
394 387 margin: 0 8px;
395 388 }
@@ -1,549 +1,542 b''
1 1 body {
2 2 margin: 0;
3 3 padding: 0;
4 4 background: white;
5 5 color: black;
6 6 font-family: sans-serif;
7 7 }
8 8
9 9 .container {
10 10 padding-left: 115px;
11 11 }
12 12
13 13 .main {
14 14 position: relative;
15 15 background: white;
16 16 padding: 2em 2em 2em 0;
17 17 }
18 18
19 19 #.main {
20 20 width: 98%;
21 21 }
22 22
23 23 .overflow {
24 24 width: 100%;
25 25 overflow: auto;
26 26 }
27 27
28 28 .menu {
29 29 width: 90px;
30 30 margin: 0;
31 31 font-size: 80%;
32 32 text-align: left;
33 33 position: absolute;
34 34 top: 20px;
35 35 left: 20px;
36 36 right: auto;
37 37 }
38 38
39 39 .menu ul {
40 40 list-style: none;
41 41 padding: 0;
42 42 margin: 10px 0 0 0;
43 43 border-left: 2px solid #999;
44 44 }
45 45
46 46 .menu li {
47 47 margin-bottom: 3px;
48 48 padding: 2px 4px;
49 49 background: white;
50 50 color: black;
51 51 font-weight: normal;
52 52 }
53 53
54 54 .menu li.active {
55 55 font-weight: bold;
56 56 }
57 57
58 58 .menu img {
59 59 width: 75px;
60 60 height: 90px;
61 61 border: 0;
62 62 }
63 63
64 64 div.atom-logo {
65 65 margin-top: 10px;
66 66 }
67 67
68 68 .atom-logo img{
69 69 width: 14px;
70 70 height: 14px;
71 71 border: 0;
72 72 }
73 73
74 74 .menu a { color: black; display: block; }
75 75
76 76 .search {
77 77 position: absolute;
78 78 top: .7em;
79 79 right: 2em;
80 80 }
81 81
82 82 form.search div#hint {
83 83 display: none;
84 84 position: absolute;
85 85 top: 40px;
86 86 right: 0px;
87 87 width: 190px;
88 88 padding: 5px;
89 89 background: #ffc;
90 90 font-size: 70%;
91 91 border: 1px solid yellow;
92 92 border-radius: 5px;
93 93 }
94 94
95 95 form.search:hover div#hint { display: block; }
96 96
97 97 a { text-decoration:none; }
98 98 .age { white-space:nowrap; }
99 99 .date { white-space:nowrap; }
100 100 .indexlinks { white-space:nowrap; }
101 101 .parity0,
102 102 .stripes4 > :nth-child(4n+1),
103 103 .stripes2 > :nth-child(2n+1) { background-color: #f0f0f0; }
104 104 .parity1,
105 105 .stripes4 > :nth-child(4n+3),
106 106 .stripes2 > :nth-child(2n+2) { background-color: white; }
107 107 .plusline { color: green; }
108 108 .minusline { color: #dc143c; } /* crimson */
109 109 .atline { color: purple; }
110 110
111 111 .diffstat-table {
112 112 margin-top: 1em;
113 113 }
114 114 .diffstat-file {
115 115 white-space: nowrap;
116 116 font-size: 90%;
117 117 }
118 118 .diffstat-total {
119 119 white-space: nowrap;
120 120 font-size: 90%;
121 121 }
122 122 .diffstat-graph {
123 123 width: 100%;
124 124 }
125 125 .diffstat-add {
126 126 background-color: green;
127 127 float: left;
128 128 }
129 129 .diffstat-remove {
130 130 background-color: red;
131 131 float: left;
132 132 }
133 133
134 134 .navigate {
135 135 text-align: right;
136 136 font-size: 60%;
137 137 margin: 1em 0;
138 138 }
139 139
140 140 .phase {
141 141 color: #999;
142 142 font-size: 70%;
143 143 border-bottom: 1px dotted #999;
144 144 font-weight: normal;
145 145 margin-left: .5em;
146 146 vertical-align: baseline;
147 147 }
148 148
149 149 .obsolete {
150 150 color: #999;
151 151 font-size: 70%;
152 152 border-bottom: 1px dashed #999;
153 153 font-weight: normal;
154 154 margin-left: .5em;
155 155 vertical-align: baseline;
156 156 }
157 157
158 158 .instability {
159 159 color: #000;
160 160 font-size: 70%;
161 161 border-bottom: 1px solid #000;
162 162 font-weight: normal;
163 163 margin-left: .5em;
164 164 vertical-align: baseline;
165 165 }
166 166
167 167 .tag {
168 168 color: #999;
169 169 font-size: 70%;
170 170 font-weight: normal;
171 171 margin-left: .5em;
172 172 vertical-align: baseline;
173 173 }
174 174
175 175 .branchhead {
176 176 color: #000;
177 177 font-size: 80%;
178 178 font-weight: normal;
179 179 margin-left: .5em;
180 180 vertical-align: baseline;
181 181 }
182 182
183 183 ul#graphnodes .branchhead {
184 184 font-size: 75%;
185 185 }
186 186
187 187 .branchname {
188 188 color: #000;
189 189 font-size: 60%;
190 190 font-weight: normal;
191 191 margin-left: .5em;
192 192 vertical-align: baseline;
193 193 }
194 194
195 195 /* Common */
196 196 pre { margin: 0; }
197 197
198 198 h2 { font-size: 120%; border-bottom: 1px solid #999; }
199 199 h2 a { color: #000; }
200 200 h3 {
201 201 margin-top: +.7em;
202 202 font-size: 100%;
203 203 }
204 204
205 205 /* log and tags tables */
206 206 .bigtable {
207 207 border-bottom: 1px solid #999;
208 208 border-collapse: collapse;
209 209 font-size: 90%;
210 210 width: 100%;
211 211 font-weight: normal;
212 212 text-align: left;
213 213 }
214 214
215 215 .bigtable td {
216 216 padding: 1px 4px;
217 217 vertical-align: top;
218 218 }
219 219
220 220 .bigtable th {
221 221 padding: 1px 4px;
222 222 border-bottom: 1px solid #999;
223 223 }
224 224 .bigtable tr { border: none; }
225 225 .bigtable .age { width: 7em; }
226 226 .bigtable .author { width: 15em; }
227 227 .bigtable .description { }
228 228 .bigtable .description .base { font-size: 70%; float: right; line-height: 1.66; }
229 229 .bigtable .node { width: 5em; font-family: monospace;}
230 230 .bigtable .permissions { width: 8em; text-align: left;}
231 231 .bigtable .size { width: 5em; text-align: right; }
232 232 .bigtable .annotate { text-align: right; }
233 233 .bigtable td.annotate { font-size: smaller; }
234 234 .bigtable td.source { font-size: inherit; }
235 235 tr.thisrev a { color:#999999; text-decoration: none; }
236 236 tr.thisrev td.source { color:#009900; }
237 237 td.annotate {
238 238 white-space: nowrap;
239 239 }
240 240 div.annotate-info {
241 241 z-index: 5;
242 242 display: none;
243 243 position: absolute;
244 244 background-color: #FFFFFF;
245 245 border: 1px solid #999;
246 246 text-align: left;
247 247 color: #000000;
248 248 padding: 5px;
249 249 }
250 250 div.annotate-info a { color: #0000FF; }
251 251 td.annotate:hover div.annotate-info { display: inline; }
252 252
253 253 #diffopts-form {
254 254 font-size: smaller;
255 255 color: #424242;
256 256 padding-bottom: 10px;
257 257 display: none;
258 258 }
259 259
260 260 .source, .sourcefirst {
261 261 font-family: monospace;
262 262 white-space: pre;
263 263 padding: 1px 4px;
264 264 font-size: 90%;
265 265 }
266 266 .sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
267 267 .source a { color: #999; font-size: smaller; font-family: monospace;}
268 268 .bottomline { border-bottom: 1px solid #999; }
269 269
270 270 .sourcelines {
271 271 font-size: 90%;
272 272 position: relative;
273 273 counter-reset: lineno;
274 274 }
275 275
276 276 .wrap > span {
277 277 white-space: pre-wrap;
278 278 }
279 279
280 280 .linewraptoggle {
281 281 float: right;
282 282 }
283 283
284 284 .diffblocks { counter-reset: lineno; }
285 285 .diffblocks > div { counter-increment: lineno; }
286 286
287 287 .sourcelines > span {
288 288 display: inline-block;
289 289 box-sizing: border-box;
290 290 width: 100%;
291 291 padding: 1px 0px 1px 5em;
292 292 counter-increment: lineno;
293 293 }
294 294
295 295 .sourcelines > span:before {
296 296 -moz-user-select: -moz-none;
297 297 -khtml-user-select: none;
298 298 -webkit-user-select: none;
299 299 -ms-user-select: none;
300 300 user-select: none;
301 301 display: inline-block;
302 302 margin-left: -6em;
303 303 width: 4em;
304 304 font-size: smaller;
305 305 color: #999;
306 306 text-align: right;
307 307 content: counters(lineno, ".");
308 308 float: left;
309 309 }
310 310
311 311 .sourcelines > span:target, tr:target td {
312 312 background-color: #bfdfff;
313 313 }
314 314
315 315 /* Followlines */
316 316 tbody.sourcelines > tr.followlines-selected,
317 317 pre.sourcelines > span.followlines-selected {
318 318 background-color: #99C7E9;
319 319 }
320 320
321 321 div#followlines {
322 322 background-color: #FFF;
323 323 border: 1px solid #999;
324 324 padding: 5px;
325 325 position: fixed;
326 326 }
327 327
328 328 div.followlines-cancel {
329 329 text-align: right;
330 330 }
331 331
332 332 div.followlines-cancel > button {
333 333 line-height: 80%;
334 334 padding: 0;
335 335 border: 0;
336 336 border-radius: 2px;
337 337 background-color: inherit;
338 338 font-weight: bold;
339 339 }
340 340
341 341 div.followlines-cancel > button:hover {
342 342 color: #FFFFFF;
343 343 background-color: #CF1F1F;
344 344 }
345 345
346 346 div.followlines-link {
347 347 margin: 2px;
348 348 margin-top: 4px;
349 349 font-family: sans-serif;
350 350 }
351 351
352 352 .btn-followlines {
353 position: absolute;
353 354 display: none;
354 355 cursor: pointer;
355 356 box-sizing: content-box;
356 357 font-size: 12px;
357 358 width: 13px;
358 359 height: 13px;
359 360 border-radius: 3px;
360 361 margin: 0px;
361 362 margin-top: -2px;
362 363 padding: 0px;
363 364 background-color: #E5FDE5;
364 365 border: 1px solid #9BC19B;
365 366 font-family: monospace;
366 367 text-align: center;
367 368 line-height: 5px;
368 369 }
369 370
370 tr .btn-followlines {
371 position: absolute;
372 }
373
374 span .btn-followlines {
375 float: left;
376 }
377
378 371 span.followlines-select .btn-followlines {
379 372 margin-left: -1.5em;
380 373 }
381 374
382 375 .btn-followlines:hover {
383 376 transform: scale(1.2, 1.2);
384 377 }
385 378
386 379 .btn-followlines .followlines-plus {
387 380 color: green;
388 381 }
389 382
390 383 .btn-followlines .followlines-minus {
391 384 color: red;
392 385 }
393 386
394 387 .btn-followlines-end {
395 388 background-color: #ffdcdc;
396 389 }
397 390
398 391 .sourcelines tr:hover .btn-followlines,
399 392 .sourcelines span.followlines-select:hover > .btn-followlines {
400 393 display: inline;
401 394 }
402 395
403 396 .btn-followlines-hidden,
404 397 .sourcelines tr:hover .btn-followlines-hidden {
405 398 display: none;
406 399 }
407 400
408 401 .sourcelines > a {
409 402 display: inline-block;
410 403 position: absolute;
411 404 left: 0px;
412 405 width: 4em;
413 406 height: 1em;
414 407 }
415 408
416 409 .fileline { font-family: monospace; }
417 410 .fileline img { border: 0; }
418 411
419 412 .tagEntry .closed { color: #99f; }
420 413
421 414 /* Changeset entry */
422 415 #changesetEntry {
423 416 border-collapse: collapse;
424 417 font-size: 90%;
425 418 width: 100%;
426 419 margin-bottom: 1em;
427 420 }
428 421
429 422 #changesetEntry th {
430 423 padding: 1px 4px;
431 424 width: 4em;
432 425 text-align: right;
433 426 font-weight: normal;
434 427 color: #999;
435 428 vertical-align: top;
436 429 }
437 430
438 431 div.description {
439 432 border-left: 2px solid #999;
440 433 margin: 1em 0 1em 0;
441 434 padding: .3em;
442 435 white-space: pre;
443 436 font-family: monospace;
444 437 }
445 438
446 439 /* Graph */
447 440 div#wrapper {
448 441 position: relative;
449 442 border-top: 1px solid black;
450 443 border-bottom: 1px solid black;
451 444 margin: 0;
452 445 padding: 0;
453 446 }
454 447
455 448 canvas {
456 449 position: absolute;
457 450 z-index: 5;
458 451 top: -0.7em;
459 452 margin: 0;
460 453 }
461 454
462 455 ul#graphnodes {
463 456 list-style: none inside none;
464 457 padding: 0;
465 458 margin: 0;
466 459 }
467 460
468 461 ul#graphnodes li {
469 462 height: 39px;
470 463 overflow: visible;
471 464 }
472 465
473 466 ul#graphnodes li .fg {
474 467 position: absolute;
475 468 z-index: 10;
476 469 }
477 470
478 471 ul#graphnodes li .info {
479 472 font-size: 70%;
480 473 }
481 474
482 475 /* Comparison */
483 476 .legend {
484 477 padding: 1.5% 0 1.5% 0;
485 478 }
486 479
487 480 .legendinfo {
488 481 border: 1px solid #999;
489 482 font-size: 80%;
490 483 text-align: center;
491 484 padding: 0.5%;
492 485 }
493 486
494 487 .equal {
495 488 background-color: #ffffff;
496 489 }
497 490
498 491 .delete {
499 492 background-color: #faa;
500 493 color: #333;
501 494 }
502 495
503 496 .insert {
504 497 background-color: #ffa;
505 498 }
506 499
507 500 .replace {
508 501 background-color: #e8e8e8;
509 502 }
510 503
511 504 .header {
512 505 text-align: center;
513 506 }
514 507
515 508 .block {
516 509 border-top: 1px solid #999;
517 510 }
518 511
519 512 .breadcrumb {
520 513 color: gray;
521 514 }
522 515
523 516 .breadcrumb a {
524 517 color: blue;
525 518 }
526 519
527 520 .scroll-loading {
528 521 -webkit-animation: change_color 1s linear 0s infinite alternate;
529 522 -moz-animation: change_color 1s linear 0s infinite alternate;
530 523 -o-animation: change_color 1s linear 0s infinite alternate;
531 524 animation: change_color 1s linear 0s infinite alternate;
532 525 }
533 526
534 527 @-webkit-keyframes change_color {
535 528 from { background-color: #A0CEFF; } to { }
536 529 }
537 530 @-moz-keyframes change_color {
538 531 from { background-color: #A0CEFF; } to { }
539 532 }
540 533 @-o-keyframes change_color {
541 534 from { background-color: #A0CEFF; } to { }
542 535 }
543 536 @keyframes change_color {
544 537 from { background-color: #A0CEFF; } to { }
545 538 }
546 539
547 540 .scroll-loading-error {
548 541 background-color: #FFCCCC !important;
549 542 }
@@ -1,885 +1,878 b''
1 1 #require serve
2 2
3 3 Some tests for hgweb. Tests static files, plain files and different 404's.
4 4
5 5 $ hg init test
6 6 $ cd test
7 7 $ mkdir da
8 8 $ echo foo > da/foo
9 9 $ echo foo > foo
10 10 $ hg ci -Ambase
11 11 adding da/foo
12 12 adding foo
13 13 $ hg bookmark -r0 '@'
14 14 $ hg bookmark -r0 'a b c'
15 15 $ hg bookmark -r0 'd/e/f'
16 16 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
17 17 $ cat hg.pid >> $DAEMON_PIDS
18 18
19 19 manifest
20 20
21 21 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=raw')
22 22 200 Script output follows
23 23
24 24
25 25 drwxr-xr-x da
26 26 -rw-r--r-- 4 foo
27 27
28 28
29 29 $ (get-with-headers.py localhost:$HGPORT 'file/tip/da?style=raw')
30 30 200 Script output follows
31 31
32 32
33 33 -rw-r--r-- 4 foo
34 34
35 35
36 36
37 37 plain file
38 38
39 39 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?style=raw'
40 40 200 Script output follows
41 41
42 42 foo
43 43
44 44 should give a 404 - static file that does not exist
45 45
46 46 $ get-with-headers.py localhost:$HGPORT 'static/bogus'
47 47 404 Not Found
48 48
49 49 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
50 50 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
51 51 <head>
52 52 <link rel="icon" href="/static/hgicon.png" type="image/png" />
53 53 <meta name="robots" content="index, nofollow" />
54 54 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
55 55 <script type="text/javascript" src="/static/mercurial.js"></script>
56 56
57 57 <title>test: error</title>
58 58 </head>
59 59 <body>
60 60
61 61 <div class="container">
62 62 <div class="menu">
63 63 <div class="logo">
64 64 <a href="https://mercurial-scm.org/">
65 65 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
66 66 </div>
67 67 <ul>
68 68 <li><a href="/shortlog">log</a></li>
69 69 <li><a href="/graph">graph</a></li>
70 70 <li><a href="/tags">tags</a></li>
71 71 <li><a href="/bookmarks">bookmarks</a></li>
72 72 <li><a href="/branches">branches</a></li>
73 73 </ul>
74 74 <ul>
75 75 <li><a href="/help">help</a></li>
76 76 </ul>
77 77 </div>
78 78
79 79 <div class="main">
80 80
81 81 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
82 82 <h3>error</h3>
83 83
84 84
85 85 <form class="search" action="/log">
86 86
87 87 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
88 88 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
89 89 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
90 90 </form>
91 91
92 92 <div class="description">
93 93 <p>
94 94 An error occurred while processing your request:
95 95 </p>
96 96 <p>
97 97 Not Found
98 98 </p>
99 99 </div>
100 100 </div>
101 101 </div>
102 102
103 103
104 104
105 105 </body>
106 106 </html>
107 107
108 108 [1]
109 109
110 110 should give a 404 - bad revision
111 111
112 112 $ get-with-headers.py localhost:$HGPORT 'file/spam/foo?style=raw'
113 113 404 Not Found
114 114
115 115
116 116 error: revision not found: spam
117 117 [1]
118 118
119 119 should give a 400 - bad command
120 120
121 121 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?cmd=spam&style=raw'
122 122 400* (glob)
123 123
124 124
125 125 error: no such method: spam
126 126 [1]
127 127
128 128 $ get-with-headers.py --headeronly localhost:$HGPORT '?cmd=spam'
129 129 400 no such method: spam
130 130 [1]
131 131
132 132 should give a 400 - bad command as a part of url path (issue4071)
133 133
134 134 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam'
135 135 400 no such method: spam
136 136 [1]
137 137
138 138 $ get-with-headers.py --headeronly localhost:$HGPORT 'raw-spam'
139 139 400 no such method: spam
140 140 [1]
141 141
142 142 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam/tip/foo'
143 143 400 no such method: spam
144 144 [1]
145 145
146 146 should give a 404 - file does not exist
147 147
148 148 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork?style=raw'
149 149 404 Not Found
150 150
151 151
152 152 error: bork@2ef0ac749a14: not found in manifest
153 153 [1]
154 154 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork'
155 155 404 Not Found
156 156
157 157 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
158 158 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
159 159 <head>
160 160 <link rel="icon" href="/static/hgicon.png" type="image/png" />
161 161 <meta name="robots" content="index, nofollow" />
162 162 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
163 163 <script type="text/javascript" src="/static/mercurial.js"></script>
164 164
165 165 <title>test: error</title>
166 166 </head>
167 167 <body>
168 168
169 169 <div class="container">
170 170 <div class="menu">
171 171 <div class="logo">
172 172 <a href="https://mercurial-scm.org/">
173 173 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
174 174 </div>
175 175 <ul>
176 176 <li><a href="/shortlog">log</a></li>
177 177 <li><a href="/graph">graph</a></li>
178 178 <li><a href="/tags">tags</a></li>
179 179 <li><a href="/bookmarks">bookmarks</a></li>
180 180 <li><a href="/branches">branches</a></li>
181 181 </ul>
182 182 <ul>
183 183 <li><a href="/help">help</a></li>
184 184 </ul>
185 185 </div>
186 186
187 187 <div class="main">
188 188
189 189 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
190 190 <h3>error</h3>
191 191
192 192
193 193 <form class="search" action="/log">
194 194
195 195 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
196 196 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
197 197 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
198 198 </form>
199 199
200 200 <div class="description">
201 201 <p>
202 202 An error occurred while processing your request:
203 203 </p>
204 204 <p>
205 205 bork@2ef0ac749a14: not found in manifest
206 206 </p>
207 207 </div>
208 208 </div>
209 209 </div>
210 210
211 211
212 212
213 213 </body>
214 214 </html>
215 215
216 216 [1]
217 217 $ get-with-headers.py localhost:$HGPORT 'diff/tip/bork?style=raw'
218 218 404 Not Found
219 219
220 220
221 221 error: bork@2ef0ac749a14: not found in manifest
222 222 [1]
223 223
224 224 try bad style
225 225
226 226 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=foobar')
227 227 200 Script output follows
228 228
229 229 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
230 230 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
231 231 <head>
232 232 <link rel="icon" href="/static/hgicon.png" type="image/png" />
233 233 <meta name="robots" content="index, nofollow" />
234 234 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
235 235 <script type="text/javascript" src="/static/mercurial.js"></script>
236 236
237 237 <title>test: 2ef0ac749a14 /</title>
238 238 </head>
239 239 <body>
240 240
241 241 <div class="container">
242 242 <div class="menu">
243 243 <div class="logo">
244 244 <a href="https://mercurial-scm.org/">
245 245 <img src="/static/hglogo.png" alt="mercurial" /></a>
246 246 </div>
247 247 <ul>
248 248 <li><a href="/shortlog/tip">log</a></li>
249 249 <li><a href="/graph/tip">graph</a></li>
250 250 <li><a href="/tags">tags</a></li>
251 251 <li><a href="/bookmarks">bookmarks</a></li>
252 252 <li><a href="/branches">branches</a></li>
253 253 </ul>
254 254 <ul>
255 255 <li><a href="/rev/tip">changeset</a></li>
256 256 <li class="active">browse</li>
257 257 </ul>
258 258 <ul>
259 259
260 260 </ul>
261 261 <ul>
262 262 <li><a href="/help">help</a></li>
263 263 </ul>
264 264 </div>
265 265
266 266 <div class="main">
267 267 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
268 268 <h3>
269 269 directory / @ 0:<a href="/rev/2ef0ac749a14">2ef0ac749a14</a>
270 270 <span class="phase">draft</span> <span class="branchhead">default</span> <span class="tag">tip</span> <span class="tag">@</span> <span class="tag">a b c</span> <span class="tag">d/e/f</span>
271 271 </h3>
272 272
273 273
274 274 <form class="search" action="/log">
275 275
276 276 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
277 277 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
278 278 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
279 279 </form>
280 280
281 281 <table class="bigtable">
282 282 <thead>
283 283 <tr>
284 284 <th class="name">name</th>
285 285 <th class="size">size</th>
286 286 <th class="permissions">permissions</th>
287 287 </tr>
288 288 </thead>
289 289 <tbody class="stripes2">
290 290 <tr class="fileline">
291 291 <td class="name"><a href="/file/tip/">[up]</a></td>
292 292 <td class="size"></td>
293 293 <td class="permissions">drwxr-xr-x</td>
294 294 </tr>
295 295
296 296 <tr class="fileline">
297 297 <td class="name">
298 298 <a href="/file/tip/da">
299 299 <img src="/static/coal-folder.png" alt="dir."/> da/
300 300 </a>
301 301 <a href="/file/tip/da/">
302 302
303 303 </a>
304 304 </td>
305 305 <td class="size"></td>
306 306 <td class="permissions">drwxr-xr-x</td>
307 307 </tr>
308 308
309 309 <tr class="fileline">
310 310 <td class="filename">
311 311 <a href="/file/tip/foo">
312 312 <img src="/static/coal-file.png" alt="file"/> foo
313 313 </a>
314 314 </td>
315 315 <td class="size">4</td>
316 316 <td class="permissions">-rw-r--r--</td>
317 317 </tr>
318 318 </tbody>
319 319 </table>
320 320 </div>
321 321 </div>
322 322
323 323
324 324 </body>
325 325 </html>
326 326
327 327
328 328 stop and restart
329 329
330 330 $ killdaemons.py
331 331 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
332 332 $ cat hg.pid >> $DAEMON_PIDS
333 333
334 334 Test the access/error files are opened in append mode
335 335
336 336 $ $PYTHON -c "print len(open('access.log', 'rb').readlines()), 'log lines written'"
337 337 14 log lines written
338 338
339 339 static file
340 340
341 341 $ get-with-headers.py --twice localhost:$HGPORT 'static/style-gitweb.css' - date etag server
342 342 200 Script output follows
343 content-length: 9126
343 content-length: 9059
344 344 content-type: text/css
345 345
346 346 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
347 347 a { color:#0000cc; }
348 348 a:hover, a:visited, a:active { color:#880000; }
349 349 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
350 350 div.page_header a:visited { color:#0000cc; }
351 351 div.page_header a:hover { color:#880000; }
352 352 div.page_nav {
353 353 padding:8px;
354 354 display: flex;
355 355 justify-content: space-between;
356 356 align-items: center;
357 357 }
358 358 div.page_nav a:visited { color:#0000cc; }
359 359 div.extra_nav {
360 360 padding: 8px;
361 361 }
362 362 div.extra_nav a:visited {
363 363 color: #0000cc;
364 364 }
365 365 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
366 366 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
367 367 div.page_footer_text { float:left; color:#555555; font-style:italic; }
368 368 div.page_body { padding:8px; }
369 369 div.title, a.title {
370 370 display:block; padding:6px 8px;
371 371 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
372 372 }
373 373 a.title:hover { background-color: #d9d8d1; }
374 374 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
375 375 div.log_body { padding:8px 8px 8px 150px; }
376 376 .age { white-space:nowrap; }
377 377 a.title span.age { position:relative; float:left; width:142px; font-style:italic; }
378 378 div.log_link {
379 379 padding:0px 8px;
380 380 font-size:10px; font-family:sans-serif; font-style:normal;
381 381 position:relative; float:left; width:136px;
382 382 }
383 383 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
384 384 a.list { text-decoration:none; color:#000000; }
385 385 a.list:hover { text-decoration:underline; color:#880000; }
386 386 table { padding:8px 4px; }
387 387 th { padding:2px 5px; font-size:12px; text-align:left; }
388 388 .parity0 { background-color:#ffffff; }
389 389 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
390 390 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
391 391 pre.sourcelines.stripes > :nth-child(4n+2):hover,
392 392 pre.sourcelines.stripes > :nth-child(4n+4):hover,
393 393 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
394 394 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
395 395 td { padding:2px 5px; font-size:12px; vertical-align:top; }
396 396 td.closed { background-color: #99f; }
397 397 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
398 398 td.indexlinks { white-space: nowrap; }
399 399 td.indexlinks a {
400 400 padding: 2px 5px; line-height: 10px;
401 401 border: 1px solid;
402 402 color: #ffffff; background-color: #7777bb;
403 403 border-color: #aaaadd #333366 #333366 #aaaadd;
404 404 font-weight: bold; text-align: center; text-decoration: none;
405 405 font-size: 10px;
406 406 }
407 407 td.indexlinks a:hover { background-color: #6666aa; }
408 408 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
409 409
410 410 .search {
411 411 margin-right: 8px;
412 412 }
413 413
414 414 div#hint {
415 415 position: absolute;
416 416 display: none;
417 417 width: 250px;
418 418 padding: 5px;
419 419 background: #ffc;
420 420 border: 1px solid yellow;
421 421 border-radius: 5px;
422 422 }
423 423
424 424 #searchform:hover div#hint { display: block; }
425 425
426 426 tr.thisrev a { color:#999999; text-decoration: none; }
427 427 tr.thisrev pre { color:#009900; }
428 428 td.annotate {
429 429 white-space: nowrap;
430 430 }
431 431 div.annotate-info {
432 432 z-index: 5;
433 433 display: none;
434 434 position: absolute;
435 435 background-color: #FFFFFF;
436 436 border: 1px solid #d9d8d1;
437 437 text-align: left;
438 438 color: #000000;
439 439 padding: 5px;
440 440 }
441 441 div.annotate-info a { color: #0000FF; text-decoration: underline; }
442 442 td.annotate:hover div.annotate-info { display: inline; }
443 443
444 444 #diffopts-form {
445 445 padding-left: 8px;
446 446 display: none;
447 447 }
448 448
449 449 .linenr { color:#999999; text-decoration:none }
450 450 div.rss_logo { float: right; white-space: nowrap; }
451 451 div.rss_logo a {
452 452 padding:3px 6px; line-height:10px;
453 453 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
454 454 color:#ffffff; background-color:#ff6600;
455 455 font-weight:bold; font-family:sans-serif; font-size:10px;
456 456 text-align:center; text-decoration:none;
457 457 }
458 458 div.rss_logo a:hover { background-color:#ee5500; }
459 459 pre { margin: 0; }
460 460 span.logtags span {
461 461 padding: 0px 4px;
462 462 font-size: 10px;
463 463 font-weight: normal;
464 464 border: 1px solid;
465 465 background-color: #ffaaff;
466 466 border-color: #ffccff #ff00ee #ff00ee #ffccff;
467 467 }
468 468 span.logtags span.phasetag {
469 469 background-color: #dfafff;
470 470 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
471 471 }
472 472 span.logtags span.obsoletetag {
473 473 background-color: #dddddd;
474 474 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
475 475 }
476 476 span.logtags span.instabilitytag {
477 477 background-color: #ffb1c0;
478 478 border-color: #ffbbc8 #ff4476 #ff4476 #ffbbc8;
479 479 }
480 480 span.logtags span.tagtag {
481 481 background-color: #ffffaa;
482 482 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
483 483 }
484 484 span.logtags span.branchtag {
485 485 background-color: #aaffaa;
486 486 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
487 487 }
488 488 span.logtags span.inbranchtag {
489 489 background-color: #d5dde6;
490 490 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
491 491 }
492 492 span.logtags span.bookmarktag {
493 493 background-color: #afdffa;
494 494 border-color: #ccecff #46ace6 #46ace6 #ccecff;
495 495 }
496 496 span.difflineplus { color:#008800; }
497 497 span.difflineminus { color:#cc0000; }
498 498 span.difflineat { color:#990099; }
499 499 div.diffblocks { counter-reset: lineno; }
500 500 div.diffblock { counter-increment: lineno; }
501 501 pre.sourcelines { position: relative; counter-reset: lineno; }
502 502 pre.sourcelines > span {
503 503 display: inline-block;
504 504 box-sizing: border-box;
505 505 width: 100%;
506 506 padding: 0 0 0 5em;
507 507 counter-increment: lineno;
508 508 vertical-align: top;
509 509 }
510 510 pre.sourcelines > span:before {
511 511 -moz-user-select: -moz-none;
512 512 -khtml-user-select: none;
513 513 -webkit-user-select: none;
514 514 -ms-user-select: none;
515 515 user-select: none;
516 516 display: inline-block;
517 517 margin-left: -6em;
518 518 width: 4em;
519 519 color: #999;
520 520 text-align: right;
521 521 content: counters(lineno,".");
522 522 float: left;
523 523 }
524 524 pre.sourcelines > a {
525 525 display: inline-block;
526 526 position: absolute;
527 527 left: 0px;
528 528 width: 4em;
529 529 height: 1em;
530 530 }
531 531 tr:target td,
532 532 pre.sourcelines > span:target,
533 533 pre.sourcelines.stripes > span:target {
534 534 background-color: #bfdfff;
535 535 }
536 536
537 537 .description {
538 538 font-family: monospace;
539 539 white-space: pre;
540 540 }
541 541
542 542 /* Followlines */
543 543 tbody.sourcelines > tr.followlines-selected,
544 544 pre.sourcelines > span.followlines-selected {
545 545 background-color: #99C7E9 !important;
546 546 }
547 547
548 548 div#followlines {
549 549 background-color: #FFF;
550 550 border: 1px solid #d9d8d1;
551 551 padding: 5px;
552 552 position: fixed;
553 553 }
554 554
555 555 div.followlines-cancel {
556 556 text-align: right;
557 557 }
558 558
559 559 div.followlines-cancel > button {
560 560 line-height: 80%;
561 561 padding: 0;
562 562 border: 0;
563 563 border-radius: 2px;
564 564 background-color: inherit;
565 565 font-weight: bold;
566 566 }
567 567
568 568 div.followlines-cancel > button:hover {
569 569 color: #FFFFFF;
570 570 background-color: #CF1F1F;
571 571 }
572 572
573 573 div.followlines-link {
574 574 margin: 2px;
575 575 margin-top: 4px;
576 576 font-family: sans-serif;
577 577 }
578 578
579 579 .btn-followlines {
580 position: absolute;
580 581 display: none;
581 582 cursor: pointer;
582 583 box-sizing: content-box;
583 584 font-size: 11px;
584 585 width: 13px;
585 586 height: 13px;
586 587 border-radius: 3px;
587 588 margin: 0px;
588 589 margin-top: -2px;
589 590 padding: 0px;
590 591 background-color: #E5FDE5;
591 592 border: 1px solid #9BC19B;
592 593 font-family: monospace;
593 594 text-align: center;
594 595 line-height: 5px;
595 596 }
596 597
597 tr .btn-followlines {
598 position: absolute;
599 }
600
601 span .btn-followlines {
602 float: left;
603 }
604
605 598 span.followlines-select .btn-followlines {
606 599 margin-left: -1.6em;
607 600 }
608 601
609 602 .btn-followlines:hover {
610 603 transform: scale(1.1, 1.1);
611 604 }
612 605
613 606 .btn-followlines .followlines-plus {
614 607 color: green;
615 608 }
616 609
617 610 .btn-followlines .followlines-minus {
618 611 color: red;
619 612 }
620 613
621 614 .btn-followlines-end {
622 615 background-color: #ffdcdc;
623 616 }
624 617
625 618 .sourcelines tr:hover .btn-followlines,
626 619 .sourcelines span.followlines-select:hover > .btn-followlines {
627 620 display: inline;
628 621 }
629 622
630 623 .btn-followlines-hidden,
631 624 .sourcelines tr:hover .btn-followlines-hidden {
632 625 display: none;
633 626 }
634 627
635 628 /* Graph */
636 629 div#wrapper {
637 630 position: relative;
638 631 margin: 0;
639 632 padding: 0;
640 633 margin-top: 3px;
641 634 }
642 635
643 636 canvas {
644 637 position: absolute;
645 638 z-index: 5;
646 639 top: -0.9em;
647 640 margin: 0;
648 641 }
649 642
650 643 ul#graphnodes {
651 644 list-style: none inside none;
652 645 padding: 0;
653 646 margin: 0;
654 647 }
655 648
656 649 ul#graphnodes li {
657 650 position: relative;
658 651 height: 37px;
659 652 overflow: visible;
660 653 padding-top: 2px;
661 654 }
662 655
663 656 ul#graphnodes li .fg {
664 657 position: absolute;
665 658 z-index: 10;
666 659 }
667 660
668 661 ul#graphnodes li .info {
669 662 font-size: 100%;
670 663 font-style: italic;
671 664 }
672 665
673 666 /* Comparison */
674 667 .legend {
675 668 padding: 1.5% 0 1.5% 0;
676 669 }
677 670
678 671 .legendinfo {
679 672 border: 1px solid #d9d8d1;
680 673 font-size: 80%;
681 674 text-align: center;
682 675 padding: 0.5%;
683 676 }
684 677
685 678 .equal {
686 679 background-color: #ffffff;
687 680 }
688 681
689 682 .delete {
690 683 background-color: #faa;
691 684 color: #333;
692 685 }
693 686
694 687 .insert {
695 688 background-color: #ffa;
696 689 }
697 690
698 691 .replace {
699 692 background-color: #e8e8e8;
700 693 }
701 694
702 695 .comparison {
703 696 overflow-x: auto;
704 697 }
705 698
706 699 .header th {
707 700 text-align: center;
708 701 }
709 702
710 703 .block {
711 704 border-top: 1px solid #d9d8d1;
712 705 }
713 706
714 707 .scroll-loading {
715 708 -webkit-animation: change_color 1s linear 0s infinite alternate;
716 709 -moz-animation: change_color 1s linear 0s infinite alternate;
717 710 -o-animation: change_color 1s linear 0s infinite alternate;
718 711 animation: change_color 1s linear 0s infinite alternate;
719 712 }
720 713
721 714 @-webkit-keyframes change_color {
722 715 from { background-color: #A0CEFF; } to { }
723 716 }
724 717 @-moz-keyframes change_color {
725 718 from { background-color: #A0CEFF; } to { }
726 719 }
727 720 @-o-keyframes change_color {
728 721 from { background-color: #A0CEFF; } to { }
729 722 }
730 723 @keyframes change_color {
731 724 from { background-color: #A0CEFF; } to { }
732 725 }
733 726
734 727 .scroll-loading-error {
735 728 background-color: #FFCCCC !important;
736 729 }
737 730
738 731 #doc {
739 732 margin: 0 8px;
740 733 }
741 734 304 Not Modified
742 735
743 736
744 737 phase changes are refreshed (issue4061)
745 738
746 739 $ echo bar >> foo
747 740 $ hg ci -msecret --secret
748 741 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
749 742 200 Script output follows
750 743
751 744
752 745 # HG changelog
753 746 # Node ID 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
754 747
755 748 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
756 749 revision: 0
757 750 user: test
758 751 date: Thu, 01 Jan 1970 00:00:00 +0000
759 752 summary: base
760 753 branch: default
761 754 tag: tip
762 755 bookmark: @
763 756 bookmark: a b c
764 757 bookmark: d/e/f
765 758
766 759
767 760 $ hg phase --draft tip
768 761 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
769 762 200 Script output follows
770 763
771 764
772 765 # HG changelog
773 766 # Node ID a084749e708a9c4c0a5b652a2a446322ce290e04
774 767
775 768 changeset: a084749e708a9c4c0a5b652a2a446322ce290e04
776 769 revision: 1
777 770 user: test
778 771 date: Thu, 01 Jan 1970 00:00:00 +0000
779 772 summary: secret
780 773 branch: default
781 774 tag: tip
782 775
783 776 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
784 777 revision: 0
785 778 user: test
786 779 date: Thu, 01 Jan 1970 00:00:00 +0000
787 780 summary: base
788 781 bookmark: @
789 782 bookmark: a b c
790 783 bookmark: d/e/f
791 784
792 785
793 786
794 787 access bookmarks
795 788
796 789 $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | egrep '^200|changeset 0:'
797 790 200 Script output follows
798 791 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
799 792
800 793 $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | egrep '^200|changeset 0:'
801 794 200 Script output follows
802 795 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
803 796
804 797 $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | egrep '^200|changeset 0:'
805 798 200 Script output follows
806 799 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
807 800
808 801 $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | egrep '^200|changeset 0:'
809 802 200 Script output follows
810 803 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
811 804
812 805 no style can be loaded from directories other than the specified paths
813 806
814 807 $ mkdir -p x/templates/fallback
815 808 $ cat <<EOF > x/templates/fallback/map
816 809 > default = 'shortlog'
817 810 > shortlog = 'fall back to default\n'
818 811 > mimetype = 'text/plain'
819 812 > EOF
820 813 $ cat <<EOF > x/map
821 814 > default = 'shortlog'
822 815 > shortlog = 'access to outside of templates directory\n'
823 816 > mimetype = 'text/plain'
824 817 > EOF
825 818
826 819 $ killdaemons.py
827 820 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log \
828 821 > --config web.style=fallback --config web.templates=x/templates
829 822 $ cat hg.pid >> $DAEMON_PIDS
830 823
831 824 $ get-with-headers.py localhost:$HGPORT "?style=`pwd`/x"
832 825 200 Script output follows
833 826
834 827 fall back to default
835 828
836 829 $ get-with-headers.py localhost:$HGPORT '?style=..'
837 830 200 Script output follows
838 831
839 832 fall back to default
840 833
841 834 $ get-with-headers.py localhost:$HGPORT '?style=./..'
842 835 200 Script output follows
843 836
844 837 fall back to default
845 838
846 839 $ get-with-headers.py localhost:$HGPORT '?style=.../.../'
847 840 200 Script output follows
848 841
849 842 fall back to default
850 843
851 844 errors
852 845
853 846 $ cat errors.log
854 847
855 848 Uncaught exceptions result in a logged error and canned HTTP response
856 849
857 850 $ killdaemons.py
858 851 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
859 852 $ cat hg.pid >> $DAEMON_PIDS
860 853
861 854 $ get-with-headers.py localhost:$HGPORT 'raiseerror' transfer-encoding content-type
862 855 500 Internal Server Error
863 856 transfer-encoding: chunked
864 857
865 858 Internal Server Error (no-eol)
866 859 [1]
867 860
868 861 $ killdaemons.py
869 862 $ head -1 errors.log
870 863 .* Exception happened during processing request '/raiseerror': (re)
871 864
872 865 Uncaught exception after partial content sent
873 866
874 867 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
875 868 $ cat hg.pid >> $DAEMON_PIDS
876 869 $ get-with-headers.py localhost:$HGPORT 'raiseerror?partialresponse=1' transfer-encoding content-type
877 870 200 Script output follows
878 871 transfer-encoding: chunked
879 872 content-type: text/plain
880 873
881 874 partial content
882 875 Internal Server Error (no-eol)
883 876
884 877 $ killdaemons.py
885 878 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now