changeset 160:0f7f93df5802

implemented rawdiff and diff download into diff view. Few css changes
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 19 May 2010 00:18:48 +0200
parents 96285f905073
children 9936a1d359e0
files pylons_app/controllers/files.py pylons_app/public/css/diff.css pylons_app/public/css/monoblue_custom.css pylons_app/templates/files/file_diff.html
diffstat 4 files changed, 108 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/pylons_app/controllers/files.py	Mon May 17 03:06:12 2010 +0200
+++ b/pylons_app/controllers/files.py	Wed May 19 00:18:48 2010 +0200
@@ -65,8 +65,8 @@
         hg_model = HgModel()
         c.repo = hg_model.get_repo(c.repo_name)
         file_node = c.repo.get_changeset(revision).get_node(f_path)
-        response.headers['Content-type'] = file_node.mimetype
-        response.headers['Content-disposition'] = 'attachment; filename=%s' \
+        response.content_type = file_node.mimetype
+        response.content_disposition = 'attachment; filename=%s' \
                                                     % f_path.split('/')[-1] 
         return file_node.content
     
@@ -77,6 +77,7 @@
         hg_model = HgModel()
         diff1 = request.GET.get('diff1')
         diff2 = request.GET.get('diff2')
+        c.action = action = request.GET.get('diff')
         c.no_changes = diff1 == diff2
         c.f_path = f_path
         c.repo = hg_model.get_repo(c.repo_name)
@@ -85,11 +86,23 @@
 
         c.diff1 = 'r%s:%s' % (c.changeset_1.revision, c.changeset_1._short)
         c.diff2 = 'r%s:%s' % (c.changeset_2.revision, c.changeset_2._short)
-        
-        
         f_udiff = differ.get_udiff(c.changeset_1.get_node(f_path),
                             c.changeset_2.get_node(f_path))
-        c.differ = differ.DiffProcessor(f_udiff)
+        
+        diff = differ.DiffProcessor(f_udiff)
+                                
+        if action == 'download':
+            diff_name = '%s_vs_%s.diff' % (diff1, diff2)
+            response.content_type = 'text/plain'
+            response.content_disposition = 'attachment; filename=%s' \
+                                                    % diff_name             
+            return diff.raw_diff()
+        
+        elif action == 'raw':
+            c.cur_diff = '<pre class="raw">%s</pre>' % diff.raw_diff()
+        elif action == 'diff':
+            c.cur_diff = diff.as_html()
+
         return render('files/file_diff.html')
     
     def _get_history(self, repo, node, f_path):
--- a/pylons_app/public/css/diff.css	Mon May 17 03:06:12 2010 +0200
+++ b/pylons_app/public/css/diff.css	Wed May 19 00:18:48 2010 +0200
@@ -14,13 +14,17 @@
 	color:blue;
 	padding:10px 0 10px 0;
 }
-div.diffblock .code-header span{
+div.diffblock .code-header div{
 	margin-left:25px;
 	font-weight: bold;
 }
 div.diffblock .code-body{
 	background: #EEEEEE;
 }
+div.diffblock pre.raw{
+	background: #FFFFFF;
+	color:#000000;
+}
 
 .code-difftable{
 	border-collapse: collapse;
--- a/pylons_app/public/css/monoblue_custom.css	Mon May 17 03:06:12 2010 +0200
+++ b/pylons_app/public/css/monoblue_custom.css	Wed May 19 00:18:48 2010 +0200
@@ -12,7 +12,9 @@
 a:HOVER{
 	text-decoration: underline;
 }
-/*** end of Initial Settings ***/ /** common settings **/
+/*** end of Initial Settings ***/ 
+
+/** common settings **/
 div#main {
 	padding: 5px;
 }
@@ -381,76 +383,97 @@
 /** end of file **/ 
 
 /** changeset **/
-h3.changeset {
-	margin: 20px 0 5px 20px;
-	padding: 0 0 2px;
-	font-size: 1.6em;
-	border-bottom: dotted 1px #D5E1E6;
-}
 
-p.changeset-age {
-	position: relative;
+.cs_files{
+	border: 2px solid #CCCCCC;
+	width: 60%;
+	
 }
-
-p.changeset-age span {
-	position: absolute;
-	top: -25px;
-	right: 10px;
-	font-size: 1.4em;
-	color: #CCC;
-	font-weight: bold;
-	font-style: italic;
+.cs_files .cs_added{
+	background:#BBFFBB;
 }
-
-p.description {
-	margin: 10px 30px 0 30px;
-	padding: 10px;
-	border: solid 1px #CCC;
-	font-size: 1.2em;
+.cs_files .cs_changed{
+	background: #FFDD88;
+}
+.cs_files .cs_removed{
+	background: #FF8888;
 }
 
 /** end of changeset **/ 
 
 /** canvas **/
-div#wrapper {
-	position: relative;
-	font-size: 1.2em;
-}
-
 canvas {
 	position: absolute;
 	z-index: 5;
 	top: -0.7em;
 }
+#graph{
+	overflow: hidden;
 
-ul#nodebgs li.parity0 {
-	background: #F1F6F7;
+}
+#graph_nodes{
+	width:160px;
+	float:left;
 }
 
-ul#nodebgs li.parity1 {
-	background: #FFFFFF;
+#graph_content{
+	width:800px;
+	float:left;
+}
+#graph_content .container_header{
+	border:1px solid #CCCCCC;
+	height:30px;
+	background: #EEEEEE;
+}
+
+
+#graph_content .container .wrapper{
+	width: 600px;
+}
+#graph_content .container{
+	border-bottom: 1px solid #CCCCCC;
+	border-left: 1px solid #CCCCCC;
+	border-right: 1px solid #CCCCCC;
+	height:120px;
 }
 
