Mercurial > kallithea
comparison rhodecode/templates/changelog/changelog.html @ 2031:82a88013a3fd
merge 1.3 into stable
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 26 Feb 2012 17:25:09 +0200 |
parents | bf263968da47 7a7ffe24b82c |
children | dc2584ba5fbc |
comparison
equal
deleted
inserted
replaced
2005:ab0e122b38a7 | 2031:82a88013a3fd |
---|---|
9 <%def name="breadcrumbs_links()"> | 9 <%def name="breadcrumbs_links()"> |
10 ${h.link_to(u'Home',h.url('/'))} | 10 ${h.link_to(u'Home',h.url('/'))} |
11 » | 11 » |
12 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))} | 12 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))} |
13 » | 13 » |
14 ${_('Changelog')} - ${_('showing ')} ${c.size if c.size <= c.total_cs else c.total_cs} ${_('out of')} ${c.total_cs} ${_('revisions')} | 14 ${_('Changelog')} - ${_('showing ')} ${c.size if c.size <= c.total_cs else c.total_cs} ${_('out of')} ${c.total_cs} ${_('revisions')} |
15 </%def> | 15 </%def> |
16 | 16 |
17 <%def name="page_nav()"> | 17 <%def name="page_nav()"> |
18 ${self.menu('changelog')} | 18 ${self.menu('changelog')} |
19 </%def> | 19 </%def> |
20 | 20 |
21 <%def name="main()"> | 21 <%def name="main()"> |
22 <div class="box"> | 22 <div class="box"> |
23 <!-- box / title --> | 23 <!-- box / title --> |
31 <canvas id="graph_canvas"></canvas> | 31 <canvas id="graph_canvas"></canvas> |
32 </div> | 32 </div> |
33 <div id="graph_content"> | 33 <div id="graph_content"> |
34 <div class="container_header"> | 34 <div class="container_header"> |
35 ${h.form(h.url.current(),method='get')} | 35 ${h.form(h.url.current(),method='get')} |
36 <div class="info_box"> | 36 <div class="info_box" style="float:left"> |
37 ${h.submit('set',_('Show'),class_="ui-button-small")} | 37 ${h.submit('set',_('Show'),class_="ui-btn")} |
38 ${h.text('size',size=1,value=c.size)} | 38 ${h.text('size',size=1,value=c.size)} |
39 <span class="rev">${_('revisions')}</span> | 39 ${_('revisions')} |
40 </div> | 40 </div> |
41 ${h.end_form()} | 41 ${h.end_form()} |
42 <div id="rev_range_container" style="display:none"></div> | 42 <div id="rev_range_container" style="display:none"></div> |
43 <div style="float:right">${h.select('branch_filter',c.branch_name,c.branch_filters)}</div> | |
43 </div> | 44 </div> |
44 | 45 |
45 %for cnt,cs in enumerate(c.pagination): | 46 %for cnt,cs in enumerate(c.pagination): |
46 <div id="chg_${cnt+1}" class="container"> | 47 <div id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}"> |
47 <div class="left"> | 48 <div class="left"> |
48 <div class="date"> | 49 <div> |
49 ${h.checkbox(cs.short_id,class_="changeset_range")} | 50 ${h.checkbox(cs.short_id,class_="changeset_range")} |
50 <span>${_('commit')} ${cs.revision}: ${h.short_id(cs.raw_id)}@${cs.date}</span> | 51 <span class="tooltip" title="${h.age(cs.date)}"><a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"><span class="changeset_id">${cs.revision}:<span class="changeset_hash">${h.short_id(cs.raw_id)}</span></span></a></span> |
51 </div> | 52 </div> |
52 <div class="author"> | 53 <div class="author"> |
53 <div class="gravatar"> | 54 <div class="gravatar"> |
54 <img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),16)}"/> | 55 <img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),16)}"/> |
55 </div> | 56 </div> |
56 <div title="${h.email_or_none(cs.author)}" class="user">${h.person(cs.author)}</div> | 57 <div title="${cs.author}" class="user">${h.person(cs.author)}</div> |
57 ##<span><a href="mailto:${h.email_or_none(cs.author)}">${h.email_or_none(cs.author)}</a></span><br/> | |
58 </div> | 58 </div> |
59 <div class="message">${h.link_to(h.wrap_paragraphs(cs.message),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div> | 59 <div class="date">${cs.date}</div> |
60 </div> | 60 </div> |
61 <div class="mid"> | |
62 <div class="message">${h.urlify_commit(h.wrap_paragraphs(cs.message),c.repo_name,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div> | |
63 <div class="expand"><span class="expandtext">↓ ${_('show more')} ↓</span></div> | |
64 </div> | |
61 <div class="right"> | 65 <div class="right"> |
62 <div id="${cs.raw_id}_changes_info" class="changes"> | 66 <div id="${cs.raw_id}_changes_info" class="changes"> |
63 <span id="${cs.raw_id}" class="changed_total tooltip" title="${_('Affected number of files, click to show more details')}">${len(cs.affected_files)}</span> | 67 <div id="${cs.raw_id}" style="float:right;" class="changed_total tooltip" title="${_('Affected number of files, click to show more details')}">${len(cs.affected_files)}</div> |
64 </div> | 68 <div class="comments-container"> |
65 %if len(cs.parents)>1: | 69 %if len(c.comments.get(cs.raw_id,[])) > 0: |
66 <div class="merge"> | 70 <div class="comments-cnt" title="${('comments')}"> |
67 ${_('merge')}<img alt="merge" src="${h.url('/images/icons/arrow_join.png')}"/> | 71 <a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}"> |
68 </div> | 72 <div class="comments-cnt">${len(c.comments[cs.raw_id])}</div> |
69 %endif | 73 <img src="${h.url('/images/icons/comments.png')}"> |
70 %if cs.parents: | 74 </a> |
75 </div> | |
76 %endif | |
77 </div> | |
78 </div> | |
79 %if cs.parents: | |
71 %for p_cs in reversed(cs.parents): | 80 %for p_cs in reversed(cs.parents): |
72 <div class="parent">${_('Parent')} ${p_cs.revision}: ${h.link_to(h.short_id(p_cs.raw_id), | 81 <div class="parent">${_('Parent')} |
73 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)} | 82 <span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id), |
83 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span> | |
74 </div> | 84 </div> |
75 %endfor | 85 %endfor |
76 %else: | 86 %else: |
77 <div class="parent">${_('No parents')}</div> | 87 <div class="parent">${_('No parents')}</div> |
78 %endif | 88 %endif |
79 | 89 |
80 <span class="logtags"> | 90 <span class="logtags"> |
81 %if cs.branch: | 91 %if len(cs.parents)>1: |
92 <span class="merge">${_('merge')}</span> | |
93 %endif | |
94 %if h.is_hg(c.rhodecode_repo) and cs.branch: | |
82 <span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}"> | 95 <span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}"> |
83 ${h.link_to(cs.branch,h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span> | 96 ${h.link_to(cs.branch,h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span> |
84 %endif | 97 %endif |
85 %for tag in cs.tags: | 98 %for tag in cs.tags: |
86 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}"> | 99 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}"> |
87 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span> | 100 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span> |
88 %endfor | 101 %endfor |
89 </span> | 102 </span> |
90 </div> | 103 </div> |
91 </div> | 104 </div> |
92 | 105 |
93 %endfor | 106 %endfor |
94 <div class="pagination-wh pagination-left"> | 107 <div class="pagination-wh pagination-left"> |
95 ${c.pagination.pager('$link_previous ~2~ $link_next')} | 108 ${c.pagination.pager('$link_previous ~2~ $link_next')} |
96 </div> | 109 </div> |
97 </div> | 110 </div> |
98 </div> | 111 </div> |
99 | 112 |
100 <script type="text/javascript" src="${h.url('/js/graph.js')}"></script> | 113 <script type="text/javascript" src="${h.url('/js/graph.js')}"></script> |
101 <script type="text/javascript"> | 114 <script type="text/javascript"> |
102 YAHOO.util.Event.onDOMReady(function(){ | 115 YAHOO.util.Event.onDOMReady(function(){ |
103 | 116 |
104 //Monitor range checkboxes and build a link to changesets | 117 //Monitor range checkboxes and build a link to changesets |
105 //ranges | 118 //ranges |
106 var checkboxes = YUD.getElementsByClassName('changeset_range'); | 119 var checkboxes = YUD.getElementsByClassName('changeset_range'); |
107 var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}"; | 120 var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}"; |
108 YUE.on(checkboxes,'click',function(e){ | 121 YUE.on(checkboxes,'click',function(e){ |
109 var checked_checkboxes = []; | 122 var checked_checkboxes = []; |
110 for (pos in checkboxes){ | 123 for (pos in checkboxes){ |
111 if(checkboxes[pos].checked){ | 124 if(checkboxes[pos].checked){ |
112 checked_checkboxes.push(checkboxes[pos]); | 125 checked_checkboxes.push(checkboxes[pos]); |
113 } | 126 } |
114 } | 127 } |
115 if(checked_checkboxes.length>1){ | 128 if(checked_checkboxes.length>1){ |
116 var rev_end = checked_checkboxes[0].name; | 129 var rev_end = checked_checkboxes[0].name; |
117 var rev_start = checked_checkboxes[checked_checkboxes.length-1].name; | 130 var rev_start = checked_checkboxes[checked_checkboxes.length-1].name; |
118 | 131 |
119 var url = url_tmpl.replace('__REVRANGE__', | 132 var url = url_tmpl.replace('__REVRANGE__', |
120 rev_start+'...'+rev_end); | 133 rev_start+'...'+rev_end); |
121 | 134 |
122 var link = "<a href="+url+">${_('Show selected changes __S -> __E')}</a>" | 135 var link = "<a href="+url+">${_('Show selected changes __S -> __E')}</a>" |
123 link = link.replace('__S',rev_start); | 136 link = link.replace('__S',rev_start); |
124 link = link.replace('__E',rev_end); | 137 link = link.replace('__E',rev_end); |
125 YUD.get('rev_range_container').innerHTML = link; | 138 YUD.get('rev_range_container').innerHTML = link; |
126 YUD.setStyle('rev_range_container','display',''); | 139 YUD.setStyle('rev_range_container','display',''); |
127 } | 140 } |
128 else{ | 141 else{ |
129 YUD.setStyle('rev_range_container','display','none'); | 142 YUD.setStyle('rev_range_container','display','none'); |
130 | 143 |
131 } | 144 } |
132 }); | 145 }); |
133 | 146 |
134 //Fetch changeset details | 147 var msgs = YUQ('.message'); |
148 // get first element height | |
149 var el = YUQ('#graph_content .container')[0]; | |
150 var row_h = el.clientHeight; | |
151 for(var i=0;i<msgs.length;i++){ | |
152 var m = msgs[i]; | |
153 | |
154 var h = m.clientHeight; | |
155 var pad = YUD.getStyle(m,'padding'); | |
156 if(h > row_h){ | |
157 var offset = row_h - (h+12); | |
158 YUD.setStyle(m.nextElementSibling,'display','block'); | |
159 YUD.setStyle(m.nextElementSibling,'margin-top',offset+'px'); | |
160 }; | |
161 } | |
162 YUE.on(YUQ('.expand'),'click',function(e){ | |
163 var elem = e.currentTarget.parentNode.parentNode; | |
164 YUD.setStyle(e.currentTarget,'display','none'); | |
165 YUD.setStyle(elem,'height','auto'); | |
166 | |
167 //redraw the graph, max_w and jsdata are global vars | |
168 set_canvas(max_w); | |
169 | |
170 var r = new BranchRenderer(); | |
171 r.render(jsdata,max_w); | |
172 | |
173 }) | |
174 | |
175 // Fetch changeset details | |
135 YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){ | 176 YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){ |
136 var id = e.currentTarget.id | 177 var id = e.currentTarget.id |
137 var url = "${h.url('changelog_details',repo_name=c.repo_name,cs='__CS__')}" | 178 var url = "${h.url('changelog_details',repo_name=c.repo_name,cs='__CS__')}" |
138 var url = url.replace('__CS__',id); | 179 var url = url.replace('__CS__',id); |
139 ypjax(url,id+'_changes_info',function(){tooltip_activate()}); | 180 ypjax(url,id+'_changes_info',function(){tooltip_activate()}); |
140 }); | 181 }); |
141 | 182 |
142 | 183 // change branch filter |
184 YUE.on(YUD.get('branch_filter'),'change',function(e){ | |
185 var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value; | |
186 var url_main = "${h.url('changelog_home',repo_name=c.repo_name)}"; | |
187 var url = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}"; | |
188 var url = url.replace('__BRANCH__',selected_branch); | |
189 if(selected_branch != ''){ | |
190 window.location = url; | |
191 }else{ | |
192 window.location = url_main; | |
193 } | |
194 | |
195 }); | |
196 | |
143 function set_canvas(heads) { | 197 function set_canvas(heads) { |
144 var c = document.getElementById('graph_nodes'); | 198 var c = document.getElementById('graph_nodes'); |
145 var t = document.getElementById('graph_content'); | 199 var t = document.getElementById('graph_content'); |
146 canvas = document.getElementById('graph_canvas'); | 200 canvas = document.getElementById('graph_canvas'); |
147 var div_h = t.clientHeight; | 201 var div_h = t.clientHeight; |
151 canvas.setAttribute('width',max_w); | 205 canvas.setAttribute('width',max_w); |
152 }; | 206 }; |
153 var heads = 1; | 207 var heads = 1; |
154 var max_heads = 0; | 208 var max_heads = 0; |
155 var jsdata = ${c.jsdata|n}; | 209 var jsdata = ${c.jsdata|n}; |
156 | 210 |
157 for( var i=0;i<jsdata.length;i++){ | 211 for( var i=0;i<jsdata.length;i++){ |
158 var m = Math.max.apply(Math, jsdata[i][1]); | 212 var m = Math.max.apply(Math, jsdata[i][1]); |
159 if (m>max_heads){ | 213 if (m>max_heads){ |
160 max_heads = m; | 214 max_heads = m; |
161 } | 215 } |
162 } | 216 } |
163 var max_w = Math.max(100,max_heads*25); | 217 var max_w = Math.max(100,max_heads*25); |
164 set_canvas(max_w); | 218 set_canvas(max_w); |
165 | 219 |
166 var r = new BranchRenderer(); | 220 var r = new BranchRenderer(); |
167 r.render(jsdata,max_w); | 221 r.render(jsdata,max_w); |
168 | 222 |
169 }); | 223 }); |
170 </script> | 224 </script> |
171 %else: | 225 %else: |
172 ${_('There are no changes yet')} | 226 ${_('There are no changes yet')} |
173 %endif | 227 %endif |
174 </div> | 228 </div> |
175 </div> | 229 </div> |
176 </%def> | 230 </%def> |