##// END OF EJS Templates
paper: make actual changeset entries have backgrounds on /graph...
av6 -
r35547:5afe0ca5 default
parent child Browse files
Show More
@@ -1,94 +1,87
1 {header}
1 {header}
2 <title>{repo|escape}: revision graph</title>
2 <title>{repo|escape}: revision graph</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}: log" />
4 href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}: log" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}: log" />
6 href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}: log" />
7 <!--[if IE]><script type="text/javascript" src="{staticurl|urlescape}excanvas.js"></script><![endif]-->
7 <!--[if IE]><script type="text/javascript" src="{staticurl|urlescape}excanvas.js"></script><![endif]-->
8 </head>
8 </head>
9 <body>
9 <body>
10
10
11 <div class="container">
11 <div class="container">
12 <div class="menu">
12 <div class="menu">
13 <div class="logo">
13 <div class="logo">
14 <a href="{logourl}">
14 <a href="{logourl}">
15 <img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
15 <img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
16 </div>
16 </div>
17 <ul>
17 <ul>
18 <li><a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">log</a></li>
19 <li class="active">graph</li>
19 <li class="active">graph</li>
20 <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
20 <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
21 <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
21 <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
22 <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
22 <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
23 </ul>
23 </ul>
24 <ul>
24 <ul>
25 <li><a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a></li>
25 <li><a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a></li>
26 <li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
26 <li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
27 </ul>
27 </ul>
28 <ul>
28 <ul>
29 <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
29 <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
30 </ul>
30 </ul>
31 <div class="atom-logo">
31 <div class="atom-logo">
32 <a href="{url|urlescape}atom-log" title="subscribe to atom feed">
32 <a href="{url|urlescape}atom-log" title="subscribe to atom feed">
33 <img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="atom feed" />
33 <img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="atom feed" />
34 </a>
34 </a>
35 </div>
35 </div>
36 </div>
36 </div>
37
37
38 <div class="main">
38 <div class="main">
39 <h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
39 <h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
40 <h3>graph</h3>
40 <h3>graph</h3>
41
41
42 {searchform}
42 {searchform}
43
43
44 <div class="navigate">
44 <div class="navigate">
45 <a href="{url|urlescape}graph/{symrev}{lessvars%urlparameter}">less</a>
45 <a href="{url|urlescape}graph/{symrev}{lessvars%urlparameter}">less</a>
46 <a href="{url|urlescape}graph/{symrev}{morevars%urlparameter}">more</a>
46 <a href="{url|urlescape}graph/{symrev}{morevars%urlparameter}">more</a>
47 | rev {rev}: {changenav%navgraph}
47 | rev {rev}: {changenav%navgraph}
48 </div>
48 </div>
49
49
50 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
50 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
51
51
52 <div id="wrapper">
52 <div id="wrapper">
53 <ul id="nodebgs" class="stripes2"></ul>
54 <canvas id="graph"></canvas>
53 <canvas id="graph"></canvas>
55 <ul id="graphnodes">{nodes%graphentry}</ul>
54 <ul id="graphnodes" class="stripes2">{nodes%graphentry}</ul>
56 </div>
55 </div>
57
56
58 <script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
57 <script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
59 var data = {jsdata|json};
58 var data = {jsdata|json};
60 var graph = new Graph();
59 var graph = new Graph();
61 graph.scale({bg_height});
60 graph.scale({bg_height});
62
63 graph.vertex = function(x, y, radius, color, parity, cur) \{
64 Graph.prototype.vertex.apply(this, arguments);
65 return ['<li class="bg"></li>', ''];
66 }
67
68 graph.render(data);
61 graph.render(data);
69 </script>
62 </script>
70
63
71 <div class="navigate">
64 <div class="navigate">
72 <a href="{url|urlescape}graph/{symrev}{lessvars%urlparameter}">less</a>
65 <a href="{url|urlescape}graph/{symrev}{lessvars%urlparameter}">less</a>
73 <a href="{url|urlescape}graph/{symrev}{morevars%urlparameter}">more</a>
66 <a href="{url|urlescape}graph/{symrev}{morevars%urlparameter}">more</a>
74 | rev {rev}: {changenav%navgraph}
67 | rev {rev}: {changenav%navgraph}
75 </div>
68 </div>
76
69
77 <script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
70 <script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
78 ajaxScrollInit(
71 ajaxScrollInit(
79 '{url|urlescape}graph/%next%{graphvars%urlparameter}',
72 '{url|urlescape}graph/%next%{graphvars%urlparameter}',
80 '{nextentry%"{node}"}', <!-- NEXTHASH
73 '{nextentry%"{node}"}', <!-- NEXTHASH
81 function (htmlText, previousVal) \{
74 function (htmlText, previousVal) \{
82 var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
75 var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
83 return m ? m[1] : null;
76 return m ? m[1] : null;
84 },
77 },
85 '#wrapper',
78 '#wrapper',
86 '<div class="%class%" style="text-align: center;">%text%</div>',
79 '<div class="%class%" style="text-align: center;">%text%</div>',
87 'graph'
80 'graph'
88 );
81 );
89 </script>
82 </script>
90
83
91 </div>
84 </div>
92 </div>
85 </div>
93
86
94 {footer}
87 {footer}
@@ -1,7 +1,9
1 <li data-node="{node|short}">
1 <li data-node="{node|short}">
2 <div class="fg">
2 <span class="desc">
3 <span class="desc">
3 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>
4 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>
4 </span>
5 </span>
5 {alltags}
6 {alltags}
6 <div class="info"><span class="age">{date|rfc822date}</span>, by {author|person}</div>
7 <div class="info"><span class="age">{date|rfc822date}</span>, by {author|person}</div>
8 </div>
7 </li>
9 </li>
@@ -1,552 +1,549
1 body {
1 body {
2 margin: 0;
2 margin: 0;
3 padding: 0;
3 padding: 0;
4 background: white;
4 background: white;
5 color: black;
5 color: black;
6 font-family: sans-serif;
6 font-family: sans-serif;
7 }
7 }
8
8
9 .container {
9 .container {
10 padding-left: 115px;
10 padding-left: 115px;
11 }
11 }
12
12
13 .main {
13 .main {
14 position: relative;
14 position: relative;
15 background: white;
15 background: white;
16 padding: 2em 2em 2em 0;
16 padding: 2em 2em 2em 0;
17 }
17 }
18
18
19 #.main {
19 #.main {
20 width: 98%;
20 width: 98%;
21 }
21 }
22
22
23 .overflow {
23 .overflow {
24 width: 100%;
24 width: 100%;
25 overflow: auto;
25 overflow: auto;
26 }
26 }
27
27
28 .menu {
28 .menu {
29 width: 90px;
29 width: 90px;
30 margin: 0;
30 margin: 0;
31 font-size: 80%;
31 font-size: 80%;
32 text-align: left;
32 text-align: left;
33 position: absolute;
33 position: absolute;
34 top: 20px;
34 top: 20px;
35 left: 20px;
35 left: 20px;
36 right: auto;
36 right: auto;
37 }
37 }
38
38
39 .menu ul {
39 .menu ul {
40 list-style: none;
40 list-style: none;
41 padding: 0;
41 padding: 0;
42 margin: 10px 0 0 0;
42 margin: 10px 0 0 0;
43 border-left: 2px solid #999;
43 border-left: 2px solid #999;
44 }
44 }
45
45
46 .menu li {
46 .menu li {
47 margin-bottom: 3px;
47 margin-bottom: 3px;
48 padding: 2px 4px;
48 padding: 2px 4px;
49 background: white;
49 background: white;
50 color: black;
50 color: black;
51 font-weight: normal;
51 font-weight: normal;
52 }
52 }
53
53
54 .menu li.active {
54 .menu li.active {
55 font-weight: bold;
55 font-weight: bold;
56 }
56 }
57
57
58 .menu img {
58 .menu img {
59 width: 75px;
59 width: 75px;
60 height: 90px;
60 height: 90px;
61 border: 0;
61 border: 0;
62 }
62 }
63
63
64 div.atom-logo {
64 div.atom-logo {
65 margin-top: 10px;
65 margin-top: 10px;
66 }
66 }
67
67
68 .atom-logo img{
68 .atom-logo img{
69 width: 14px;
69 width: 14px;
70 height: 14px;
70 height: 14px;
71 border: 0;
71 border: 0;
72 }
72 }
73
73
74 .menu a { color: black; display: block; }
74 .menu a { color: black; display: block; }
75
75
76 .search {
76 .search {
77 position: absolute;
77 position: absolute;
78 top: .7em;
78 top: .7em;
79 right: 2em;
79 right: 2em;
80 }
80 }
81
81
82 form.search div#hint {
82 form.search div#hint {
83 display: none;
83 display: none;
84 position: absolute;
84 position: absolute;
85 top: 40px;
85 top: 40px;
86 right: 0px;
86 right: 0px;
87 width: 190px;
87 width: 190px;
88 padding: 5px;
88 padding: 5px;
89 background: #ffc;
89 background: #ffc;
90 font-size: 70%;
90 font-size: 70%;
91 border: 1px solid yellow;
91 border: 1px solid yellow;
92 border-radius: 5px;
92 border-radius: 5px;
93 }
93 }
94
94
95 form.search:hover div#hint { display: block; }
95 form.search:hover div#hint { display: block; }
96
96
97 a { text-decoration:none; }
97 a { text-decoration:none; }
98 .age { white-space:nowrap; }
98 .age { white-space:nowrap; }
99 .date { white-space:nowrap; }
99 .date { white-space:nowrap; }
100 .indexlinks { white-space:nowrap; }
100 .indexlinks { white-space:nowrap; }
101 .parity0,
101 .parity0,
102 .stripes4 > :nth-child(4n+1),
102 .stripes4 > :nth-child(4n+1),
103 .stripes2 > :nth-child(2n+1) { background-color: #f0f0f0; }
103 .stripes2 > :nth-child(2n+1) { background-color: #f0f0f0; }
104 .parity1,
104 .parity1,
105 .stripes4 > :nth-child(4n+3),
105 .stripes4 > :nth-child(4n+3),
106 .stripes2 > :nth-child(2n+2) { background-color: white; }
106 .stripes2 > :nth-child(2n+2) { background-color: white; }
107 .plusline { color: green; }
107 .plusline { color: green; }
108 .minusline { color: #dc143c; } /* crimson */
108 .minusline { color: #dc143c; } /* crimson */
109 .atline { color: purple; }
109 .atline { color: purple; }
110
110
111 .diffstat-table {
111 .diffstat-table {
112 margin-top: 1em;
112 margin-top: 1em;
113 }
113 }
114 .diffstat-file {
114 .diffstat-file {
115 white-space: nowrap;
115 white-space: nowrap;
116 font-size: 90%;
116 font-size: 90%;
117 }
117 }
118 .diffstat-total {
118 .diffstat-total {
119 white-space: nowrap;
119 white-space: nowrap;
120 font-size: 90%;
120 font-size: 90%;
121 }
121 }
122 .diffstat-graph {
122 .diffstat-graph {
123 width: 100%;
123 width: 100%;
124 }
124 }
125 .diffstat-add {
125 .diffstat-add {
126 background-color: green;
126 background-color: green;
127 float: left;
127 float: left;
128 }
128 }
129 .diffstat-remove {
129 .diffstat-remove {
130 background-color: red;
130 background-color: red;
131 float: left;
131 float: left;
132 }
132 }
133
133
134 .navigate {
134 .navigate {
135 text-align: right;
135 text-align: right;
136 font-size: 60%;
136 font-size: 60%;
137 margin: 1em 0;
137 margin: 1em 0;
138 }
138 }
139
139
140 .phase {
140 .phase {
141 color: #999;
141 color: #999;
142 font-size: 70%;
142 font-size: 70%;
143 border-bottom: 1px dotted #999;
143 border-bottom: 1px dotted #999;
144 font-weight: normal;
144 font-weight: normal;
145 margin-left: .5em;
145 margin-left: .5em;
146 vertical-align: baseline;
146 vertical-align: baseline;
147 }
147 }
148
148
149 .obsolete {
149 .obsolete {
150 color: #999;
150 color: #999;
151 font-size: 70%;
151 font-size: 70%;
152 border-bottom: 1px dashed #999;
152 border-bottom: 1px dashed #999;
153 font-weight: normal;
153 font-weight: normal;
154 margin-left: .5em;
154 margin-left: .5em;
155 vertical-align: baseline;
155 vertical-align: baseline;
156 }
156 }
157
157
158 .instability {
158 .instability {
159 color: #000;
159 color: #000;
160 font-size: 70%;
160 font-size: 70%;
161 border-bottom: 1px solid #000;
161 border-bottom: 1px solid #000;
162 font-weight: normal;
162 font-weight: normal;
163 margin-left: .5em;
163 margin-left: .5em;
164 vertical-align: baseline;
164 vertical-align: baseline;
165 }
165 }
166
166
167 .tag {
167 .tag {
168 color: #999;
168 color: #999;
169 font-size: 70%;
169 font-size: 70%;
170 font-weight: normal;
170 font-weight: normal;
171 margin-left: .5em;
171 margin-left: .5em;
172 vertical-align: baseline;
172 vertical-align: baseline;
173 }
173 }
174
174
175 .branchhead {
175 .branchhead {
176 color: #000;
176 color: #000;
177 font-size: 80%;
177 font-size: 80%;
178 font-weight: normal;
178 font-weight: normal;
179 margin-left: .5em;
179 margin-left: .5em;
180 vertical-align: baseline;
180 vertical-align: baseline;
181 }
181 }
182
182
183 ul#graphnodes .branchhead {
183 ul#graphnodes .branchhead {
184 font-size: 75%;
184 font-size: 75%;
185 }
185 }
186
186
187 .branchname {
187 .branchname {
188 color: #000;
188 color: #000;
189 font-size: 60%;
189 font-size: 60%;
190 font-weight: normal;
190 font-weight: normal;
191 margin-left: .5em;
191 margin-left: .5em;
192 vertical-align: baseline;
192 vertical-align: baseline;
193 }
193 }
194
194
195 /* Common */
195 /* Common */
196 pre { margin: 0; }
196 pre { margin: 0; }
197
197
198 h2 { font-size: 120%; border-bottom: 1px solid #999; }
198 h2 { font-size: 120%; border-bottom: 1px solid #999; }
199 h2 a { color: #000; }
199 h2 a { color: #000; }
200 h3 {
200 h3 {
201 margin-top: +.7em;
201 margin-top: +.7em;
202 font-size: 100%;
202 font-size: 100%;
203 }
203 }
204
204
205 /* log and tags tables */
205 /* log and tags tables */
206 .bigtable {
206 .bigtable {
207 border-bottom: 1px solid #999;
207 border-bottom: 1px solid #999;
208 border-collapse: collapse;
208 border-collapse: collapse;
209 font-size: 90%;
209 font-size: 90%;
210 width: 100%;
210 width: 100%;
211 font-weight: normal;
211 font-weight: normal;
212 text-align: left;
212 text-align: left;
213 }
213 }
214
214
215 .bigtable td {
215 .bigtable td {
216 padding: 1px 4px;
216 padding: 1px 4px;
217 vertical-align: top;
217 vertical-align: top;
218 }
218 }
219
219
220 .bigtable th {
220 .bigtable th {
221 padding: 1px 4px;
221 padding: 1px 4px;
222 border-bottom: 1px solid #999;
222 border-bottom: 1px solid #999;
223 }
223 }
224 .bigtable tr { border: none; }
224 .bigtable tr { border: none; }
225 .bigtable .age { width: 7em; }
225 .bigtable .age { width: 7em; }
226 .bigtable .author { width: 15em; }
226 .bigtable .author { width: 15em; }
227 .bigtable .description { }
227 .bigtable .description { }
228 .bigtable .description .base { font-size: 70%; float: right; line-height: 1.66; }
228 .bigtable .description .base { font-size: 70%; float: right; line-height: 1.66; }
229 .bigtable .node { width: 5em; font-family: monospace;}
229 .bigtable .node { width: 5em; font-family: monospace;}
230 .bigtable .permissions { width: 8em; text-align: left;}
230 .bigtable .permissions { width: 8em; text-align: left;}
231 .bigtable .size { width: 5em; text-align: right; }
231 .bigtable .size { width: 5em; text-align: right; }
232 .bigtable .annotate { text-align: right; }
232 .bigtable .annotate { text-align: right; }
233 .bigtable td.annotate { font-size: smaller; }
233 .bigtable td.annotate { font-size: smaller; }
234 .bigtable td.source { font-size: inherit; }
234 .bigtable td.source { font-size: inherit; }
235 tr.thisrev a { color:#999999; text-decoration: none; }
235 tr.thisrev a { color:#999999; text-decoration: none; }
236 tr.thisrev td.source { color:#009900; }
236 tr.thisrev td.source { color:#009900; }
237 td.annotate {
237 td.annotate {
238 white-space: nowrap;
238 white-space: nowrap;
239 }
239 }
240 div.annotate-info {
240 div.annotate-info {
241 z-index: 5;
241 z-index: 5;
242 display: none;
242 display: none;
243 position: absolute;
243 position: absolute;
244 background-color: #FFFFFF;
244 background-color: #FFFFFF;
245 border: 1px solid #999;
245 border: 1px solid #999;
246 text-align: left;
246 text-align: left;
247 color: #000000;
247 color: #000000;
248 padding: 5px;
248 padding: 5px;
249 }
249 }
250 div.annotate-info a { color: #0000FF; }
250 div.annotate-info a { color: #0000FF; }
251 td.annotate:hover div.annotate-info { display: inline; }
251 td.annotate:hover div.annotate-info { display: inline; }
252
252
253 #diffopts-form {
253 #diffopts-form {
254 font-size: smaller;
254 font-size: smaller;
255 color: #424242;
255 color: #424242;
256 padding-bottom: 10px;
256 padding-bottom: 10px;
257 display: none;
257 display: none;
258 }
258 }
259
259
260 .source, .sourcefirst {
260 .source, .sourcefirst {
261 font-family: monospace;
261 font-family: monospace;
262 white-space: pre;
262 white-space: pre;
263 padding: 1px 4px;
263 padding: 1px 4px;
264 font-size: 90%;
264 font-size: 90%;
265 }
265 }
266 .sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
266 .sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
267 .source a { color: #999; font-size: smaller; font-family: monospace;}
267 .source a { color: #999; font-size: smaller; font-family: monospace;}
268 .bottomline { border-bottom: 1px solid #999; }
268 .bottomline { border-bottom: 1px solid #999; }
269
269
270 .sourcelines {
270 .sourcelines {
271 font-size: 90%;
271 font-size: 90%;
272 position: relative;
272 position: relative;
273 counter-reset: lineno;
273 counter-reset: lineno;
274 }
274 }
275
275
276 .wrap > span {
276 .wrap > span {
277 white-space: pre-wrap;
277 white-space: pre-wrap;
278 }
278 }
279
279
280 .linewraptoggle {
280 .linewraptoggle {
281 float: right;
281 float: right;
282 }
282 }
283
283
284 .diffblocks { counter-reset: lineno; }
284 .diffblocks { counter-reset: lineno; }
285 .diffblocks > div { counter-increment: lineno; }
285 .diffblocks > div { counter-increment: lineno; }
286
286
287 .sourcelines > span {
287 .sourcelines > span {
288 display: inline-block;
288 display: inline-block;
289 box-sizing: border-box;
289 box-sizing: border-box;
290 width: 100%;
290 width: 100%;
291 padding: 1px 0px 1px 5em;
291 padding: 1px 0px 1px 5em;
292 counter-increment: lineno;
292 counter-increment: lineno;
293 }
293 }
294
294
295 .sourcelines > span:before {
295 .sourcelines > span:before {
296 -moz-user-select: -moz-none;
296 -moz-user-select: -moz-none;
297 -khtml-user-select: none;
297 -khtml-user-select: none;
298 -webkit-user-select: none;
298 -webkit-user-select: none;
299 -ms-user-select: none;
299 -ms-user-select: none;
300 user-select: none;
300 user-select: none;
301 display: inline-block;
301 display: inline-block;
302 margin-left: -6em;
302 margin-left: -6em;
303 width: 4em;
303 width: 4em;
304 font-size: smaller;
304 font-size: smaller;
305 color: #999;
305 color: #999;
306 text-align: right;
306 text-align: right;
307 content: counters(lineno, ".");
307 content: counters(lineno, ".");
308 float: left;
308 float: left;
309 }
309 }
310
310
311 .sourcelines > span:target, tr:target td {
311 .sourcelines > span:target, tr:target td {
312 background-color: #bfdfff;
312 background-color: #bfdfff;
313 }
313 }
314
314
315 /* Followlines */
315 /* Followlines */
316 tbody.sourcelines > tr.followlines-selected,
316 tbody.sourcelines > tr.followlines-selected,
317 pre.sourcelines > span.followlines-selected {
317 pre.sourcelines > span.followlines-selected {
318 background-color: #99C7E9;
318 background-color: #99C7E9;
319 }
319 }
320
320
321 div#followlines {
321 div#followlines {
322 background-color: #FFF;
322 background-color: #FFF;
323 border: 1px solid #999;
323 border: 1px solid #999;
324 padding: 5px;
324 padding: 5px;
325 position: fixed;
325 position: fixed;
326 }
326 }
327
327
328 div.followlines-cancel {
328 div.followlines-cancel {
329 text-align: right;
329 text-align: right;
330 }
330 }
331
331
332 div.followlines-cancel > button {
332 div.followlines-cancel > button {
333 line-height: 80%;
333 line-height: 80%;
334 padding: 0;
334 padding: 0;
335 border: 0;
335 border: 0;
336 border-radius: 2px;
336 border-radius: 2px;
337 background-color: inherit;
337 background-color: inherit;
338 font-weight: bold;
338 font-weight: bold;
339 }
339 }
340
340
341 div.followlines-cancel > button:hover {
341 div.followlines-cancel > button:hover {
342 color: #FFFFFF;
342 color: #FFFFFF;
343 background-color: #CF1F1F;
343 background-color: #CF1F1F;
344 }
344 }
345
345
346 div.followlines-link {
346 div.followlines-link {
347 margin: 2px;
347 margin: 2px;
348 margin-top: 4px;
348 margin-top: 4px;
349 font-family: sans-serif;
349 font-family: sans-serif;
350 }
350 }
351
351
352 .btn-followlines {
352 .btn-followlines {
353 display: none;
353 display: none;
354 cursor: pointer;
354 cursor: pointer;
355 box-sizing: content-box;
355 box-sizing: content-box;
356 font-size: 12px;
356 font-size: 12px;
357 width: 13px;
357 width: 13px;
358 height: 13px;
358 height: 13px;
359 border-radius: 3px;
359 border-radius: 3px;
360 margin: 0px;
360 margin: 0px;
361 margin-top: -2px;
361 margin-top: -2px;
362 padding: 0px;
362 padding: 0px;
363 background-color: #E5FDE5;
363 background-color: #E5FDE5;
364 border: 1px solid #9BC19B;
364 border: 1px solid #9BC19B;
365 font-family: monospace;
365 font-family: monospace;
366 text-align: center;
366 text-align: center;
367 line-height: 5px;
367 line-height: 5px;
368 }
368 }
369
369
370 tr .btn-followlines {
370 tr .btn-followlines {
371 position: absolute;
371 position: absolute;
372 }
372 }
373
373
374 span .btn-followlines {
374 span .btn-followlines {
375 float: left;
375 float: left;
376 }
376 }
377
377
378 span.followlines-select .btn-followlines {
378 span.followlines-select .btn-followlines {
379 margin-left: -1.5em;
379 margin-left: -1.5em;
380 }
380 }
381
381
382 .btn-followlines:hover {
382 .btn-followlines:hover {
383 transform: scale(1.2, 1.2);
383 transform: scale(1.2, 1.2);
384 }
384 }
385
385
386 .btn-followlines .followlines-plus {
386 .btn-followlines .followlines-plus {
387 color: green;
387 color: green;
388 }
388 }
389
389
390 .btn-followlines .followlines-minus {
390 .btn-followlines .followlines-minus {
391 color: red;
391 color: red;
392 }
392 }
393
393
394 .btn-followlines-end {
394 .btn-followlines-end {
395 background-color: #ffdcdc;
395 background-color: #ffdcdc;
396 }
396 }
397
397
398 .sourcelines tr:hover .btn-followlines,
398 .sourcelines tr:hover .btn-followlines,
399 .sourcelines span.followlines-select:hover > .btn-followlines {
399 .sourcelines span.followlines-select:hover > .btn-followlines {
400 display: inline;
400 display: inline;
401 }
401 }
402
402
403 .btn-followlines-hidden,
403 .btn-followlines-hidden,
404 .sourcelines tr:hover .btn-followlines-hidden {
404 .sourcelines tr:hover .btn-followlines-hidden {
405 display: none;
405 display: none;
406 }
406 }
407
407
408 .sourcelines > a {
408 .sourcelines > a {
409 display: inline-block;
409 display: inline-block;
410 position: absolute;
410 position: absolute;
411 left: 0px;
411 left: 0px;
412 width: 4em;
412 width: 4em;
413 height: 1em;
413 height: 1em;
414 }
414 }
415
415
416 .fileline { font-family: monospace; }
416 .fileline { font-family: monospace; }
417 .fileline img { border: 0; }
417 .fileline img { border: 0; }
418
418
419 .tagEntry .closed { color: #99f; }
419 .tagEntry .closed { color: #99f; }
420
420
421 /* Changeset entry */
421 /* Changeset entry */
422 #changesetEntry {
422 #changesetEntry {
423 border-collapse: collapse;
423 border-collapse: collapse;
424 font-size: 90%;
424 font-size: 90%;
425 width: 100%;
425 width: 100%;
426 margin-bottom: 1em;
426 margin-bottom: 1em;
427 }
427 }
428
428
429 #changesetEntry th {
429 #changesetEntry th {
430 padding: 1px 4px;
430 padding: 1px 4px;
431 width: 4em;
431 width: 4em;
432 text-align: right;
432 text-align: right;
433 font-weight: normal;
433 font-weight: normal;
434 color: #999;
434 color: #999;
435 vertical-align: top;
435 vertical-align: top;
436 }
436 }
437
437
438 div.description {
438 div.description {
439 border-left: 2px solid #999;
439 border-left: 2px solid #999;
440 margin: 1em 0 1em 0;
440 margin: 1em 0 1em 0;
441 padding: .3em;
441 padding: .3em;
442 white-space: pre;
442 white-space: pre;
443 font-family: monospace;
443 font-family: monospace;
444 }
444 }
445
445
446 /* Graph */
446 /* Graph */
447 div#wrapper {
447 div#wrapper {
448 position: relative;
448 position: relative;
449 border-top: 1px solid black;
449 border-top: 1px solid black;
450 border-bottom: 1px solid black;
450 border-bottom: 1px solid black;
451 margin: 0;
451 margin: 0;
452 padding: 0;
452 padding: 0;
453 }
453 }
454
454
455 canvas {
455 canvas {
456 position: absolute;
456 position: absolute;
457 z-index: 5;
457 z-index: 5;
458 top: -0.7em;
458 top: -0.7em;
459 margin: 0;
459 margin: 0;
460 }
460 }
461
461
462 ul#graphnodes {
462 ul#graphnodes {
463 position: absolute;
464 z-index: 10;
465 top: -1.0em;
466 list-style: none inside none;
467 padding: 0;
468 }
469
470 ul#nodebgs {
471 list-style: none inside none;
463 list-style: none inside none;
472 padding: 0;
464 padding: 0;
473 margin: 0;
465 margin: 0;
474 top: -0.7em;
475 }
466 }
476
467
477 ul#graphnodes li, ul#nodebgs li {
468 ul#graphnodes li {
478 height: 39px;
469 height: 39px;
470 overflow: visible;
471 }
472
473 ul#graphnodes li .fg {
474 position: absolute;
475 z-index: 10;
479 }
476 }
480
477
481 ul#graphnodes li .info {
478 ul#graphnodes li .info {
482 font-size: 70%;
479 font-size: 70%;
483 }
480 }
484
481
485 /* Comparison */
482 /* Comparison */
486 .legend {
483 .legend {
487 padding: 1.5% 0 1.5% 0;
484 padding: 1.5% 0 1.5% 0;
488 }
485 }
489
486
490 .legendinfo {
487 .legendinfo {
491 border: 1px solid #999;
488 border: 1px solid #999;
492 font-size: 80%;
489 font-size: 80%;
493 text-align: center;
490 text-align: center;
494 padding: 0.5%;
491 padding: 0.5%;
495 }
492 }
496
493
497 .equal {
494 .equal {
498 background-color: #ffffff;
495 background-color: #ffffff;
499 }
496 }
500
497
501 .delete {
498 .delete {
502 background-color: #faa;
499 background-color: #faa;
503 color: #333;
500 color: #333;
504 }
501 }
505
502
506 .insert {
503 .insert {
507 background-color: #ffa;
504 background-color: #ffa;
508 }
505 }
509
506
510 .replace {
507 .replace {
511 background-color: #e8e8e8;
508 background-color: #e8e8e8;
512 }
509 }
513
510
514 .header {
511 .header {
515 text-align: center;
512 text-align: center;
516 }
513 }
517
514
518 .block {
515 .block {
519 border-top: 1px solid #999;
516 border-top: 1px solid #999;
520 }
517 }
521
518
522 .breadcrumb {
519 .breadcrumb {
523 color: gray;
520 color: gray;
524 }
521 }
525
522
526 .breadcrumb a {
523 .breadcrumb a {
527 color: blue;
524 color: blue;
528 }
525 }
529
526
530 .scroll-loading {
527 .scroll-loading {
531 -webkit-animation: change_color 1s linear 0s infinite alternate;
528 -webkit-animation: change_color 1s linear 0s infinite alternate;
532 -moz-animation: change_color 1s linear 0s infinite alternate;
529 -moz-animation: change_color 1s linear 0s infinite alternate;
533 -o-animation: change_color 1s linear 0s infinite alternate;
530 -o-animation: change_color 1s linear 0s infinite alternate;
534 animation: change_color 1s linear 0s infinite alternate;
531 animation: change_color 1s linear 0s infinite alternate;
535 }
532 }
536
533
537 @-webkit-keyframes change_color {
534 @-webkit-keyframes change_color {
538 from { background-color: #A0CEFF; } to { }
535 from { background-color: #A0CEFF; } to { }
539 }
536 }
540 @-moz-keyframes change_color {
537 @-moz-keyframes change_color {
541 from { background-color: #A0CEFF; } to { }
538 from { background-color: #A0CEFF; } to { }
542 }
539 }
543 @-o-keyframes change_color {
540 @-o-keyframes change_color {
544 from { background-color: #A0CEFF; } to { }
541 from { background-color: #A0CEFF; } to { }
545 }
542 }
546 @keyframes change_color {
543 @keyframes change_color {
547 from { background-color: #A0CEFF; } to { }
544 from { background-color: #A0CEFF; } to { }
548 }
545 }
549
546
550 .scroll-loading-error {
547 .scroll-loading-error {
551 background-color: #FFCCCC !important;
548 background-color: #FFCCCC !important;
552 }
549 }
@@ -1,440 +1,433
1 #require serve
1 #require serve
2
2
3 Some tests for hgweb in an empty repository
3 Some tests for hgweb in an empty repository
4
4
5 $ hg init test
5 $ hg init test
6 $ cd test
6 $ cd test
7 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
7 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
8 $ cat hg.pid >> $DAEMON_PIDS
8 $ cat hg.pid >> $DAEMON_PIDS
9 $ (get-with-headers.py localhost:$HGPORT 'shortlog')
9 $ (get-with-headers.py localhost:$HGPORT 'shortlog')
10 200 Script output follows
10 200 Script output follows
11
11
12 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
12 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
13 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
13 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
14 <head>
14 <head>
15 <link rel="icon" href="/static/hgicon.png" type="image/png" />
15 <link rel="icon" href="/static/hgicon.png" type="image/png" />
16 <meta name="robots" content="index, nofollow" />
16 <meta name="robots" content="index, nofollow" />
17 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
17 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
18 <script type="text/javascript" src="/static/mercurial.js"></script>
18 <script type="text/javascript" src="/static/mercurial.js"></script>
19
19
20 <title>test: log</title>
20 <title>test: log</title>
21 <link rel="alternate" type="application/atom+xml"
21 <link rel="alternate" type="application/atom+xml"
22 href="/atom-log" title="Atom feed for test" />
22 href="/atom-log" title="Atom feed for test" />
23 <link rel="alternate" type="application/rss+xml"
23 <link rel="alternate" type="application/rss+xml"
24 href="/rss-log" title="RSS feed for test" />
24 href="/rss-log" title="RSS feed for test" />
25 </head>
25 </head>
26 <body>
26 <body>
27
27
28 <div class="container">
28 <div class="container">
29 <div class="menu">
29 <div class="menu">
30 <div class="logo">
30 <div class="logo">
31 <a href="https://mercurial-scm.org/">
31 <a href="https://mercurial-scm.org/">
32 <img src="/static/hglogo.png" alt="mercurial" /></a>
32 <img src="/static/hglogo.png" alt="mercurial" /></a>
33 </div>
33 </div>
34 <ul>
34 <ul>
35 <li class="active">log</li>
35 <li class="active">log</li>
36 <li><a href="/graph/tip">graph</a></li>
36 <li><a href="/graph/tip">graph</a></li>
37 <li><a href="/tags">tags</a></li>
37 <li><a href="/tags">tags</a></li>
38 <li><a href="/bookmarks">bookmarks</a></li>
38 <li><a href="/bookmarks">bookmarks</a></li>
39 <li><a href="/branches">branches</a></li>
39 <li><a href="/branches">branches</a></li>
40 </ul>
40 </ul>
41 <ul>
41 <ul>
42 <li><a href="/rev/tip">changeset</a></li>
42 <li><a href="/rev/tip">changeset</a></li>
43 <li><a href="/file/tip">browse</a></li>
43 <li><a href="/file/tip">browse</a></li>
44 </ul>
44 </ul>
45 <ul>
45 <ul>
46
46
47 </ul>
47 </ul>
48 <ul>
48 <ul>
49 <li><a href="/help">help</a></li>
49 <li><a href="/help">help</a></li>
50 </ul>
50 </ul>
51 <div class="atom-logo">
51 <div class="atom-logo">
52 <a href="/atom-log" title="subscribe to atom feed">
52 <a href="/atom-log" title="subscribe to atom feed">
53 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="atom feed" />
53 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="atom feed" />
54 </a>
54 </a>
55 </div>
55 </div>
56 </div>
56 </div>
57
57
58 <div class="main">
58 <div class="main">
59 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
59 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
60 <h3>log</h3>
60 <h3>log</h3>
61
61
62
62
63 <form class="search" action="/log">
63 <form class="search" action="/log">
64
64
65 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
65 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
66 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
66 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
67 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
67 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
68 </form>
68 </form>
69
69
70 <div class="navigate">
70 <div class="navigate">
71 <a href="/shortlog/tip?revcount=30">less</a>
71 <a href="/shortlog/tip?revcount=30">less</a>
72 <a href="/shortlog/tip?revcount=120">more</a>
72 <a href="/shortlog/tip?revcount=120">more</a>
73 | rev -1:
73 | rev -1:
74 </div>
74 </div>
75
75
76 <table class="bigtable">
76 <table class="bigtable">
77 <thead>
77 <thead>
78 <tr>
78 <tr>
79 <th class="age">age</th>
79 <th class="age">age</th>
80 <th class="author">author</th>
80 <th class="author">author</th>
81 <th class="description">description</th>
81 <th class="description">description</th>
82 </tr>
82 </tr>
83 </thead>
83 </thead>
84 <tbody class="stripes2">
84 <tbody class="stripes2">
85
85
86 </tbody>
86 </tbody>
87 </table>
87 </table>
88
88
89 <div class="navigate">
89 <div class="navigate">
90 <a href="/shortlog/tip?revcount=30">less</a>
90 <a href="/shortlog/tip?revcount=30">less</a>
91 <a href="/shortlog/tip?revcount=120">more</a>
91 <a href="/shortlog/tip?revcount=120">more</a>
92 | rev -1:
92 | rev -1:
93 </div>
93 </div>
94
94
95 <script type="text/javascript">
95 <script type="text/javascript">
96 ajaxScrollInit(
96 ajaxScrollInit(
97 '/shortlog/%next%',
97 '/shortlog/%next%',
98 '', <!-- NEXTHASH
98 '', <!-- NEXTHASH
99 function (htmlText, previousVal) {
99 function (htmlText, previousVal) {
100 var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
100 var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
101 return m ? m[1] : null;
101 return m ? m[1] : null;
102 },
102 },
103 '.bigtable > tbody',
103 '.bigtable > tbody',
104 '<tr class="%class%">\
104 '<tr class="%class%">\
105 <td colspan="3" style="text-align: center;">%text%</td>\
105 <td colspan="3" style="text-align: center;">%text%</td>\
106 </tr>'
106 </tr>'
107 );
107 );
108 </script>
108 </script>
109
109
110 </div>
110 </div>
111 </div>
111 </div>
112
112
113
113
114
114
115 </body>
115 </body>
116 </html>
116 </html>
117
117
118 $ echo babar
118 $ echo babar
119 babar
119 babar
120 $ (get-with-headers.py localhost:$HGPORT 'log')
120 $ (get-with-headers.py localhost:$HGPORT 'log')
121 200 Script output follows
121 200 Script output follows
122
122
123 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
123 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
124 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
124 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
125 <head>
125 <head>
126 <link rel="icon" href="/static/hgicon.png" type="image/png" />
126 <link rel="icon" href="/static/hgicon.png" type="image/png" />
127 <meta name="robots" content="index, nofollow" />
127 <meta name="robots" content="index, nofollow" />
128 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
128 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
129 <script type="text/javascript" src="/static/mercurial.js"></script>
129 <script type="text/javascript" src="/static/mercurial.js"></script>
130
130
131 <title>test: log</title>
131 <title>test: log</title>
132 <link rel="alternate" type="application/atom+xml"
132 <link rel="alternate" type="application/atom+xml"
133 href="/atom-log" title="Atom feed for test" />
133 href="/atom-log" title="Atom feed for test" />
134 <link rel="alternate" type="application/rss+xml"
134 <link rel="alternate" type="application/rss+xml"
135 href="/rss-log" title="RSS feed for test" />
135 href="/rss-log" title="RSS feed for test" />
136 </head>
136 </head>
137 <body>
137 <body>
138
138
139 <div class="container">
139 <div class="container">
140 <div class="menu">
140 <div class="menu">
141 <div class="logo">
141 <div class="logo">
142 <a href="https://mercurial-scm.org/">
142 <a href="https://mercurial-scm.org/">
143 <img src="/static/hglogo.png" alt="mercurial" /></a>
143 <img src="/static/hglogo.png" alt="mercurial" /></a>
144 </div>
144 </div>
145 <ul>
145 <ul>
146 <li class="active">log</li>
146 <li class="active">log</li>
147 <li><a href="/graph/tip">graph</a></li>
147 <li><a href="/graph/tip">graph</a></li>
148 <li><a href="/tags">tags</a></li>
148 <li><a href="/tags">tags</a></li>
149 <li><a href="/bookmarks">bookmarks</a></li>
149 <li><a href="/bookmarks">bookmarks</a></li>
150 <li><a href="/branches">branches</a></li>
150 <li><a href="/branches">branches</a></li>
151 </ul>
151 </ul>
152 <ul>
152 <ul>
153 <li><a href="/rev/tip">changeset</a></li>
153 <li><a href="/rev/tip">changeset</a></li>
154 <li><a href="/file/tip">browse</a></li>
154 <li><a href="/file/tip">browse</a></li>
155 </ul>
155 </ul>
156 <ul>
156 <ul>
157
157
158 </ul>
158 </ul>
159 <ul>
159 <ul>
160 <li><a href="/help">help</a></li>
160 <li><a href="/help">help</a></li>
161 </ul>
161 </ul>
162 <div class="atom-logo">
162 <div class="atom-logo">
163 <a href="/atom-log" title="subscribe to atom feed">
163 <a href="/atom-log" title="subscribe to atom feed">
164 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="atom feed" />
164 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="atom feed" />
165 </a>
165 </a>
166 </div>
166 </div>
167 </div>
167 </div>
168
168
169 <div class="main">
169 <div class="main">
170 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
170 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
171 <h3>log</h3>
171 <h3>log</h3>
172
172
173
173
174 <form class="search" action="/log">
174 <form class="search" action="/log">
175
175
176 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
176 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
177 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
177 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
178 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
178 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
179 </form>
179 </form>
180
180
181 <div class="navigate">
181 <div class="navigate">
182 <a href="/shortlog/tip?revcount=5">less</a>
182 <a href="/shortlog/tip?revcount=5">less</a>
183 <a href="/shortlog/tip?revcount=20">more</a>
183 <a href="/shortlog/tip?revcount=20">more</a>
184 | rev -1:
184 | rev -1:
185 </div>
185 </div>
186
186
187 <table class="bigtable">
187 <table class="bigtable">
188 <thead>
188 <thead>
189 <tr>
189 <tr>
190 <th class="age">age</th>
190 <th class="age">age</th>
191 <th class="author">author</th>
191 <th class="author">author</th>
192 <th class="description">description</th>
192 <th class="description">description</th>
193 </tr>
193 </tr>
194 </thead>
194 </thead>
195 <tbody class="stripes2">
195 <tbody class="stripes2">
196
196
197 </tbody>
197 </tbody>
198 </table>
198 </table>
199
199
200 <div class="navigate">
200 <div class="navigate">
201 <a href="/shortlog/tip?revcount=5">less</a>
201 <a href="/shortlog/tip?revcount=5">less</a>
202 <a href="/shortlog/tip?revcount=20">more</a>
202 <a href="/shortlog/tip?revcount=20">more</a>
203 | rev -1:
203 | rev -1:
204 </div>
204 </div>
205
205
206 <script type="text/javascript">
206 <script type="text/javascript">
207 ajaxScrollInit(
207 ajaxScrollInit(
208 '/shortlog/%next%',
208 '/shortlog/%next%',
209 '', <!-- NEXTHASH
209 '', <!-- NEXTHASH
210 function (htmlText, previousVal) {
210 function (htmlText, previousVal) {
211 var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
211 var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
212 return m ? m[1] : null;
212 return m ? m[1] : null;
213 },
213 },
214 '.bigtable > tbody',
214 '.bigtable > tbody',
215 '<tr class="%class%">\
215 '<tr class="%class%">\
216 <td colspan="3" style="text-align: center;">%text%</td>\
216 <td colspan="3" style="text-align: center;">%text%</td>\
217 </tr>'
217 </tr>'
218 );
218 );
219 </script>
219 </script>
220
220
221 </div>
221 </div>
222 </div>
222 </div>
223
223
224
224
225
225
226 </body>
226 </body>
227 </html>
227 </html>
228
228
229 $ (get-with-headers.py localhost:$HGPORT 'graph')
229 $ (get-with-headers.py localhost:$HGPORT 'graph')
230 200 Script output follows
230 200 Script output follows
231
231
232 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
232 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
233 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
233 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
234 <head>
234 <head>
235 <link rel="icon" href="/static/hgicon.png" type="image/png" />
235 <link rel="icon" href="/static/hgicon.png" type="image/png" />
236 <meta name="robots" content="index, nofollow" />
236 <meta name="robots" content="index, nofollow" />
237 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
237 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
238 <script type="text/javascript" src="/static/mercurial.js"></script>
238 <script type="text/javascript" src="/static/mercurial.js"></script>
239
239
240 <title>test: revision graph</title>
240 <title>test: revision graph</title>
241 <link rel="alternate" type="application/atom+xml"
241 <link rel="alternate" type="application/atom+xml"
242 href="/atom-log" title="Atom feed for test: log" />
242 href="/atom-log" title="Atom feed for test: log" />
243 <link rel="alternate" type="application/rss+xml"
243 <link rel="alternate" type="application/rss+xml"
244 href="/rss-log" title="RSS feed for test: log" />
244 href="/rss-log" title="RSS feed for test: log" />
245 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
245 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
246 </head>
246 </head>
247 <body>
247 <body>
248
248
249 <div class="container">
249 <div class="container">
250 <div class="menu">
250 <div class="menu">
251 <div class="logo">
251 <div class="logo">
252 <a href="https://mercurial-scm.org/">
252 <a href="https://mercurial-scm.org/">
253 <img src="/static/hglogo.png" alt="mercurial" /></a>
253 <img src="/static/hglogo.png" alt="mercurial" /></a>
254 </div>
254 </div>
255 <ul>
255 <ul>
256 <li><a href="/shortlog/tip">log</a></li>
256 <li><a href="/shortlog/tip">log</a></li>
257 <li class="active">graph</li>
257 <li class="active">graph</li>
258 <li><a href="/tags">tags</a></li>
258 <li><a href="/tags">tags</a></li>
259 <li><a href="/bookmarks">bookmarks</a></li>
259 <li><a href="/bookmarks">bookmarks</a></li>
260 <li><a href="/branches">branches</a></li>
260 <li><a href="/branches">branches</a></li>
261 </ul>
261 </ul>
262 <ul>
262 <ul>
263 <li><a href="/rev/tip">changeset</a></li>
263 <li><a href="/rev/tip">changeset</a></li>
264 <li><a href="/file/tip">browse</a></li>
264 <li><a href="/file/tip">browse</a></li>
265 </ul>
265 </ul>
266 <ul>
266 <ul>
267 <li><a href="/help">help</a></li>
267 <li><a href="/help">help</a></li>
268 </ul>
268 </ul>
269 <div class="atom-logo">
269 <div class="atom-logo">
270 <a href="/atom-log" title="subscribe to atom feed">
270 <a href="/atom-log" title="subscribe to atom feed">
271 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="atom feed" />
271 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="atom feed" />
272 </a>
272 </a>
273 </div>
273 </div>
274 </div>
274 </div>
275
275
276 <div class="main">
276 <div class="main">
277 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
277 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
278 <h3>graph</h3>
278 <h3>graph</h3>
279
279
280
280
281 <form class="search" action="/log">
281 <form class="search" action="/log">
282
282
283 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
283 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
284 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
284 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
285 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
285 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
286 </form>
286 </form>
287
287
288 <div class="navigate">
288 <div class="navigate">
289 <a href="/graph/tip?revcount=30">less</a>
289 <a href="/graph/tip?revcount=30">less</a>
290 <a href="/graph/tip?revcount=120">more</a>
290 <a href="/graph/tip?revcount=120">more</a>
291 | rev -1:
291 | rev -1:
292 </div>
292 </div>
293
293
294 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
294 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
295
295
296 <div id="wrapper">
296 <div id="wrapper">
297 <ul id="nodebgs" class="stripes2"></ul>
298 <canvas id="graph"></canvas>
297 <canvas id="graph"></canvas>
299 <ul id="graphnodes"></ul>
298 <ul id="graphnodes" class="stripes2"></ul>
300 </div>
299 </div>
301
300
302 <script type="text/javascript">
301 <script type="text/javascript">
303 var data = [];
302 var data = [];
304 var graph = new Graph();
303 var graph = new Graph();
305 graph.scale(39);
304 graph.scale(39);
306
307 graph.vertex = function(x, y, radius, color, parity, cur) {
308 Graph.prototype.vertex.apply(this, arguments);
309 return ['<li class="bg"></li>', ''];
310 }
311
312 graph.render(data);
305 graph.render(data);
313 </script>
306 </script>
314
307
315 <div class="navigate">
308 <div class="navigate">
316 <a href="/graph/tip?revcount=30">less</a>
309 <a href="/graph/tip?revcount=30">less</a>
317 <a href="/graph/tip?revcount=120">more</a>
310 <a href="/graph/tip?revcount=120">more</a>
318 | rev -1:
311 | rev -1:
319 </div>
312 </div>
320
313
321 <script type="text/javascript">
314 <script type="text/javascript">
322 ajaxScrollInit(
315 ajaxScrollInit(
323 '/graph/%next%?graphtop=0000000000000000000000000000000000000000',
316 '/graph/%next%?graphtop=0000000000000000000000000000000000000000',
324 '', <!-- NEXTHASH
317 '', <!-- NEXTHASH
325 function (htmlText, previousVal) {
318 function (htmlText, previousVal) {
326 var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
319 var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
327 return m ? m[1] : null;
320 return m ? m[1] : null;
328 },
321 },
329 '#wrapper',
322 '#wrapper',
330 '<div class="%class%" style="text-align: center;">%text%</div>',
323 '<div class="%class%" style="text-align: center;">%text%</div>',
331 'graph'
324 'graph'
332 );
325 );
333 </script>
326 </script>
334
327
335 </div>
328 </div>
336 </div>
329 </div>
337
330
338
331
339
332
340 </body>
333 </body>
341 </html>
334 </html>
342
335
343 $ (get-with-headers.py localhost:$HGPORT 'file')
336 $ (get-with-headers.py localhost:$HGPORT 'file')
344 200 Script output follows
337 200 Script output follows
345
338
346 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
339 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
347 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
340 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
348 <head>
341 <head>
349 <link rel="icon" href="/static/hgicon.png" type="image/png" />
342 <link rel="icon" href="/static/hgicon.png" type="image/png" />
350 <meta name="robots" content="index, nofollow" />
343 <meta name="robots" content="index, nofollow" />
351 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
344 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
352 <script type="text/javascript" src="/static/mercurial.js"></script>
345 <script type="text/javascript" src="/static/mercurial.js"></script>
353
346
354 <title>test: 000000000000 /</title>
347 <title>test: 000000000000 /</title>
355 </head>
348 </head>
356 <body>
349 <body>
357
350
358 <div class="container">
351 <div class="container">
359 <div class="menu">
352 <div class="menu">
360 <div class="logo">
353 <div class="logo">
361 <a href="https://mercurial-scm.org/">
354 <a href="https://mercurial-scm.org/">
362 <img src="/static/hglogo.png" alt="mercurial" /></a>
355 <img src="/static/hglogo.png" alt="mercurial" /></a>
363 </div>
356 </div>
364 <ul>
357 <ul>
365 <li><a href="/shortlog/tip">log</a></li>
358 <li><a href="/shortlog/tip">log</a></li>
366 <li><a href="/graph/tip">graph</a></li>
359 <li><a href="/graph/tip">graph</a></li>
367 <li><a href="/tags">tags</a></li>
360 <li><a href="/tags">tags</a></li>
368 <li><a href="/bookmarks">bookmarks</a></li>
361 <li><a href="/bookmarks">bookmarks</a></li>
369 <li><a href="/branches">branches</a></li>
362 <li><a href="/branches">branches</a></li>
370 </ul>
363 </ul>
371 <ul>
364 <ul>
372 <li><a href="/rev/tip">changeset</a></li>
365 <li><a href="/rev/tip">changeset</a></li>
373 <li class="active">browse</li>
366 <li class="active">browse</li>
374 </ul>
367 </ul>
375 <ul>
368 <ul>
376
369
377 </ul>
370 </ul>
378 <ul>
371 <ul>
379 <li><a href="/help">help</a></li>
372 <li><a href="/help">help</a></li>
380 </ul>
373 </ul>
381 </div>
374 </div>
382
375
383 <div class="main">
376 <div class="main">
384 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
377 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
385 <h3>
378 <h3>
386 directory / @ -1:<a href="/rev/000000000000">000000000000</a>
379 directory / @ -1:<a href="/rev/000000000000">000000000000</a>
387 <span class="tag">tip</span>
380 <span class="tag">tip</span>
388 </h3>
381 </h3>
389
382
390
383
391 <form class="search" action="/log">
384 <form class="search" action="/log">
392
385
393 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
386 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
394 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
387 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
395 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
388 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
396 </form>
389 </form>
397
390
398 <table class="bigtable">
391 <table class="bigtable">
399 <thead>
392 <thead>
400 <tr>
393 <tr>
401 <th class="name">name</th>
394 <th class="name">name</th>
402 <th class="size">size</th>
395 <th class="size">size</th>
403 <th class="permissions">permissions</th>
396 <th class="permissions">permissions</th>
404 </tr>
397 </tr>
405 </thead>
398 </thead>
406 <tbody class="stripes2">
399 <tbody class="stripes2">
407 <tr class="fileline">
400 <tr class="fileline">
408 <td class="name"><a href="/file/tip/">[up]</a></td>
401 <td class="name"><a href="/file/tip/">[up]</a></td>
409 <td class="size"></td>
402 <td class="size"></td>
410 <td class="permissions">drwxr-xr-x</td>
403 <td class="permissions">drwxr-xr-x</td>
411 </tr>
404 </tr>
412
405
413
406
414 </tbody>
407 </tbody>
415 </table>
408 </table>
416 </div>
409 </div>
417 </div>
410 </div>
418
411
419
412
420 </body>
413 </body>
421 </html>
414 </html>
422
415
423
416
424 $ (get-with-headers.py localhost:$HGPORT 'atom-bookmarks')
417 $ (get-with-headers.py localhost:$HGPORT 'atom-bookmarks')
425 200 Script output follows
418 200 Script output follows
426
419
427 <?xml version="1.0" encoding="ascii"?>
420 <?xml version="1.0" encoding="ascii"?>
428 <feed xmlns="http://www.w3.org/2005/Atom">
421 <feed xmlns="http://www.w3.org/2005/Atom">
429 <id>http://*:$HGPORT/</id> (glob)
422 <id>http://*:$HGPORT/</id> (glob)
430 <link rel="self" href="http://*:$HGPORT/atom-bookmarks"/> (glob)
423 <link rel="self" href="http://*:$HGPORT/atom-bookmarks"/> (glob)
431 <link rel="alternate" href="http://*:$HGPORT/bookmarks"/> (glob)
424 <link rel="alternate" href="http://*:$HGPORT/bookmarks"/> (glob)
432 <title>test: bookmarks</title>
425 <title>test: bookmarks</title>
433 <summary>test bookmark history</summary>
426 <summary>test bookmark history</summary>
434 <author><name>Mercurial SCM</name></author>
427 <author><name>Mercurial SCM</name></author>
435 <updated>1970-01-01T00:00:00+00:00</updated>
428 <updated>1970-01-01T00:00:00+00:00</updated>
436
429
437
430
438 </feed>
431 </feed>
439
432
440 $ cd ..
433 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now