##// END OF EJS Templates
Improved i18n on changelog and user group administration pages.
Vincent Duvert -
r2312:f6d57d05 beta
parent child Browse files
Show More
@@ -1,53 +1,53 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Users groups administration')} - ${c.rhodecode_name}
5 ${_('Users groups administration')} - ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8 <%def name="breadcrumbs_links()">
8 <%def name="breadcrumbs_links()">
9 ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Users groups')}
9 ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Users groups')}
10 </%def>
10 </%def>
11
11
12 <%def name="page_nav()">
12 <%def name="page_nav()">
13 ${self.menu('admin')}
13 ${self.menu('admin')}
14 </%def>
14 </%def>
15
15
16 <%def name="main()">
16 <%def name="main()">
17 <div class="box">
17 <div class="box">
18 <!-- box / title -->
18 <!-- box / title -->
19 <div class="title">
19 <div class="title">
20 ${self.breadcrumbs()}
20 ${self.breadcrumbs()}
21 <ul class="links">
21 <ul class="links">
22 <li>
22 <li>
23 <span>${h.link_to(_(u'ADD NEW USER GROUP'),h.url('new_users_group'))}</span>
23 <span>${h.link_to(_(u'ADD NEW USER GROUP'),h.url('new_users_group'))}</span>
24 </li>
24 </li>
25
25
26 </ul>
26 </ul>
27 </div>
27 </div>
28 <!-- end box / title -->
28 <!-- end box / title -->
29 <div class="table">
29 <div class="table">
30 <table class="table_disp">
30 <table class="table_disp">
31 <tr class="header">
31 <tr class="header">
32 <th class="left">${_('group name')}</th>
32 <th class="left">${_('group name')}</th>
33 <th class="left">${_('members')}</th>
33 <th class="left">${_('members')}</th>
34 <th class="left">${_('active')}</th>
34 <th class="left">${_('active')}</th>
35 <th class="left">${_('action')}</th>
35 <th class="left">${_('action')}</th>
36 </tr>
36 </tr>
37 %for cnt,u_group in enumerate(c.users_groups_list):
37 %for cnt,u_group in enumerate(c.users_groups_list):
38 <tr class="parity${cnt%2}">
38 <tr class="parity${cnt%2}">
39 <td>${h.link_to(u_group.users_group_name,h.url('edit_users_group', id=u_group.users_group_id))}</td>
39 <td>${h.link_to(u_group.users_group_name,h.url('edit_users_group', id=u_group.users_group_id))}</td>
40 <td><span class="tooltip" title="${', '.join(map(h.safe_unicode,[x.user.username for x in u_group.members[:50]]))}">${len(u_group.members)}</span></td>
40 <td><span class="tooltip" title="${', '.join(map(h.safe_unicode,[x.user.username for x in u_group.members[:50]]))}">${len(u_group.members)}</span></td>
41 <td>${h.bool2icon(u_group.users_group_active)}</td>
41 <td>${h.bool2icon(u_group.users_group_active)}</td>
42 <td>
42 <td>
43 ${h.form(url('users_group', id=u_group.users_group_id),method='delete')}
43 ${h.form(url('users_group', id=u_group.users_group_id),method='delete')}
44 ${h.submit('remove_','delete',id="remove_group_%s" % u_group.users_group_id,
44 ${h.submit('remove_',_('delete'),id="remove_group_%s" % u_group.users_group_id,
45 class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this users group: %s') % u_group.users_group_name+"');")}
45 class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this users group: %s') % u_group.users_group_name+"');")}
46 ${h.end_form()}
46 ${h.end_form()}
47 </td>
47 </td>
48 </tr>
48 </tr>
49 %endfor
49 %endfor
50 </table>
50 </table>
51 </div>
51 </div>
52 </div>
52 </div>
53 </%def>
53 </%def>
@@ -1,238 +1,239 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2
2
3 <%inherit file="/base/base.html"/>
3 <%inherit file="/base/base.html"/>
4
4
5 <%def name="title()">
5 <%def name="title()">
6 ${c.repo_name} ${_('Changelog')} - ${c.rhodecode_name}
6 ${c.repo_name} ${_('Changelog')} - ${c.rhodecode_name}
7 </%def>
7 </%def>
8
8
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 &raquo;
11 &raquo;
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 &raquo;
13 &raquo;
14 ${_('Changelog')} - ${_('showing ')} ${c.size if c.size <= c.total_cs else c.total_cs} ${_('out of')} ${c.total_cs} ${_('revisions')}
14 <% size = c.size if c.size <= c.total_cs else c.total_cs %>
15 ${_('Changelog')} - ${ungettext('showing %d out of %d revision', 'showing %d out of %d revisions', size) % (size, c.total_cs)}
15 </%def>
16 </%def>
16
17
17 <%def name="page_nav()">
18 <%def name="page_nav()">
18 ${self.menu('changelog')}
19 ${self.menu('changelog')}
19 </%def>
20 </%def>
20
21
21 <%def name="main()">
22 <%def name="main()">
22 <div class="box">
23 <div class="box">
23 <!-- box / title -->
24 <!-- box / title -->
24 <div class="title">
25 <div class="title">
25 ${self.breadcrumbs()}
26 ${self.breadcrumbs()}
26 </div>
27 </div>
27 <div class="table">
28 <div class="table">
28 % if c.pagination:
29 % if c.pagination:
29 <div id="graph">
30 <div id="graph">
30 <div id="graph_nodes">
31 <div id="graph_nodes">
31 <canvas id="graph_canvas"></canvas>
32 <canvas id="graph_canvas"></canvas>
32 </div>
33 </div>
33 <div id="graph_content">
34 <div id="graph_content">
34 <div class="container_header">
35 <div class="container_header">
35 ${h.form(h.url.current(),method='get')}
36 ${h.form(h.url.current(),method='get')}
36 <div class="info_box" style="float:left">
37 <div class="info_box" style="float:left">
37 ${h.submit('set',_('Show'),class_="ui-btn")}
38 ${h.submit('set',_('Show'),class_="ui-btn")}
38 ${h.text('size',size=1,value=c.size)}
39 ${h.text('size',size=1,value=c.size)}
39 ${_('revisions')}
40 ${_('revisions')}
40 </div>
41 </div>
41 ${h.end_form()}
42 ${h.end_form()}
42 <div id="rev_range_container" style="display:none"></div>
43 <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>
44 <div style="float:right">${h.select('branch_filter',c.branch_name,c.branch_filters)}</div>
44 </div>
45 </div>
45
46
46 %for cnt,cs in enumerate(c.pagination):
47 %for cnt,cs in enumerate(c.pagination):
47 <div id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}">
48 <div id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}">
48 <div class="left">
49 <div class="left">
49 <div>
50 <div>
50 ${h.checkbox(cs.short_id,class_="changeset_range")}
51 ${h.checkbox(cs.short_id,class_="changeset_range")}
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>
52 <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>
52 </div>
53 </div>
53 <div class="author">
54 <div class="author">
54 <div class="gravatar">
55 <div class="gravatar">
55 <img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),16)}"/>
56 <img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),16)}"/>
56 </div>
57 </div>
57 <div title="${cs.author}" class="user">${h.person(cs.author)}</div>
58 <div title="${cs.author}" class="user">${h.person(cs.author)}</div>
58 </div>
59 </div>
59 <div class="date">${cs.date}</div>
60 <div class="date">${cs.date}</div>
60 </div>
61 </div>
61 <div class="mid">
62 <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="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">&darr; ${_('show more')} &darr;</span></div>
64 <div class="expand"><span class="expandtext">&darr; ${_('show more')} &darr;</span></div>
64 </div>
65 </div>
65 <div class="right">
66 <div class="right">
66 <div class="changes">
67 <div class="changes">
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>
68 <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>
68 <div class="comments-container">
69 <div class="comments-container">
69 %if len(c.comments.get(cs.raw_id,[])) > 0:
70 %if len(c.comments.get(cs.raw_id,[])) > 0:
70 <div class="comments-cnt" title="${('comments')}">
71 <div class="comments-cnt" title="${('comments')}">
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)}">
72 <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)}">
72 <div class="comments-cnt">${len(c.comments[cs.raw_id])}</div>
73 <div class="comments-cnt">${len(c.comments[cs.raw_id])}</div>
73 <img src="${h.url('/images/icons/comments.png')}">
74 <img src="${h.url('/images/icons/comments.png')}">
74 </a>
75 </a>
75 </div>
76 </div>
76 %endif
77 %endif
77 </div>
78 </div>
78 </div>
79 </div>
79 %if cs.parents:
80 %if cs.parents:
80 %for p_cs in reversed(cs.parents):
81 %for p_cs in reversed(cs.parents):
81 <div class="parent">${_('Parent')}
82 <div class="parent">${_('Parent')}
82 <span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id),
83 <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>
84 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span>
84 </div>
85 </div>
85 %endfor
86 %endfor
86 %else:
87 %else:
87 <div class="parent">${_('No parents')}</div>
88 <div class="parent">${_('No parents')}</div>
88 %endif
89 %endif
89
90
90 <span class="logtags">
91 <span class="logtags">
91 %if len(cs.parents)>1:
92 %if len(cs.parents)>1:
92 <span class="merge">${_('merge')}</span>
93 <span class="merge">${_('merge')}</span>
93 %endif
94 %endif
94 %if cs.branch:
95 %if cs.branch:
95 <span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}">
96 <span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}">
96 ${h.link_to(h.shorter(cs.branch),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
97 ${h.link_to(h.shorter(cs.branch),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
97 </span>
98 </span>
98 %endif
99 %endif
99 %if h.is_hg(c.rhodecode_repo):
100 %if h.is_hg(c.rhodecode_repo):
100 %for book in cs.bookmarks:
101 %for book in cs.bookmarks:
101 <span class="bookbook" title="${'%s %s' % (_('bookmark'),book)}">
102 <span class="bookbook" title="${'%s %s' % (_('bookmark'),book)}">
102 ${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
103 ${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
103 </span>
104 </span>
104 %endfor
105 %endfor
105 %endif
106 %endif
106 %for tag in cs.tags:
107 %for tag in cs.tags:
107 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}">
108 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}">
108 ${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span>
109 ${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span>
109 %endfor
110 %endfor
110 </span>
111 </span>
111 </div>
112 </div>
112 </div>
113 </div>
113
114
114 %endfor
115 %endfor
115 <div class="pagination-wh pagination-left">
116 <div class="pagination-wh pagination-left">
116 ${c.pagination.pager('$link_previous ~2~ $link_next')}
117 ${c.pagination.pager('$link_previous ~2~ $link_next')}
117 </div>
118 </div>
118 </div>
119 </div>
119 </div>
120 </div>
120
121
121 <script type="text/javascript" src="${h.url('/js/graph.js')}"></script>
122 <script type="text/javascript" src="${h.url('/js/graph.js')}"></script>
122 <script type="text/javascript">
123 <script type="text/javascript">
123 YAHOO.util.Event.onDOMReady(function(){
124 YAHOO.util.Event.onDOMReady(function(){
124
125
125 //Monitor range checkboxes and build a link to changesets
126 //Monitor range checkboxes and build a link to changesets
126 //ranges
127 //ranges
127 var checkboxes = YUD.getElementsByClassName('changeset_range');
128 var checkboxes = YUD.getElementsByClassName('changeset_range');
128 var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}";
129 var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}";
129 YUE.on(checkboxes,'click',function(e){
130 YUE.on(checkboxes,'click',function(e){
130 var checked_checkboxes = [];
131 var checked_checkboxes = [];
131 for (pos in checkboxes){
132 for (pos in checkboxes){
132 if(checkboxes[pos].checked){
133 if(checkboxes[pos].checked){
133 checked_checkboxes.push(checkboxes[pos]);
134 checked_checkboxes.push(checkboxes[pos]);
134 }
135 }
135 }
136 }
136 if(checked_checkboxes.length>1){
137 if(checked_checkboxes.length>1){
137 var rev_end = checked_checkboxes[0].name;
138 var rev_end = checked_checkboxes[0].name;
138 var rev_start = checked_checkboxes[checked_checkboxes.length-1].name;
139 var rev_start = checked_checkboxes[checked_checkboxes.length-1].name;
139
140
140 var url = url_tmpl.replace('__REVRANGE__',
141 var url = url_tmpl.replace('__REVRANGE__',
141 rev_start+'...'+rev_end);
142 rev_start+'...'+rev_end);
142
143
143 var link = "<a href="+url+">${_('Show selected changes __S -> __E')}</a>"
144 var link = "<a href="+url+">${_('Show selected changes __S -> __E')}</a>"
144 link = link.replace('__S',rev_start);
145 link = link.replace('__S',rev_start);
145 link = link.replace('__E',rev_end);
146 link = link.replace('__E',rev_end);
146 YUD.get('rev_range_container').innerHTML = link;
147 YUD.get('rev_range_container').innerHTML = link;
147 YUD.setStyle('rev_range_container','display','');
148 YUD.setStyle('rev_range_container','display','');
148 }
149 }
149 else{
150 else{
150 YUD.setStyle('rev_range_container','display','none');
151 YUD.setStyle('rev_range_container','display','none');
151
152
152 }
153 }
153 });
154 });
154
155
155 var msgs = YUQ('.message');
156 var msgs = YUQ('.message');
156 // get first element height
157 // get first element height
157 var el = YUQ('#graph_content .container')[0];
158 var el = YUQ('#graph_content .container')[0];
158 var row_h = el.clientHeight;
159 var row_h = el.clientHeight;
159 for(var i=0;i<msgs.length;i++){
160 for(var i=0;i<msgs.length;i++){
160 var m = msgs[i];
161 var m = msgs[i];
161
162
162 var h = m.clientHeight;
163 var h = m.clientHeight;
163 var pad = YUD.getStyle(m,'padding');
164 var pad = YUD.getStyle(m,'padding');
164 if(h > row_h){
165 if(h > row_h){
165 var offset = row_h - (h+12);
166 var offset = row_h - (h+12);
166 YUD.setStyle(m.nextElementSibling,'display','block');
167 YUD.setStyle(m.nextElementSibling,'display','block');
167 YUD.setStyle(m.nextElementSibling,'margin-top',offset+'px');
168 YUD.setStyle(m.nextElementSibling,'margin-top',offset+'px');
168 };
169 };
169 }
170 }
170 YUE.on(YUQ('.expand'),'click',function(e){
171 YUE.on(YUQ('.expand'),'click',function(e){
171 var elem = e.currentTarget.parentNode.parentNode;
172 var elem = e.currentTarget.parentNode.parentNode;
172 YUD.setStyle(e.currentTarget,'display','none');
173 YUD.setStyle(e.currentTarget,'display','none');
173 YUD.setStyle(elem,'height','auto');
174 YUD.setStyle(elem,'height','auto');
174
175
175 //redraw the graph, max_w and jsdata are global vars
176 //redraw the graph, max_w and jsdata are global vars
176 set_canvas(max_w);
177 set_canvas(max_w);
177
178
178 var r = new BranchRenderer();
179 var r = new BranchRenderer();
179 r.render(jsdata,max_w);
180 r.render(jsdata,max_w);
180
181
181 })
182 })
182
183
183 // Fetch changeset details
184 // Fetch changeset details
184 YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){
185 YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){
185 var id = e.currentTarget.id
186 var id = e.currentTarget.id
186 var url = "${h.url('changelog_details',repo_name=c.repo_name,cs='__CS__')}"
187 var url = "${h.url('changelog_details',repo_name=c.repo_name,cs='__CS__')}"
187 var url = url.replace('__CS__',id);
188 var url = url.replace('__CS__',id);
188 ypjax(url,id,function(){tooltip_activate()});
189 ypjax(url,id,function(){tooltip_activate()});
189 });
190 });
190
191
191 // change branch filter
192 // change branch filter
192 YUE.on(YUD.get('branch_filter'),'change',function(e){
193 YUE.on(YUD.get('branch_filter'),'change',function(e){
193 var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value;
194 var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value;
194 var url_main = "${h.url('changelog_home',repo_name=c.repo_name)}";
195 var url_main = "${h.url('changelog_home',repo_name=c.repo_name)}";
195 var url = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}";
196 var url = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}";
196 var url = url.replace('__BRANCH__',selected_branch);
197 var url = url.replace('__BRANCH__',selected_branch);
197 if(selected_branch != ''){
198 if(selected_branch != ''){
198 window.location = url;
199 window.location = url;
199 }else{
200 }else{
200 window.location = url_main;
201 window.location = url_main;
201 }
202 }
202
203
203 });
204 });
204
205
205 function set_canvas(heads) {
206 function set_canvas(heads) {
206 var c = document.getElementById('graph_nodes');
207 var c = document.getElementById('graph_nodes');
207 var t = document.getElementById('graph_content');
208 var t = document.getElementById('graph_content');
208 canvas = document.getElementById('graph_canvas');
209 canvas = document.getElementById('graph_canvas');
209 var div_h = t.clientHeight;
210 var div_h = t.clientHeight;
210 c.style.height=div_h+'px';
211 c.style.height=div_h+'px';
211 canvas.setAttribute('height',div_h);
212 canvas.setAttribute('height',div_h);
212 c.style.height=max_w+'px';
213 c.style.height=max_w+'px';
213 canvas.setAttribute('width',max_w);
214 canvas.setAttribute('width',max_w);
214 };
215 };
215 var heads = 1;
216 var heads = 1;
216 var max_heads = 0;
217 var max_heads = 0;
217 var jsdata = ${c.jsdata|n};
218 var jsdata = ${c.jsdata|n};
218
219
219 for( var i=0;i<jsdata.length;i++){
220 for( var i=0;i<jsdata.length;i++){
220 var m = Math.max.apply(Math, jsdata[i][1]);
221 var m = Math.max.apply(Math, jsdata[i][1]);
221 if (m>max_heads){
222 if (m>max_heads){
222 max_heads = m;
223 max_heads = m;
223 }
224 }
224 }
225 }
225 var max_w = Math.max(100,max_heads*25);
226 var max_w = Math.max(100,max_heads*25);
226 set_canvas(max_w);
227 set_canvas(max_w);
227
228
228 var r = new BranchRenderer();
229 var r = new BranchRenderer();
229 r.render(jsdata,max_w);
230 r.render(jsdata,max_w);
230
231
231 });
232 });
232 </script>
233 </script>
233 %else:
234 %else:
234 ${_('There are no changes yet')}
235 ${_('There are no changes yet')}
235 %endif
236 %endif
236 </div>
237 </div>
237 </div>
238 </div>
238 </%def>
239 </%def>
General Comments 0
You need to be logged in to leave comments. Login now