changeset 1719:4a28aff31a15 beta

optimized summary page for disabled stats
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 25 Nov 2011 20:05:59 +0200
parents f78bee8eec78
children 48840976caa8
files rhodecode/controllers/summary.py rhodecode/public/css/style.css rhodecode/templates/summary/summary.html
diffstat 3 files changed, 459 insertions(+), 456 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/summary.py	Fri Nov 25 19:25:10 2011 +0200
+++ b/rhodecode/controllers/summary.py	Fri Nov 25 20:05:59 2011 +0200
@@ -88,18 +88,18 @@
             password = '@'
 
         parsed_url = urlparse(url.current(qualified=True))
-        
+
         default_clone_uri = '{scheme}://{user}{pass}{netloc}{path}'
-        
-        uri_tmpl = config.get('clone_uri',default_clone_uri)
-        uri_tmpl = uri_tmpl.replace('{','%(').replace('}',')s')
-        
-        uri =  uri_tmpl % {'user': username,
+
+        uri_tmpl = config.get('clone_uri', default_clone_uri)
+        uri_tmpl = uri_tmpl.replace('{', '%(').replace('}', ')s')
+
+        uri = uri_tmpl % {'user': username,
                            'pass': password,
                            'scheme': parsed_url.scheme,
                            'netloc':parsed_url.netloc,
                            'path':parsed_url.path}
-        
+
         c.clone_repo_url = uri
         c.repo_tags = OrderedDict()
         for name, hash in c.rhodecode_repo.tags.items()[:10]:
@@ -124,9 +124,11 @@
         ts_max_y = mktime(td.timetuple())
 
         if dbrepo.enable_statistics:
+            c.show_stats = True
             c.no_data_msg = _('No data loaded yet')
             run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, ts_max_y)
         else:
+            c.show_stats = False
             c.no_data_msg = _('Statistics are disabled for this repository')
         c.ts_min = ts_min_m
         c.ts_max = ts_max_y
--- a/rhodecode/public/css/style.css	Fri Nov 25 19:25:10 2011 +0200
+++ b/rhodecode/public/css/style.css	Fri Nov 25 20:05:59 2011 +0200
@@ -993,7 +993,7 @@
 	width: 155px;
 	position: absolute;
 	margin: 0;
-	padding: 8px 0 0 5px;
+	padding: 0px 0 0 0px;
 }
 
 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label
--- a/rhodecode/templates/summary/summary.html	Fri Nov 25 19:25:10 2011 +0200
+++ b/rhodecode/templates/summary/summary.html	Fri Nov 25 20:05:59 2011 +0200
@@ -17,7 +17,11 @@
 </%def>
 
 <%def name="main()">
-<div class="box box-left">
+    %if c.show_stats:
+        <div class="box box-left">
+    %else:
+        <div class="box">
+    %endif
     <!-- box / title -->
     <div class="title">
         ${self.breadcrumbs()}
@@ -30,7 +34,16 @@
 			  <div class="label">
 			      <label>${_('Name')}:</label>
 			  </div>
-			  <div class="input-short">
+			  <div class="input">
+                  <div style="float:right;padding-top:5px">		  
+                     %if c.rhodecode_user.username != 'default':
+                      ${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')}
+                      ${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')}
+                     %else:
+                      ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name),class_='rss_icon')}
+                      ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='atom_icon')}            
+                     %endif  
+                  </div>
                   %if c.rhodecode_user.username != 'default':
                       %if c.following:
                       <span id="follow_toggle" class="following" title="${_('Stop following this repository')}"
@@ -41,8 +54,7 @@
                             onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
                       </span>
                       %endif
-                  %endif:			  
-                 
+                  %endif:                                  
                  ##REPO TYPE
 		         %if c.dbrepo.repo_type =='hg':
 		           <img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
@@ -84,14 +96,14 @@
 			  <div class="label">
 			      <label>${_('Description')}:</label>
 			  </div>
-			  <div class="input-short desc">${h.urlify_text(c.dbrepo.description)}</div>
+			  <div class="input desc">${h.urlify_text(c.dbrepo.description)}</div>
 			 </div>
 			
 			 <div class="field">
 			  <div class="label">
 			      <label>${_('Contact')}:</label>
 			  </div>
-			  <div class="input-short">
+			  <div class="input">
 			  	<div class="gravatar">
 			  		<img alt="gravatar" src="${h.gravatar_url(c.dbrepo.user.email)}"/>
 			  	</div>
