[wiki-etch] suppression
darcs-hash:20090304160004-bd074-7e2630d385522d14ea3ad6a52ad0669b2ddc1b2e.gz
This commit is contained in:
parent
4a1c67a459
commit
aa5e8cdc52
67 changed files with 0 additions and 15442 deletions
|
@ -1,225 +0,0 @@
|
|||
"""
|
||||
MoinMoin - ProgressBar Macro
|
||||
Generates a progress bar (in the form of a table)
|
||||
|
||||
@copyright: Pascal Bauermeister <pascal DOT bauermeister AT gmail DOT cm>
|
||||
@license: GPL
|
||||
|
||||
Updates:
|
||||
|
||||
* [v0.1.1] Sun Dec 18 21:31:17 CET 2005
|
||||
Changed table cell percentage markup.
|
||||
|
||||
* [v0.1.0] Fri Dec 16 22:30:10 CET 2005
|
||||
Original version
|
||||
|
||||
----
|
||||
|
||||
The ProgressBar macro generates a table showing a progress indicator.
|
||||
|
||||
Usage:
|
||||
[[ ProgressBar ]]
|
||||
[[ ProgressBar (TABLEWIDTH TABLEFORMAT PROGRESS%) ]]
|
||||
[[ ProgressBar (TABLEWIDTH TABLEFORMAT CURRENT/STEPS) ]]
|
||||
[[ ProgressBar (TABLEWIDTH TABLEFORMAT STARTDATE,ENDDATE) ]]
|
||||
|
||||
If no arguments are given, the usage is inserted in the HTML result.
|
||||
|
||||
Options:
|
||||
|
||||
TABLEWIDTH (optional prefix)
|
||||
A wiki tablewidth attribute value between []'s
|
||||
Examples:
|
||||
[100%]
|
||||
[80px]
|
||||
|
||||
TABLEFORMAT (optional prefix)
|
||||
A pair of wiki table attribute, to format the inactive and active cells.
|
||||
Examples:
|
||||
<bgcolor="black"><bgcolor="white"> # black on white bar
|
||||
<tablewidth="90%" bgcolor="black"><bgcolor="white"> # same, 90% table
|
||||
|
||||
A third format may be given for STARTDATE,ENDDATE usage
|
||||
|
||||
By default: <tablewidth="100px"#808080><><#8080ff>
|
||||
|
||||
PROGRESS
|
||||
Will display a table with two cells:
|
||||
- left: completion, taking PROGRESS % of the table width
|
||||
- right: remaining
|
||||
|
||||
CURRENT/STEPS
|
||||
Will display a table with STEPS cells, CURRENT of which are active.
|
||||
|
||||
STARTDATE,ENDDATE
|
||||
Will display a table with the number of days, with the cell
|
||||
representing today in active format and background in inactive format.
|
||||
|
||||
If today is before STARTDATE, the left-most cell will be in the
|
||||
3rd format. If today is after ENDDATE the rightmost cell will be
|
||||
in the 3rd format.
|
||||
|
||||
Dates are in this format: YYYY-MM-DD
|
||||
|
||||
Debugging
|
||||
Please prepend a '?' to the arguments.
|
||||
|
||||
Examples:
|
||||
[[ProgressBar(60%)]]
|
||||
[[ProgressBar(6/10)]]
|
||||
[[ProgressBar(2005-11-01,2006-01-06)]]
|
||||
|
||||
[[ProgressBar([50%] 60%)]]
|
||||
[[ProgressBar([50px] 60%)]]
|
||||
[[ProgressBar([90%]<#8080ff><#808080> 6/10)]]
|
||||
----
|
||||
"""
|
||||
|
||||
|
||||
# Imports
|
||||
import time, re, StringIO
|
||||
from MoinMoin import version
|
||||
from MoinMoin.parser import wiki
|
||||
|
||||
Dependencies = ["time"] # macro cannot be cached
|
||||
|
||||
|
||||
class _Error (Exception):
|
||||
pass
|
||||
|
||||
|
||||
def escape (str):
|
||||
return str.replace ('&','&').replace ('<', '<').replace ('>', '>')
|
||||
|
||||
def usage (full = False):
|
||||
|
||||
"""Returns the interesting part of the module's doc"""
|
||||
|
||||
if full:
|
||||
return __doc__
|
||||
else:
|
||||
rx = re.compile ("--$(.*)^--", re.DOTALL + re.MULTILINE)
|
||||
return rx.findall (__doc__) [0].strip ()
|
||||
|
||||
|
||||
def s2t (s):
|
||||
return time.mktime (time.strptime (s, "%Y-%m-%d"))
|
||||
|
||||
|
||||
def execute (macro, text, args_re=None):
|
||||
|
||||
try: res = _execute (macro, text)
|
||||
except Exception, msg:
|
||||
return """
|
||||
<p><strong class="error">
|
||||
Error: macro ProgressBar: %s</strong> </p>
|
||||
""" % escape ("%s" % msg)
|
||||
return res
|
||||
|
||||
|
||||
def _execute (macro, text):
|
||||
|
||||
fmt = ['#808080','','#8080ff']
|
||||
width ="100px"
|
||||
res = ""
|
||||
text = text.strip ()
|
||||
|
||||
# help if empty text
|
||||
help = len (text) == 0
|
||||
|
||||
# debug if starts with '?'
|
||||
if text.startswith ('?'):
|
||||
debug = True
|
||||
text = text [1:]
|
||||
else:
|
||||
debug = False
|
||||
orig_text = text
|
||||
|
||||
# Formats
|
||||
try:
|
||||
# Table width
|
||||
if text.startswith ('['):
|
||||
pos = text.rfind (']')
|
||||
width = text [1:pos]
|
||||
text = text [pos+1:].strip ()
|
||||
|
||||
# Cells format
|
||||
if text.startswith ('<'):
|
||||
pos = text.rfind ('>')
|
||||
f = text [1:pos].split ('><')
|
||||
text = text [pos+1:].strip ()
|
||||
fmt [:len (f)] = f
|
||||
except:
|
||||
help = True
|
||||
|
||||
# Show help
|
||||
if help:
|
||||
return """
|
||||
<p>
|
||||
<pre>%s</pre></p>
|
||||
""" % escape (usage (0))
|
||||
|
||||
# Cell formatting utility
|
||||
def cell (txt, fmt):
|
||||
if len (txt) == 0:
|
||||
fmt = 'tablewidth="%s" ' % width + fmt
|
||||
txt = "||"
|
||||
if len (fmt): t = "<%s> ||" % fmt
|
||||
else: t = " ||"
|
||||
return txt + t
|
||||
|
||||
# Progress
|
||||
if text.endswith ('%'):
|
||||
# correction du bug des 0%
|
||||
if text == "0%":
|
||||
for f in [fmt [1]] :
|
||||
res = cell (res, f)
|
||||
else:
|
||||
for f in fmt [0] + ' %s' % text, fmt [1] :
|
||||
res = cell (res, f)
|
||||
|
||||
# Current/Steps
|
||||
elif text.find ('/') > 0:
|
||||
cur, steps = map (int, text.split ('/'))
|
||||
for i in range (steps):
|
||||
res = cell (res, fmt [i>=cur])
|
||||
|
||||
# Start/end date
|
||||
else:
|
||||
starts, ends = map (lambda s:s.strip (), text.split (","))
|
||||
start, end = s2t (starts), s2t (ends)
|
||||
now = time.mktime (time.localtime ())
|
||||
|
||||
duration = int ( (end-start) / 86400)
|
||||
progress = int ( (now-start) / 86400) -1
|
||||
pcent = int (90 / duration)
|
||||
|
||||
for i in range (duration):
|
||||
if i == 0 and progress < 0:
|
||||
f = fmt [2]
|
||||
elif i == progress:
|
||||
f = fmt [0]
|
||||
else:
|
||||
f = fmt [1]
|
||||
res = cell (res, f)
|
||||
|
||||
if progress >= duration:
|
||||
res = cell (res, fmt [2])
|
||||
else:
|
||||
res = cell (res, fmt [1])
|
||||
|
||||
# Output
|
||||
if debug:
|
||||
res = "{{{[[ProgressBar(%s)]]\n%s}}}\n%s" % (orig_text, res, res)
|
||||
return _format (res, macro.request, macro.formatter)
|
||||
|
||||
|
||||
def _format (src_text, request, formatter):
|
||||
# parse the text (in wiki source format) and make HTML,
|
||||
# after diverting sys.stdout to a string
|
||||
str_out = StringIO.StringIO () # create str to collect output
|
||||
request.redirect (str_out) # divert output to that string
|
||||
# parse this line
|
||||
wiki.Parser (src_text, request).format (formatter)
|
||||
request.redirect () # restore output
|
||||
return str_out.getvalue () # return what was generated
|
Loading…
Add table
Add a link
Reference in a new issue