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