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.

action_template.py

   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()
action_template.py

Macro

Here is a macro template:

macro_template.py

   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()
macro_template.py

Parser

Here is a parser template:

parser_template.py

   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         
parser_template.py

Feedback

Write your feedback here. -- DirkAlders 2012-01-10 18:28:56

MoinMoin: DirkAlders/MoinTemplates (last edited 2012-01-13 07:34:47 by ReimarBauer)