changeset 763:0dad296d2a57 beta

extended trending languages to more entries, implemented new faster and "fancy" method of extensions recognition. Fixed small bug in indexer when data dir was empty
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 26 Nov 2010 02:25:39 +0100
parents 6e8322c438ca
children 5c87d5ad1b5e
files rhodecode/controllers/summary.py rhodecode/lib/indexers/daemon.py rhodecode/templates/base/base.html rhodecode/templates/summary/summary.html
diffstat 4 files changed, 74 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/summary.py	Fri Nov 26 00:11:12 2010 +0100
+++ b/rhodecode/controllers/summary.py	Fri Nov 26 02:25:39 2010 +0100
@@ -1,8 +1,14 @@
-#!/usr/bin/env python
-# encoding: utf-8
-# summary controller for pylons
-# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
-# 
+# -*- coding: utf-8 -*-
+"""
+    package.rhodecode.controllers.summary
+    ~~~~~~~~~~~~~~
+
+    Summary controller for Rhodecode
+    :created_on: Apr 18, 2010
+    :author: marcink
+    :copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>    
+    :license: GPLv3, see COPYING for more details.
+"""
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; version 2
@@ -17,11 +23,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 # MA  02110-1301, USA.
-"""
-Created on April 18, 2010
-summary controller for pylons
-@author: marcink
-"""
+
 from pylons import tmpl_context as c, request, url
 from vcs.exceptions import ChangesetError
 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
@@ -116,7 +118,7 @@
             c.overview_data = stats.commit_activity_combined
             c.trending_languages = json.dumps(OrderedDict(
                                        sorted(lang_stats.items(), reverse=True,
-                                            key=lambda k: k[1])[:2]
+                                            key=lambda k: k[1])[:10]
                                         )
                                     )
         else:
--- a/rhodecode/lib/indexers/daemon.py	Fri Nov 26 00:11:12 2010 +0100
+++ b/rhodecode/lib/indexers/daemon.py	Fri Nov 26 02:25:39 2010 +0100
@@ -78,10 +78,10 @@
         if not repo_location:
             raise Exception('You have to provide repositories location')
 
-        self.repo_paths = ScmModel().repo_scan(self.repo_location, None, True)
+        self.repo_paths = ScmModel().repo_scan(self.repo_location, None)
         self.initial = False
         if not os.path.isdir(self.index_location):
-            os.mkdir(self.index_location)
+            os.makedirs(self.index_location)
             log.info('Cannot run incremental index since it does not'
                      ' yet exist running full build')
             self.initial = True
--- a/rhodecode/templates/base/base.html	Fri Nov 26 00:11:12 2010 +0100
+++ b/rhodecode/templates/base/base.html	Fri Nov 26 02:25:39 2010 +0100
@@ -311,7 +311,7 @@
 var base_url  ='/_admin/toggle_following';
 var YUC = YAHOO.util.Connect;
 var YUD = YAHOO.util.Dom;
-
+var YUE = YAHOO.util.Event;
 
 function onSuccess(){
 	
@@ -319,7 +319,6 @@
     if(f.getAttribute('class')=='follow'){
         f.setAttribute('class','following');
         f.setAttribute('title',"${_('Stop following this repository')}");
-        
     }
     else{
         f.setAttribute('class','follow');
@@ -337,7 +336,6 @@
     },args); return false;
 }
 
-
 function toggleFollowingRepo(fallows_repo_id,token){
     args = 'follows_repo_id='+fallows_repo_id;
     args+= '&auth_token='+token;
@@ -349,7 +347,6 @@
 }    
 </script>
 
-
 </%def>
 
 <%def name="breadcrumbs()">
--- a/rhodecode/templates/summary/summary.html	Fri Nov 26 00:11:12 2010 +0100
+++ b/rhodecode/templates/summary/summary.html	Fri Nov 26 02:25:39 2010 +0100
@@ -17,17 +17,6 @@
 </%def>
 
 <%def name="main()">
-<script type="text/javascript">
-var E = YAHOO.util.Event;
-var D = YAHOO.util.Dom;
-
-E.onDOMReady(function(e){
-    id = 'clone_url';
-    E.addListener(id,'click',function(e){
-        D.get('clone_url').select();
-    })
-})
-</script>
 <div class="box box-left">
     <!-- box / title -->
     <div class="title">
