[cpif] r68 - in trunk/frontend-web: . skins skins/default skins/default/body skins/default/footer skins/default/header

svn at argo.es svn at argo.es
Tue May 22 02:11:09 CEST 2007


Author: alvaro
Date: Tue May 22 02:11:07 2007
New Revision: 68

Log:
Primeros pasos hacia un gestor de skins.

El fichero skins.py define la clase Skin que se engarga
de la gestion.

Los skins van fragmentados en ficheros html, segun la 
estructura que define el directorio skins/, donde cada
directorio simboliza un skin. La clase hace comprobaciones
de que los diferentes skins existen cada vez que se la instacie
(esto tiene que ir cambiado al init.py del frontend, ya que
es ridículo hacer esta comprobacion cada vez que se instancia
la clase, pero hoy me estoy muriendo del sueño, asi que para 
mañana ;-) )

Los ficheros realmente importantes estaran dentro del directorio
body de cada skin (ya que los header/footer es dificil que cambien
de una pagina a otra).

La clase hay que instanciarla y pasarle la url con el metodo 
load_url(path). Posteriormente se le pasa un diccionario con el metodo
load_dict(diccionario) con los valores generales de la pagina
(que cambian según el tipo que sea). Estos valores son:
  - page_title: el titulo de la pagina, si no lo pondra como "cpif"
  - calendar: para el listado de hilos, el calendario a mostrar
  - thread_title y thread_date: para el listado de entradas de un
    hilo en concreto.
  - version: la version del sw utilizado (si no se le pasa nada ya se
    encarga el de mostrarla).

Para el listado de hilos, la fecha se carga con group_date(str) y los grupos
de hilos con threads(hilos).
Los estilos afectados son: |- body/body.html (el cuerpo)
                           |- body/thread_group.html (el formato de la fecha)
                           |- body/thread.html (el formato de cada fila)

Para la pagina de cada hilo, se le pasan las entradas en thread_entries(mensajes). 
Los estilos afectados son: |- body/thread_entry.html (el formato de cada post)
                           |- body_thread.html (el formato del cuerpo)

El estilo body/default.html se usa para mostrar información por defecto (que
se puede cargar con el metodo load_text(texto), por ejemplo en las paginas de error, 
login, paginas de añadir/borrar usuarios, etc.).

Posteriormente, hay que llamar a los 3 metodos (que devuelven una cadena) head(), 
body() y footer() (se podria hacer un solo metodo de todos modos...) y se muestra
la pagina.

Las cosas que faltan, en el TODO.



Added:
   trunk/frontend-web/skins/
   trunk/frontend-web/skins/default/
   trunk/frontend-web/skins/default/body/
   trunk/frontend-web/skins/default/body/body.html
   trunk/frontend-web/skins/default/body/body_thread.html
   trunk/frontend-web/skins/default/body/default.html
   trunk/frontend-web/skins/default/body/thread.html
   trunk/frontend-web/skins/default/body/thread_entry.html
   trunk/frontend-web/skins/default/body/thread_group.html
   trunk/frontend-web/skins/default/footer/
   trunk/frontend-web/skins/default/footer/default.html
   trunk/frontend-web/skins/default/header/
   trunk/frontend-web/skins/default/header/default.html
Modified:
   trunk/frontend-web/url_.py
   trunk/frontend-web/url_INVALIDA.py
   trunk/frontend-web/url_hilo.py

Added: trunk/frontend-web/skins/default/body/body.html
==============================================================================
--- (empty file)
+++ trunk/frontend-web/skins/default/body/body.html	Tue May 22 02:11:07 2007
@@ -0,0 +1,21 @@
+    <style>
+      .even   {background-color: efe}
+      .odd {background-color: eef}
+    </style>
+
+    <p><a href="/logout">LOG OUT</a>
+    <p align='right'><a href="/todo_leido">Marcar todos los hilos como leidos</a>
+    %(body)s
+    <hr>
+    <p>Calendario:</p>
+    %(calendar)s
+    <hr>
+    <form action="/nuevo_hilo_POST" method="post" enctype="multipart/form-data">
+      <table>
+        <tr><td>T&iacute;tulo:</td><td><input type="text" name="titulo" size="60" value="" /></td></tr>
+        <tr><td>Texto:</td><td><br><textarea name="texto" rows="10" cols="60"></textarea></td></tr>
+        <tr><td colspan=2 align=right><input class="form-element" type="submit" name="submit" value="Publicar nuevo hilo"/></td></tr>
+      </table>
+    </form>
+    <p><a href="/stop">Parar la demo</a>
+    <p><a href="/nuevo_usuario">Dar de alta un nuevo usuario</a>

