Attachment 'simple_cms.py'
Download 1 # -*- coding: iso-8859-1 -*-
2 """
3 MoinMoin - simple_cms theme
4
5 @copyright: 2003-2009 Nir Soffer, Thomas Waldmann, Gareth Lee
6 @license: GNU GPL, see COPYING for details.
7 """
8
9 from MoinMoin import wikiutil
10 from MoinMoin.theme import ThemeBase
11
12 class Theme(ThemeBase):
13
14 name = "simple_cms"
15
16 # This method produces a simplified search form which only allows full text search
17 def simple_searchform(self, d):
18 """
19 assemble HTML code for the search forms
20
21 @param d: parameter dictionary
22 @rtype: unicode
23 @return: search form html
24 """
25 _ = self.request.getText
26 form = self.request.form
27 updates = {
28 'search_label': _('Search:'),
29 'search_value': wikiutil.escape(form.get('value', [''])[0], 1),
30 'search_full_label': _('Search'),
31 'baseurl': self.request.getScriptname(),
32 'pagename_quoted': wikiutil.quoteWikinameURL(d['page'].page_name),
33 }
34 d.update(updates)
35
36 html = u'''
37 <form id="searchform" method="get" action="%(baseurl)s/%(pagename_quoted)s">
38 <div>
39 <input type="hidden" name="action" value="fullsearch">
40 <input type="hidden" name="context" value="180">
41 <label for="searchinput">%(search_label)s</label>
42 <input id="searchinput" type="text" name="value" value="%(search_value)s" size="20"
43 onfocus="searchFocus(this)" onblur="searchBlur(this)"
44 onkeyup="searchChange(this)" onchange="searchChange(this)" alt="Search">
45 <input id="fullsearch" name="fullsearch" type="submit"
46 value="%(search_full_label)s" alt="Search Full Text">
47 </div>
48 </form>
49 <script type="text/javascript">
50 <!--// Initialize search form
51 var f = document.getElementById('searchform');
52 f.getElementsByTagName('label')[0].style.display = 'none';
53 var e = document.getElementById('searchinput');
54 searchChange(e);
55 searchBlur(e);
56 //-->
57 </script>
58 ''' % d
59 return html
60
61 def navibar(self, d):
62 """ Assemble the navibar
63
64 @param d: parameter dictionary
65 @rtype: unicode
66 @return: navibar html
67 """
68
69 request = self.request
70 found = {} # pages we found. prevent duplicates
71 items = [] # navibar items
72 item = u'<li class="%s">%s</li>'
73 current = d['page_name']
74
75 # Process config navi_bar
76 if request.cfg.navi_bar:
77 for text in request.cfg.navi_bar:
78 pagename, link = self.splitNavilink(text)
79 if pagename == current:
80 cls = 'wikilink current'
81 else:
82 cls = 'wikilink'
83 items.append(item % (cls, link))
84 found[pagename] = 1
85
86 # Assemble html
87 items = u''.join(items)
88 html = u'''
89 <ul id="navibar">
90 %s
91 </ul>
92 ''' % items
93 return html
94
95 def header(self, d, **kw):
96 """ Assemble wiki header
97
98 @param d: parameter dictionary
99 @rtype: unicode
100 @return: page header html
101 """
102 if self.request.user.valid and self.request.user.name:
103 html = [
104 # Pre header custom html
105 self.emit_custom_html(self.cfg.page_header1),
106
107 # Header
108 u'<div id="header">',
109 self.logo(),
110 self.searchform(d),
111 self.username(d),
112 u'<div id="locationline">',
113 self.interwiki(d),
114 self.title(d),
115 u'</div>',
116 self.trail(d),
117 self.navibar(d),
118 #u'<hr id="pageline">',
119 u'<div id="pageline"><hr style="display:none;"></div>',
120 self.msg(d),
121 self.editbar(d),
122 u'</div>',
123
124 # Post header custom html (not recommended)
125 self.emit_custom_html(self.cfg.page_header2),
126
127 # Start of page
128 self.startPage(),
129 ]
130 else:
131 html = [
132 # Pre header custom html
133 self.emit_custom_html(self.cfg.page_header1),
134
135 # Header
136 u'<div id="header">',
137 self.logo(),
138 self.simple_searchform(d),
139 #self.username(d),
140 u'<div id="locationline">',
141 self.interwiki(d),
142 self.title(d),
143 u'</div>',
144 #self.trail(d),
145 self.navibar(d),
146 #u'<hr id="pageline">',
147 u'<div id="pageline"><hr style="display:none;"></div>',
148 self.msg(d),
149 #self.editbar(d),
150 u'</div>',
151
152 # Post header custom html (not recommended)
153 self.emit_custom_html(self.cfg.page_header2),
154
155 # Start of page
156 self.startPage(),
157 ]
158
159 return u'\n'.join(html)
160
161 def editorheader(self, d, **kw):
162 """ Assemble wiki header for editor
163
164 @param d: parameter dictionary
165 @rtype: unicode
166 @return: page header html
167 """
168 html = [
169 # Pre header custom html
170 self.emit_custom_html(self.cfg.page_header1),
171
172 # Header
173 u'<div id="header">',
174 self.title(d),
175 self.msg(d),
176 u'</div>',
177
178 # Post header custom html (not recommended)
179 self.emit_custom_html(self.cfg.page_header2),
180
181 # Start of page
182 self.startPage(),
183 ]
184 return u'\n'.join(html)
185
186 def footer(self, d, **keywords):
187 """ Assemble wiki footer
188
189 @param d: parameter dictionary
190 @keyword ...:...
191 @rtype: unicode
192 @return: page footer html
193 """
194 page = d['page']
195 if self.request.user.valid and self.request.user.name:
196 html = [
197 # End of page
198 self.pageinfo(page),
199 self.endPage(),
200
201 # Pre footer custom html (not recommended!)
202 self.emit_custom_html(self.cfg.page_footer1),
203
204 # Footer
205 u'<div id="footer">',
206 self.editbar(d),
207 u'<div id="pageline"><hr style="display:none;"></div>',
208 self.credits(d),
209 self.showversion(d, **keywords),
210 u'</div>',
211
212 # Post footer custom html
213 self.emit_custom_html(self.cfg.page_footer2),
214 ]
215 else:
216 html = [
217 # End of page
218 self.pageinfo(page),
219 self.endPage(),
220
221 # Pre footer custom html (not recommended!)
222 self.emit_custom_html(self.cfg.page_footer1),
223
224 # Footer
225 u'<div id="footer">',
226 #self.editbar(d),
227 u'<div id="pageline"><hr style="display:none;"></div>',
228 self.credits(d),
229 self.showversion(d, **keywords),
230 u'</div>',
231
232 # Post footer custom html
233 self.emit_custom_html(self.cfg.page_footer2),
234 ]
235
236 return u'\n'.join(html)
237
238
239 def execute(request):
240 """
241 Generate and return a theme object
242
243 @param request: the request object
244 @rtype: MoinTheme
245 @return: Theme object
246 """
247 return Theme(request)
Attached Files
To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.You are not allowed to attach a file to this page.