General
In the past when I tried to add functionality to my MoinMoin wiki, I was mostly slowed down by not knowing how to get some information e.g. passed variables or the page name. Therefore I want to publish some templates with these Information in.
If you give me feedback or the information which other things should be in, I will add them.
please have a look at the argument parser for macros (Example).
Action
Here is a action template.
1 # -*- coding: UTF8 -*-
2 """
3 MoinMoin - ... action
4
5 Allows to ... .
6
7 @copyright: 20??-20?? Autho Name <author@url.org>,
8 @license: GNU GPL, see COPYING for details.
9 """
10
11 from MoinMoin import wikiutil
12 from MoinMoin.Page import Page
13 from MoinMoin.parser.text_moin_wiki import Parser as MoinParser
14
15
16 class Action():
17 def __init__(self, pagename, request):
18 self.request = request
19 self.pagename = self.request.page.page_name
20 self.formatter=self.request.formatter
21 self.page = Page(self.request, self.pagename)
22 self.formatter.page=self.page
23 self.pagepath=self.page.getPageBasePath()[1]
24 self.url=self.request.href(self.request.page.page_name)
25 self.url_full=self.request.getQualifiedURL(self.url)
26 self.title = self.page.split_title()
27 self.formargs=self.request.values
28 def message(self, txt):
29 self.request.theme.add_msg(self.request.getText(txt))
30 return self.page.send_page()
31 def do(self):
32 #
33 if self.formargs.get('message')!=None:
34 return self.message(u"Send a message.\n")
35 else:
36 self.request.setContentLanguage(self.request.lang)
37 self.request.theme.send_title(self.request.getText(u'Action-Template on Page "%s"') % (self.title, ), page=self.page)
38 moin_output="""
39 == Page Information ==
40 * Moin-Pagename: %s
41 * Moin-Pagetitle: %s
42 * Moin-Pagepath: %s
43 * Page-Url: %s
44 * Full Page-Url: %s
45
46 == Url/ Form data ==
47 """%(self.pagename, self.title, self.pagepath, self.url, self.url_full)
48 for key in self.formargs.keys():
49 moin_output+=u" * %s=%s\n"%(key, self.formargs.get(key))
50 moin_output+="== Acl ==\n"
51 if self.request.user.may.read(self.pagename):
52 moin_output+=u" * You have read rights.\n"
53 else:
54 moin_output+=" * You don't have read rights.\n"
55 if self.request.user.may.write(self.pagename):
56 moin_output+=u" * You have write rights.\n"
57 else:
58 moin_output+=u" * You don't have write rights.\n"
59 parser=MoinParser(moin_output, self.request)
60 parser.format(self.formatter)
61 self.request.theme.send_footer(self.pagename)
62 self.request.theme.send_closing_html()
63 return ''
64
65 def execute(pagename, request):
66 return Action(pagename, request).do()
Macro
Here is a macro template:
1 # -*- coding: UTF8 -*-
2 """
3 MoinMoin - ... macro
4
5 Allows to ... .
6
7 @copyright: 20??-20?? Autho Name <author@url.org>,
8 @license: GNU GPL, see COPYING for details.
9 """
10
11 from MoinMoin import wikiutil
12 from MoinMoin.Page import Page
13 from MoinMoin.parser.text_moin_wiki import Parser as MoinParser
14
15
16 class arg_to_dict(dict):
17 def __init__(self, needle):
18 dict.__init__(self)
19 if needle!=None:
20 for entry in needle.split(','):
21 try:
22 if entry.split('=')[1].strip() != '':
23 self[entry.split('=')[0].strip()]=entry.split('=')[1].strip()
24 else:
25 self[entry.split('=')[0].strip()]=None
26 except:
27 self[entry.split('=')[0].strip()]=None
28
29
30 class Macro:
31 def __init__(self, macro, needle):
32 self.request = macro.request
33 self.pagename = self.request.page.page_name
34 self.formatter=self.request.formatter
35 self.page = Page(self.request, self.pagename)
36 self.pagepath=self.page.getPageBasePath()[1]
37 self.url=self.request.href(self.request.page.page_name)
38 self.url_full=self.request.getQualifiedURL(self.url)
39 self.title = self.page.split_title()
40 self.formargs=self.request.values
41 self.macroargs=arg_to_dict(needle)
42 def do(self):
43 moin_output="""
44 == Page Information ==
45 * Moin-Pagename: %s
46 * Moin-Pagetitle: %s
47 * Moin-Pagepath: %s
48 * Page-Url: %s
49 * Full Page-Url: %s
50
51 == Url/ Form data ==
52 """%(self.pagename, self.title, self.pagepath, self.url, self.url_full)
53 for key in self.formargs.keys():
54 moin_output+=u" * %s=%s\n"%(key, self.formargs.get(key))
55 moin_output+="== Acl ==\n"
56 if self.request.user.may.read(self.pagename):
57 moin_output+=u" * You have read rights.\n"
58 else:
59 moin_output+=" * You don't have read rights.\n"
60 if self.request.user.may.write(self.pagename):
61 moin_output+=u" * You have write rights.\n"
62 else:
63 moin_output+=u" * You don't have write rights.\n"
64 moin_output+="== Macro data ==\n"
65 for key in self.macroargs.keys():
66 moin_output+=u" * %s=%s\n"%(key, self.macroargs.get(key))
67 parser=MoinParser(moin_output, self.request)
68 parser.format(self.formatter)
69 return ''
70
71
72 def execute(macro, needle):
73 return Macro(macro, needle).do()
Parser
Here is a parser template:
1 # -*- coding: UTF8 -*-
2 """
3 MoinMoin - ... action
4
5 Allows to ... .
6
7 @copyright: 20??-20?? Autho Name <author@url.org>,
8 @license: GNU GPL, see COPYING for details.
9 """
10
11 from MoinMoin import wikiutil
12 from MoinMoin.Page import Page
13 from MoinMoin.parser.text_moin_wiki import Parser as MoinParser
14
15
16 class Parser:
17 """
18 Description
19 """
20 def __init__(self, wikitext, request, **kw):
21 self.wikitext = wikitext
22 self.request = request
23 self.pagename = self.request.page.page_name
24 self.formatter=self.request.formatter
25 self.page = Page(self.request, self.pagename)
26 self.pagepath=self.page.getPageBasePath()[1]
27 self.url=self.request.href(self.request.page.page_name)
28 self.url_full=self.request.getQualifiedURL(self.url)
29 self.title = self.page.split_title()
30 self.formargs=self.request.values
31 arg_to_dict=wikiutil.importPlugin(self.request.cfg, 'macro', 'macro_template', 'arg_to_dict')
32 self.parserargs=arg_to_dict(kw['format_args'])
33 def format(self, formatter):
34 """
35 Send the "parsed" text.
36 """
37 moin_output="""
38 == Page Information ==
39 * Moin-Pagename: %s
40 * Moin-Pagetitle: %s
41 * Moin-Pagepath: %s
42 * Page-Url: %s
43 * Full Page-Url: %s
44
45 == Url/ Form data ==
46 """%(self.pagename, self.title, self.pagepath, self.url, self.url_full)
47 for key in self.formargs.keys():
48 moin_output+=u" * %s=%s\n"%(key, self.formargs.get(key))
49 moin_output+="== Acl ==\n"
50 if self.request.user.may.read(self.pagename):
51 moin_output+=u" * You have read rights.\n"
52 else:
53 moin_output+=" * You don't have read rights.\n"
54 if self.request.user.may.write(self.pagename):
55 moin_output+=u" * You have write rights.\n"
56 else:
57 moin_output+=u" * You don't have write rights.\n"
58 moin_output+="== Text to parse ==\n"
59 moin_output+=u"{{{\n%s\n}}}\n"%(self.wikitext)
60 moin_output+="== Parser Data ==\n"
61 for key in self.parserargs.keys():
62 moin_output+=u" * %s=%s\n"%(key, self.parserargs.get(key))
63 parser=MoinParser(moin_output, self.request)
64 parser.format(self.formatter)
65
Feedback
Write your feedback here. -- DirkAlders 2012-01-10 18:28:56