@@ -105,11 +117,11 @@
 			  <div class="label">
 			      <label>${_('Last change')}:</label>
 			  </div>
-			  <div class="input-short">
+			  <div class="input">
                   <b>${'r%s:%s' % (h.get_changeset_safe(c.rhodecode_repo,'tip').revision,
                             h.get_changeset_safe(c.rhodecode_repo,'tip').short_id)}</b> - 
 			      <span class="tooltip" title="${c.rhodecode_repo.last_change}">
-			      ${h.age(c.rhodecode_repo.last_change)}</span><br/>
+			      ${h.age(c.rhodecode_repo.last_change)}</span>
 			      ${_('by')} ${h.get_changeset_safe(c.rhodecode_repo,'tip').author} 
 			  </div>
 			 </div>
@@ -118,8 +130,8 @@
 			  <div class="label">
 			      <label>${_('Clone url')}:</label>
 			  </div>
-			  <div class="input-short">
-			      <input type="text" id="clone_url" readonly="readonly" value="${c.rhodecode_repo.alias} clone ${c.clone_repo_url}" size="70"/>
+			  <div class="input">
+			      <input type="text" id="clone_url" readonly="readonly" value="${c.rhodecode_repo.alias} clone ${c.clone_repo_url}" size="65"/>
 			  </div>
 			 </div>
 			 
@@ -127,8 +139,14 @@
 			  <div class="label">
 			      <label>${_('Trending source files')}:</label>
 			  </div>
-			  <div class="input-short">
-			    <div id="lang_stats"></div> 			   
+			  <div class="input">
+                %if c.show_stats:
+			    <div id="lang_stats"></div>
+                %else:
+                   %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
+                        ${_('Statistics are disabled for this repository')} ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-button-small")}
+                   %endif                  
+                %endif		   
 			  </div>
 			 </div>
 			 			
@@ -136,12 +154,12 @@
 			  <div class="label">
 			      <label>${_('Download')}:</label>
 			  </div>
-			  <div class="input-short">
+			  <div class="input">
 		        %if len(c.rhodecode_repo.revisions) == 0:
 		          ${_('There are no downloads yet')}
 		        %elif c.enable_downloads is False:
 		          ${_('Downloads are disabled for this repository')}
-                    %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
+                    %if h.HasPermissionAll('hg.admin')('enable downloads on from summary'):
                         ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-button-small")}
                     %endif  		          
 		        %else:
@@ -160,26 +178,12 @@
                     </span>
 			    %endif
 			  </div>
