##// END OF EJS Templates
labels for users in "commit activity"
Vladislav Poluhin -
r1921:4237cae4 beta
parent child Browse files
Show More
@@ -1,698 +1,700 b''
1 <%inherit file="/base/base.html"/>
1 <%inherit file="/base/base.html"/>
2
2
3 <%def name="title()">
3 <%def name="title()">
4 ${c.repo_name} ${_('Summary')} - ${c.rhodecode_name}
4 ${c.repo_name} ${_('Summary')} - ${c.rhodecode_name}
5 </%def>
5 </%def>
6
6
7 <%def name="breadcrumbs_links()">
7 <%def name="breadcrumbs_links()">
8 ${h.link_to(u'Home',h.url('/'))}
8 ${h.link_to(u'Home',h.url('/'))}
9 &raquo;
9 &raquo;
10 ${h.link_to(c.dbrepo.just_name,h.url('summary_home',repo_name=c.repo_name))}
10 ${h.link_to(c.dbrepo.just_name,h.url('summary_home',repo_name=c.repo_name))}
11 &raquo;
11 &raquo;
12 ${_('summary')}
12 ${_('summary')}
13 </%def>
13 </%def>
14
14
15 <%def name="page_nav()">
15 <%def name="page_nav()">
16 ${self.menu('summary')}
16 ${self.menu('summary')}
17 </%def>
17 </%def>
18
18
19 <%def name="main()">
19 <%def name="main()">
20 <%
20 <%
21 summary = lambda n:{False:'summary-short'}.get(n)
21 summary = lambda n:{False:'summary-short'}.get(n)
22 %>
22 %>
23 %if c.show_stats:
23 %if c.show_stats:
24 <div class="box box-left">
24 <div class="box box-left">
25 %else:
25 %else:
26 <div class="box">
26 <div class="box">
27 %endif
27 %endif
28 <!-- box / title -->
28 <!-- box / title -->
29 <div class="title">
29 <div class="title">
30 ${self.breadcrumbs()}
30 ${self.breadcrumbs()}
31 </div>
31 </div>
32 <!-- end box / title -->
32 <!-- end box / title -->
33 <div class="form">
33 <div class="form">
34 <div id="summary" class="fields">
34 <div id="summary" class="fields">
35
35
36 <div class="field">
36 <div class="field">
37 <div class="label-summary">
37 <div class="label-summary">
38 <label>${_('Name')}:</label>
38 <label>${_('Name')}:</label>
39 </div>
39 </div>
40 <div class="input ${summary(c.show_stats)}">
40 <div class="input ${summary(c.show_stats)}">
41 <div style="float:right;padding:5px 0px 0px 5px">
41 <div style="float:right;padding:5px 0px 0px 5px">
42 %if c.rhodecode_user.username != 'default':
42 %if c.rhodecode_user.username != 'default':
43 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='rss_icon')}
43 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='rss_icon')}
44 ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='atom_icon')}
44 ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='atom_icon')}
45 %else:
45 %else:
46 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name),class_='rss_icon')}
46 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name),class_='rss_icon')}
47 ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='atom_icon')}
47 ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='atom_icon')}
48 %endif
48 %endif
49 </div>
49 </div>
50 %if c.rhodecode_user.username != 'default':
50 %if c.rhodecode_user.username != 'default':
51 %if c.following:
51 %if c.following:
52 <span id="follow_toggle" class="following" title="${_('Stop following this repository')}"
52 <span id="follow_toggle" class="following" title="${_('Stop following this repository')}"
53 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
53 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
54 </span>
54 </span>
55 %else:
55 %else:
56 <span id="follow_toggle" class="follow" title="${_('Start following this repository')}"
56 <span id="follow_toggle" class="follow" title="${_('Start following this repository')}"
57 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
57 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
58 </span>
58 </span>
59 %endif
59 %endif
60 %endif:
60 %endif:
61 ##REPO TYPE
61 ##REPO TYPE
62 %if c.dbrepo.repo_type =='hg':
62 %if c.dbrepo.repo_type =='hg':
63 <img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
63 <img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
64 %endif
64 %endif
65 %if c.dbrepo.repo_type =='git':
65 %if c.dbrepo.repo_type =='git':
66 <img style="margin-bottom:2px" class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
66 <img style="margin-bottom:2px" class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
67 %endif
67 %endif
68
68
69 ##PUBLIC/PRIVATE
69 ##PUBLIC/PRIVATE
70 %if c.dbrepo.private:
70 %if c.dbrepo.private:
71 <img style="margin-bottom:2px" class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url('/images/icons/lock.png')}"/>
71 <img style="margin-bottom:2px" class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url('/images/icons/lock.png')}"/>
72 %else:
72 %else:
73 <img style="margin-bottom:2px" class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
73 <img style="margin-bottom:2px" class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
74 %endif
74 %endif
75
75
76 ##REPO NAME
76 ##REPO NAME
77 <span class="repo_name" title="${_('Non changable ID %s') % c.dbrepo.repo_id}">${h.repo_link(c.dbrepo.groups_and_repo)}</span>
77 <span class="repo_name" title="${_('Non changable ID %s') % c.dbrepo.repo_id}">${h.repo_link(c.dbrepo.groups_and_repo)}</span>
78
78
79 ##FORK
79 ##FORK
80 %if c.dbrepo.fork:
80 %if c.dbrepo.fork:
81 <div style="margin-top:5px;clear:both"">
81 <div style="margin-top:5px;clear:both"">
82 <a href="${h.url('summary_home',repo_name=c.dbrepo.fork.repo_name)}"><img class="icon" alt="${_('public')}" title="${_('Fork of')} ${c.dbrepo.fork.repo_name}" src="${h.url('/images/icons/arrow_divide.png')}"/>
82 <a href="${h.url('summary_home',repo_name=c.dbrepo.fork.repo_name)}"><img class="icon" alt="${_('public')}" title="${_('Fork of')} ${c.dbrepo.fork.repo_name}" src="${h.url('/images/icons/arrow_divide.png')}"/>
83 ${_('Fork of')} ${c.dbrepo.fork.repo_name}
83 ${_('Fork of')} ${c.dbrepo.fork.repo_name}
84 </a>
84 </a>
85 </div>
85 </div>
86 %endif
86 %endif
87 ##REMOTE
87 ##REMOTE
88 %if c.dbrepo.clone_uri:
88 %if c.dbrepo.clone_uri:
89 <div style="margin-top:5px;clear:both">
89 <div style="margin-top:5px;clear:both">
90 <a href="${h.url(str(h.hide_credentials(c.dbrepo.clone_uri)))}"><img class="icon" alt="${_('remote clone')}" title="${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}" src="${h.url('/images/icons/connect.png')}"/>
90 <a href="${h.url(str(h.hide_credentials(c.dbrepo.clone_uri)))}"><img class="icon" alt="${_('remote clone')}" title="${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}" src="${h.url('/images/icons/connect.png')}"/>
91 ${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}
91 ${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}
92 </a>
92 </a>
93 </div>
93 </div>
94 %endif
94 %endif
95 </div>
95 </div>
96 </div>
96 </div>
97
97
98 <div class="field">
98 <div class="field">
99 <div class="label-summary">
99 <div class="label-summary">
100 <label>${_('Description')}:</label>
100 <label>${_('Description')}:</label>
101 </div>
101 </div>
102 <div class="input ${summary(c.show_stats)} desc">${h.urlify_text(c.dbrepo.description)}</div>
102 <div class="input ${summary(c.show_stats)} desc">${h.urlify_text(c.dbrepo.description)}</div>
103 </div>
103 </div>
104
104
105 <div class="field">
105 <div class="field">
106 <div class="label-summary">
106 <div class="label-summary">
107 <label>${_('Contact')}:</label>
107 <label>${_('Contact')}:</label>
108 </div>
108 </div>
109 <div class="input ${summary(c.show_stats)}">
109 <div class="input ${summary(c.show_stats)}">
110 <div class="gravatar">
110 <div class="gravatar">
111 <img alt="gravatar" src="${h.gravatar_url(c.dbrepo.user.email)}"/>
111 <img alt="gravatar" src="${h.gravatar_url(c.dbrepo.user.email)}"/>
112 </div>
112 </div>
113 ${_('Username')}: ${c.dbrepo.user.username}<br/>
113 ${_('Username')}: ${c.dbrepo.user.username}<br/>
114 ${_('Name')}: ${c.dbrepo.user.name} ${c.dbrepo.user.lastname}<br/>
114 ${_('Name')}: ${c.dbrepo.user.name} ${c.dbrepo.user.lastname}<br/>
115 ${_('Email')}: <a href="mailto:${c.dbrepo.user.email}">${c.dbrepo.user.email}</a>
115 ${_('Email')}: <a href="mailto:${c.dbrepo.user.email}">${c.dbrepo.user.email}</a>
116 </div>
116 </div>
117 </div>
117 </div>
118
118
119 <div class="field">
119 <div class="field">
120 <div class="label-summary">
120 <div class="label-summary">
121 <label>${_('Clone url')}:</label>
121 <label>${_('Clone url')}:</label>
122 </div>
122 </div>
123 <div class="input ${summary(c.show_stats)}">
123 <div class="input ${summary(c.show_stats)}">
124 <div style="display:none" id="clone_by_name" class="ui-btn clone">${_('Show by Name')}</div>
124 <div style="display:none" id="clone_by_name" class="ui-btn clone">${_('Show by Name')}</div>
125 <div id="clone_by_id" class="ui-btn clone">${_('Show by ID')}</div>
125 <div id="clone_by_id" class="ui-btn clone">${_('Show by ID')}</div>
126 <input style="width:80%;margin-left:105px" type="text" id="clone_url" readonly="readonly" value="${c.clone_repo_url}"/>
126 <input style="width:80%;margin-left:105px" type="text" id="clone_url" readonly="readonly" value="${c.clone_repo_url}"/>
127 <input style="display:none;width:80%;margin-left:105px" type="text" id="clone_url_id" readonly="readonly" value="${c.clone_repo_url_id}"/>
127 <input style="display:none;width:80%;margin-left:105px" type="text" id="clone_url_id" readonly="readonly" value="${c.clone_repo_url_id}"/>
128 </div>
128 </div>
129 </div>
129 </div>
130
130
131 <div class="field">
131 <div class="field">
132 <div class="label-summary">
132 <div class="label-summary">
133 <label>${_('Trending files')}:</label>
133 <label>${_('Trending files')}:</label>
134 </div>
134 </div>
135 <div class="input ${summary(c.show_stats)}">
135 <div class="input ${summary(c.show_stats)}">
136 %if c.show_stats:
136 %if c.show_stats:
137 <div id="lang_stats"></div>
137 <div id="lang_stats"></div>
138 %else:
138 %else:
139 ${_('Statistics are disabled for this repository')}
139 ${_('Statistics are disabled for this repository')}
140 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
140 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
141 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
141 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
142 %endif
142 %endif
143 %endif
143 %endif
144 </div>
144 </div>
145 </div>
145 </div>
146
146
147 <div class="field">
147 <div class="field">
148 <div class="label-summary">
148 <div class="label-summary">
149 <label>${_('Download')}:</label>
149 <label>${_('Download')}:</label>
150 </div>
150 </div>
151 <div class="input ${summary(c.show_stats)}">
151 <div class="input ${summary(c.show_stats)}">
152 %if len(c.rhodecode_repo.revisions) == 0:
152 %if len(c.rhodecode_repo.revisions) == 0:
153 ${_('There are no downloads yet')}
153 ${_('There are no downloads yet')}
154 %elif c.enable_downloads is False:
154 %elif c.enable_downloads is False:
155 ${_('Downloads are disabled for this repository')}
155 ${_('Downloads are disabled for this repository')}
156 %if h.HasPermissionAll('hg.admin')('enable downloads on from summary'):
156 %if h.HasPermissionAll('hg.admin')('enable downloads on from summary'):
157 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
157 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
158 %endif
158 %endif
159 %else:
159 %else:
160 ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)}
160 ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)}
161 <span id="${'zip_link'}">${h.link_to('Download as zip',h.url('files_archive_home',repo_name=c.dbrepo.repo_name,fname='tip.zip'),class_="archive_icon ui-btn")}</span>
161 <span id="${'zip_link'}">${h.link_to('Download as zip',h.url('files_archive_home',repo_name=c.dbrepo.repo_name,fname='tip.zip'),class_="archive_icon ui-btn")}</span>
162 <span style="vertical-align: bottom">
162 <span style="vertical-align: bottom">
163 <input id="archive_subrepos" type="checkbox" name="subrepos" />
163 <input id="archive_subrepos" type="checkbox" name="subrepos" />
164 <label for="archive_subrepos" class="tooltip" title="${_('Check this to download archive with subrepos')}" >${_('with subrepos')}</label>
164 <label for="archive_subrepos" class="tooltip" title="${_('Check this to download archive with subrepos')}" >${_('with subrepos')}</label>
165 </span>
165 </span>
166 %endif
166 %endif
167 </div>
167 </div>
168 </div>
168 </div>
169 </div>
169 </div>
170 </div>
170 </div>
171 </div>
171 </div>
172
172
173 %if c.show_stats:
173 %if c.show_stats:
174 <div class="box box-right" style="min-height:455px">
174 <div class="box box-right" style="min-height:455px">
175 <!-- box / title -->
175 <!-- box / title -->
176 <div class="title">
176 <div class="title">
177 <h5>${_('Commit activity by day / author')}</h5>
177 <h5>${_('Commit activity by day / author')}</h5>
178 </div>
178 </div>
179
179
180 <div class="graph">
180 <div class="graph">
181 <div style="padding:0 10px 10px 15px;font-size: 1.2em;">
181 <div style="padding:0 10px 10px 15px;font-size: 1.2em;">
182 %if c.no_data:
182 %if c.no_data:
183 ${c.no_data_msg}
183 ${c.no_data_msg}
184 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
184 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
185 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
185 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
186 %endif
186 %endif
187 %else:
187 %else:
188 ${_('Loaded in')} ${c.stats_percentage} %
188 ${_('Loaded in')} ${c.stats_percentage} %
189 %endif
189 %endif
190 </div>
190 </div>
191 <div id="commit_history" style="width:450px;height:300px;float:left"></div>
191 <div id="commit_history" style="width:450px;height:300px;float:left"></div>
192 <div style="clear: both;height: 10px"></div>
192 <div style="clear: both;height: 10px"></div>
193 <div id="overview" style="width:450px;height:100px;float:left"></div>
193 <div id="overview" style="width:450px;height:100px;float:left"></div>
194
194
195 <div id="legend_data" style="clear:both;margin-top:10px;">
195 <div id="legend_data" style="clear:both;margin-top:10px;">
196 <div id="legend_container"></div>
196 <div id="legend_container"></div>
197 <div id="legend_choices">
197 <div id="legend_choices">
198 <table id="legend_choices_tables" class="noborder" style="font-size:smaller;color:#545454"></table>
198 <table id="legend_choices_tables" class="noborder" style="font-size:smaller;color:#545454"></table>
199 </div>
199 </div>
200 </div>
200 </div>
201 </div>
201 </div>
202 </div>
202 </div>
203 %endif
203 %endif
204
204
205 <div class="box">
205 <div class="box">
206 <div class="title">
206 <div class="title">
207 <div class="breadcrumbs">
207 <div class="breadcrumbs">
208 %if c.repo_changesets:
208 %if c.repo_changesets:
209 ${h.link_to(_('Shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}
209 ${h.link_to(_('Shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}
210 %else:
210 %else:
211 ${_('Quick start')}
211 ${_('Quick start')}
212 %endif
212 %endif
213 </div>
213 </div>
214 </div>
214 </div>
215 <div class="table">
215 <div class="table">
216 <div id="shortlog_data">
216 <div id="shortlog_data">
217 <%include file='../shortlog/shortlog_data.html'/>
217 <%include file='../shortlog/shortlog_data.html'/>
218 </div>
218 </div>
219 </div>
219 </div>
220 </div>
220 </div>
221
221
222 %if c.readme_data:
222 %if c.readme_data:
223 <div class="box" style="background-color: #FAFAFA">
223 <div class="box" style="background-color: #FAFAFA">
224 <div class="title">
224 <div class="title">
225 <div class="breadcrumbs"><a href="${h.url('files_home',repo_name=c.repo_name,revision='tip',f_path=c.readme_file)}">${c.readme_file}</a></div>
225 <div class="breadcrumbs"><a href="${h.url('files_home',repo_name=c.repo_name,revision='tip',f_path=c.readme_file)}">${c.readme_file}</a></div>
226 </div>
226 </div>
227 <div class="readme">
227 <div class="readme">
228 <div class="readme_box">
228 <div class="readme_box">
229 ${c.readme_data|n}
229 ${c.readme_data|n}
230 </div>
230 </div>
231 </div>
231 </div>
232 </div>
232 </div>
233 %endif
233 %endif
234
234
235 <script type="text/javascript">
235 <script type="text/javascript">
236 var clone_url = 'clone_url';
236 var clone_url = 'clone_url';
237 YUE.on(clone_url,'click',function(e){
237 YUE.on(clone_url,'click',function(e){
238 if(YUD.hasClass(clone_url,'selected')){
238 if(YUD.hasClass(clone_url,'selected')){
239 return
239 return
240 }
240 }
241 else{
241 else{
242 YUD.addClass(clone_url,'selected');
242 YUD.addClass(clone_url,'selected');
243 YUD.get(clone_url).select();
243 YUD.get(clone_url).select();
244 }
244 }
245 })
245 })
246
246
247 YUE.on('clone_by_name','click',function(e){
247 YUE.on('clone_by_name','click',function(e){
248 // show url by name and hide name button
248 // show url by name and hide name button
249 YUD.setStyle('clone_url','display','');
249 YUD.setStyle('clone_url','display','');
250 YUD.setStyle('clone_by_name','display','none');
250 YUD.setStyle('clone_by_name','display','none');
251
251
252 // hide url by id and show name button
252 // hide url by id and show name button
253 YUD.setStyle('clone_by_id','display','');
253 YUD.setStyle('clone_by_id','display','');
254 YUD.setStyle('clone_url_id','display','none');
254 YUD.setStyle('clone_url_id','display','none');
255
255
256 })
256 })
257 YUE.on('clone_by_id','click',function(e){
257 YUE.on('clone_by_id','click',function(e){
258
258
259 // show url by id and hide id button
259 // show url by id and hide id button
260 YUD.setStyle('clone_by_id','display','none');
260 YUD.setStyle('clone_by_id','display','none');
261 YUD.setStyle('clone_url_id','display','');
261 YUD.setStyle('clone_url_id','display','');
262
262
263 // hide url by name and show id button
263 // hide url by name and show id button
264 YUD.setStyle('clone_by_name','display','');
264 YUD.setStyle('clone_by_name','display','');
265 YUD.setStyle('clone_url','display','none');
265 YUD.setStyle('clone_url','display','none');
266 })
266 })
267
267
268
268
269 var tmpl_links = {};
269 var tmpl_links = {};
270 %for cnt,archive in enumerate(c.rhodecode_repo._get_archives()):
270 %for cnt,archive in enumerate(c.rhodecode_repo._get_archives()):
271 tmpl_links["${archive['type']}"] = '${h.link_to('__NAME__', h.url('files_archive_home',repo_name=c.dbrepo.repo_name, fname='__CS__'+archive['extension'],subrepos='__SUB__'),class_='archive_icon ui-btn')}';
271 tmpl_links["${archive['type']}"] = '${h.link_to('__NAME__', h.url('files_archive_home',repo_name=c.dbrepo.repo_name, fname='__CS__'+archive['extension'],subrepos='__SUB__'),class_='archive_icon ui-btn')}';
272 %endfor
272 %endfor
273
273
274 YUE.on(['download_options','archive_subrepos'],'change',function(e){
274 YUE.on(['download_options','archive_subrepos'],'change',function(e){
275 var sm = YUD.get('download_options');
275 var sm = YUD.get('download_options');
276 var new_cs = sm.options[sm.selectedIndex];
276 var new_cs = sm.options[sm.selectedIndex];
277
277
278 for(k in tmpl_links){
278 for(k in tmpl_links){
279 var s = YUD.get(k+'_link');
279 var s = YUD.get(k+'_link');
280 if(s){
280 if(s){
281 var title_tmpl = "${_('Download %s as %s') % ('__CS_NAME__','__CS_EXT__')}";
281 var title_tmpl = "${_('Download %s as %s') % ('__CS_NAME__','__CS_EXT__')}";
282 title_tmpl= title_tmpl.replace('__CS_NAME__',new_cs.text);
282 title_tmpl= title_tmpl.replace('__CS_NAME__',new_cs.text);
283 title_tmpl = title_tmpl.replace('__CS_EXT__',k);
283 title_tmpl = title_tmpl.replace('__CS_EXT__',k);
284
284
285 var url = tmpl_links[k].replace('__CS__',new_cs.value);
285 var url = tmpl_links[k].replace('__CS__',new_cs.value);
286 var subrepos = YUD.get('archive_subrepos').checked;
286 var subrepos = YUD.get('archive_subrepos').checked;
287 url = url.replace('__SUB__',subrepos);
287 url = url.replace('__SUB__',subrepos);
288 url = url.replace('__NAME__',title_tmpl);
288 url = url.replace('__NAME__',title_tmpl);
289 s.innerHTML = url
289 s.innerHTML = url
290 }
290 }
291 }
291 }
292 });
292 });
293 </script>
293 </script>
294 %if c.show_stats:
294 %if c.show_stats:
295 <script type="text/javascript">
295 <script type="text/javascript">
296 var data = ${c.trending_languages|n};
296 var data = ${c.trending_languages|n};
297 var total = 0;
297 var total = 0;
298 var no_data = true;
298 var no_data = true;
299 var tbl = document.createElement('table');
299 var tbl = document.createElement('table');
300 tbl.setAttribute('class','trending_language_tbl');
300 tbl.setAttribute('class','trending_language_tbl');
301 var cnt = 0;
301 var cnt = 0;
302
302
303 for (var i=0;i<data.length;i++){
303 for (var i=0;i<data.length;i++){
304 total += data[i][1].count;
304 total += data[i][1].count;
305 cnt += 1;
305 cnt += 1;
306 no_data = false;
306 no_data = false;
307
307
308 var hide = cnt>2;
308 var hide = cnt>2;
309 var tr = document.createElement('tr');
309 var tr = document.createElement('tr');
310 if (hide){
310 if (hide){
311 tr.setAttribute('style','display:none');
311 tr.setAttribute('style','display:none');
312 tr.setAttribute('class','stats_hidden');
312 tr.setAttribute('class','stats_hidden');
313 }
313 }
314 var k = data[i][0];
314 var k = data[i][0];
315 var obj = data[i][1];
315 var obj = data[i][1];
316 var percentage = Math.round((obj.count/total*100),2);
316 var percentage = Math.round((obj.count/total*100),2);
317
317
318 var td1 = document.createElement('td');
318 var td1 = document.createElement('td');
319 td1.width = 150;
319 td1.width = 150;
320 var trending_language_label = document.createElement('div');
320 var trending_language_label = document.createElement('div');
321 trending_language_label.innerHTML = obj.desc+" ("+k+")";
321 trending_language_label.innerHTML = obj.desc+" ("+k+")";
322 td1.appendChild(trending_language_label);
322 td1.appendChild(trending_language_label);
323
323
324 var td2 = document.createElement('td');
324 var td2 = document.createElement('td');
325 td2.setAttribute('style','padding-right:14px !important');
325 td2.setAttribute('style','padding-right:14px !important');
326 var trending_language = document.createElement('div');
326 var trending_language = document.createElement('div');
327 var nr_files = obj.count+" ${_('files')}";
327 var nr_files = obj.count+" ${_('files')}";
328
328
329 trending_language.title = k+" "+nr_files;
329 trending_language.title = k+" "+nr_files;
330
330
331 if (percentage>22){
331 if (percentage>22){
332 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"% "+nr_files+ "</b>";
332 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"% "+nr_files+ "</b>";
333 }
333 }
334 else{
334 else{
335 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"%</b>";
335 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"%</b>";
336 }
336 }
337
337
338 trending_language.setAttribute("class", 'trending_language top-right-rounded-corner bottom-right-rounded-corner');
338 trending_language.setAttribute("class", 'trending_language top-right-rounded-corner bottom-right-rounded-corner');
339 trending_language.style.width=percentage+"%";
339 trending_language.style.width=percentage+"%";
340 td2.appendChild(trending_language);
340 td2.appendChild(trending_language);
341
341
342 tr.appendChild(td1);
342 tr.appendChild(td1);
343 tr.appendChild(td2);
343 tr.appendChild(td2);
344 tbl.appendChild(tr);
344 tbl.appendChild(tr);
345 if(cnt == 3){
345 if(cnt == 3){
346 var show_more = document.createElement('tr');
346 var show_more = document.createElement('tr');
347 var td = document.createElement('td');
347 var td = document.createElement('td');
348 lnk = document.createElement('a');
348 lnk = document.createElement('a');
349
349
350 lnk.href='#';
350 lnk.href='#';
351 lnk.innerHTML = "${_('show more')}";
351 lnk.innerHTML = "${_('show more')}";
352 lnk.id='code_stats_show_more';
352 lnk.id='code_stats_show_more';
353 td.appendChild(lnk);
353 td.appendChild(lnk);
354
354
355 show_more.appendChild(td);
355 show_more.appendChild(td);
356 show_more.appendChild(document.createElement('td'));
356 show_more.appendChild(document.createElement('td'));
357 tbl.appendChild(show_more);
357 tbl.appendChild(show_more);
358 }
358 }
359
359
360 }
360 }
361
361
362 YUD.get('lang_stats').appendChild(tbl);
362 YUD.get('lang_stats').appendChild(tbl);
363 YUE.on('code_stats_show_more','click',function(){
363 YUE.on('code_stats_show_more','click',function(){
364 l = YUD.getElementsByClassName('stats_hidden')
364 l = YUD.getElementsByClassName('stats_hidden')
365 for (e in l){
365 for (e in l){
366 YUD.setStyle(l[e],'display','');
366 YUD.setStyle(l[e],'display','');
367 };
367 };
368 YUD.setStyle(YUD.get('code_stats_show_more'),
368 YUD.setStyle(YUD.get('code_stats_show_more'),
369 'display','none');
369 'display','none');
370 });
370 });
371 </script>
371 </script>
372 <script type="text/javascript">
372 <script type="text/javascript">
373 /**
373 /**
374 * Plots summary graph
374 * Plots summary graph
375 *
375 *
376 * @class SummaryPlot
376 * @class SummaryPlot
377 * @param {from} initial from for detailed graph
377 * @param {from} initial from for detailed graph
378 * @param {to} initial to for detailed graph
378 * @param {to} initial to for detailed graph
379 * @param {dataset}
379 * @param {dataset}
380 * @param {overview_dataset}
380 * @param {overview_dataset}
381 */
381 */
382 function SummaryPlot(from,to,dataset,overview_dataset) {
382 function SummaryPlot(from,to,dataset,overview_dataset) {
383 var initial_ranges = {
383 var initial_ranges = {
384 "xaxis":{
384 "xaxis":{
385 "from":from,
385 "from":from,
386 "to":to,
386 "to":to,
387 },
387 },
388 };
388 };
389 var dataset = dataset;
389 var dataset = dataset;
390 var overview_dataset = [overview_dataset];
390 var overview_dataset = [overview_dataset];
391 var choiceContainer = YUD.get("legend_choices");
391 var choiceContainer = YUD.get("legend_choices");
392 var choiceContainerTable = YUD.get("legend_choices_tables");
392 var choiceContainerTable = YUD.get("legend_choices_tables");
393 var plotContainer = YUD.get('commit_history');
393 var plotContainer = YUD.get('commit_history');
394 var overviewContainer = YUD.get('overview');
394 var overviewContainer = YUD.get('overview');
395
395
396 var plot_options = {
396 var plot_options = {
397 bars: {show:true,align:'center',lineWidth:4},
397 bars: {show:true,align:'center',lineWidth:4},
398 legend: {show:true, container:"legend_container"},
398 legend: {show:true, container:"legend_container"},
399 points: {show:true,radius:0,fill:false},
399 points: {show:true,radius:0,fill:false},
400 yaxis: {tickDecimals:0,},
400 yaxis: {tickDecimals:0,},
401 xaxis: {
401 xaxis: {
402 mode: "time",
402 mode: "time",
403 timeformat: "%d/%m",
403 timeformat: "%d/%m",
404 min:from,
404 min:from,
405 max:to,
405 max:to,
406 },
406 },
407 grid: {
407 grid: {
408 hoverable: true,
408 hoverable: true,
409 clickable: true,
409 clickable: true,
410 autoHighlight:true,
410 autoHighlight:true,
411 color: "#999"
411 color: "#999"
412 },
412 },
413 //selection: {mode: "x"}
413 //selection: {mode: "x"}
414 };
414 };
415 var overview_options = {
415 var overview_options = {
416 legend:{show:false},
416 legend:{show:false},
417 bars: {show:true,barWidth: 2,},
417 bars: {show:true,barWidth: 2,},
418 shadowSize: 0,
418 shadowSize: 0,
419 xaxis: {mode: "time", timeformat: "%d/%m/%y",},
419 xaxis: {mode: "time", timeformat: "%d/%m/%y",},
420 yaxis: {ticks: 3, min: 0,tickDecimals:0,},
420 yaxis: {ticks: 3, min: 0,tickDecimals:0,},
421 grid: {color: "#999",},
421 grid: {color: "#999",},
422 selection: {mode: "x"}
422 selection: {mode: "x"}
423 };
423 };
424
424
425 /**
425 /**
426 *get dummy data needed in few places
426 *get dummy data needed in few places
427 */
427 */
428 function getDummyData(label){
428 function getDummyData(label){
429 return {"label":label,
429 return {"label":label,
430 "data":[{"time":0,
430 "data":[{"time":0,
431 "commits":0,
431 "commits":0,
432 "added":0,
432 "added":0,
433 "changed":0,
433 "changed":0,
434 "removed":0,
434 "removed":0,
435 }],
435 }],
436 "schema":["commits"],
436 "schema":["commits"],
437 "color":'#ffffff',
437 "color":'#ffffff',
438 }
438 }
439 }
439 }
440
440
441 /**
441 /**
442 * generate checkboxes accordindly to data
442 * generate checkboxes accordindly to data
443 * @param keys
443 * @param keys
444 * @returns
444 * @returns
445 */
445 */
446 function generateCheckboxes(data) {
446 function generateCheckboxes(data) {
447 //append checkboxes
447 //append checkboxes
448 var i = 0;
448 var i = 0;
449 choiceContainerTable.innerHTML = '';
449 choiceContainerTable.innerHTML = '';
450 for(var pos in data) {
450 for(var pos in data) {
451
451
452 data[pos].color = i;
452 data[pos].color = i;
453 i++;
453 i++;
454 if(data[pos].label != ''){
454 if(data[pos].label != ''){
455 var l = data[pos].label;
455 choiceContainerTable.innerHTML += '<tr><td>'+
456 choiceContainerTable.innerHTML += '<tr><td>'+
456 '<input type="checkbox" name="' + data[pos].label +'" checked="checked" />'
457 '<input type="checkbox" id="id_user_' + l + '" name="' + l +'" checked="checked" />' +
457 +data[pos].label+
458 '<label for="id_user_' + l + '">' + l + '</label></td></tr>';
458 '</td></tr>';
459 }
459 }
460 }
460 }
461
462 console.log(data);
461 }
463 }
462
464
463 /**
465 /**
464 * ToolTip show
466 * ToolTip show
465 */
467 */
466 function showTooltip(x, y, contents) {
468 function showTooltip(x, y, contents) {
467 var div=document.getElementById('tooltip');
469 var div=document.getElementById('tooltip');
468 if(!div) {
470 if(!div) {
469 div = document.createElement('div');
471 div = document.createElement('div');
470 div.id="tooltip";
472 div.id="tooltip";
471 div.style.position="absolute";
473 div.style.position="absolute";
472 div.style.border='1px solid #fdd';
474 div.style.border='1px solid #fdd';
473 div.style.padding='2px';
475 div.style.padding='2px';
474 div.style.backgroundColor='#fee';
476 div.style.backgroundColor='#fee';
475 document.body.appendChild(div);
477 document.body.appendChild(div);
476 }
478 }
477 YUD.setStyle(div, 'opacity', 0);
479 YUD.setStyle(div, 'opacity', 0);
478 div.innerHTML = contents;
480 div.innerHTML = contents;
479 div.style.top=(y + 5) + "px";
481 div.style.top=(y + 5) + "px";
480 div.style.left=(x + 5) + "px";
482 div.style.left=(x + 5) + "px";
481
483
482 var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
484 var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
483 anim.animate();
485 anim.animate();
484 }
486 }
485
487
486 /**
488 /**
487 * This function will detect if selected period has some changesets
489 * This function will detect if selected period has some changesets
488 for this user if it does this data is then pushed for displaying
490 for this user if it does this data is then pushed for displaying
489 Additionally it will only display users that are selected by the checkbox
491 Additionally it will only display users that are selected by the checkbox
490 */
492 */
491 function getDataAccordingToRanges(ranges) {
493 function getDataAccordingToRanges(ranges) {
492
494
493 var data = [];
495 var data = [];
494 var new_dataset = {};
496 var new_dataset = {};
495 var keys = [];
497 var keys = [];
496 var max_commits = 0;
498 var max_commits = 0;
497 for(var key in dataset){
499 for(var key in dataset){
498
500
499 for(var ds in dataset[key].data){
501 for(var ds in dataset[key].data){
500 commit_data = dataset[key].data[ds];
502 commit_data = dataset[key].data[ds];
501 if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
503 if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
502
504
503 if(new_dataset[key] === undefined){
505 if(new_dataset[key] === undefined){
504 new_dataset[key] = {data:[],schema:["commits"],label:key};
506 new_dataset[key] = {data:[],schema:["commits"],label:key};
505 }
507 }
506 new_dataset[key].data.push(commit_data);
508 new_dataset[key].data.push(commit_data);
507 }
509 }
508 }
510 }
509 if (new_dataset[key] !== undefined){
511 if (new_dataset[key] !== undefined){
510 data.push(new_dataset[key]);
512 data.push(new_dataset[key]);
511 }
513 }
512 }
514 }
513
515
514 if (data.length > 0){
516 if (data.length > 0){
515 return data;
517 return data;
516 }
518 }
517 else{
519 else{
518 //just return dummy data for graph to plot itself
520 //just return dummy data for graph to plot itself
519 return [getDummyData('')];
521 return [getDummyData('')];
520 }
522 }
521 }
523 }
522
524
523 /**
525 /**
524 * redraw using new checkbox data
526 * redraw using new checkbox data
525 */
527 */
526 function plotchoiced(e,args){
528 function plotchoiced(e,args){
527 var cur_data = args[0];
529 var cur_data = args[0];
528 var cur_ranges = args[1];
530 var cur_ranges = args[1];
529
531
530 var new_data = [];
532 var new_data = [];
531 var inputs = choiceContainer.getElementsByTagName("input");
533 var inputs = choiceContainer.getElementsByTagName("input");
532
534
533 //show only checked labels
535 //show only checked labels
534 for(var i=0; i<inputs.length; i++) {
536 for(var i=0; i<inputs.length; i++) {
535 var checkbox_key = inputs[i].name;
537 var checkbox_key = inputs[i].name;
536
538
537 if(inputs[i].checked){
539 if(inputs[i].checked){
538 for(var d in cur_data){
540 for(var d in cur_data){
539 if(cur_data[d].label == checkbox_key){
541 if(cur_data[d].label == checkbox_key){
540 new_data.push(cur_data[d]);
542 new_data.push(cur_data[d]);
541 }
543 }
542 }
544 }
543 }
545 }
544 else{
546 else{
545 //push dummy data to not hide the label
547 //push dummy data to not hide the label
546 new_data.push(getDummyData(checkbox_key));
548 new_data.push(getDummyData(checkbox_key));
547 }
549 }
548 }
550 }
549
551
550 var new_options = YAHOO.lang.merge(plot_options, {
552 var new_options = YAHOO.lang.merge(plot_options, {
551 xaxis: {
553 xaxis: {
552 min: cur_ranges.xaxis.from,
554 min: cur_ranges.xaxis.from,
553 max: cur_ranges.xaxis.to,
555 max: cur_ranges.xaxis.to,
554 mode:"time",
556 mode:"time",
555 timeformat: "%d/%m",
557 timeformat: "%d/%m",
556 },
558 },
557 });
559 });
558 if (!new_data){
560 if (!new_data){
559 new_data = [[0,1]];
561 new_data = [[0,1]];
560 }
562 }
561 // do the zooming
563 // do the zooming
562 plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
564 plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
563
565
564 plot.subscribe("plotselected", plotselected);
566 plot.subscribe("plotselected", plotselected);
565
567
566 //resubscribe plothover
568 //resubscribe plothover
567 plot.subscribe("plothover", plothover);
569 plot.subscribe("plothover", plothover);
568
570
569 // don't fire event on the overview to prevent eternal loop
571 // don't fire event on the overview to prevent eternal loop
570 overview.setSelection(cur_ranges, true);
572 overview.setSelection(cur_ranges, true);
571
573
572 }
574 }
573
575
574 /**
576 /**
575 * plot only selected items from overview
577 * plot only selected items from overview
576 * @param ranges
578 * @param ranges
577 * @returns
579 * @returns
578 */
580 */
579 function plotselected(ranges,cur_data) {
581 function plotselected(ranges,cur_data) {
580 //updates the data for new plot
582 //updates the data for new plot
581 var data = getDataAccordingToRanges(ranges);
583 var data = getDataAccordingToRanges(ranges);
582 generateCheckboxes(data);
584 generateCheckboxes(data);
583
585
584 var new_options = YAHOO.lang.merge(plot_options, {
586 var new_options = YAHOO.lang.merge(plot_options, {
585 xaxis: {
587 xaxis: {
586 min: ranges.xaxis.from,
588 min: ranges.xaxis.from,
587 max: ranges.xaxis.to,
589 max: ranges.xaxis.to,
588 mode:"time",
590 mode:"time",
589 timeformat: "%d/%m",
591 timeformat: "%d/%m",
590 },
592 },
591 });
593 });
592 // do the zooming
594 // do the zooming
593 plot = YAHOO.widget.Flot(plotContainer, data, new_options);
595 plot = YAHOO.widget.Flot(plotContainer, data, new_options);
594
596
595 plot.subscribe("plotselected", plotselected);
597 plot.subscribe("plotselected", plotselected);
596
598
597 //resubscribe plothover
599 //resubscribe plothover
598 plot.subscribe("plothover", plothover);
600 plot.subscribe("plothover", plothover);
599
601
600 // don't fire event on the overview to prevent eternal loop
602 // don't fire event on the overview to prevent eternal loop
601 overview.setSelection(ranges, true);
603 overview.setSelection(ranges, true);
602
604
603 //resubscribe choiced
605 //resubscribe choiced
604 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
606 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
605 }
607 }
606
608
607 var previousPoint = null;
609 var previousPoint = null;
608
610
609 function plothover(o) {
611 function plothover(o) {
610 var pos = o.pos;
612 var pos = o.pos;
611 var item = o.item;
613 var item = o.item;
612
614
613 //YUD.get("x").innerHTML = pos.x.toFixed(2);
615 //YUD.get("x").innerHTML = pos.x.toFixed(2);
614 //YUD.get("y").innerHTML = pos.y.toFixed(2);
616 //YUD.get("y").innerHTML = pos.y.toFixed(2);
615 if (item) {
617 if (item) {
616 if (previousPoint != item.datapoint) {
618 if (previousPoint != item.datapoint) {
617 previousPoint = item.datapoint;
619 previousPoint = item.datapoint;
618
620
619 var tooltip = YUD.get("tooltip");
621 var tooltip = YUD.get("tooltip");
620 if(tooltip) {
622 if(tooltip) {
621 tooltip.parentNode.removeChild(tooltip);
623 tooltip.parentNode.removeChild(tooltip);
622 }
624 }
623 var x = item.datapoint.x.toFixed(2);
625 var x = item.datapoint.x.toFixed(2);
624 var y = item.datapoint.y.toFixed(2);
626 var y = item.datapoint.y.toFixed(2);
625
627
626 if (!item.series.label){
628 if (!item.series.label){
627 item.series.label = 'commits';
629 item.series.label = 'commits';
628 }
630 }
629 var d = new Date(x*1000);
631 var d = new Date(x*1000);
630 var fd = d.toDateString()
632 var fd = d.toDateString()
631 var nr_commits = parseInt(y);
633 var nr_commits = parseInt(y);
632
634
633 var cur_data = dataset[item.series.label].data[item.dataIndex];
635 var cur_data = dataset[item.series.label].data[item.dataIndex];
634 var added = cur_data.added;
636 var added = cur_data.added;
635 var changed = cur_data.changed;
637 var changed = cur_data.changed;
636 var removed = cur_data.removed;
638 var removed = cur_data.removed;
637
639
638 var nr_commits_suffix = " ${_('commits')} ";
640 var nr_commits_suffix = " ${_('commits')} ";
639 var added_suffix = " ${_('files added')} ";
641 var added_suffix = " ${_('files added')} ";
640 var changed_suffix = " ${_('files changed')} ";
642 var changed_suffix = " ${_('files changed')} ";
641 var removed_suffix = " ${_('files removed')} ";
643 var removed_suffix = " ${_('files removed')} ";
642
644
643
645
644 if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
646 if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
645 if(added==1){added_suffix=" ${_('file added')} ";}
647 if(added==1){added_suffix=" ${_('file added')} ";}
646 if(changed==1){changed_suffix=" ${_('file changed')} ";}
648 if(changed==1){changed_suffix=" ${_('file changed')} ";}
647 if(removed==1){removed_suffix=" ${_('file removed')} ";}
649 if(removed==1){removed_suffix=" ${_('file removed')} ";}
648
650
649 showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
651 showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
650 +'<br/>'+
652 +'<br/>'+
651 nr_commits + nr_commits_suffix+'<br/>'+
653 nr_commits + nr_commits_suffix+'<br/>'+
652 added + added_suffix +'<br/>'+
654 added + added_suffix +'<br/>'+
653 changed + changed_suffix + '<br/>'+
655 changed + changed_suffix + '<br/>'+
654 removed + removed_suffix + '<br/>');
656 removed + removed_suffix + '<br/>');
655 }
657 }
656 }
658 }
657 else {
659 else {
658 var tooltip = YUD.get("tooltip");
660 var tooltip = YUD.get("tooltip");
659
661
660 if(tooltip) {
662 if(tooltip) {
661 tooltip.parentNode.removeChild(tooltip);
663 tooltip.parentNode.removeChild(tooltip);
662 }
664 }
663 previousPoint = null;
665 previousPoint = null;
664 }
666 }
665 }
667 }
666
668
667 /**
669 /**
668 * MAIN EXECUTION
670 * MAIN EXECUTION
669 */
671 */
670
672
671 var data = getDataAccordingToRanges(initial_ranges);
673 var data = getDataAccordingToRanges(initial_ranges);
672 generateCheckboxes(data);
674 generateCheckboxes(data);
673
675
674 //main plot
676 //main plot
675 var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
677 var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
676
678
677 //overview
679 //overview
678 var overview = YAHOO.widget.Flot(overviewContainer,
680 var overview = YAHOO.widget.Flot(overviewContainer,
679 overview_dataset, overview_options);
681 overview_dataset, overview_options);
680
682
681 //show initial selection on overview
683 //show initial selection on overview
682 overview.setSelection(initial_ranges);
684 overview.setSelection(initial_ranges);
683
685
684 plot.subscribe("plotselected", plotselected);
686 plot.subscribe("plotselected", plotselected);
685 plot.subscribe("plothover", plothover)
687 plot.subscribe("plothover", plothover)
686
688
687 overview.subscribe("plotselected", function (ranges) {
689 overview.subscribe("plotselected", function (ranges) {
688 plot.setSelection(ranges);
690 plot.setSelection(ranges);
689 });
691 });
690
692
691 // user choices on overview
693 // user choices on overview
692 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
694 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
693 }
695 }
694 SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});
696 SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});
695 </script>
697 </script>
696 %endif
698 %endif
697
699
698 </%def>
700 </%def>
General Comments 0
You need to be logged in to leave comments. Login now