Show More
@@ -1,110 +1,113 | |||||
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}atom-log" title="Atom feed for {repo|escape}: log"> |
|
4 | href="{url}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}rss-log" title="RSS feed for {repo|escape}: log"> |
|
6 | href="{url}rss-log" title="RSS feed for {repo|escape}: log"> | |
7 | <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]--> |
|
7 | <!--[if IE]><script type="text/javascript" src="{staticurl}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="http://www.selenic.com/mercurial/"> |
|
14 | <a href="http://www.selenic.com/mercurial/"> | |
15 | <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a> |
|
15 | <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a> | |
16 | </div> |
|
16 | </div> | |
17 | <ul> |
|
17 | <ul> | |
18 | <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li> |
|
18 | <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li> | |
19 | <li class="active">graph</li> |
|
19 | <li class="active">graph</li> | |
20 | <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li> |
|
20 | <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li> | |
21 | </ul> |
|
21 | </ul> | |
22 | <ul> |
|
22 | <ul> | |
23 | <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li> |
|
23 | <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li> | |
24 | <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li> |
|
24 | <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li> | |
25 | </ul> |
|
25 | </ul> | |
26 | </div> |
|
26 | </div> | |
27 |
|
27 | |||
28 | <div class="main"> |
|
28 | <div class="main"> | |
29 | <h2>{repo|escape}</h2> |
|
29 | <h2>{repo|escape}</h2> | |
30 | <h3>graph</h3> |
|
30 | <h3>graph</h3> | |
31 |
|
31 | |||
32 | <form class="search" action="{url}log"> |
|
32 | <form class="search" action="{url}log"> | |
33 | {sessionvars%hiddenformentry} |
|
33 | {sessionvars%hiddenformentry} | |
34 | <p><input name="rev" id="search1" type="text" size="30"></p> |
|
34 | <p><input name="rev" id="search1" type="text" size="30"></p> | |
35 | </form> |
|
35 | </form> | |
36 |
|
36 | |||
37 | <div class="navigate"> |
|
37 | <div class="navigate"> | |
38 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountless}">less</a> |
|
38 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountless}">less</a> | |
39 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountmore}">more</a> |
|
39 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountmore}">more</a> | |
40 | | {changenav%navgraphentry} |
|
40 | | {changenav%navgraphentry} | |
41 | </div> |
|
41 | </div> | |
42 |
|
42 | |||
43 | <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div> |
|
43 | <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div> | |
44 |
|
44 | |||
45 | <div id="wrapper"> |
|
45 | <div id="wrapper"> | |
46 | <ul id="nodebgs"></ul> |
|
46 | <ul id="nodebgs"></ul> | |
47 | <canvas id="graph" width="224" height="{canvasheight}"></canvas> |
|
47 | <canvas id="graph" width="224" height="{canvasheight}"></canvas> | |
48 | <ul id="graphnodes"></ul> |
|
48 | <ul id="graphnodes"></ul> | |
49 | </div> |
|
49 | </div> | |
50 |
|
50 | |||
51 | <script type="text/javascript" src="{staticurl}graph.js"></script> |
|
51 | <script type="text/javascript" src="{staticurl}graph.js"></script> | |
52 | <script> |
|
52 | <script> | |
|
53 | <!-- hide script content | |||
53 |
|
54 | |||
54 |
document.getElementById('noscript').style. |
|
55 | document.getElementById('noscript').style.display = 'none'; | |
55 |
|
56 | |||
56 | data = {jsdata|json}; |
|
57 | data = {jsdata|json}; | |
57 | graph = new Graph(); |
|
58 | graph = new Graph(); | |
58 | graph.scale({bg_height}); |
|
59 | graph.scale({bg_height}); | |
59 |
|
60 | |||
60 | graph.edge = function(x0, y0, x1, y1, color) { |
|
61 | graph.edge = function(x0, y0, x1, y1, color) { | |
61 |
|
62 | |||
62 | this.setColor(color, 0.0, 0.65); |
|
63 | this.setColor(color, 0.0, 0.65); | |
63 | this.ctx.beginPath(); |
|
64 | this.ctx.beginPath(); | |
64 | this.ctx.moveTo(x0, y0); |
|
65 | this.ctx.moveTo(x0, y0); | |
65 | this.ctx.lineTo(x1, y1); |
|
66 | this.ctx.lineTo(x1, y1); | |
66 | this.ctx.stroke(); |
|
67 | this.ctx.stroke(); | |
67 |
|
68 | |||
68 | } |
|
69 | } | |
69 |
|
70 | |||
70 | var revlink = '<li style="_STYLE"><span class="desc">'; |
|
71 | var revlink = '<li style="_STYLE"><span class="desc">'; | |
71 | revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>'; |
|
72 | revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>'; | |
72 | revlink += '</span><span class="tag">_TAGS</span>'; |
|
73 | revlink += '</span><span class="tag">_TAGS</span>'; | |
73 | revlink += '<span class="info">_DATE ago, by _USER</span></li>'; |
|
74 | revlink += '<span class="info">_DATE ago, by _USER</span></li>'; | |
74 |
|
75 | |||
75 | graph.vertex = function(x, y, color, parity, cur) { |
|
76 | graph.vertex = function(x, y, color, parity, cur) { | |
76 |
|
77 | |||
77 | this.ctx.beginPath(); |
|
78 | this.ctx.beginPath(); | |
78 | color = this.setColor(color, 0.25, 0.75); |
|
79 | color = this.setColor(color, 0.25, 0.75); | |
79 | this.ctx.arc(x, y, radius, 0, Math.PI * 2, true); |
|
80 | this.ctx.arc(x, y, radius, 0, Math.PI * 2, true); | |
80 | this.ctx.fill(); |
|
81 | this.ctx.fill(); | |
81 |
|
82 | |||
82 | var bg = '<li class="bg parity' + parity + '"></li>'; |
|
83 | var bg = '<li class="bg parity' + parity + '"></li>'; | |
83 | var left = (this.columns + 1) * this.bg_height; |
|
84 | var left = (this.columns + 1) * this.bg_height; | |
84 | var nstyle = 'padding-left: ' + left + 'px;'; |
|
85 | var nstyle = 'padding-left: ' + left + 'px;'; | |
85 | var item = revlink.replace(/_STYLE/, nstyle); |
|
86 | var item = revlink.replace(/_STYLE/, nstyle); | |
86 | item = item.replace(/_PARITY/, 'parity' + parity); |
|
87 | item = item.replace(/_PARITY/, 'parity' + parity); | |
87 | item = item.replace(/_NODEID/, cur[0]); |
|
88 | item = item.replace(/_NODEID/, cur[0]); | |
88 | item = item.replace(/_NODEID/, cur[0]); |
|
89 | item = item.replace(/_NODEID/, cur[0]); | |
89 | item = item.replace(/_DESC/, cur[3]); |
|
90 | item = item.replace(/_DESC/, cur[3]); | |
90 | item = item.replace(/_USER/, cur[4]); |
|
91 | item = item.replace(/_USER/, cur[4]); | |
91 | item = item.replace(/_DATE/, cur[5]); |
|
92 | item = item.replace(/_DATE/, cur[5]); | |
92 | item = item.replace(/_TAGS/, cur[7].join(' ')); |
|
93 | item = item.replace(/_TAGS/, cur[7].join(' ')); | |
93 |
|
94 | |||
94 | return [bg, item]; |
|
95 | return [bg, item]; | |
95 |
|
96 | |||
96 | } |
|
97 | } | |
97 |
|
98 | |||
98 | graph.render(data); |
|
99 | graph.render(data); | |
|
100 | ||||
|
101 | // stop hiding script --> | |||
99 | </script> |
|
102 | </script> | |
100 |
|
103 | |||
101 | <div class="navigate"> |
|
104 | <div class="navigate"> | |
102 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountless}">less</a> |
|
105 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountless}">less</a> | |
103 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountmore}">more</a> |
|
106 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountmore}">more</a> | |
104 | | {changenav%navgraphentry} |
|
107 | | {changenav%navgraphentry} | |
105 | </div> |
|
108 | </div> | |
106 |
|
109 | |||
107 | </div> |
|
110 | </div> | |
108 | </div> |
|
111 | </div> | |
109 |
|
112 | |||
110 | {footer} |
|
113 | {footer} |
@@ -1,118 +1,121 | |||||
1 | #header# |
|
1 | #header# | |
2 | <title>#repo|escape#: Graph</title> |
|
2 | <title>#repo|escape#: Graph</title> | |
3 | <link rel="alternate" type="application/atom+xml" |
|
3 | <link rel="alternate" type="application/atom+xml" | |
4 | href="{url}atom-log" title="Atom feed for #repo|escape#"/> |
|
4 | href="{url}atom-log" title="Atom feed for #repo|escape#"/> | |
5 | <link rel="alternate" type="application/rss+xml" |
|
5 | <link rel="alternate" type="application/rss+xml" | |
6 | href="{url}rss-log" title="RSS feed for #repo|escape#"/> |
|
6 | href="{url}rss-log" title="RSS feed for #repo|escape#"/> | |
7 | </head> |
|
7 | </head> | |
8 | <body> |
|
8 | <body> | |
9 |
|
9 | |||
10 | <div class="page_header"> |
|
10 | <div class="page_header"> | |
11 | <a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / graph |
|
11 | <a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / graph | |
12 | </div> |
|
12 | </div> | |
13 |
|
13 | |||
14 | <form action="{url}log"> |
|
14 | <form action="{url}log"> | |
15 | {sessionvars%hiddenformentry} |
|
15 | {sessionvars%hiddenformentry} | |
16 | <div class="search"> |
|
16 | <div class="search"> | |
17 | <input type="text" name="rev" /> |
|
17 | <input type="text" name="rev" /> | |
18 | </div> |
|
18 | </div> | |
19 | </form> |
|
19 | </form> | |
20 | <div class="page_nav"> |
|
20 | <div class="page_nav"> | |
21 | <a href="{url}summary{sessionvars%urlparameter}">summary</a> | |
|
21 | <a href="{url}summary{sessionvars%urlparameter}">summary</a> | | |
22 | <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> | |
|
22 | <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> | | |
23 | <a href="{url}log/#rev#{sessionvars%urlparameter}">changelog</a> | |
|
23 | <a href="{url}log/#rev#{sessionvars%urlparameter}">changelog</a> | | |
24 | graph | |
|
24 | graph | | |
25 | <a href="{url}tags{sessionvars%urlparameter}">tags</a> | |
|
25 | <a href="{url}tags{sessionvars%urlparameter}">tags</a> | | |
26 | <a href="{url}file/#node|short#{sessionvars%urlparameter}">files</a> |
|
26 | <a href="{url}file/#node|short#{sessionvars%urlparameter}">files</a> | |
27 | <br/> |
|
27 | <br/> | |
28 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountless}">less</a> |
|
28 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountless}">less</a> | |
29 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountmore}">more</a> |
|
29 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountmore}">more</a> | |
30 | | #changenav%navgraphentry#<br/> |
|
30 | | #changenav%navgraphentry#<br/> | |
31 | </div> |
|
31 | </div> | |
32 |
|
32 | |||
33 | <div class="title"> </div> |
|
33 | <div class="title"> </div> | |
34 |
|
34 | |||
35 | <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div> |
|
35 | <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div> | |
36 |
|
36 | |||
37 | <div id="wrapper"> |
|
37 | <div id="wrapper"> | |
38 | <ul id="nodebgs"></ul> |
|
38 | <ul id="nodebgs"></ul> | |
39 | <canvas id="graph" width="224" height="#canvasheight#"></canvas> |
|
39 | <canvas id="graph" width="224" height="#canvasheight#"></canvas> | |
40 | <ul id="graphnodes"></ul> |
|
40 | <ul id="graphnodes"></ul> | |
41 | </div> |
|
41 | </div> | |
42 |
|
42 | |||
43 | <script type="text/javascript" src="#staticurl#graph.js"></script> |
|
43 | <script type="text/javascript" src="#staticurl#graph.js"></script> | |
44 | <script> |
|
44 | <script> | |
|
45 | <!-- hide script content | |||
45 |
|
46 | |||
46 |
document.getElementById('noscript').style. |
|
47 | document.getElementById('noscript').style.display = 'none'; | |
47 |
|
48 | |||
48 | data = {jsdata|json}; |
|
49 | data = {jsdata|json}; | |
49 | graph = new Graph(); |
|
50 | graph = new Graph(); | |
50 | graph.scale({bg_height}); |
|
51 | graph.scale({bg_height}); | |
51 |
|
52 | |||
52 | graph.edge = function(x0, y0, x1, y1, color) { |
|
53 | graph.edge = function(x0, y0, x1, y1, color) { | |
53 |
|
54 | |||
54 | this.setColor(color, 0.0, 0.65); |
|
55 | this.setColor(color, 0.0, 0.65); | |
55 | this.ctx.beginPath(); |
|
56 | this.ctx.beginPath(); | |
56 | this.ctx.moveTo(x0, y0); |
|
57 | this.ctx.moveTo(x0, y0); | |
57 | this.ctx.lineTo(x1, y1); |
|
58 | this.ctx.lineTo(x1, y1); | |
58 | this.ctx.stroke(); |
|
59 | this.ctx.stroke(); | |
59 |
|
60 | |||
60 | } |
|
61 | } | |
61 |
|
62 | |||
62 | var revlink = '<li style="_STYLE"><span class="desc">'; |
|
63 | var revlink = '<li style="_STYLE"><span class="desc">'; | |
63 | revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>'; |
|
64 | revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>'; | |
64 | revlink += '</span> _TAGS'; |
|
65 | revlink += '</span> _TAGS'; | |
65 | revlink += '<span class="info">_DATE ago, by _USER</span></li>'; |
|
66 | revlink += '<span class="info">_DATE ago, by _USER</span></li>'; | |
66 |
|
67 | |||
67 | graph.vertex = function(x, y, color, parity, cur) { |
|
68 | graph.vertex = function(x, y, color, parity, cur) { | |
68 |
|
69 | |||
69 | this.ctx.beginPath(); |
|
70 | this.ctx.beginPath(); | |
70 | color = this.setColor(color, 0.25, 0.75); |
|
71 | color = this.setColor(color, 0.25, 0.75); | |
71 | this.ctx.arc(x, y, radius, 0, Math.PI * 2, true); |
|
72 | this.ctx.arc(x, y, radius, 0, Math.PI * 2, true); | |
72 | this.ctx.fill(); |
|
73 | this.ctx.fill(); | |
73 |
|
74 | |||
74 | var bg = '<li class="bg parity' + parity + '"></li>'; |
|
75 | var bg = '<li class="bg parity' + parity + '"></li>'; | |
75 | var left = (this.columns + 1) * this.bg_height; |
|
76 | var left = (this.columns + 1) * this.bg_height; | |
76 | var nstyle = 'padding-left: ' + left + 'px;'; |
|
77 | var nstyle = 'padding-left: ' + left + 'px;'; | |
77 | var item = revlink.replace(/_STYLE/, nstyle); |
|
78 | var item = revlink.replace(/_STYLE/, nstyle); | |
78 | item = item.replace(/_PARITY/, 'parity' + parity); |
|
79 | item = item.replace(/_PARITY/, 'parity' + parity); | |
79 | item = item.replace(/_NODEID/, cur[0]); |
|
80 | item = item.replace(/_NODEID/, cur[0]); | |
80 | item = item.replace(/_NODEID/, cur[0]); |
|
81 | item = item.replace(/_NODEID/, cur[0]); | |
81 | item = item.replace(/_DESC/, cur[3]); |
|
82 | item = item.replace(/_DESC/, cur[3]); | |
82 | item = item.replace(/_USER/, cur[4]); |
|
83 | item = item.replace(/_USER/, cur[4]); | |
83 | item = item.replace(/_DATE/, cur[5]); |
|
84 | item = item.replace(/_DATE/, cur[5]); | |
84 |
|
85 | |||
85 | var tagspan = ''; |
|
86 | var tagspan = ''; | |
86 | if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) { |
|
87 | if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) { | |
87 | tagspan = '<span class="logtags">'; |
|
88 | tagspan = '<span class="logtags">'; | |
88 | if (cur[6][1]) { |
|
89 | if (cur[6][1]) { | |
89 | tagspan += '<span class="branchtag" title="' + cur[6][0] + '">'; |
|
90 | tagspan += '<span class="branchtag" title="' + cur[6][0] + '">'; | |
90 | tagspan += cur[6][0] + '</span> '; |
|
91 | tagspan += cur[6][0] + '</span> '; | |
91 | } else if (!cur[6][1] && cur[6][0] != 'default') { |
|
92 | } else if (!cur[6][1] && cur[6][0] != 'default') { | |
92 | tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">'; |
|
93 | tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">'; | |
93 | tagspan += cur[6][0] + '</span> '; |
|
94 | tagspan += cur[6][0] + '</span> '; | |
94 | } |
|
95 | } | |
95 | if (cur[7].length) { |
|
96 | if (cur[7].length) { | |
96 | for (var t in cur[7]) { |
|
97 | for (var t in cur[7]) { | |
97 | var tag = cur[7][t]; |
|
98 | var tag = cur[7][t]; | |
98 | tagspan += '<span class="tagtag">' + tag + '</span> '; |
|
99 | tagspan += '<span class="tagtag">' + tag + '</span> '; | |
99 | } |
|
100 | } | |
100 | } |
|
101 | } | |
101 | tagspan += '</span>'; |
|
102 | tagspan += '</span>'; | |
102 | } |
|
103 | } | |
103 |
|
104 | |||
104 | item = item.replace(/_TAGS/, tagspan); |
|
105 | item = item.replace(/_TAGS/, tagspan); | |
105 | return [bg, item]; |
|
106 | return [bg, item]; | |
106 |
|
107 | |||
107 | } |
|
108 | } | |
108 |
|
109 | |||
109 | graph.render(data); |
|
110 | graph.render(data); | |
|
111 | ||||
|
112 | // stop hiding script --> | |||
110 | </script> |
|
113 | </script> | |
111 |
|
114 | |||
112 | <div class="page_nav"> |
|
115 | <div class="page_nav"> | |
113 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountless}">less</a> |
|
116 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountless}">less</a> | |
114 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountmore}">more</a> |
|
117 | <a href="{url}graph/{uprev}{sessionvars%urlparameter}?revcount={revcountmore}">more</a> | |
115 | | {changenav%navgraphentry} |
|
118 | | {changenav%navgraphentry} | |
116 | </div> |
|
119 | </div> | |
117 |
|
120 | |||
118 | #footer# |
|
121 | #footer# |
@@ -1,93 +1,96 | |||||
1 | #header# |
|
1 | #header# | |
2 | <title>#repo|escape#: graph</title> |
|
2 | <title>#repo|escape#: graph</title> | |
3 | <link rel="alternate" type="application/atom+xml" |
|
3 | <link rel="alternate" type="application/atom+xml" | |
4 | href="#url#atom-tags" title="Atom feed for #repo|escape#: tags"> |
|
4 | href="#url#atom-tags" title="Atom feed for #repo|escape#: tags"> | |
5 | <link rel="alternate" type="application/rss+xml" |
|
5 | <link rel="alternate" type="application/rss+xml" | |
6 | href="#url#rss-tags" title="RSS feed for #repo|escape#: tags"> |
|
6 | href="#url#rss-tags" title="RSS feed for #repo|escape#: tags"> | |
7 | </head> |
|
7 | </head> | |
8 | <body> |
|
8 | <body> | |
9 |
|
9 | |||
10 | <div class="buttons"> |
|
10 | <div class="buttons"> | |
11 | <a href="#url#log{sessionvars%urlparameter}">changelog</a> |
|
11 | <a href="#url#log{sessionvars%urlparameter}">changelog</a> | |
12 | <a href="#url#shortlog{sessionvars%urlparameter}">shortlog</a> |
|
12 | <a href="#url#shortlog{sessionvars%urlparameter}">shortlog</a> | |
13 | <a href="#url#tags{sessionvars%urlparameter}">tags</a> |
|
13 | <a href="#url#tags{sessionvars%urlparameter}">tags</a> | |
14 | <a href="#url#file/#node|short#/{sessionvars%urlparameter}">files</a> |
|
14 | <a href="#url#file/#node|short#/{sessionvars%urlparameter}">files</a> | |
15 | </div> |
|
15 | </div> | |
16 |
|
16 | |||
17 | <h2>graph</h2> |
|
17 | <h2>graph</h2> | |
18 |
|
18 | |||
19 | <form action="#url#log"> |
|
19 | <form action="#url#log"> | |
20 | {sessionvars%hiddenformentry} |
|
20 | {sessionvars%hiddenformentry} | |
21 | <p> |
|
21 | <p> | |
22 | <label for="search1">search:</label> |
|
22 | <label for="search1">search:</label> | |
23 | <input name="rev" id="search1" type="text" size="30"> |
|
23 | <input name="rev" id="search1" type="text" size="30"> | |
24 | navigate: <small class="navigate">#changenav%navgraphentry#</small> |
|
24 | navigate: <small class="navigate">#changenav%navgraphentry#</small> | |
25 | </p> |
|
25 | </p> | |
26 | </form> |
|
26 | </form> | |
27 |
|
27 | |||
28 | <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div> |
|
28 | <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div> | |
29 |
|
29 | |||
30 | <div id="wrapper"> |
|
30 | <div id="wrapper"> | |
31 | <ul id="nodebgs"></ul> |
|
31 | <ul id="nodebgs"></ul> | |
32 | <canvas id="graph" width="224" height="#canvasheight#"></canvas> |
|
32 | <canvas id="graph" width="224" height="#canvasheight#"></canvas> | |
33 | <ul id="graphnodes"></ul> |
|
33 | <ul id="graphnodes"></ul> | |
34 | </div> |
|
34 | </div> | |
35 |
|
35 | |||
36 | <script type="text/javascript" src="#staticurl#graph.js"></script> |
|
36 | <script type="text/javascript" src="#staticurl#graph.js"></script> | |
37 | <script> |
|
37 | <script> | |
|
38 | <!-- hide script content | |||
38 |
|
39 | |||
39 |
document.getElementById('noscript').style. |
|
40 | document.getElementById('noscript').style.display = 'none'; | |
40 |
|
41 | |||
41 | data = {jsdata|json}; |
|
42 | data = {jsdata|json}; | |
42 | graph = new Graph(); |
|
43 | graph = new Graph(); | |
43 | graph.scale({bg_height}); |
|
44 | graph.scale({bg_height}); | |
44 |
|
45 | |||
45 | graph.edge = function(x0, y0, x1, y1, color) { |
|
46 | graph.edge = function(x0, y0, x1, y1, color) { | |
46 |
|
47 | |||
47 | this.setColor(color, 0.0, 0.65); |
|
48 | this.setColor(color, 0.0, 0.65); | |
48 | this.ctx.beginPath(); |
|
49 | this.ctx.beginPath(); | |
49 | this.ctx.moveTo(x0, y0); |
|
50 | this.ctx.moveTo(x0, y0); | |
50 | this.ctx.lineTo(x1, y1); |
|
51 | this.ctx.lineTo(x1, y1); | |
51 | this.ctx.stroke(); |
|
52 | this.ctx.stroke(); | |
52 |
|
53 | |||
53 | } |
|
54 | } | |
54 |
|
55 | |||
55 | var revlink = '<li style="_STYLE"><span class="desc">'; |
|
56 | var revlink = '<li style="_STYLE"><span class="desc">'; | |
56 | revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>'; |
|
57 | revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>'; | |
57 | revlink += '</span><span class="info">_DATE ago, by _USER</span></li>'; |
|
58 | revlink += '</span><span class="info">_DATE ago, by _USER</span></li>'; | |
58 |
|
59 | |||
59 | graph.vertex = function(x, y, color, parity, cur) { |
|
60 | graph.vertex = function(x, y, color, parity, cur) { | |
60 |
|
61 | |||
61 | this.ctx.beginPath(); |
|
62 | this.ctx.beginPath(); | |
62 | color = this.setColor(color, 0.25, 0.75); |
|
63 | color = this.setColor(color, 0.25, 0.75); | |
63 | this.ctx.arc(x, y, radius, 0, Math.PI * 2, true); |
|
64 | this.ctx.arc(x, y, radius, 0, Math.PI * 2, true); | |
64 | this.ctx.fill(); |
|
65 | this.ctx.fill(); | |
65 |
|
66 | |||
66 | var bg = '<li class="bg parity' + parity + '"></li>'; |
|
67 | var bg = '<li class="bg parity' + parity + '"></li>'; | |
67 | var left = (this.columns + 1) * this.bg_height; |
|
68 | var left = (this.columns + 1) * this.bg_height; | |
68 | var nstyle = 'padding-left: ' + left + 'px;'; |
|
69 | var nstyle = 'padding-left: ' + left + 'px;'; | |
69 | var item = revlink.replace(/_STYLE/, nstyle); |
|
70 | var item = revlink.replace(/_STYLE/, nstyle); | |
70 | item = item.replace(/_PARITY/, 'parity' + parity); |
|
71 | item = item.replace(/_PARITY/, 'parity' + parity); | |
71 | item = item.replace(/_NODEID/, cur[0]); |
|
72 | item = item.replace(/_NODEID/, cur[0]); | |
72 | item = item.replace(/_NODEID/, cur[0]); |
|
73 | item = item.replace(/_NODEID/, cur[0]); | |
73 | item = item.replace(/_DESC/, cur[3]); |
|
74 | item = item.replace(/_DESC/, cur[3]); | |
74 | item = item.replace(/_USER/, cur[4]); |
|
75 | item = item.replace(/_USER/, cur[4]); | |
75 | item = item.replace(/_DATE/, cur[5]); |
|
76 | item = item.replace(/_DATE/, cur[5]); | |
76 |
|
77 | |||
77 | return [bg, item]; |
|
78 | return [bg, item]; | |
78 |
|
79 | |||
79 | } |
|
80 | } | |
80 |
|
81 | |||
81 | graph.render(data); |
|
82 | graph.render(data); | |
|
83 | ||||
|
84 | // stop hiding script --> | |||
82 | </script> |
|
85 | </script> | |
83 |
|
86 | |||
84 | <form action="#url#log"> |
|
87 | <form action="#url#log"> | |
85 | {sessionvars%hiddenformentry} |
|
88 | {sessionvars%hiddenformentry} | |
86 | <p> |
|
89 | <p> | |
87 | <label for="search1">search:</label> |
|
90 | <label for="search1">search:</label> | |
88 | <input name="rev" id="search1" type="text" size="30"> |
|
91 | <input name="rev" id="search1" type="text" size="30"> | |
89 | navigate: <small class="navigate">#changenav%navgraphentry#</small> |
|
92 | navigate: <small class="navigate">#changenav%navgraphentry#</small> | |
90 | </p> |
|
93 | </p> | |
91 | </form> |
|
94 | </form> | |
92 |
|
95 | |||
93 | #footer# |
|
96 | #footer# |
@@ -1,122 +1,123 | |||||
1 | body { font-family: sans-serif; font-size: 12px; margin:0px; border:solid #d9d8d1; border-width:1px; margin:10px; } |
|
1 | body { font-family: sans-serif; font-size: 12px; margin:0px; border:solid #d9d8d1; border-width:1px; margin:10px; } | |
2 | a { color:#0000cc; } |
|
2 | a { color:#0000cc; } | |
3 | a:hover, a:visited, a:active { color:#880000; } |
|
3 | a:hover, a:visited, a:active { color:#880000; } | |
4 | div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; } |
|
4 | div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; } | |
5 | div.page_header a:visited { color:#0000cc; } |
|
5 | div.page_header a:visited { color:#0000cc; } | |
6 | div.page_header a:hover { color:#880000; } |
|
6 | div.page_header a:hover { color:#880000; } | |
7 | div.page_nav { padding:8px; } |
|
7 | div.page_nav { padding:8px; } | |
8 | div.page_nav a:visited { color:#0000cc; } |
|
8 | div.page_nav a:visited { color:#0000cc; } | |
9 | div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px} |
|
9 | div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px} | |
10 | div.page_footer { padding:4px 8px; background-color: #d9d8d1; } |
|
10 | div.page_footer { padding:4px 8px; background-color: #d9d8d1; } | |
11 | div.page_footer_text { float:left; color:#555555; font-style:italic; } |
|
11 | div.page_footer_text { float:left; color:#555555; font-style:italic; } | |
12 | div.page_body { padding:8px; } |
|
12 | div.page_body { padding:8px; } | |
13 | div.title, a.title { |
|
13 | div.title, a.title { | |
14 | display:block; padding:6px 8px; |
|
14 | display:block; padding:6px 8px; | |
15 | font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000; |
|
15 | font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000; | |
16 | } |
|
16 | } | |
17 | a.title:hover { background-color: #d9d8d1; } |
|
17 | a.title:hover { background-color: #d9d8d1; } | |
18 | div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; } |
|
18 | div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; } | |
19 | div.log_body { padding:8px 8px 8px 150px; } |
|
19 | div.log_body { padding:8px 8px 8px 150px; } | |
20 | .age { white-space:nowrap; } |
|
20 | .age { white-space:nowrap; } | |
21 | span.age { position:relative; float:left; width:142px; font-style:italic; } |
|
21 | span.age { position:relative; float:left; width:142px; font-style:italic; } | |
22 | div.log_link { |
|
22 | div.log_link { | |
23 | padding:0px 8px; |
|
23 | padding:0px 8px; | |
24 | font-size:10px; font-family:sans-serif; font-style:normal; |
|
24 | font-size:10px; font-family:sans-serif; font-style:normal; | |
25 | position:relative; float:left; width:136px; |
|
25 | position:relative; float:left; width:136px; | |
26 | } |
|
26 | } | |
27 | div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; } |
|
27 | div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; } | |
28 | a.list { text-decoration:none; color:#000000; } |
|
28 | a.list { text-decoration:none; color:#000000; } | |
29 | a.list:hover { text-decoration:underline; color:#880000; } |
|
29 | a.list:hover { text-decoration:underline; color:#880000; } | |
30 | table { padding:8px 4px; } |
|
30 | table { padding:8px 4px; } | |
31 | th { padding:2px 5px; font-size:12px; text-align:left; } |
|
31 | th { padding:2px 5px; font-size:12px; text-align:left; } | |
32 | tr.light:hover, .parity0:hover { background-color:#edece6; } |
|
32 | tr.light:hover, .parity0:hover { background-color:#edece6; } | |
33 | tr.dark, .parity1 { background-color:#f6f6f0; } |
|
33 | tr.dark, .parity1 { background-color:#f6f6f0; } | |
34 | tr.dark:hover, .parity1:hover { background-color:#edece6; } |
|
34 | tr.dark:hover, .parity1:hover { background-color:#edece6; } | |
35 | td { padding:2px 5px; font-size:12px; vertical-align:top; } |
|
35 | td { padding:2px 5px; font-size:12px; vertical-align:top; } | |
36 | td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; } |
|
36 | td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; } | |
37 | td.indexlinks { white-space: nowrap; } |
|
37 | td.indexlinks { white-space: nowrap; } | |
38 | td.indexlinks a { |
|
38 | td.indexlinks a { | |
39 | padding: 2px 5px; line-height: 10px; |
|
39 | padding: 2px 5px; line-height: 10px; | |
40 | border: 1px solid; |
|
40 | border: 1px solid; | |
41 | color: #ffffff; background-color: #7777bb; |
|
41 | color: #ffffff; background-color: #7777bb; | |
42 | border-color: #aaaadd #333366 #333366 #aaaadd; |
|
42 | border-color: #aaaadd #333366 #333366 #aaaadd; | |
43 | font-weight: bold; text-align: center; text-decoration: none; |
|
43 | font-weight: bold; text-align: center; text-decoration: none; | |
44 | font-size: 10px; |
|
44 | font-size: 10px; | |
45 | } |
|
45 | } | |
46 | td.indexlinks a:hover { background-color: #6666aa; } |
|
46 | td.indexlinks a:hover { background-color: #6666aa; } | |
47 | div.pre { font-family:monospace; font-size:12px; white-space:pre; } |
|
47 | div.pre { font-family:monospace; font-size:12px; white-space:pre; } | |
48 | div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; } |
|
48 | div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; } | |
49 | div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; } |
|
49 | div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; } | |
50 | div.search { margin:4px 8px; position:absolute; top:56px; right:12px } |
|
50 | div.search { margin:4px 8px; position:absolute; top:56px; right:12px } | |
51 | .linenr { color:#999999; text-decoration:none } |
|
51 | .linenr { color:#999999; text-decoration:none } | |
52 | div.rss_logo { float: right; white-space: nowrap; } |
|
52 | div.rss_logo { float: right; white-space: nowrap; } | |
53 | div.rss_logo a { |
|
53 | div.rss_logo a { | |
54 | padding:3px 6px; line-height:10px; |
|
54 | padding:3px 6px; line-height:10px; | |
55 | border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e; |
|
55 | border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e; | |
56 | color:#ffffff; background-color:#ff6600; |
|
56 | color:#ffffff; background-color:#ff6600; | |
57 | font-weight:bold; font-family:sans-serif; font-size:10px; |
|
57 | font-weight:bold; font-family:sans-serif; font-size:10px; | |
58 | text-align:center; text-decoration:none; |
|
58 | text-align:center; text-decoration:none; | |
59 | } |
|
59 | } | |
60 | div.rss_logo a:hover { background-color:#ee5500; } |
|
60 | div.rss_logo a:hover { background-color:#ee5500; } | |
61 | pre { margin: 0; } |
|
61 | pre { margin: 0; } | |
62 | span.logtags span { |
|
62 | span.logtags span { | |
63 | padding: 0px 4px; |
|
63 | padding: 0px 4px; | |
64 | font-size: 10px; |
|
64 | font-size: 10px; | |
65 | font-weight: normal; |
|
65 | font-weight: normal; | |
66 | border: 1px solid; |
|
66 | border: 1px solid; | |
67 | background-color: #ffaaff; |
|
67 | background-color: #ffaaff; | |
68 | border-color: #ffccff #ff00ee #ff00ee #ffccff; |
|
68 | border-color: #ffccff #ff00ee #ff00ee #ffccff; | |
69 | } |
|
69 | } | |
70 | span.logtags span.tagtag { |
|
70 | span.logtags span.tagtag { | |
71 | background-color: #ffffaa; |
|
71 | background-color: #ffffaa; | |
72 | border-color: #ffffcc #ffee00 #ffee00 #ffffcc; |
|
72 | border-color: #ffffcc #ffee00 #ffee00 #ffffcc; | |
73 | } |
|
73 | } | |
74 | span.logtags span.branchtag { |
|
74 | span.logtags span.branchtag { | |
75 | background-color: #aaffaa; |
|
75 | background-color: #aaffaa; | |
76 | border-color: #ccffcc #00cc33 #00cc33 #ccffcc; |
|
76 | border-color: #ccffcc #00cc33 #00cc33 #ccffcc; | |
77 | } |
|
77 | } | |
78 | span.logtags span.inbranchtag { |
|
78 | span.logtags span.inbranchtag { | |
79 | background-color: #d5dde6; |
|
79 | background-color: #d5dde6; | |
80 | border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4; |
|
80 | border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4; | |
81 | } |
|
81 | } | |
82 |
|
82 | |||
83 | /* Graph */ |
|
83 | /* Graph */ | |
84 | div#wrapper { |
|
84 | div#wrapper { | |
85 | position: relative; |
|
85 | position: relative; | |
86 | margin: 0; |
|
86 | margin: 0; | |
87 | padding: 0; |
|
87 | padding: 0; | |
|
88 | margin-top: 3px; | |||
88 | } |
|
89 | } | |
89 |
|
90 | |||
90 | canvas { |
|
91 | canvas { | |
91 | position: absolute; |
|
92 | position: absolute; | |
92 | z-index: 5; |
|
93 | z-index: 5; | |
93 | top: -0.9em; |
|
94 | top: -0.9em; | |
94 | margin: 0; |
|
95 | margin: 0; | |
95 | } |
|
96 | } | |
96 |
|
97 | |||
97 | ul#nodebgs { |
|
98 | ul#nodebgs { | |
98 | list-style: none inside none; |
|
99 | list-style: none inside none; | |
99 | padding: 0; |
|
100 | padding: 0; | |
100 | margin: 0; |
|
101 | margin: 0; | |
101 | top: -0.7em; |
|
102 | top: -0.7em; | |
102 | } |
|
103 | } | |
103 |
|
104 | |||
104 | ul#graphnodes li, ul#nodebgs li { |
|
105 | ul#graphnodes li, ul#nodebgs li { | |
105 | height: 39px; |
|
106 | height: 39px; | |
106 | } |
|
107 | } | |
107 |
|
108 | |||
108 | ul#graphnodes { |
|
109 | ul#graphnodes { | |
109 | position: absolute; |
|
110 | position: absolute; | |
110 | z-index: 10; |
|
111 | z-index: 10; | |
111 | top: -0.8em; |
|
112 | top: -0.8em; | |
112 | list-style: none inside none; |
|
113 | list-style: none inside none; | |
113 | padding: 0; |
|
114 | padding: 0; | |
114 | } |
|
115 | } | |
115 |
|
116 | |||
116 | ul#graphnodes li .info { |
|
117 | ul#graphnodes li .info { | |
117 | display: block; |
|
118 | display: block; | |
118 | font-size: 100%; |
|
119 | font-size: 100%; | |
119 | position: relative; |
|
120 | position: relative; | |
120 | top: -3px; |
|
121 | top: -3px; | |
121 | font-style: italic; |
|
122 | font-style: italic; | |
122 | } |
|
123 | } |
General Comments 0
You need to be logged in to leave comments.
Login now