-			 </div>
-			 
-			 <div class="field">
-			  <div class="label">
-			      <label>${_('Feeds')}:</label>
-			  </div>
-			  <div class="input-short">
-			   %if c.rhodecode_user.username != 'default':
-	            ${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')}
-	            ${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')}
-	           %else:
-                ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name),class_='rss_icon')}
-                ${h.link_to(_('Atom'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='atom_icon')}	           
-	           %endif 
-			  </div>
-			 </div>				 			 			 
+			 </div>			 			 			 
 	  </div>		 
 	</div>
 </div>
-        
+
+%if c.show_stats:        
 <div class="box box-right"  style="min-height:455px">
     <!-- box / title -->
     <div class="title">
@@ -209,6 +213,7 @@
     	</div>
     </div>
 </div>    
+%endif
 
 <div class="box">    
     <div class="title">
@@ -235,444 +240,440 @@
 %endif
 
 <script type="text/javascript">
-        YUE.onDOMReady(function(e){
-            id = 'clone_url';
-            YUE.on(id,'click',function(e){
-                if(YUD.hasClass(id,'selected')){
-                    return
-                }
-                else{
-                    YUD.addClass(id,'selected');
-                    YUD.get(id).select();                   
-                }
+var clone_url = 'clone_url';
+YUE.on(clone_url,'click',function(e){
+    if(YUD.hasClass(clone_url,'selected')){
+        return
+    }
+    else{
+        YUD.addClass(clone_url,'selected');
+        YUD.get(clone_url).select();                   
+    }
+})
+
+var tmpl_links = {};
+%for cnt,archive in enumerate(c.rhodecode_repo._get_archives()):
+  tmpl_links['${archive['type']}'] = '${h.link_to(archive['type'],
+       h.url('files_archive_home',repo_name=c.dbrepo.repo_name,
+       fname='__CS__'+archive['extension'],subrepos='__SUB__'),class_="archive_icon")}';
+%endfor
 
-            })
-        })
-        var data = ${c.trending_languages|n};
-        var total = 0;
-        var no_data = true;
-        for (k in data){
-            total += data[k].count;
-            no_data = false;
-        } 
-        var tbl = document.createElement('table');
-        tbl.setAttribute('class','trending_language_tbl');
-        var cnt = 0;
-        for (k in data){
-            cnt += 1;
-            var hide = cnt>2;
-            var tr = document.createElement('tr');
-            if (hide){
-                tr.setAttribute('style','display:none');
-                tr.setAttribute('class','stats_hidden');
-            }
-            var percentage = Math.round((data[k].count/total*100),2);
-            var value = data[k].count;
-            var td1 = document.createElement('td');
-            td1.width = 150;
-            var trending_language_label = document.createElement('div');
-            trending_language_label.innerHTML = data[k].desc+" ("+k+")";
-            td1.appendChild(trending_language_label);
+YUE.on(['download_options','archive_subrepos'],'change',function(e){
+   var sm = YUD.get('download_options');
+   var new_cs = sm.options[sm.selectedIndex];
+   
+   for(k in tmpl_links){
+       var s = YUD.get(k+'_link');
+       title_tmpl = "${_('Download %s as %s') % ('__CS_NAME__','__CS_EXT__')}";
+       s.title = title_tmpl.replace('__CS_NAME__',new_cs.text);
+       s.title = s.title.replace('__CS_EXT__',k);
+       var url = tmpl_links[k].replace('__CS__',new_cs.value);
+       var subrepos = YUD.get('archive_subrepos').checked
+       url = url.replace('__SUB__',subrepos);
+       s.innerHTML = url 
+   }
+});
+</script>
+%if c.show_stats:
+<script type="text/javascript">
+var data = ${c.trending_languages|n};
+var total = 0;
+var no_data = true;
+for (k in data){
+    total += data[k].count;
+    no_data = false;
+} 
+var tbl = document.createElement('table');
+tbl.setAttribute('class','trending_language_tbl');
+var cnt = 0;
+for (k in data){
+    cnt += 1;
+    var hide = cnt>2;
+    var tr = document.createElement('tr');
+    if (hide){
+        tr.setAttribute('style','display:none');
+        tr.setAttribute('class','stats_hidden');
+    }
+    var percentage = Math.round((data[k].count/total*100),2);
+    var value = data[k].count;
+    var td1 = document.createElement('td');
+    td1.width = 150;
+    var trending_language_label = document.createElement('div');
+    trending_language_label.innerHTML = data[k].desc+" ("+k+")";
+    td1.appendChild(trending_language_label);
 
-            var td2 = document.createElement('td');
-            td2.setAttribute('style','padding-right:14px !important');
-            var trending_language = document.createElement('div');
-            var nr_files = value+" ${_('files')}";
-            
-            trending_language.title = k+" "+nr_files;
-            
-            if (percentage>22){
-                trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"% "+nr_files+ "</b>";   
-            }
-            else{
-                trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"%</b>";
-            }
-            
-            trending_language.setAttribute("class", 'trending_language top-right-rounded-corner bottom-right-rounded-corner');
-            trending_language.style.width=percentage+"%";
-            td2.appendChild(trending_language);
-            
-            tr.appendChild(td1);
-            tr.appendChild(td2);
-            tbl.appendChild(tr);
-            if(cnt == 3){
-                var show_more = document.createElement('tr');
-                var td = document.createElement('td');
-                lnk = document.createElement('a');
-                
-                lnk.href='#';
-                lnk.innerHTML = "${_('show more')}";
-                lnk.id='code_stats_show_more';
-                td.appendChild(lnk);
-                
-                show_more.appendChild(td);
-                show_more.appendChild(document.createElement('td'));
-                tbl.appendChild(show_more);
-            }
-            
-        }
-        if(no_data){
-            var tr = document.createElement('tr');
-            var td1 = document.createElement('td');
-            td1.innerHTML = "${c.no_data_msg}";
-            tr.appendChild(td1);
-            tbl.appendChild(tr);
+    var td2 = document.createElement('td');
+    td2.setAttribute('style','padding-right:14px !important');
+    var trending_language = document.createElement('div');
+    var nr_files = value+" ${_('files')}";
+    
+    trending_language.title = k+" "+nr_files;
+    
+    if (percentage>22){
+        trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"% "+nr_files+ "</b>";   
+    }
+    else{
+        trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"%</b>";
+    }
+    
+    trending_language.setAttribute("class", 'trending_language top-right-rounded-corner bottom-right-rounded-corner');
+    trending_language.style.width=percentage+"%";
+    td2.appendChild(trending_language);
+    
+    tr.appendChild(td1);
+    tr.appendChild(td2);
+    tbl.appendChild(tr);
+    if(cnt == 3){
+        var show_more = document.createElement('tr');
+        var td = document.createElement('td');
+        lnk = document.createElement('a');
+        
+        lnk.href='#';
+        lnk.innerHTML = "${_('show more')}";
+        lnk.id='code_stats_show_more';
+        td.appendChild(lnk);
+        
+        show_more.appendChild(td);
+        show_more.appendChild(document.createElement('td'));
+        tbl.appendChild(show_more);
+    }
+    
+}
+
+YUD.get('lang_stats').appendChild(tbl);
+YUE.on('code_stats_show_more','click',function(){
+    l = YUD.getElementsByClassName('stats_hidden')
+    for (e in l){
+        YUD.setStyle(l[e],'display','');
+    };
+    YUD.setStyle(YUD.get('code_stats_show_more'),
+            'display','none');
+});
+</script>   
+<script type="text/javascript">
+/**
+ * Plots summary graph
+ *
+ * @class SummaryPlot
+ * @param {from} initial from for detailed graph
+ * @param {to} initial to for detailed graph
+ * @param {dataset}
+ * @param {overview_dataset}
+ */
+function SummaryPlot(from,to,dataset,overview_dataset) {
+    var initial_ranges = {
+        "xaxis":{
+            "from":from,
+            "to":to,
+        },
+    };
+    var dataset = dataset;
+    var overview_dataset = [overview_dataset];
+    var choiceContainer = YUD.get("legend_choices");
+    var choiceContainerTable = YUD.get("legend_choices_tables");
+    var plotContainer = YUD.get('commit_history');
+    var overviewContainer = YUD.get('overview');
+    
+    var plot_options = {
+        bars: {show:true,align:'center',lineWidth:4},
+        legend: {show:true, container:"legend_container"},
+        points: {show:true,radius:0,fill:false},
+        yaxis: {tickDecimals:0,},
+        xaxis: {
+            mode: "time", 
+            timeformat: "%d/%m",
+            min:from,
+            max:to, 
+        }, 
+        grid: {
+            hoverable: true, 
+            clickable: true,
+            autoHighlight:true,
+            color: "#999"
+        },
+        //selection: {mode: "x"}
+    };
+    var overview_options = {
+        legend:{show:false},
+        bars: {show:true,barWidth: 2,},
+        shadowSize: 0,
+        xaxis: {mode: "time", timeformat: "%d/%m/%y",},
+        yaxis: {ticks: 3, min: 0,tickDecimals:0,},
+        grid: {color: "#999",},
+        selection: {mode: "x"}
+    };
+
+    /**
+    *get dummy data needed in few places
+    */
+    function getDummyData(label){
+        return {"label":label,
+         "data":[{"time":0,
+             "commits":0,
+                 "added":0,
+                 "changed":0,
+                 "removed":0,
+            }],
+            "schema":["commits"],
+            "color":'#ffffff',
         }
-        YUD.get('lang_stats').appendChild(tbl);
-        YUE.on('code_stats_show_more','click',function(){
-            l = YUD.getElementsByClassName('stats_hidden')
-            for (e in l){
-                YUD.setStyle(l[e],'display','');
-            };
-            YUD.setStyle(YUD.get('code_stats_show_more'),
-                    'display','none');
-        })
+    }
+    
+    /**
+     * generate checkboxes accordindly to data
+     * @param keys
+     * @returns
+     */
+    function generateCheckboxes(data) {
+        //append checkboxes
+        var i = 0;
+        choiceContainerTable.innerHTML = '';
+        for(var pos in data) {
+            
+            data[pos].color = i;
+            i++;
+            if(data[pos].label != ''){
+                choiceContainerTable.innerHTML += '<tr><td>'+
+                '<input type="checkbox" name="' + data[pos].label +'" checked="checked" />'
+                +data[pos].label+
+                '</td></tr>';
+            }
+        }   
+    }
     
-             var tmpl_links = {}
-              %for cnt,archive in enumerate(c.rhodecode_repo._get_archives()):
-                tmpl_links['${archive['type']}'] = '${h.link_to(archive['type'],
-                     h.url('files_archive_home',repo_name=c.dbrepo.repo_name,
-                     fname='__CS__'+archive['extension'],subrepos='__SUB__'),class_="archive_icon")}';
-              %endfor
-              
-             YUE.on(['download_options','archive_subrepos'],'change',function(e){
-                 var sm = YUD.get('download_options');
-                 var new_cs = sm.options[sm.selectedIndex];
-                 
-                 for(k in tmpl_links){
-                     var s = YUD.get(k+'_link');
-                     title_tmpl = "${_('Download %s as %s') % ('__CS_NAME__','__CS_EXT__')}";
-                     s.title = title_tmpl.replace('__CS_NAME__',new_cs.text);
-                     s.title = s.title.replace('__CS_EXT__',k);
-                     var url = tmpl_links[k].replace('__CS__',new_cs.value);
-                     var subrepos = YUD.get('archive_subrepos').checked
-                     url = url.replace('__SUB__',subrepos);
-                     s.innerHTML = url 
-                 }
-             });
-    </script>   
-<script type="text/javascript">
-        /**
-         * Plots summary graph
-         *
-         * @class SummaryPlot
-         * @param {from} initial from for detailed graph
-         * @param {to} initial to for detailed graph
-         * @param {dataset}
-         * @param {overview_dataset}
-         */
-        function SummaryPlot(from,to,dataset,overview_dataset) {
-            var initial_ranges = {
-                "xaxis":{
-                    "from":from,
-                    "to":to,
-                },
-            };
-            var dataset = dataset;
-            var overview_dataset = [overview_dataset];
-            var choiceContainer = YUD.get("legend_choices");
-            var choiceContainerTable = YUD.get("legend_choices_tables");
-            var plotContainer = YUD.get('commit_history');
-            var overviewContainer = YUD.get('overview');
+    /**
+     * ToolTip show
+     */
+    function showTooltip(x, y, contents) {
+        var div=document.getElementById('tooltip');
+        if(!div) {
+            div = document.createElement('div');
+            div.id="tooltip";
+            div.style.position="absolute";
+            div.style.border='1px solid #fdd';
+            div.style.padding='2px';
+            div.style.backgroundColor='#fee';
+            document.body.appendChild(div);
+        }
+        YUD.setStyle(div, 'opacity', 0);
+        div.innerHTML = contents;
+        div.style.top=(y + 5) + "px";
+        div.style.left=(x + 5) + "px";
+
+        var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
+        anim.animate();
+    }
+    
+    /**
+     * This function will detect if selected period has some changesets 
+       for this user if it does this data is then pushed for displaying
+       Additionally it will only display users that are selected by the checkbox
+    */
+    function getDataAccordingToRanges(ranges) {
+        
+        var data = [];
+        var new_dataset = {};
+        var keys = [];
+        var max_commits = 0;
+        for(var key in dataset){
             
-            var plot_options = {
-                bars: {show:true,align:'center',lineWidth:4},
-                legend: {show:true, container:"legend_container"},
-                points: {show:true,radius:0,fill:false},
-                yaxis: {tickDecimals:0,},
-                xaxis: {
-                    mode: "time", 
-                    timeformat: "%d/%m",
-                    min:from,
-                    max:to, 
-                }, 
-                grid: {
-                    hoverable: true, 
-                    clickable: true,
-                    autoHighlight:true,
-                    color: "#999"
-                },
-                //selection: {mode: "x"}
-            };
-            var overview_options = {
-                legend:{show:false},
-                bars: {show:true,barWidth: 2,},
-                shadowSize: 0,
-                xaxis: {mode: "time", timeformat: "%d/%m/%y",},
-                yaxis: {ticks: 3, min: 0,tickDecimals:0,},
-                grid: {color: "#999",},
-                selection: {mode: "x"}
-            };
+            for(var ds in dataset[key].data){
+                commit_data = dataset[key].data[ds];
+                if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
 
-            /**
-            *get dummy data needed in few places
-            */
-            function getDummyData(label){
-                return {"label":label,
-                 "data":[{"time":0,
-                     "commits":0,
-                         "added":0,
-                         "changed":0,
-                         "removed":0,
-                    }],
-                    "schema":["commits"],
-                    "color":'#ffffff',
+                    if(new_dataset[key] === undefined){
+                        new_dataset[key] = {data:[],schema:["commits"],label:key};  
+                    }
+                    new_dataset[key].data.push(commit_data);
                 }
             }
-            
-            /**
-             * generate checkboxes accordindly to data
-             * @param keys
-             * @returns
-             */
-            function generateCheckboxes(data) {
-                //append checkboxes
-                var i = 0;
-                choiceContainerTable.innerHTML = '';
-                for(var pos in data) {
-                    
-                    data[pos].color = i;
-                    i++;
-                    if(data[pos].label != ''){
-                        choiceContainerTable.innerHTML += '<tr><td>'+
-                        '<input type="checkbox" name="' + data[pos].label +'" checked="checked" />'
-                        +data[pos].label+
-                        '</td></tr>';
-                    }
-                }   
+            if (new_dataset[key] !== undefined){
+                data.push(new_dataset[key]);    
             }
-            
-            /**
-             * ToolTip show
-             */
-            function showTooltip(x, y, contents) {
-                var div=document.getElementById('tooltip');
-                if(!div) {
-                    div = document.createElement('div');
-                    div.id="tooltip";
-                    div.style.position="absolute";
-                    div.style.border='1px solid #fdd';
-                    div.style.padding='2px';
-                    div.style.backgroundColor='#fee';
-                    document.body.appendChild(div);
-                }
-                YUD.setStyle(div, 'opacity', 0);
-                div.innerHTML = contents;
-                div.style.top=(y + 5) + "px";
-                div.style.left=(x + 5) + "px";
+        }
 
-                var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
-                anim.animate();
-            }
-            
-            /**
-             * This function will detect if selected period has some changesets 
-               for this user if it does this data is then pushed for displaying
-               Additionally it will only display users that are selected by the checkbox
-            */
-            function getDataAccordingToRanges(ranges) {
-                
-                var data = [];
-                var new_dataset = {};
-                var keys = [];
-                var max_commits = 0;
-                for(var key in dataset){
-                    
-                    for(var ds in dataset[key].data){
-                        commit_data = dataset[key].data[ds];
-                        if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
+        if (data.length > 0){
+            return data;    
+        }
+        else{
+            //just return dummy data for graph to plot itself
+            return [getDummyData('')];  
+        }
+    }
+    
+    /**
+    * redraw using new checkbox data
+    */
+    function plotchoiced(e,args){
+        var cur_data = args[0];
+        var cur_ranges = args[1];
+        
+        var new_data = [];
+        var inputs = choiceContainer.getElementsByTagName("input");
 
-                            if(new_dataset[key] === undefined){
-                                new_dataset[key] = {data:[],schema:["commits"],label:key};  
-                            }
-                            new_dataset[key].data.push(commit_data);
-                        }
-                    }
-                    if (new_dataset[key] !== undefined){
-                        data.push(new_dataset[key]);    
+        //show only checked labels
+        for(var i=0; i<inputs.length; i++) {
+            var checkbox_key = inputs[i].name;
+            
+            if(inputs[i].checked){
+                for(var d in cur_data){
+                    if(cur_data[d].label == checkbox_key){
+                        new_data.push(cur_data[d]);
                     }
-                }
-
-                if (data.length > 0){
-                    return data;    
-                }
-                else{
-                    //just return dummy data for graph to plot itself
-                    return [getDummyData('')];  
-                }
+                }                           
+            }
+            else{
+                //push dummy data to not hide the label
+                new_data.push(getDummyData(checkbox_key));
             }
-            
-            /**
-            * redraw using new checkbox data
-            */
-            function plotchoiced(e,args){
-                var cur_data = args[0];
-                var cur_ranges = args[1];
-                
-                var new_data = [];
-                var inputs = choiceContainer.getElementsByTagName("input");
+        }
+                    
+        var new_options = YAHOO.lang.merge(plot_options, {
+            xaxis: { 
+                min: cur_ranges.xaxis.from, 
+                max: cur_ranges.xaxis.to,
+                mode:"time",
+                timeformat: "%d/%m",
+            },
+        });
+        if (!new_data){
+            new_data = [[0,1]];
+        }
+        // do the zooming
+       plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
+       
+       plot.subscribe("plotselected", plotselected);
 
-                //show only checked labels
-                for(var i=0; i<inputs.length; i++) {
-                    var checkbox_key = inputs[i].name;
-                    
-                    if(inputs[i].checked){
-                        for(var d in cur_data){
-                            if(cur_data[d].label == checkbox_key){
-                                new_data.push(cur_data[d]);
-                            }
-                        }                           
-                    }
-                    else{
-                        //push dummy data to not hide the label
-                        new_data.push(getDummyData(checkbox_key));
-                    }
-                }
-                            
-                var new_options = YAHOO.lang.merge(plot_options, {
-                    xaxis: { 
-                        min: cur_ranges.xaxis.from, 
-                        max: cur_ranges.xaxis.to,
-                        mode:"time",
-                        timeformat: "%d/%m",
-                    },
-                });
-                if (!new_data){
-                    new_data = [[0,1]];
-                }
-                // do the zooming
-               plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
-               
-               plot.subscribe("plotselected", plotselected);
+       //resubscribe plothover
+       plot.subscribe("plothover", plothover);
+        
+       // don't fire event on the overview to prevent eternal loop 
+       overview.setSelection(cur_ranges, true);
+
+    }
     
-               //resubscribe plothover
-               plot.subscribe("plothover", plothover);
-                
-               // don't fire event on the overview to prevent eternal loop 
-               overview.setSelection(cur_ranges, true);
+    /**
+     * plot only selected items from overview
+     * @param ranges
+     * @returns
+     */
+    function plotselected(ranges,cur_data) {
+        //updates the data for new plot
+        var data = getDataAccordingToRanges(ranges);
+        generateCheckboxes(data);
+        
+        var new_options = YAHOO.lang.merge(plot_options, {
+            xaxis: { 
+                min: ranges.xaxis.from, 
+                max: ranges.xaxis.to,
+                mode:"time",
+                timeformat: "%d/%m",
+            },
+        });
+        // do the zooming 
+        plot = YAHOO.widget.Flot(plotContainer, data, new_options);
+
+        plot.subscribe("plotselected", plotselected);
+
+        //resubscribe plothover
+        plot.subscribe("plothover", plothover);
+        
+        // don't fire event on the overview to prevent eternal loop
+        overview.setSelection(ranges, true);
+
+        //resubscribe choiced 
+        YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
+    }
     
-            }
-            
-            /**
-             * plot only selected items from overview
-             * @param ranges
-             * @returns
-             */
-            function plotselected(ranges,cur_data) {
-                //updates the data for new plot
-                var data = getDataAccordingToRanges(ranges);
-                generateCheckboxes(data);
+    var previousPoint = null;
+
+    function plothover(o) {
+        var pos = o.pos;
+        var item = o.item;
+        
+        //YUD.get("x").innerHTML = pos.x.toFixed(2);
+        //YUD.get("y").innerHTML = pos.y.toFixed(2);
+        if (item) {
+            if (previousPoint != item.datapoint) {
+                previousPoint = item.datapoint;
                 
-                var new_options = YAHOO.lang.merge(plot_options, {
-                    xaxis: { 
-                        min: ranges.xaxis.from, 
-                        max: ranges.xaxis.to,
-                        mode:"time",
-                        timeformat: "%d/%m",
-                    },
-                });
-                // do the zooming 
-                plot = YAHOO.widget.Flot(plotContainer, data, new_options);
-
-                plot.subscribe("plotselected", plotselected);
-
-                //resubscribe plothover
-                plot.subscribe("plothover", plothover);
+                var tooltip = YUD.get("tooltip");
+                if(tooltip) {
+                      tooltip.parentNode.removeChild(tooltip);
+                }
+                var x = item.datapoint.x.toFixed(2);
+                var y = item.datapoint.y.toFixed(2);
                 
-                // don't fire event on the overview to prevent eternal loop
-                overview.setSelection(ranges, true);
-
-                //resubscribe choiced 
-                YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
-            }
-            
-            var previousPoint = null;
-
-            function plothover(o) {
-                var pos = o.pos;
-                var item = o.item;
+                if (!item.series.label){
+                    item.series.label = 'commits';
+                }
+                var d = new Date(x*1000);
+                var fd = d.toDateString()
+                var nr_commits = parseInt(y);
                 
-                //YUD.get("x").innerHTML = pos.x.toFixed(2);
-                //YUD.get("y").innerHTML = pos.y.toFixed(2);
-                if (item) {
-                    if (previousPoint != item.datapoint) {
-                        previousPoint = item.datapoint;
-                        
-                        var tooltip = YUD.get("tooltip");
-                        if(tooltip) {
-                              tooltip.parentNode.removeChild(tooltip);
-                        }
-                        var x = item.datapoint.x.toFixed(2);
-                        var y = item.datapoint.y.toFixed(2);
-                        
-                        if (!item.series.label){
-                            item.series.label = 'commits';
-                        }
-                        var d = new Date(x*1000);
-                        var fd = d.toDateString()
-                        var nr_commits = parseInt(y);
-                        
-                        var cur_data = dataset[item.series.label].data[item.dataIndex];
-                        var added = cur_data.added;
-                        var changed = cur_data.changed;
-                        var removed = cur_data.removed;
-                        
-                        var nr_commits_suffix = " ${_('commits')} ";
-                        var added_suffix = " ${_('files added')} ";
-                        var changed_suffix = " ${_('files changed')} ";
-                        var removed_suffix = " ${_('files removed')} ";
+                var cur_data = dataset[item.series.label].data[item.dataIndex];
+                var added = cur_data.added;
+                var changed = cur_data.changed;
+                var removed = cur_data.removed;
+                
+                var nr_commits_suffix = " ${_('commits')} ";
+                var added_suffix = " ${_('files added')} ";
+                var changed_suffix = " ${_('files changed')} ";
+                var removed_suffix = " ${_('files removed')} ";
 
-                        
-                        if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
-                        if(added==1){added_suffix=" ${_('file added')} ";}
-                        if(changed==1){changed_suffix=" ${_('file changed')} ";}
-                        if(removed==1){removed_suffix=" ${_('file removed')} ";}
-                                                        
-                        showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
-                                 +'<br/>'+
-                                 nr_commits + nr_commits_suffix+'<br/>'+
-                                 added + added_suffix +'<br/>'+
-                                 changed + changed_suffix + '<br/>'+
-                                 removed + removed_suffix + '<br/>');
-                    }
-                }
-                else {
-                      var tooltip = YUD.get("tooltip");
-                      
-                      if(tooltip) {
-                            tooltip.parentNode.removeChild(tooltip);
-                      }
-                    previousPoint = null;
-                }
+                
+                if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
+                if(added==1){added_suffix=" ${_('file added')} ";}
+                if(changed==1){changed_suffix=" ${_('file changed')} ";}
+                if(removed==1){removed_suffix=" ${_('file removed')} ";}
+                                                
+                showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
+                         +'<br/>'+
+                         nr_commits + nr_commits_suffix+'<br/>'+
+                         added + added_suffix +'<br/>'+
+                         changed + changed_suffix + '<br/>'+
+                         removed + removed_suffix + '<br/>');
             }
-            
-            /**
-             * MAIN EXECUTION
-             */
-            
-            var data = getDataAccordingToRanges(initial_ranges);    
-            generateCheckboxes(data);
-            
-            //main plot 
-            var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
-            
-            //overview 
-            var overview = YAHOO.widget.Flot(overviewContainer, 
-                    overview_dataset, overview_options);
-            
-            //show initial selection on overview 
-            overview.setSelection(initial_ranges);    
-            
-            plot.subscribe("plotselected", plotselected);
-            plot.subscribe("plothover", plothover)
-            
-            overview.subscribe("plotselected", function (ranges) {
-                plot.setSelection(ranges);
-            });     
+        }
+        else {
+              var tooltip = YUD.get("tooltip");
+              
+              if(tooltip) {
+                    tooltip.parentNode.removeChild(tooltip);
+              }
+            previousPoint = null;
+        }
+    }
+    
+    /**
+     * MAIN EXECUTION
+     */
+    
+    var data = getDataAccordingToRanges(initial_ranges);    
+    generateCheckboxes(data);
+    
+    //main plot 
+    var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
+    
+    //overview 
+    var overview = YAHOO.widget.Flot(overviewContainer, 
+            overview_dataset, overview_options);
+    
+    //show initial selection on overview 
+    overview.setSelection(initial_ranges);    
+    
+    plot.subscribe("plotselected", plotselected);
+    plot.subscribe("plothover", plothover)
+    
+    overview.subscribe("plotselected", function (ranges) {
+        plot.setSelection(ranges);
+    });     
 
-            YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
-        }
-            SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});       
-        </script>
+    // user choices on overview
+    YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
+}
+    SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});       
+</script>
+%endif
 
 </%def>