-ul#graphnodes {
-	position: absolute;
-	z-index: 10;
-	top: 7px;
-	list-style: none inside none;
+#graph_content .container .left{
+	float:left;
+	width: 70%;
+	padding-left: 5px;
 }
 
-ul#nodebgs {
-	list-style: none inside none;
+#graph_content .container .right{
+	float:right;
+	width: 25%;
+}
+#graph_content .container .left .date{
+	font-weight:bold;
+}
+#graph_content .container .left .author{
+	
+}
+#graph_content .container .left .message{
+	font-size: 80%;
 }
 
-ul#graphnodes li,ul#nodebgs li {
-	height: 39px;
+.right .added,.changed,.removed{
+	border:1px solid #DDDDDD;
+	display:block;
+	float:right;
+	font-size:0.75em;
+	text-align:center;
+	min-width:15px;
 }
-
-ul#graphnodes li .info {
-	display: block;
-	position: relative;
+.right .added{
+	background:#BBFFBB; 
 }
-
+.right .changed{
+	background: #FFDD88;
+}
+.right .removed{
+	background: #FF8888;
+}
 /** end of canvas **/
 
 /* FILE BROWSER */
@@ -479,7 +502,8 @@
 }
 
 table.code-browser {
-	border-collapse:collapse;	
+	border-collapse:collapse;
+	width: 100%;
 }
 table.code-browser tr{
 	margin:3px;	
@@ -491,6 +515,8 @@
 	font-size: 1.1em;
 	font-weight: bold;
 	text-align: center;
+	text-align: left;
+	padding-left: 10px;
 }
 table.code-browser tbody tr {
 	
--- a/pylons_app/templates/files/file_diff.html	Mon May 17 03:06:12 2010 +0200
+++ b/pylons_app/templates/files/file_diff.html	Wed May 19 00:18:48 2010 +0200
@@ -28,13 +28,22 @@
     <h2 class="no-link no-border">${'%s:  %s %s %s' % (_('File diff'),c.diff2,'&rarr;',c.diff1)|n}</h2>
 <div id="body" class="diffblock">
 	<div class="code-header">
-		<span>${h.link_to(c.f_path,h.url('files_home',repo_name=c.repo_name,revision=c.diff2.split(':')[1],f_path=c.f_path))}</span>
+		<div>
+		<span>${h.link_to(c.f_path,h.url('files_home',repo_name=c.repo_name,
+		revision=c.diff2.split(':')[1],f_path=c.f_path))}</span>
+		 &raquo; <span style="font-size:77%">${h.link_to(_('diff'),
+		h.url.current(diff2=c.diff2.split(':')[-1],diff1=c.diff1.split(':')[-1],diff='diff'))}</span>
+		 &raquo; <span style="font-size:77%">${h.link_to(_('raw diff'),
+		h.url.current(diff2=c.diff2.split(':')[-1],diff1=c.diff1.split(':')[-1],diff='raw'))}</span>
+		 &raquo; <span style="font-size:77%">${h.link_to(_('download diff'),
+		h.url.current(diff2=c.diff2.split(':')[-1],diff1=c.diff1.split(':')[-1],diff='download'))}</span>
+		</div>
 	</div>
 	<div class="code-body">
  			%if c.no_changes:
             	${_('No changes')}
             %else:        
-				${c.differ.as_HTML()|n}
+				${c.cur_diff|n}
             %endif
 	</div>
 </div>