Added: trunk/frontend-web/skins/default/body/body_thread.html
==============================================================================
--- (empty file)
+++ trunk/frontend-web/skins/default/body/body_thread.html	Tue May 22 02:11:07 2007
@@ -0,0 +1,18 @@
+    <style>
+      .even   {background-color: efe}
+      .odd {background-color: eef}
+    </style>
+
+    <p><a href="/logout">LOG OUT</a>
+    <h2>%(thread_title)s</h2>
+    <h3>%(thread_date)s</h3>
+    %(body)s
+    <hr>
+    <form action="/nuevo_post_POST" method="post" enctype="multipart/form-data">
+      <table>
+        <tr><td>T&iacute;tulo:</td><td><input type="text" name="titulo" size="60" value="" /></td></tr>
+        <tr><td>Texto:</td><td><br><textarea name="texto" rows="10" cols="60"></textarea></td></tr>
+        <tr><td colspan=2 align=right><input class="form-element" type="submit" name="submit" value="Publicar nuevo hilo"/></td></tr>
+      </table>
+    </form>
+    <a href="/">Pagina principal</a>

Added: trunk/frontend-web/skins/default/body/default.html
==============================================================================
--- (empty file)
+++ trunk/frontend-web/skins/default/body/default.html	Tue May 22 02:11:07 2007
@@ -0,0 +1,10 @@
+    <style>
+      .even   {background-color: efe}
+      .odd {background-color: eef}
+    </style>
+
+    <p><a href="/logout">LOG OUT</a>
+    <h2>ERROR QUE TE CAGAS</h2>
+    %(body)s
+    <hr>
+    <a href="/">Pagina principal</a>

Added: trunk/frontend-web/skins/default/body/thread.html
==============================================================================
--- (empty file)
+++ trunk/frontend-web/skins/default/body/thread.html	Tue May 22 02:11:07 2007
@@ -0,0 +1 @@
+<div class="%(format)s"><a href="/hilo/%(thread)d">%(title)s</a> (%(t_date)s)</div>

Added: trunk/frontend-web/skins/default/body/thread_entry.html
==============================================================================
--- (empty file)
+++ trunk/frontend-web/skins/default/body/thread_entry.html	Tue May 22 02:11:07 2007
@@ -0,0 +1,3 @@
+<div class='%(format)s'><a name='%(msg_num)s'><p>Autor: %(author)s - fecha: %(date)s</a>
+  <p>%(text)s</p>
+</div>

Added: trunk/frontend-web/skins/default/body/thread_group.html
==============================================================================
--- (empty file)
+++ trunk/frontend-web/skins/default/body/thread_group.html	Tue May 22 02:11:07 2007
@@ -0,0 +1 @@
+<h2>%(group_date)s</h2>

Added: trunk/frontend-web/skins/default/footer/default.html
==============================================================================
--- (empty file)
+++ trunk/frontend-web/skins/default/footer/default.html	Tue May 22 02:11:07 2007
@@ -0,0 +1,3 @@
+<p>Version: %(version)d</p>
+</body>
+</html>

Added: trunk/frontend-web/skins/default/header/default.html
==============================================================================
--- (empty file)
+++ trunk/frontend-web/skins/default/header/default.html	Tue May 22 02:11:07 2007
@@ -0,0 +1,5 @@
+<html>
+  <head>
+    <title>%(page_title)s</title>
+  </head>
+  <body>

Modified: trunk/frontend-web/url_.py
==============================================================================
--- trunk/frontend-web/url_.py	(original)
+++ trunk/frontend-web/url_.py	Tue May 22 02:11:07 2007
@@ -15,6 +15,8 @@
   import time,database,datetime,calendar
   global delta_dia
 
+  print path
+
   l=len(path)
   if l>2 : return None
 
@@ -36,6 +38,11 @@
     return calendar.timegm((fecha.year,fecha.month,fecha.day,0,0,0,0,0,-1))
   ts=timegm(fecha_max)
 
+  import skins
+  pagina = skins.Skin()
+  pagina.load_url(path)
+  pagina.load_dict({"page_title": "cpif - listado de hilos"})
+
   root=conn.get_root()
   hilos=root["hilos"]["hilos"]
   database.actualiza_no_leidos(conn,usuario)
@@ -46,48 +53,19 @@
 
   while (num_hilos<50) and (fecha>=fecha_min) :
     ts2=timegm(fecha)
-    texto.append("<div>%s</div>" %time.ctime(ts2))
+    pagina.group_date(time.ctime(ts2))
     h=database.listado_hilos_personal(conn,usuario,ts,ts2)
     num_hilos+=len(h)
-    for hilo,titulo,no_leido in h :
-      estilo=estilos.pop(0)
-      estilos.append(estilo)
-      ts_creacion=time.ctime(hilos[hilo]["TS"])
-      if no_leido :
-        texto.append("<div class='%s'><a href='/hilo/%d'>%s</a> <font size=-2>(%s)</font> - <a href='/hilo/%d#%d'>No leido</a></div>"
-                     %(estilo,hilo,titulo,ts_creacion,hilo,punto_no_leido[hilo]))
-      else :
-        texto.append("<div class='%s'><a href='/hilo/%d'>%s</a> <font size=-2>(%s)</font></div>" %(estilo,hilo,titulo,ts_creacion))
+    
+    pagina.threads(h)
+    
     ts=ts2
     fecha-=delta_dia
 
   import calendario
