Attachment 'Frame-1.5.4-4.py'
Download 1 # -*- coding: iso-8859-1 -*-
2 """
3 MoinMoin - Frame Parser
4
5 This parser is used to align enclosed wiki markup.
6
7 Syntax:
8 {{{#!frame align=align,thick=thick,style=style,color=color,
9 background=background,background_image=background_image,
10 position=position,width=width,padding=padding,
11 margin=margin,text_align=text_align,text_font_size=text_font_size,
12 text_color=text_color
13 wiki markup
14 }}}
15
16 Parameters:
17 align: one of ['left', 'right', 'center', 'justify', 'float:left','float:right']
18 default: left
19
20 thick: one of ['thin', 'medium',' thick','1px','2px','5px','10px']
21 default: thin
22
23 style: one of ['none','hidden', 'dotted', 'dashed', 'solid', 'double',
24 'groove', 'ridge', 'inset', 'outset']
25 default: solid
26
27 color: each color which could be vrified by web.Color(str(name))
28 default: black
29
30 background: each color which could be vrified by web.Color(str(name))
31 default: transparent
32
33 background_image: the name of an attachment
34 default: ''
35
36 background_repeat: one of ['repeat', 'repeat-x', 'repeat-y', 'no-repeat']
37 default: no-repeat
38
39 position: one of ['static','absolute','relative','fixed','inherit']
40 default: relative
41
42 width: has to end with % is testet by str(float(number))
43 default: auto
44
45 padding: has to end with em is testet by str(float(number))
46 default: 0em
47
48 margin: has to end with em is testet by str(float(number))
49 default: 0em
50
51 text_align: one of ['left', 'right', 'center', 'justify']
52 default: left
53
54 text_font_size: one of ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large',
55 'smaller', 'larger']
56 default: ''
57 text_color: each which could be vrified by web.Color(str(name))
58 default: black
59
60 wiki markup: could any wiki markup
61
62 Procedure:
63 Please remove the version number.
64
65 The units are limited for numbers. And only one value for padding or margin
66
67 Examples:
68 {{{
69 #!frame align=float:right
70 attachment:moinmoin.png
71 ||A||B||
72 ||C||D||
73 ||C||D||
74 }}}
75
76 {{{
77 #!frame align=float:left,position=relative,width=48%,margin=0em,thick=2px,color=blue,background=yellow
78 A WikiName is a word that uses capitalized words. WikiNames automagically become hyperlinks to the WikiName's page. What exactly is an uppercase or lowercase letter is determined by the configuration, the default configuration should work for UTF-8 characters (digits are treated like lowercase characters).
79
80
81 When you click on the highlighted page title (i.e. WikiName on this page), you will see a list of all pages that link to the current page. This even works on pages that are not defined yet.
82 }}}{{{
83 #!frame align=float:right,position=relative,width=50%,margin=0em,thick=2px,color=blue
84 When you click on the highlighted page title (i.e. WikiName on this page), you will see a list of all pages that link to the current page. This even works on pages that are not defined yet.
85
86
87 A question mark before a link or a different rendering in grey means that the page is not yet defined: you can click the question mark or page name to offer a definition (e.g., ?NoSuchPageForReal). If you click on such a link, you will see a default page that you can edit; only after you save the page will it be created for real. A list of all pages that are not yet created but referred on another page is on WantedPages.
88
89
90 To escape a WikiName, i.e. if you want to write the word WikiName without linking it, use an "empty" bold sequence (a sequence of six single quotes) like this: Wiki''''''Name. Alternatively, you can use the shorter sequence "``" (two backticks), i.e. Wiki``Name.
91 }}}
92 {{{
93 #!frame align=clear
94 }}}
95
96 = Album =
97 {{{
98 #!Frame align=float:right,background=gray,width=20%
99 #!Gallery2 album=1,front_image=100_1194.JPG,album_name=Bremen,front_image=100_1189.JPG,show_tools=0,show_text=0,show_date=0
100 }}}
101 Some images from the trip to Bremen in 2004
102
103 * SpaceCenter
104 * ScienceCenter
105 {{{
106 #!Frame align=clear
107 }}}
108
109
110 Modification History:
111 @copyright: 2006 by Reimar Bauer
112 @license: GNU GPL, see COPYING for details.
113
114 1.6.0-2 2006-08-14 removed frame_ from paramter names
115 column:left and column:right removed becuse they are only floating elements
116 background_image, background_repeat, text_color, text_font_size added
117 1.5.4-3 2006-08-15 ported to 1.5.4 and some bug fixes: position of float element wrong used and thick command failed for float
118 1.5.4-4 2006-08-22 extended to use it for parsers too backport of 1.6.0-4
119
120 """
121 import StringIO, os, mimetypes
122 from random import randint
123 from MoinMoin.parser import wiki
124 from MoinMoin import wikiutil
125 from MoinMoin.action import AttachFile
126 from MoinMoin.webapi.color import Color
127
128 Dependencies = []
129
130 class Parser:
131
132 extensions = ['*']
133 Dependencies = Dependencies
134
135 def __init__(self, raw, request, **kw):
136 self.raw = raw
137 self.request = request
138
139 self.align = 'left' # secured
140
141 self.text_align = 'left' #secured
142 self.text_font_size = '' #secured
143 self.text_color = 'black' #secured but wrong color code name crashes
144 self.thick = 'thin' #secured
145 self.style = 'solid' #secured
146 self.color = 'black' #secured but wrong color code name crashes
147 self.background = 'transparent' #secured but wrong color code name crashes
148 self.background_image = None # secured by mimetype check
149 self.background_repeat = 'no-repeat'
150 self.position = 'relative' #secured
151 self.width = 'auto' #needs a better idea to get it secure at the moment only % is allowed
152 self.padding = '0em' #needs a better idea to get it secure at the moment only em is allowed
153 self.margin = '0em' #needs a better idea to get it secure at the moment only em is allowed
154
155 for arg in kw.get('format_args', '').split(','):
156 if arg.find('=') > -1:
157 key, value = arg.split('=')
158 setattr(self, key, wikiutil.escape(value.strip(), quote=1))
159
160
161 def format(self, formatter):
162 raw = self.raw
163
164 import string
165 raw = string.split(raw, '\n')
166 parser_name = ''
167 for line in raw:
168 if line.strip().startswith("#!"):
169 parser_name = line.strip()[2:].split()[0]
170 for arg in line.split(','):
171 if arg.find('=') > -1:
172 key, value = arg.split('=')
173 setattr(self, key, wikiutil.escape(value.strip(), quote=1))
174
175 pagename = formatter.page.page_name
176
177 out = StringIO.StringIO()
178 self.request.redirect(out)
179 if parser_name != '':
180 self.request.write(formatter.parser(parser_name, raw))
181 else:
182 wikiizer = wiki.Parser(self.raw, self.request)
183 wikiizer.format(formatter)
184 result = out.getvalue()
185 self.request.redirect()
186 del out
187
188 if self.position in ['static', 'absolute', 'relative', 'fixed', 'inherit']:
189 position = self.position
190 else:
191 position = 'relative'
192
193 if self.thick in ['thin', 'medium',' thick', '1px', '2px', '5px', '10px']:
194 thick = self.thick
195 else:
196 thick = '0'
197
198 if self.text_align in ['left', 'right', 'center', 'justify']:
199 text_align = self.text_align
200 else:
201 text_align = 'left'
202
203 if self.style in ['none', 'hidden', 'dotted', 'dashed', 'solid', 'double',
204 'groove', 'ridge', 'inset', 'outset']:
205 style = self.style
206 else:
207 style = 'solid'
208
209 if self.color != 'transparent':
210 color = Color(str(self.color))
211 else:
212 color = 'black'
213
214 if self.background != 'transparent':
215 background = Color(str(self.background))
216 else:
217 background = 'transparent'
218
219 if self.width.endswith("%"):
220 width = str(float(self.width[:-1]))+'%'
221 else:
222 width = 'auto'
223
224 if self.padding.endswith("em"):
225 padding = str(float(self.padding[:-2]))+'em'
226 else:
227 padding = '0em'
228
229 if self.margin.endswith("em"):
230 margin = str(float(self.margin[:-2]))+'em'
231 else:
232 margin = '0em'
233
234 if self.text_font_size in ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large',
235 'smaller', 'larger']:
236 text_font_size = self.text_font_size
237 else:
238 text_font_size = ''
239
240 if self.text_color != 'transparent':
241 text_color = Color(str(self.text_color))
242 else:
243 text_color = 'black'
244
245 url = ''
246 if self.background_image != None:
247 attachment_path = AttachFile.getAttachDir(self.request, pagename)
248 file = os.path.join(attachment_path,self.background_image)
249 if os.path.exists(file):
250 mime_type, enc = mimetypes.guess_type(file)
251 if mime_type.startswith('image'):
252 url = AttachFile.getAttachUrl(pagename, self.background_image, self.request)
253
254 if self.background_repeat in ['repeat', 'repeat-x', 'repeat-y', 'no-repeat']:
255 background_repeat = self.background_repeat
256 else:
257 background_repeat = 'no-repeat'
258
259 if self.align in ['left', 'right', 'center', 'justify']:
260 div = '<div align="%(align)s" style="border-width:%(thick)s; border-color:%(color)s; border-style:%(style)s; position:%(position)s; padding:%(padding)s; margin:%(margin)s; background-color:%(background)s; font-size:%(text_font_size)s; color:%(text_color)s; background-image:url(%(background_image)s); background-repeat:%(background_repeat)s;" width="%(width)s">' % {
261 "thick": thick,
262 "style": style,
263 "color": color,
264 "position": position,
265 "padding": padding,
266 "margin": margin,
267 "background": background,
268 "width": width,
269 "text_align": text_align,
270 "text_font_size": text_font_size,
271 "text_color": text_color,
272 "background_image": url,
273 "background_repeat": background_repeat,
274 "align": self.align,
275 }
276 self.request.write("%(div)s%(result)s</div>" % {
277 "div": div,
278 "result": result})
279
280 if self.align in ['float:left','float:right']:
281 tab = '<table style="%(align)s; font-size:%(text_font_size)s; color:%(text_color)s; text-align:%(text_align)s; background-image:url(%(background_image)s); background-repeat:%(background_repeat)s; position:%(position)s;" width="%(width)s" border="%(thick)s" bgcolor="%(background)s"><tbody><tr><td style="border-style:none;">' % {
282 "align": self.align,
283 "text_font_size": text_font_size,
284 "text_align": text_align,
285 "text_color": text_color,
286 "position": position,
287 "width": width,
288 "thick": thick,
289 "background": background,
290 "background_image": url,
291 "background_repeat": background_repeat,
292 }
293 self.request.write("%(tab)s%(result)s</td></tr></tbody></table>" % {
294 "tab": tab,
295 "result": result})
296
297 if self.align == 'clear':
298 self.request.write('<br clear="both">')
299
300
301
302
303
304
305
306
307
Attached Files
To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.You are not allowed to attach a file to this page.