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
javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_ejercicio');"), W.JSSource(ajax)]
form = EntregaForm()
+
#}}}
#{{{ Controlador
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(
<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>
--- /dev/null
+<!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 : -->