+  pagina.load_dict({"calendar": calendario.vista_mensual(conn,fecha_elegida,usuario)})
 
-  return(200,"text/html; charset=utf-8",
-"""
-<html><head><title>P&aacute;gina principal</title></head><body>
-<style>
-.par   {background-color: efe}
-.impar {background-color: eef}
-</style>
-
-<p align='right'><a href="/todo_leido">Marcar todos los hilos como leidos</a>
-%s
-<hr>
-%s
-<hr>
-<form action="/nuevo_hilo_POST" method="post" enctype="multipart/form-data">
-<table>
-<tr><td>T&iacute;tulo:</td><td><input type="text" name="titulo" size="60" value="" /></td></tr>
-<tr><td>Texto:</td><td><br><textarea name="texto" rows="10" cols="60"></textarea></td></tr>
-<tr><td colspan=2 align=right><input class="form-element" type="submit" name="submit" value="Publicar nuevo hilo"/></td></tr>
-</table>
-</form>
-<p><a href="/logout">LOG OUT</a>
-<p><a href="/stop">Parar la demo</a>
-<p><a href="/nuevo_usuario">Dar de alta un nuevo usuario</a>
-<p align="right"><font size=-1>Versi&oacute;n: %s</font>
-</body></html>""" %("\r\n".join(texto),calendario.vista_mensual(conn,fecha_elegida,usuario),globales.version))
+  return(200,"text/html; charset=utf-8","\r\n".join([pagina.header(),pagina.body(),pagina.footer()]))
 
 @monitor
 def init(conn) :

Modified: trunk/frontend-web/url_INVALIDA.py
==============================================================================
--- trunk/frontend-web/url_INVALIDA.py	(original)
+++ trunk/frontend-web/url_INVALIDA.py	Tue May 22 02:11:07 2007
@@ -3,13 +3,10 @@
 from globales import monitor
 
 def gestiona_url(handler,path,usuario) :
-  return (404,"text/html; charset=utf-8",
-"""
-<html><title>La URL introducida es incorrecta</title>
-<body>
-<h1>La URL introducida es incorrecta</h1>
-<p><a href="/">P&aacute;gina principal</a>
-<p><a href="/stop">Parar la demo</a>
-</body></html>
-""")
+  import skins
+  pagina = skins.Skin()
+  pagina.load_url("404")
+  pagina.load_dict({"page_title": "cpif - ERROR"})
+  pagina.set_text("La pagina que buscas no existe, pich&oacute;n")
 
+  return (404,"text/html; charset=utf-8","\r\n".join([pagina.header(),pagina.body(),pagina.footer()]))

Modified: trunk/frontend-web/url_hilo.py
==============================================================================
--- trunk/frontend-web/url_hilo.py	(original)
+++ trunk/frontend-web/url_hilo.py	Tue May 22 02:11:07 2007
@@ -13,33 +13,17 @@
   meta,mensajes=database.listado_hilo(conn,usuario,hilo_num)
   if not meta : return None
 
-  texto=["<h2>Hilo: %s (%s)</h2>" %(meta["titulo"],meta["creador"])]
-  texto.extend(["<font size=-2>%s</font>" %time.ctime(meta["TS creacion"]),"<hr>"])
+  import skins 
+  pagina = skins.Skin()
+  pagina.load_url(path)
+  pagina.load_dict({"page_title":"cpif - Hilo %s" % hilo_num})
 
-  estilos=["par","impar"]
-  for msg_num,autor,TS,cuerpo in mensajes :
-    estilo=estilos.pop(0)
-    estilos.append(estilo)
-    texto.append("<div class='%s'><a name='%s'><p>Autor: %s - fecha: %s</a>" %(estilo,msg_num,autor,time.ctime(TS)))
-    texto.append("<p>%s</div>" %cuerpo)
+  pagina.load_dict({
+      "thread_title": "Hilo: %s (%s)" %(meta["titulo"],meta["creador"]),
+      "thread_date": "%s" %time.ctime(meta["TS creacion"])
+      })
+  pagina.thread_entries(mensajes)
 
-  return(200,"text/html; charset=utf-8",
-"""
-<html><head></head><body>
-<style>
-.par   {background-color: efe}
-.impar {background-color: eef}
-</style>
-%s
-<hr>
-<p><a href="/">P&aacute;gina principal</a>
-<p><form action="/nuevo_post_POST/%s" method="post" enctype="multipart/form-data">
-<table>
-<tr><td>Texto:</td><td><br><textarea name="texto" rows="10" cols="60"></textarea></td></tr>
-<tr><td colspan=2 align=right><input class="form-element" type="submit" name="submit" value="Publicar nuevo mensaje"/></td></tr>
-</table>
-</form>
-<p><a href="/stop">Parar la demo</a>
-</body></html>""" %("\r\n".join(texto),hilo_num))
+  return(200,"text/html; charset=utf-8","\r\n".join([pagina.header(),pagina.body(),pagina.footer()]))
 
 



More information about the cpif mailing list