@@ -126,13 +115,19 @@
 			 
 			 <div class="field">
 			  <div class="label">
-			      <label>${_('Trending languages')}:</label>
+			      <label>${_('Trending source files')}:</label>
 			  </div>
 			  <div class="input-short">
 			    <div id="lang_stats">
 			    
 			    </div> 			  
 			  	<script type="text/javascript">
+				  	YUE.onDOMReady(function(e){
+				  	    id = 'clone_url';
+				  	    YUE.on(id,'click',function(e){
+				  	        YUD.get('clone_url').select();
+				  	    })
+				  	})
 			  		var data = ${c.trending_languages|n};
 			  		var total = 0;
 			  		var no_data = true;
@@ -142,8 +137,15 @@
 			  		} 
 					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]/total*100),2);
 						var value = data[k];
 				  		var td1 = document.createElement('td');
@@ -155,8 +157,17 @@
 				  		var td2 = document.createElement('td');
 				  		td2.setAttribute('style','padding-right:14px !important');
 			  		    var trending_language = document.createElement('div');
-			  		    trending_language.title = k;
-			  		    trending_language.innerHTML = "<b>"+percentage+"% "+value+" ${_('files')}</b>";
+			  		    var nr_files = value+" ${_('files')}";
+			  		    
+			  		    trending_language.title = k+" "+nr_files;
+			  		    
+			  		    if (percentage>20){
+			  		    	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);
@@ -164,6 +175,18 @@
 						tr.appendChild(td1);
 						tr.appendChild(td2);
 			  		    tbl.appendChild(tr);
+			  		    if(cnt == 2){
+			  		    	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){
@@ -173,7 +196,16 @@
 			  			tr.appendChild(td1);
 			  			tbl.appendChild(tr);
 					}
-			  		YAHOO.util.Dom.get('lang_stats').appendChild(tbl);
+			  		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>
  
 			  </div>
@@ -244,10 +276,10 @@
 			};
 		    var dataset = dataset;
 		    var overview_dataset = [overview_dataset];
-		    var choiceContainer = YAHOO.util.Dom.get("legend_choices");
-		    var choiceContainerTable = YAHOO.util.Dom.get("legend_choices_tables");
-		    var plotContainer = YAHOO.util.Dom.get('commit_history');
-		    var overviewContainer = YAHOO.util.Dom.get('overview');
+		    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},
@@ -330,7 +362,7 @@
 		            div.style.backgroundColor='#fee';
 		            document.body.appendChild(div);
 		        }
-		        YAHOO.util.Dom.setStyle(div, 'opacity', 0);
+		        YUD.setStyle(div, 'opacity', 0);
 		        div.innerHTML = contents;
 		        div.style.top=(y + 5) + "px";
 		        div.style.left=(x + 5) + "px";
@@ -472,7 +504,7 @@
 		        overview.setSelection(ranges, true);
 
 		        //resubscribe choiced
-		        YAHOO.util.Event.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
+		        YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
 		    }
 		    
 		    var previousPoint = null;
@@ -481,13 +513,13 @@
 		        var pos = o.pos;
 		        var item = o.item;
 		        
-		        //YAHOO.util.Dom.get("x").innerHTML = pos.x.toFixed(2);
-		        //YAHOO.util.Dom.get("y").innerHTML = pos.y.toFixed(2);
+		        //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 = YAHOO.util.Dom.get("tooltip");
+		                var tooltip = YUD.get("tooltip");
 		                if(tooltip) {
 		                	  tooltip.parentNode.removeChild(tooltip);
 		                }
@@ -526,7 +558,7 @@
 		            }
 		        }
 		        else {
-		        	  var tooltip = YAHOO.util.Dom.get("tooltip");
+		        	  var tooltip = YUD.get("tooltip");
 		        	  
 			          if(tooltip) {
 			                tooltip.parentNode.removeChild(tooltip);
@@ -559,7 +591,7 @@
 				
 		    plot.subscribe("plothover", plothover);
 
-		    YAHOO.util.Event.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_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>