]> git.llucax.com Git - software/sercom.git/commitdiff
Agrego visor de Diffs a colores para ver el contenido del campo diferencias :).
authorRicardo Markiewicz <rmarkie@fi.uba.ar>
Sun, 18 Mar 2007 07:53:34 +0000 (07:53 +0000)
committerRicardo Markiewicz <rmarkie@fi.uba.ar>
Sun, 18 Mar 2007 07:53:34 +0000 (07:53 +0000)
Tiene un hack medio feo que incluyo cosas de los Widgets a mano para poder agregar
soporte de coloreo de Diffs que no tiene el Widget. Hay que poner que los paths sean
mas TG friendly y rezar que no cambien de lugar entre instalaciones :), pero queda muy
pro :D

sercom/static/css/style.css
sercom/subcontrollers/misentregas/__init__.py
sercom/subcontrollers/misentregas/templates/corrida.kid
sercom/subcontrollers/misentregas/templates/diff.kid [new file with mode: 0644]

index 784595bf66965c9dadbabf84b6b85d68537cda9a..d001a0b567d8e062682bf756b6e0654d8cc14d61 100644 (file)
@@ -292,4 +292,14 @@ border-collapse: collapse;
        background: #ffdddd;
 }
 
+.dp-diff .rojo {
+    color:red;
+}
+
+.dp-diff .chunk {
+    color:blue;
+}
 
+.dp-diff .verde {
+    color:green;
+}
index d5ec3e4f6eb9342b768a5055679f097a44c79376..88259c2482fad74790cf803c8c3fb4a5d44d3d49 100644 (file)
@@ -10,7 +10,7 @@ from turbogears import identity
 from turbogears import paginate
 from docutils.core import publish_parts
 from sercom.subcontrollers import validate as val
-from sercom.model import ComandoEjecutado, Entrega, Correccion, Curso, Ejercicio, InstanciaDeEntrega, Grupo, Miembro, AlumnoInscripto
+from sercom.model import ComandoEjecutado, ComandoPruebaEjecutado, Entrega, Correccion, Curso, Ejercicio, InstanciaDeEntrega, Grupo, Miembro, AlumnoInscripto
 from sqlobject import *
 from zipfile import ZipFile, BadZipfile
 from cStringIO import StringIO
@@ -98,6 +98,7 @@ class EntregaForm(W.TableForm):
     javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_ejercicio');"), W.JSSource(ajax)]
 
 form = EntregaForm()
+
 #}}}
 
 #{{{ Controlador
@@ -210,6 +211,12 @@ class MisEntregasController(controllers.Controller, identity.SecureResource):
         response.headers["Content-disposition"] = "attachment;filename=diferencias_%d.zip" % (r.id)
         return r.diferencias
 
+    @expose(template='kid:%s.templates.diff' % __name__)
+    def verdiff(self, id):
+        r = ComandoEjecutado.get(id)
+        zip = ZipFile(StringIO(r.diferencias), 'r')
+        return dict(zip=zip)
+
     @expose('json')
     def instancias(self, ejercicio_id):
         instancias = InstanciaDeEntrega.select(AND(
index e3aff6e7ef56c9467802990ae2b993ee741047dc..0480db2a9fd037a94c257f2106a33596d9e42b23 100644 (file)
         <td py:content="ce.fin" />
         <td py:content="tg.strbool(ce.exito)" align="center" />
         <td py:content="ce.observaciones" />
-                               <td align="center"><a href="${tg.url('/mis_entregas/diff/%d' % ce.id)}" py:if="ce.diferencias">Bajar</a></td>
+        <td align="center">
+            <a href="${tg.url('/mis_entregas/diff/%d' % ce.id)}" py:if="ce.diferencias">Bajar</a>
+            <a href="${tg.url('/mis_entregas/verdiff/%d' % ce.id)}" py:if="ce.diferencias">Ver</a>
+        </td>
         <td align="center"><a href="${tg.url('/mis_entregas/file/%d' % ce.id)}" py:if="ce.archivos">Bajar</a></td>
                        </tr>
        </table>
diff --git a/sercom/subcontrollers/misentregas/templates/diff.kid b/sercom/subcontrollers/misentregas/templates/diff.kid
new file mode 100644 (file)
index 0000000..e007b10
--- /dev/null
@@ -0,0 +1,51 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?python from sercom.model import Grupo, AlumnoInscripto ?>
+<?python import os ?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
+    py:extends="'../../../templates/master.kid'">
+<head>
+<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/>
+<LINK MEDIA="all" HREF="/tg_widgets/turbogears.widgets/sh/SyntaxHighlighter.css" TYPE="text/css" REL="stylesheet" />
+<title>list</title>
+</head>
+<body>
+
+<h1>Diferencias</h1>
+
+
+<?python i = 0 ?>
+<div py:for="info in zip.infolist()">
+       <h3>${info.filename}</h3>
+               <?python n, ext = os.path.splitext(info.filename) ?>
+               <textarea name="code" class="${ext[1:]}:collapse">${zip.read(info.filename)}</textarea>
+       <?python i += 1 ?>
+</div>
+
+<br/>
+<a href="javascript:window.history.go(-1)">Volver</a>
+
+       <!-- Lo hago a mano para poder agregar un nuevo lenguaje. No se como hacerlo sino :S -->
+  <SCRIPT SRC="/tg_widgets/turbogears.widgets/sh/shCore.js" TYPE="text/javascript"></SCRIPT>
+       <SCRIPT SRC="/tg_widgets/turbogears.widgets/sh/shBrushPython.js" TYPE="text/javascript"></SCRIPT>
+       <SCRIPT SRC="/tg_widgets/turbogears.widgets/sh/shBrushXml.js" TYPE="text/javascript"></SCRIPT>
+       <script type="text/javascript">
+               // <!-- Agrego soporte para DIFF que no tiene el widget -->
+               dp.sh.Brushes.Diff = function() {
+                       var keywords =  '@@'
+
+                       this.regexList = [
+                               { regex: new RegExp('^-.*', 'gm'), css: 'rojo' },
+                               { regex: new RegExp('^@@.*', 'gm'), css: 'chunk' },
+                               { regex: new RegExp('^\\+.*', 'gm'), css: 'verde' }
+                               ];
+
+                               this.CssClass = 'dp-diff';
+               }
+               dp.sh.Brushes.Diff.prototype    = new dp.sh.Highlighter();
+               dp.sh.Brushes.Diff.Aliases = ['diff'];
+       </script>
+       <SCRIPT TYPE="text/javascript">dp.SyntaxHighlighter.HighlightAll('code');</SCRIPT>
+</body>
+</html>
+
+<!-- vim: set et sw=4 sts=4 : -->