##// END OF EJS Templates
labels "commit activity" using format
Vladislav Poluhin -
r1922:0ef681e3 beta
parent child Browse files
Show More
@@ -1,700 +1,697 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 +=
456 choiceContainerTable.innerHTML += '<tr><td>'+
456 '<tr><td><input type="checkbox" id="id_user_{0}" name="{0}" checked="checked" /> \
457 '<input type="checkbox" id="id_user_' + l + '" name="' + l +'" checked="checked" />' +
457 <label for="id_user_{0}">{0}</label></td></tr>'.format(data[pos].label);
458 '<label for="id_user_' + l + '">' + l + '</label></td></tr>';
459 }
458 }
460 }
459 }
461
462 console.log(data);
463 }
460 }
464
461
465 /**
462 /**
466 * ToolTip show
463 * ToolTip show
467 */
464 */
468 function showTooltip(x, y, contents) {
465 function showTooltip(x, y, contents) {
469 var div=document.getElementById('tooltip');
466 var div=document.getElementById('tooltip');
470 if(!div) {
467 if(!div) {
471 div = document.createElement('div');
468 div = document.createElement('div');
472 div.id="tooltip";
469 div.id="tooltip";
473 div.style.position="absolute";
470 div.style.position="absolute";
474 div.style.border='1px solid #fdd';
471 div.style.border='1px solid #fdd';
475 div.style.padding='2px';
472 div.style.padding='2px';
476 div.style.backgroundColor='#fee';
473 div.style.backgroundColor='#fee';
477 document.body.appendChild(div);
474 document.body.appendChild(div);
478 }
475 }
479 YUD.setStyle(div, 'opacity', 0);
476 YUD.setStyle(div, 'opacity', 0);
480 div.innerHTML = contents;
477 div.innerHTML = contents;
481 div.style.top=(y + 5) + "px";
478 div.style.top=(y + 5) + "px";
482 div.style.left=(x + 5) + "px";
479 div.style.left=(x + 5) + "px";
483
480
484 var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
481 var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
485 anim.animate();
482 anim.animate();
486 }
483 }
487
484
488 /**
485 /**
489 * This function will detect if selected period has some changesets
486 * This function will detect if selected period has some changesets
490 for this user if it does this data is then pushed for displaying
487 for this user if it does this data is then pushed for displaying
491 Additionally it will only display users that are selected by the checkbox
488 Additionally it will only display users that are selected by the checkbox
492 */
489 */
493 function getDataAccordingToRanges(ranges) {
490 function getDataAccordingToRanges(ranges) {
494
491
495 var data = [];
492 var data = [];
496 var new_dataset = {};
493 var new_dataset = {};
497 var keys = [];
494 var keys = [];
498 var max_commits = 0;
495 var max_commits = 0;
499 for(var key in dataset){
496 for(var key in dataset){
500
497
501 for(var ds in dataset[key].data){
498 for(var ds in dataset[key].data){
502 commit_data = dataset[key].data[ds];
499 commit_data = dataset[key].data[ds];
503 if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
500 if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
504
501
505 if(new_dataset[key] === undefined){
502 if(new_dataset[key] === undefined){
506 new_dataset[key] = {data:[],schema:["commits"],label:key};
503 new_dataset[key] = {data:[],schema:["commits"],label:key};
507 }
504 }
508 new_dataset[key].data.push(commit_data);
505 new_dataset[key].data.push(commit_data);
509 }
506 }
510 }
507 }
511 if (new_dataset[key] !== undefined){
508 if (new_dataset[key] !== undefined){
512 data.push(new_dataset[key]);
509 data.push(new_dataset[key]);
513 }
510 }
514 }
511 }
515
512
516 if (data.length > 0){
513 if (data.length > 0){
517 return data;
514 return data;
518 }
515 }
519 else{
516 else{
520 //just return dummy data for graph to plot itself
517 //just return dummy data for graph to plot itself
521 return [getDummyData('')];
518 return [getDummyData('')];
522 }
519 }
523 }
520 }
524
521
525 /**
522 /**
526 * redraw using new checkbox data
523 * redraw using new checkbox data
527 */
524 */
528 function plotchoiced(e,args){
525 function plotchoiced(e,args){
529 var cur_data = args[0];
526 var cur_data = args[0];
530 var cur_ranges = args[1];
527 var cur_ranges = args[1];
531
528
532 var new_data = [];
529 var new_data = [];
533 var inputs = choiceContainer.getElementsByTagName("input");
530 var inputs = choiceContainer.getElementsByTagName("input");
534
531
535 //show only checked labels
532 //show only checked labels
536 for(var i=0; i<inputs.length; i++) {
533 for(var i=0; i<inputs.length; i++) {
537 var checkbox_key = inputs[i].name;
534 var checkbox_key = inputs[i].name;
538
535
539 if(inputs[i].checked){
536 if(inputs[i].checked){
540 for(var d in cur_data){
537 for(var d in cur_data){
541 if(cur_data[d].label == checkbox_key){
538 if(cur_data[d].label == checkbox_key){
542 new_data.push(cur_data[d]);
539 new_data.push(cur_data[d]);
543 }
540 }
544 }
541 }
545 }
542 }
546 else{
543 else{
547 //push dummy data to not hide the label
544 //push dummy data to not hide the label
548 new_data.push(getDummyData(checkbox_key));
545 new_data.push(getDummyData(checkbox_key));
549 }
546 }
550 }
547 }
551
548
552 var new_options = YAHOO.lang.merge(plot_options, {
549 var new_options = YAHOO.lang.merge(plot_options, {
553 xaxis: {
550 xaxis: {
554 min: cur_ranges.xaxis.from,
551 min: cur_ranges.xaxis.from,
555 max: cur_ranges.xaxis.to,
552 max: cur_ranges.xaxis.to,
556 mode:"time",
553 mode:"time",
557 timeformat: "%d/%m",
554 timeformat: "%d/%m",
558 },
555 },
559 });
556 });
560 if (!new_data){
557 if (!new_data){
561 new_data = [[0,1]];
558 new_data = [[0,1]];
562 }
559 }
563 // do the zooming
560 // do the zooming
564 plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
561 plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
565
562
566 plot.subscribe("plotselected", plotselected);
563 plot.subscribe("plotselected", plotselected);
567
564
568 //resubscribe plothover
565 //resubscribe plothover
569 plot.subscribe("plothover", plothover);
566 plot.subscribe("plothover", plothover);
570
567
571 // don't fire event on the overview to prevent eternal loop
568 // don't fire event on the overview to prevent eternal loop
572 overview.setSelection(cur_ranges, true);
569 overview.setSelection(cur_ranges, true);
573
570
574 }
571 }
575
572
576 /**
573 /**
577 * plot only selected items from overview
574 * plot only selected items from overview
578 * @param ranges
575 * @param ranges
579 * @returns
576 * @returns
580 */
577 */
581 function plotselected(ranges,cur_data) {
578 function plotselected(ranges,cur_data) {
582 //updates the data for new plot
579 //updates the data for new plot
583 var data = getDataAccordingToRanges(ranges);
580 var data = getDataAccordingToRanges(ranges);
584 generateCheckboxes(data);
581 generateCheckboxes(data);
585
582
586 var new_options = YAHOO.lang.merge(plot_options, {
583 var new_options = YAHOO.lang.merge(plot_options, {
587 xaxis: {
584 xaxis: {
588 min: ranges.xaxis.from,
585 min: ranges.xaxis.from,
589 max: ranges.xaxis.to,
586 max: ranges.xaxis.to,
590 mode:"time",
587 mode:"time",
591 timeformat: "%d/%m",
588 timeformat: "%d/%m",
592 },
589 },
593 });
590 });
594 // do the zooming
591 // do the zooming
595 plot = YAHOO.widget.Flot(plotContainer, data, new_options);
592 plot = YAHOO.widget.Flot(plotContainer, data, new_options);
596
593
597 plot.subscribe("plotselected", plotselected);
594 plot.subscribe("plotselected", plotselected);
598
595
599 //resubscribe plothover
596 //resubscribe plothover
600 plot.subscribe("plothover", plothover);
597 plot.subscribe("plothover", plothover);
601
598
602 // don't fire event on the overview to prevent eternal loop
599 // don't fire event on the overview to prevent eternal loop
603 overview.setSelection(ranges, true);
600 overview.setSelection(ranges, true);
604
601
605 //resubscribe choiced
602 //resubscribe choiced
606 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
603 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
607 }
604 }
608
605
609 var previousPoint = null;
606 var previousPoint = null;
610
607
611 function plothover(o) {
608 function plothover(o) {
612 var pos = o.pos;
609 var pos = o.pos;
613 var item = o.item;
610 var item = o.item;
614
611
615 //YUD.get("x").innerHTML = pos.x.toFixed(2);
612 //YUD.get("x").innerHTML = pos.x.toFixed(2);
616 //YUD.get("y").innerHTML = pos.y.toFixed(2);
613 //YUD.get("y").innerHTML = pos.y.toFixed(2);
617 if (item) {
614 if (item) {
618 if (previousPoint != item.datapoint) {
615 if (previousPoint != item.datapoint) {
619 previousPoint = item.datapoint;
616 previousPoint = item.datapoint;
620
617
621 var tooltip = YUD.get("tooltip");
618 var tooltip = YUD.get("tooltip");
622 if(tooltip) {
619 if(tooltip) {
623 tooltip.parentNode.removeChild(tooltip);
620 tooltip.parentNode.removeChild(tooltip);
624 }
621 }
625 var x = item.datapoint.x.toFixed(2);
622 var x = item.datapoint.x.toFixed(2);
626 var y = item.datapoint.y.toFixed(2);
623 var y = item.datapoint.y.toFixed(2);
627
624
628 if (!item.series.label){
625 if (!item.series.label){
629 item.series.label = 'commits';
626 item.series.label = 'commits';
630 }
627 }
631 var d = new Date(x*1000);
628 var d = new Date(x*1000);
632 var fd = d.toDateString()
629 var fd = d.toDateString()
633 var nr_commits = parseInt(y);
630 var nr_commits = parseInt(y);
634
631
635 var cur_data = dataset[item.series.label].data[item.dataIndex];
632 var cur_data = dataset[item.series.label].data[item.dataIndex];
636 var added = cur_data.added;
633 var added = cur_data.added;
637 var changed = cur_data.changed;
634 var changed = cur_data.changed;
638 var removed = cur_data.removed;
635 var removed = cur_data.removed;
639
636
640 var nr_commits_suffix = " ${_('commits')} ";
637 var nr_commits_suffix = " ${_('commits')} ";
641 var added_suffix = " ${_('files added')} ";
638 var added_suffix = " ${_('files added')} ";
642 var changed_suffix = " ${_('files changed')} ";
639 var changed_suffix = " ${_('files changed')} ";
643 var removed_suffix = " ${_('files removed')} ";
640 var removed_suffix = " ${_('files removed')} ";
644
641
645
642
646 if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
643 if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
647 if(added==1){added_suffix=" ${_('file added')} ";}
644 if(added==1){added_suffix=" ${_('file added')} ";}
648 if(changed==1){changed_suffix=" ${_('file changed')} ";}
645 if(changed==1){changed_suffix=" ${_('file changed')} ";}
649 if(removed==1){removed_suffix=" ${_('file removed')} ";}
646 if(removed==1){removed_suffix=" ${_('file removed')} ";}
650
647
651 showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
648 showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
652 +'<br/>'+
649 +'<br/>'+
653 nr_commits + nr_commits_suffix+'<br/>'+
650 nr_commits + nr_commits_suffix+'<br/>'+
654 added + added_suffix +'<br/>'+
651 added + added_suffix +'<br/>'+
655 changed + changed_suffix + '<br/>'+
652 changed + changed_suffix + '<br/>'+
656 removed + removed_suffix + '<br/>');
653 removed + removed_suffix + '<br/>');
657 }
654 }
658 }
655 }
659 else {
656 else {
660 var tooltip = YUD.get("tooltip");
657 var tooltip = YUD.get("tooltip");
661
658
662 if(tooltip) {
659 if(tooltip) {
663 tooltip.parentNode.removeChild(tooltip);
660 tooltip.parentNode.removeChild(tooltip);
664 }
661 }
665 previousPoint = null;
662 previousPoint = null;
666 }
663 }
667 }
664 }
668
665
669 /**
666 /**
670 * MAIN EXECUTION
667 * MAIN EXECUTION
671 */
668 */
672
669
673 var data = getDataAccordingToRanges(initial_ranges);
670 var data = getDataAccordingToRanges(initial_ranges);
674 generateCheckboxes(data);
671 generateCheckboxes(data);
675
672
676 //main plot
673 //main plot
677 var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
674 var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
678
675
679 //overview
676 //overview
680 var overview = YAHOO.widget.Flot(overviewContainer,
677 var overview = YAHOO.widget.Flot(overviewContainer,
681 overview_dataset, overview_options);
678 overview_dataset, overview_options);
682
679
683 //show initial selection on overview
680 //show initial selection on overview
684 overview.setSelection(initial_ranges);
681 overview.setSelection(initial_ranges);
685
682
686 plot.subscribe("plotselected", plotselected);
683 plot.subscribe("plotselected", plotselected);
687 plot.subscribe("plothover", plothover)
684 plot.subscribe("plothover", plothover)
688
685
689 overview.subscribe("plotselected", function (ranges) {
686 overview.subscribe("plotselected", function (ranges) {
690 plot.setSelection(ranges);
687 plot.setSelection(ranges);
691 });
688 });
692
689
693 // user choices on overview
690 // user choices on overview
694 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
691 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
695 }
692 }
696 SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});
693 SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});
697 </script>
694 </script>
698 %endif
695 %endif
699
696
700 </%def>
697 </%def>
General Comments 0
You need to be logged in to leave comments. Login now