annotate MoinMoin/macro/__init__.py @ 1965:388f477fd536

WordIndex/TitleIndex: fix invalid IDs
author Thomas Waldmann <tw AT waldmann-edv DOT de>
date Sun, 08 Apr 2007 20:55:29 +0200
parents aa3e4fb31c62
children 7ae581d79352
rev   line source
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
1 # -*- coding: iso-8859-1 -*-
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
2 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
3 MoinMoin - Macro Implementation
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
4
657
016a8a3ef354 wikiutil.MimeType class, renamed parsers to mimetype like module names
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 636
diff changeset
5 These macros are used by the wiki parser module to implement complex
016a8a3ef354 wikiutil.MimeType class, renamed parsers to mimetype like module names
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 636
diff changeset
6 and/or dynamic page content.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
7
635
9e17ec23650c moved wikimacro.py to macro/__init__.py
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 615
diff changeset
8 The canonical interface to plugin macros is their execute() function,
9e17ec23650c moved wikimacro.py to macro/__init__.py
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 615
diff changeset
9 which gets passed an instance of the Macro class. Such an instance
9e17ec23650c moved wikimacro.py to macro/__init__.py
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 615
diff changeset
10 has the four members parser, formatter, form and request.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
11
635
9e17ec23650c moved wikimacro.py to macro/__init__.py
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 615
diff changeset
12 Using "form" directly is deprecated and should be replaced by "request.form".
9e17ec23650c moved wikimacro.py to macro/__init__.py
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 615
diff changeset
13
1918
bb2e053067fb fixing copyright headers: remove umlauts (encoding troubles), make epydoc compatible, reformat
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1870
diff changeset
14 @copyright: 2000-2004 Juergen Hermann <jh@web.de>,
635
9e17ec23650c moved wikimacro.py to macro/__init__.py
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 615
diff changeset
15 2006 MoinMoin:ThomasWaldmann
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
16 @license: GNU GPL, see COPYING for details.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
17 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
18
635
9e17ec23650c moved wikimacro.py to macro/__init__.py
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 615
diff changeset
19 from MoinMoin.util import pysupport
1133
db56bd53fc32 cleanup plugin related code / attributes, remove unused stuff
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1001
diff changeset
20 modules = pysupport.getPackageModules(__file__)
635
9e17ec23650c moved wikimacro.py to macro/__init__.py
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 615
diff changeset
21
510
e1990b501b22 human readable SystemInfo, added disk usage
Thomas Waldmann <tw@waldmann-edv.de>
parents: 413
diff changeset
22 import re, time, os
635
9e17ec23650c moved wikimacro.py to macro/__init__.py
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 615
diff changeset
23 from MoinMoin import action, config, util
636
b77ab6ea0c18 move wikiaction.py to action/__init__.py
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 635
diff changeset
24 from MoinMoin import wikiutil, i18n
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
25 from MoinMoin.Page import Page
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
26
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
27 names = ["TitleSearch", "WordIndex", "TitleIndex",
635
9e17ec23650c moved wikimacro.py to macro/__init__.py
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 615
diff changeset
28 "GoTo", "InterWiki", "PageCount", "UserPreferences",
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
29 # Macros with arguments
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
30 "Icon", "PageList", "Date", "DateTime", "Anchor", "MailTo", "GetVal",
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
31 "TemplateList",
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
32 ]
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
33
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
34 #############################################################################
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
35 ### Helpers
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
36 #############################################################################
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
37
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
38 def getNames(cfg):
1550
a4f0632414da using request.cfg.cache more
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1449
diff changeset
39 if not hasattr(cfg.cache, 'macro_names'):
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
40 lnames = names[:]
688
15c55ecd7ccb fix some i18n bugs
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 684
diff changeset
41 lnames.extend(i18n.wikiLanguages().keys())
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
42 lnames.extend(wikiutil.getPlugins('macro', cfg))
1550
a4f0632414da using request.cfg.cache more
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1449
diff changeset
43 cfg.cache.macro_names = lnames # remember it
a4f0632414da using request.cfg.cache more
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1449
diff changeset
44 return cfg.cache.macro_names
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
45
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
46
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
47 #############################################################################
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
48 ### Macros - Handlers for [[macroname]] markup
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
49 #############################################################################
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
50
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
51 class Macro:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
52 """ Macro handler
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
53
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
54 There are three kinds of macros:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
55 * Builtin Macros - implemented in this file and named _macro_[name]
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
56 * Language Pseudo Macros - any lang the wiki knows can be use as
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
57 macro and is implemented here by _m_lang()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
58 * External macros - implemented in either MoinMoin.macro package, or
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
59 in the specific wiki instance in the plugin/macro directory
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
60 """
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
61 defaultDependency = ["time"]
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
62
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
63 Dependencies = {
1001
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
64 "TitleSearch": ["namespace"],
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
65 "Goto": [],
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
66 "WordIndex": ["namespace"],
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
67 "TitleIndex": ["namespace"],
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
68 "InterWiki": ["pages"], # if interwikimap is editable
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
69 "PageCount": ["namespace"],
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
70 "Icon": ["user"], # users have different themes and user prefs
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
71 "PageList": ["namespace"],
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
72 "Date": ["time"],
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
73 "DateTime": ["time"],
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
74 "UserPreferences": ["time"],
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
75 "Anchor": [],
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
76 "Mailto": ["user"],
ed7febba892b whitespace-only cleanup and minor style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 950
diff changeset
77 "GetVal": ["pages"],
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
78 "TemplateList": ["namespace"],
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
79 }
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
80
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
81 # we need the lang macros to execute when html is generated,
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
82 # to have correct dir and lang html attributes
1870
9406e02388cf reduce usage of .keys()
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1832
diff changeset
83 for lang in i18n.wikiLanguages():
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
84 Dependencies[lang] = []
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
85
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
86
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
87 def __init__(self, parser):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
88 self.parser = parser
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
89 self.form = self.parser.form
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
90 self.request = self.parser.request
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
91 self.formatter = self.request.formatter
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
92 self._ = self.request.getText
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
93 self.cfg = self.request.cfg
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
94
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
95 # Initialized on execute
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
96 self.name = None
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
97
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
98 def execute(self, macro_name, args):
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
99 """ Get and execute a macro
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
100
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
101 Try to get a plugin macro, or a builtin macro or a language
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
102 macro, or just raise ImportError.
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
103 """
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
104 self.name = macro_name
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
105 try:
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
106 execute = wikiutil.importPlugin(self.cfg, 'macro', macro_name)
53
699811601bed merge moin--main--1.3--patch-934,935: detect correctly missing plguins and missing names in plugins
Nir Soffer <nirs@freeshell.org>
parents: 51
diff changeset
107 except wikiutil.PluginMissingError:
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
108 try:
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
109 builtins = self.__class__
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
110 execute = getattr(builtins, '_macro_' + macro_name)
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
111 except AttributeError:
688
15c55ecd7ccb fix some i18n bugs
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 684
diff changeset
112 if macro_name in i18n.wikiLanguages():
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
113 execute = builtins._m_lang
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
114 else:
53
699811601bed merge moin--main--1.3--patch-934,935: detect correctly missing plguins and missing names in plugins
Nir Soffer <nirs@freeshell.org>
parents: 51
diff changeset
115 raise ImportError("Cannot load macro %s" % macro_name)
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
116 return execute(self, args)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
117
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
118 def _m_lang(self, text):
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
119 """ Set the current language for page content.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
120
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
121 Language macro are used in two ways:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
122 * [lang] - set the current language until next lang macro
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
123 * [lang(text)] - insert text with specific lang inside page
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
124 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
125 if text:
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
126 return (self.formatter.lang(1, self.name) +
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
127 self.formatter.text(text) +
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
128 self.formatter.lang(0, self.name))
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
129
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
130 self.request.current_lang = self.name
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
131 return ''
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
132
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
133 def get_dependencies(self, macro_name):
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
134 if macro_name in self.Dependencies:
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
135 return self.Dependencies[macro_name]
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
136 try:
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
137 return wikiutil.importPlugin(self.request.cfg, 'macro',
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
138 macro_name, 'Dependencies')
53
699811601bed merge moin--main--1.3--patch-934,935: detect correctly missing plguins and missing names in plugins
Nir Soffer <nirs@freeshell.org>
parents: 51
diff changeset
139 except wikiutil.PluginError:
51
54d5932d5a03 merge moin--main--1.3--patch-930: fix error handling in plugins, fix broken chart action
Nir Soffer <nirs@freeshell.org>
parents: 39
diff changeset
140 return self.defaultDependency
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
141
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
142 def _macro_TitleSearch(self, args):
1924
5dc0896d145a search: fixed wrong import
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1920
diff changeset
143 from MoinMoin.macro.FullSearch import search_box
1217
237ca54182a7 copied code for search box over to macro/FullSearch.py
Franz Pletz <fpletz AT franz-pletz DOT org>
parents: 1198
diff changeset
144 return search_box("titlesearch", self)
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
145
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
146 def _macro_GoTo(self, args):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
147 """ Make a goto box
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
148
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
149 @param args: macro arguments
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
150 @rtype: unicode
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
151 @return: goto box html fragment
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
152 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
153 _ = self._
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
154 html = [
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
155 u'<form method="get" action="">',
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
156 u'<div>',
615
fb4240ec8361 make goto an action (1 special case less)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 513
diff changeset
157 u'<input type="hidden" name="action" value="goto">',
fb4240ec8361 make goto an action (1 special case less)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 513
diff changeset
158 u'<input type="text" name="target" size="30">',
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
159 u'<input type="submit" value="%s">' % _("Go To Page"),
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
160 u'</div>',
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
161 u'</form>',
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
162 ]
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
163 html = u'\n'.join(html)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
164 return self.formatter.rawHTML(html)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
165
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
166 def _make_index(self, args, word_re=u'.+'):
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
167 """ make an index page (used for TitleIndex and WordIndex macro)
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
168
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
169 word_re is a regex used for splitting a pagename into fragments
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
170 matched by it (used for WordIndex). For TitleIndex, we just match
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
171 the whole page name, so we only get one fragment that is the same
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
172 as the pagename.
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
173
1832
b180f047d918 comments only: cleaned up TODO, XXX, ...
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1805
diff changeset
174 TODO: _make_index could get a macro on its own, more powerful / less special than WordIndex and TitleIndex.
b180f047d918 comments only: cleaned up TODO, XXX, ...
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1805
diff changeset
175 It should be able to filter for specific mimetypes, maybe match pagenames by regex (replace PageList?), etc.
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
176 """
28
ef8b90110f33 WordIndex: make systempages excludeable
Thomas Waldmann <tw@waldmann-edv.de>
parents: 27
diff changeset
177 _ = self._
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
178 request = self.request
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
179 fmt = self.formatter
28
ef8b90110f33 WordIndex: make systempages excludeable
Thomas Waldmann <tw@waldmann-edv.de>
parents: 27
diff changeset
180 allpages = int(self.form.get('allpages', [0])[0]) != 0
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
181 # Get page list readable by current user, filter by isSystemPage if needed
28
ef8b90110f33 WordIndex: make systempages excludeable
Thomas Waldmann <tw@waldmann-edv.de>
parents: 27
diff changeset
182 if allpages:
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
183 pages = request.rootpage.getPageList()
28
ef8b90110f33 WordIndex: make systempages excludeable
Thomas Waldmann <tw@waldmann-edv.de>
parents: 27
diff changeset
184 else:
1920
b06ef2a53efa 'make pylint', fixed lots of minor stuff found by pylint (and there is still lots left to do)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1918
diff changeset
185 def nosyspage(name):
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
186 return not wikiutil.isSystemPage(request, name)
1920
b06ef2a53efa 'make pylint', fixed lots of minor stuff found by pylint (and there is still lots left to do)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1918
diff changeset
187 pages = request.rootpage.getPageList(filter=nosyspage)
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
188
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
189 word_re = re.compile(word_re, re.UNICODE)
1920
b06ef2a53efa 'make pylint', fixed lots of minor stuff found by pylint (and there is still lots left to do)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1918
diff changeset
190 wordmap = {}
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
191 for name in pages:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
192 for word in word_re.findall(name):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
193 try:
1920
b06ef2a53efa 'make pylint', fixed lots of minor stuff found by pylint (and there is still lots left to do)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1918
diff changeset
194 if not wordmap[word].count(name):
b06ef2a53efa 'make pylint', fixed lots of minor stuff found by pylint (and there is still lots left to do)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1918
diff changeset
195 wordmap[word].append(name)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
196 except KeyError:
1920
b06ef2a53efa 'make pylint', fixed lots of minor stuff found by pylint (and there is still lots left to do)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1918
diff changeset
197 wordmap[word] = [name]
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
198
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
199 # Sort ignoring case
1920
b06ef2a53efa 'make pylint', fixed lots of minor stuff found by pylint (and there is still lots left to do)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1918
diff changeset
200 tmp = [(word.upper(), word) for word in wordmap]
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
201 tmp.sort()
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
202 all_words = [item[1] for item in tmp]
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
203
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
204 index_letters = []
28
ef8b90110f33 WordIndex: make systempages excludeable
Thomas Waldmann <tw@waldmann-edv.de>
parents: 27
diff changeset
205 current_letter = None
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
206 output = []
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
207 for word in all_words:
28
ef8b90110f33 WordIndex: make systempages excludeable
Thomas Waldmann <tw@waldmann-edv.de>
parents: 27
diff changeset
208 letter = wikiutil.getUnicodeIndexGroup(word)
ef8b90110f33 WordIndex: make systempages excludeable
Thomas Waldmann <tw@waldmann-edv.de>
parents: 27
diff changeset
209 if letter != current_letter:
1965
388f477fd536 WordIndex/TitleIndex: fix invalid IDs
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1958
diff changeset
210 cssid = "idx" + wikiutil.quoteWikinameURL(letter).replace('%','')
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
211 output.append(fmt.heading(1, 2, id=cssid)) # fmt.anchordef didn't work
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
212 output.append(fmt.text(letter.replace('~', 'Others')))
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
213 output.append(fmt.heading(0, 2))
28
ef8b90110f33 WordIndex: make systempages excludeable
Thomas Waldmann <tw@waldmann-edv.de>
parents: 27
diff changeset
214 current_letter = letter
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
215 if letter not in index_letters:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
216 index_letters.append(letter)
1958
aa3e4fb31c62 WordIndex/TitleIndex: fix wrong attr name
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1924
diff changeset
217 links = wordmap[word]
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
218 if len(links) and links[0] != word: # show word fragment as on WordIndex
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
219 output.append(fmt.strong(1))
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
220 output.append(word)
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
221 output.append(fmt.strong(0))
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
222
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
223 output.append(fmt.bullet_list(1))
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
224 links.sort()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
225 last_page = None
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
226 for name in links:
28
ef8b90110f33 WordIndex: make systempages excludeable
Thomas Waldmann <tw@waldmann-edv.de>
parents: 27
diff changeset
227 if name == last_page:
ef8b90110f33 WordIndex: make systempages excludeable
Thomas Waldmann <tw@waldmann-edv.de>
parents: 27
diff changeset
228 continue
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
229 output.append(fmt.listitem(1))
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
230 output.append(Page(request, name).link_to(request, attachment_indicator=1))
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
231 output.append(fmt.listitem(0))
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
232 output.append(fmt.bullet_list(0))
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
233
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
234 def _make_index_key(index_letters):
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
235 index_letters.sort()
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
236 def letter_link(ch):
1965
388f477fd536 WordIndex/TitleIndex: fix invalid IDs
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1958
diff changeset
237 cssid = "idx" + wikiutil.quoteWikinameURL(ch).replace('%','')
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
238 return fmt.anchorlink(1, cssid) + fmt.text(ch.replace('~', 'Others')) + fmt.anchorlink(0)
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
239 links = [letter_link(letter) for letter in index_letters]
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
240 return ' | '.join(links)
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
241
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
242 page = fmt.page
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
243 allpages_txt = (_('Include system pages'), _('Exclude system pages'))[allpages]
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
244 allpages_url = page.url(request, querystr={'allpages': allpages and '0' or '1'})
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
245
1785
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
246 output = [fmt.paragraph(1), _make_index_key(index_letters), fmt.linebreak(0),
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
247 fmt.url(1, allpages_url), fmt.text(allpages_txt), fmt.url(0), fmt.paragraph(0)] + output
e54f99c9beba make TitleIndex/WordIndex use the formatter
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1674
diff changeset
248 return u''.join(output)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
249
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
250
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
251 def _macro_TitleIndex(self, args):
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
252 return self._make_index(args)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
253
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
254 def _macro_WordIndex(self, args):
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
255 word_re = u'[%s][%s]+' % (config.chars_upper, config.chars_lower)
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
256 return self._make_index(args, word_re=word_re)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
257
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
258
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
259 def _macro_PageList(self, needle):
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
260 from MoinMoin import search
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
261 _ = self._
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
262 case = 0
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
263
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
264 # If called with empty or no argument, default to regex search for .+, the full page list.
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
265 if not needle:
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
266 needle = 'regex:.+'
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
267
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
268 # With whitespace argument, return same error message as FullSearch
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
269 elif needle.isspace():
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
270 err = _('Please use a more selective search term instead of {{{"%s"}}}') % needle
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
271 return '<span class="error">%s</span>' % err
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
272
735
e3c44dc8f488 merge common code of TitleIndex and WordIndex into _make_index
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
273 # Return a title search for needle, sorted by name.
919
5469c8b911a4 Splitting out MoinMoin/search.py to MoinMoin/search/*.py
Franz Pletz <fpletz AT franz-pletz DOT org>
parents: 828
diff changeset
274 results = search.searchPages(self.request, needle,
1449
e219092e1a0d a few small fixes to get misc things working with xapian
Franz Pletz <fpletz AT franz-pletz DOT org>
parents: 1347
diff changeset
275 titlesearch=1, case=case, sort='page_name')
1189
0e352443948b make FullSearch macro work again (without paging)
Franz Pletz <fpletz AT franz-pletz DOT org>
parents: 950
diff changeset
276 return results.pageList(self.request, self.formatter, paging=False)
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
277
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
278 def _macro_InterWiki(self, args):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
279 from StringIO import StringIO
828
902c34d95085 quoting for attachment filenames, wikiutil.load_wikimap, split_wiki can parse quoting, join_wiki does url_quote
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 753
diff changeset
280 interwiki_list = wikiutil.load_wikimap(self.request)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
281 buf = StringIO()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
282 buf.write('<dl>')
1920
b06ef2a53efa 'make pylint', fixed lots of minor stuff found by pylint (and there is still lots left to do)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1918
diff changeset
283 iwlist = interwiki_list.items() # this is where we cached it
b06ef2a53efa 'make pylint', fixed lots of minor stuff found by pylint (and there is still lots left to do)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1918
diff changeset
284 iwlist.sort()
b06ef2a53efa 'make pylint', fixed lots of minor stuff found by pylint (and there is still lots left to do)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1918
diff changeset
285 for tag, url in iwlist:
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
286 buf.write('<dt><tt><a href="%s">%s</a></tt></dt>' % (
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
287 wikiutil.join_wiki(url, 'RecentChanges'), tag))
1183
bc84eae93f8c replace usage of find by 'in' operator
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1133
diff changeset
288 if '$PAGE' not in url:
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
289 buf.write('<dd><tt><a href="%s">%s</a></tt></dd>' % (url, url))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
290 else:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
291 buf.write('<dd><tt>%s</tt></dd>' % url)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
292 buf.write('</dl>')
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
293 return self.formatter.rawHTML(buf.getvalue())
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
294
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
295 def _macro_PageCount(self, args):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
296 """ Return number of pages readable by current user
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
297
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
298 Return either an exact count (slow!) or fast count including
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
299 deleted pages.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
300 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
301 # Check input
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
302 options = {None: 0, '': 0, 'exists': 1}
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
303 try:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
304 exists = options[args]
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
305 except KeyError:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
306 # Wrong argument, return inline error message
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
307 arg = self.formatter.text(args)
407
bea43f99cc27 star-merged moin--refactor--1.5 (formatter, parser, converter fixes, see docs/CHANGES.refactor)
Thomas Waldmann <tw@waldmann-edv.de>
parents: 138
diff changeset
308 return (self.formatter.span(1, css_class="error") +
bea43f99cc27 star-merged moin--refactor--1.5 (formatter, parser, converter fixes, see docs/CHANGES.refactor)
Thomas Waldmann <tw@waldmann-edv.de>
parents: 138
diff changeset
309 'Wrong argument: %s' % arg +
bea43f99cc27 star-merged moin--refactor--1.5 (formatter, parser, converter fixes, see docs/CHANGES.refactor)
Thomas Waldmann <tw@waldmann-edv.de>
parents: 138
diff changeset
310 self.formatter.span(0))
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
311
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
312 count = self.request.rootpage.getPageCount(exists=exists)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
313 return self.formatter.text("%d" % count)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
314
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
315 def _macro_Icon(self, args):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
316 icon = args.lower()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
317 return self.formatter.icon(icon)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
318
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
319 def _macro_TemplateList(self, args):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
320 _ = self._
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
321 try:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
322 needle_re = re.compile(args or '', re.IGNORECASE)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
323 except re.error, e:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
324 return "<strong>%s: %s</strong>" % (
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
325 _("ERROR in regex '%s'") % (args,), e)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
326
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
327 # Get page list readable by current user, filtered by needle
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
328 hits = self.request.rootpage.getPageList(filter=needle_re.search)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
329 hits.sort()
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
330
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
331 result = []
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
332 result.append(self.formatter.bullet_list(1))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
333 for pagename in hits:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
334 result.append(self.formatter.listitem(1))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
335 result.append(self.formatter.pagelink(1, pagename, generated=1))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
336 result.append(self.formatter.text(pagename))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
337 result.append(self.formatter.pagelink(0, pagename))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
338 result.append(self.formatter.listitem(0))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
339 result.append(self.formatter.bullet_list(0))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
340 return ''.join(result)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
341
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
342
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
343 def __get_Date(self, args, format_date):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
344 _ = self._
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
345 if not args:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
346 tm = time.time() # always UTC
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
347 elif len(args) >= 19 and args[4] == '-' and args[7] == '-' \
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
348 and args[10] == 'T' and args[13] == ':' and args[16] == ':':
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
349 # we ignore any time zone offsets here, assume UTC,
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
350 # and accept (and ignore) any trailing stuff
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
351 try:
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
352 year, month, day = int(args[0:4]), int(args[5:7]), int(args[8:10])
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
353 hour, minute, second = int(args[11:13]), int(args[14:16]), int(args[17:19])
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
354 tz = args[19:] # +HHMM, -HHMM or Z or nothing (then we assume Z)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
355 tzoffset = 0 # we assume UTC no matter if there is a Z
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
356 if tz:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
357 sign = tz[0]
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
358 if sign in '+-':
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
359 tzh, tzm = int(tz[1:3]), int(tz[3:])
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
360 tzoffset = (tzh*60+tzm)*60
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
361 if sign == '-':
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
362 tzoffset = -tzoffset
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
363 tm = (year, month, day, hour, minute, second, 0, 0, 0)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
364 except ValueError, e:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
365 return "<strong>%s: %s</strong>" % (
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
366 _("Bad timestamp '%s'") % (args,), e)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
367 # as mktime wants a localtime argument (but we only have UTC),
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
368 # we adjust by our local timezone's offset
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
369 try:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
370 tm = time.mktime(tm) - time.timezone - tzoffset
1805
ebcebba1afb3 removed some unused attributes, used 'dummy' for dummies
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1794
diff changeset
371 except (OverflowError, ValueError):
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
372 tm = 0 # incorrect, but we avoid an ugly backtrace
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
373 else:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
374 # try raw seconds since epoch in UTC
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
375 try:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
376 tm = float(args)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
377 except ValueError, e:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
378 return "<strong>%s: %s</strong>" % (
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
379 _("Bad timestamp '%s'") % (args,), e)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
380 return format_date(tm)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
381
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
382 def _macro_Date(self, args):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
383 return self.__get_Date(args, self.request.user.getFormattedDate)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
384
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
385 def _macro_DateTime(self, args):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
386 return self.__get_Date(args, self.request.user.getFormattedDateTime)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
387
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
388
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
389 def _macro_UserPreferences(self, args):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
390 from MoinMoin import userform
138
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 79
diff changeset
391
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 79
diff changeset
392 create_only = False
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 79
diff changeset
393 if isinstance(args, unicode):
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 79
diff changeset
394 args = args.strip(" '\"")
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
395 create_only = (args.lower() == "createonly")
138
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 79
diff changeset
396
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 79
diff changeset
397 return self.formatter.rawHTML(userform.getUserForm(
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 79
diff changeset
398 self.request,
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 79
diff changeset
399 create_only=create_only))
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
400
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
401 def _macro_Anchor(self, args):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
402 return self.formatter.anchordef(args or "anchor")
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
403
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
404 def _macro_MailTo(self, args):
753
d48400378d4c fixed MailTo macro import
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 735
diff changeset
405 from MoinMoin.mail.sendmail import decodeSpamSafeEmail
1920
b06ef2a53efa 'make pylint', fixed lots of minor stuff found by pylint (and there is still lots left to do)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1918
diff changeset
406 result = ''
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
407 args = args or ''
1183
bc84eae93f8c replace usage of find by 'in' operator
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1133
diff changeset
408 if ',' not in args:
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
409 email = args
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
410 text = ''
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
411 else:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
412 email, text = args.split(',', 1)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
413
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
414 email, text = email.strip(), text.strip()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
415
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
416 if self.request.user.valid:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
417 # decode address and generate mailto: link
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
418 email = decodeSpamSafeEmail(email)
410
1a2bd0457cf3 fix some wrong attributes, todo: fix quoting, see comment in text_html.url
Thomas Waldmann <tw@waldmann-edv.de>
parents: 407
diff changeset
419 result = (self.formatter.url(1, 'mailto:' + email, css='mailto', do_escape=0) +
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
420 self.formatter.text(text or email) +
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
421 self.formatter.url(0))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
422 else:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
423 # unknown user, maybe even a spambot, so
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
424 # just return text as given in macro args
1674
a45b23e6217d minor MailTo macro change from docbook branch
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1550
diff changeset
425
a45b23e6217d minor MailTo macro change from docbook branch
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1550
diff changeset
426 if text:
a45b23e6217d minor MailTo macro change from docbook branch
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1550
diff changeset
427 result = self.formatter.text(text+" ")
a45b23e6217d minor MailTo macro change from docbook branch
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1550
diff changeset
428
a45b23e6217d minor MailTo macro change from docbook branch
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1550
diff changeset
429 result += self.formatter.code(1) + \
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
430 self.formatter.text("<%s>" % email) + \
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
431 self.formatter.code(0)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
432
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
433 return result
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
434
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
435 def _macro_GetVal(self, args):
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
436 page, key = args.split(',')
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
437 d = self.request.dicts.dict(page)
950
4eb66637ccd0 whitespace-only cleanup, small style changes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 919
diff changeset
438 result = d.get(key, '')
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
439 return self.formatter.text(result)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
440