134 lines
5.1 KiB
Python
134 lines
5.1 KiB
Python
# -*- coding: iso-8859-1 -*-
|
||
"""
|
||
# -*- coding: utf-8 -*-
|
||
..
|
||
.... ............ ........
|
||
. ....... . .... ..
|
||
. ... .. .. .. .. ..... . ..
|
||
.. .. ....@@@. .. . ........ .
|
||
.. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. ....
|
||
.@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... ....
|
||
@@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. ..
|
||
.@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. .....
|
||
...@@@.... @@@ .@@.......... ........ ..... ..
|
||
. ..@@@@.. . .@@@@. .. ....... . .............
|
||
. .. .... .. .. . ... ....
|
||
. . .... ............. .. ...
|
||
.. .. ... ........ ... ...
|
||
................................
|
||
|
||
MoinMoin - Portail parser
|
||
|
||
PURPOSE:
|
||
Pour afficher un portail a la wikipedia.
|
||
|
||
CALLING SEQUENCE:
|
||
{{{
|
||
#!Portail
|
||
image1.png @@ title1 @@ description 1
|
||
image2.png @@ title2 @@ description 2
|
||
image3.png @@ title3 @@ description 3
|
||
}}}
|
||
|
||
CREDIT
|
||
Le code est derive de celui de Gallery2.
|
||
|
||
"""
|
||
from MoinMoin.parser import wiki
|
||
import os,string,re,StringIO
|
||
from MoinMoin.action import AttachFile
|
||
|
||
#####################################################################
|
||
# Fonctions #
|
||
#####################################################################
|
||
# to_wikiname : transfome la chaine text avec le parser wiki
|
||
# classique et le formateur formatter
|
||
# (je sais pas a quoi sert request, mais faut pas
|
||
# l'enlever !)
|
||
#######
|
||
|
||
def to_wikiname(request,formatter,text):
|
||
##taken from MiniPage
|
||
out=StringIO.StringIO()
|
||
request.redirect(out)
|
||
wikiizer = wiki.Parser(text.strip(),request)
|
||
wikiizer.format(formatter)
|
||
result=out.getvalue()
|
||
request.redirect()
|
||
del out
|
||
|
||
return result.strip()
|
||
|
||
#####################################################################
|
||
# PortailFormatter : creer le code html du portail a l'aide de
|
||
# de formatter et l'envoie a request
|
||
#######
|
||
class PortailFormatter:
|
||
|
||
def __init__(self, request, formatter):
|
||
self.formatter = formatter
|
||
self.request = request
|
||
self.counter = 0
|
||
|
||
def open(self):
|
||
self.request.write(self.formatter.table(1,{'style':'width:100%;padding:10px;'}))
|
||
|
||
def cell(self, title, description, image):
|
||
if self.counter==0:
|
||
self.request.write(self.formatter.table_row(1))
|
||
self.request.write(self.formatter.table_cell(1,{'style':'width:50%;border:none;padding:20px 20px 20px 50px;background:transparent url(\'' + image.replace("\'","\\\'") + '\') center left no-repeat; vertical-align:middle;'}))
|
||
self.request.write(title)
|
||
self.request.write(description)
|
||
self.request.write(self.formatter.table_cell(0))
|
||
if self.counter==1:
|
||
self.request.write(self.formatter.table_row(0))
|
||
self.counter = (self.counter + 1)%2
|
||
|
||
def close(self):
|
||
if self.counter==1:
|
||
self.request.write(self.formatter.table_cell(1,{'style':'width:50%;border:none;padding:20px 20px 20px 50px;'}))
|
||
self.request.write(self.formatter.table_cell(0))
|
||
self.request.write(self.formatter.table_row(0))
|
||
self.request.write(self.formatter.table(0))
|
||
|
||
#####################################################################
|
||
# Parser : classe principale, c'est elle qui parse
|
||
#######
|
||
class Parser:
|
||
|
||
def __init__(self, raw, request, **kw):
|
||
self.request = request
|
||
self.raw = raw
|
||
return
|
||
|
||
|
||
def format(self, formatter):
|
||
|
||
# on divise le textes en lignes (1 ligne = une entree dans le portail)
|
||
quotes = self.raw.split('\n')
|
||
|
||
# on r<>cupere le chemin des fichiers attaches pour les images
|
||
current_pagename=formatter.page.page_name
|
||
attachment_path = AttachFile.getAttachDir(self.request, current_pagename, create=1)
|
||
|
||
# on initialise la classe qui va fabriquer le code html
|
||
portail = PortailFormatter(self.request, formatter)
|
||
portail.open()
|
||
|
||
# on traite les ligne une <20> une
|
||
for line in quotes:
|
||
line=line.strip()
|
||
items=line.split('@@',2)
|
||
if items.__len__()<3:
|
||
self.request.write('<!-- error, wrong number of parameters -->')
|
||
else:
|
||
description=items.pop().strip()
|
||
link=items.pop().strip()
|
||
image = AttachFile.getAttachUrl(current_pagename, items.pop().strip(), self.request).replace('& ','&')
|
||
|
||
link = to_wikiname(self.request, formatter, link)
|
||
description = to_wikiname(self.request, formatter, description)
|
||
portail.cell(link, description, image)
|
||
portail.close()
|
||
|
||
return
|