PLDWWW: pldtheme/pldtheme.py (NEW) - as it needs sometimes a tweak...
czarny
czarny at pld-linux.org
Thu Jul 19 13:00:14 CEST 2007
Author: czarny Date: Thu Jul 19 11:00:14 2007 GMT
Module: PLDWWW Tag: HEAD
---- Log message:
- as it needs sometimes a tweak, here it is
- fixed strict HTML 4.01 validation (pagebottom is done by parser now, not theme)
---- Files affected:
PLDWWW/pldtheme:
pldtheme.py (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: PLDWWW/pldtheme/pldtheme.py
diff -u /dev/null PLDWWW/pldtheme/pldtheme.py:1.1
--- /dev/null Thu Jul 19 13:00:14 2007
+++ PLDWWW/pldtheme/pldtheme.py Thu Jul 19 13:00:09 2007
@@ -0,0 +1,274 @@
+# vi: encoding=iso-8859-1 ts=8 sts=4 sw=4 et
+# -*- coding: iso-8859-1 -*-
+"""
+ MoinMoin theme by and for crw.
+"""
+
+from MoinMoin import wikiutil
+from MoinMoin.Page import Page
+from MoinMoin.theme import ThemeBase
+
+class Theme(ThemeBase):
+ """ here are the functions generating the html responsible for
+ the look and feel of your wiki site
+ """
+
+ name = "pldtheme"
+
+ def html_head(self, d):
+ """ Assemble html head
+
+ @param d: parameter dictionary
+ @rtype: unicode
+ @return: html head
+ """
+ html = [
+ u'<title>%(sitename)s - %(title)s</title>' % d,
+ self.headscript(d), # Should move to separate .js file
+ self.html_stylesheets(d),
+ self.rsslink(d),
+ ]
+ return '\n'.join(html)
+
+ def title(self, d):
+ """ Assemble the title
+
+ @param d: parameter dictionary
+ @rtype: string
+ @return: title html
+ """
+ _ = self.request.getText
+ if d['title_link']:
+ html=''
+ else:
+ content = wikiutil.escape(d['title_text'])
+ html = '''
+<h1 id="title">%s</h1>
+''' % content
+
+ return html
+
+ def wikipanel(self, d):
+ """ Create wiki panel """
+ f=open(self.cfg.panels_dir+'/top.html', 'r')
+ top=f.read()
+ f.close()
+ html = [
+ u'<div id="navigation">',
+ u'<div id="menu">',
+ top,
+ u'</div>',
+ u'</div>',
+ ]
+ return u'\n'.join(html)
+
+ def pagepanel(self, d):
+ """ Create page panel """
+ _ = self.request.getText
+ if self.shouldShowEditbar(d['page']):
+ html = [
+ u'<div class="sidepanel">',
+ u'<h1>%s</h1>' % _("Page"),
+ self.editbar(d),
+ u'</div>',
+ ]
+ return u'\n'.join(html)
+ return ''
+
+ def username_obsolete_arekm(self, d):
+ """ Assemble the username / userprefs link
+
+ @param d: parameter dictionary
+ @rtype: string
+ @return: username html
+ """
+ from MoinMoin.Page import Page
+ request = self.request
+ _ = request.getText
+
+ userlinks = []
+ # Add username/homepage link for registered users. We don't care
+ # if it exists, the user can create it.
+ if request.user.valid:
+ homepage = Page(request, request.user.name)
+ title = homepage.split_title(request)
+ homelink = homepage.link_to(request, text=title)
+ userlinks.append(homelink)
+
+ # Set pref page to localized Preferences page
+ prefpage = wikiutil.getSysPage(request, 'UserPreferences')
+ title = prefpage.split_title(request)
+ userlinks.append(prefpage.link_to(request, text=title))
+
+ # Logout button
+ userlinks.append('<form action="/UserPreferences" method="POST"><input type="submit" name="logout" value="%s"><input type="hidden" name="action" value="userform"></form>' % _("Logout"))
+ else:
+ # Add prefpage links with title: Login
+ prefpage = wikiutil.getSysPage(request, 'UserPreferences')
+ userlinks.append(prefpage.link_to(request, text=_("Login")))
+
+ html = '<ul id="username"><li>%s</li></ul>' % '</li>\n<li>'.join(userlinks)
+ return html
+
+ def userpanel(self, d):
+ """ Create user panel """
+ _ = self.request.getText
+
+ trail = self.trail(d)
+ if trail:
+ trail = u'<h2>%s</h2>\n' % _("Trail") + trail
+
+ html = [
+ u'<div class="sidepanel">',
+ u'<h1>%s</h1>' % _("User"),
+ self.username(d),
+ trail,
+ u'</div>'
+ ]
+ return u'\n'.join(html)
+
+ def header(self, d):
+ """
+ Assemble page header
+
+ @param d: parameter dictionary
+ @rtype: string
+ @return: page header html
+ """
+ _ = self.request.getText
+
+ html = [
+ # Custom html above header
+ self.emit_custom_html(self.cfg.page_header1),
+
+ # stats
+# u'<script language="JavaScript" type="text/javascript" src="http://ep09.pld-linux.org/~domelu/pphlogger.js"></script>',
+# u'<noscript><img alt="" src="http://webstats.toster.org/pphlogger.php?id=pldsmp;t=img"></noscript>',
+
+ # Header
+# self.searchform(d),
+ self.logo(),
+ self.wikipanel(d),
+
+ # Custom html below header (not recomended!)
+ self.emit_custom_html(self.cfg.page_header2),
+
+ # Sidebar
+ # Page
+ self.startPage(),
+ self.msg(d),
+
+ self.title(d),
+ ]
+ return u'\n'.join(html)
+
+ def footer(self, d, **keywords):
+ """ Assemble page footer
+
+ @param d: parameter dictionary
+ @keyword ...:...
+ @rtype: string
+ @return: page footer html
+ """
+ page = d['page']
+ html = [
+ # Page end
+ # Used to extend the page to the bottom of the sidebar
+ # No needed anymore --breaks valid HTML as being
+ # double 4.01
+# u'<div id="pagebottom"></div>',
+ self.pageinfo(page),
+ self.endPage(),
+
+ #Sidebar
+ u'<div id="sidebar">',
+# self.wikipanel(d),
+ ]
+ f=open(self.cfg.panels_dir+'/side.html', 'r')
+ side=f.read()
+ f.close()
+ html=html+[side]
+ if self.request.user.valid:
+ html=html+[self.pagepanel(d)]
+ html=html+[
+ self.userpanel(d),
+ self.credits(d),
+ u'</div>',
+
+
+ # Custom html above footer
+ self.emit_custom_html(self.cfg.page_footer1),
+
+ # And bellow
+ self.emit_custom_html(self.cfg.page_footer2),
+ ]
+ return u'\n'.join(html)
+
+
+ def headscript(self, d):
+ """ Return html head script with common functions
+
+ TODO: put these on common.js instead, so they can be downloaded
+ only once.
+
+ TODO: actionMenuInit should be called once, from body onload,
+ but currently body is not written by theme.
+
+ @param d: parameter dictionary
+ @rtype: unicode
+ @return: script for html head
+ """
+ # Don't add script for print view
+ if self.request.form.get('action', [''])[0] == 'print':
+ return u''
+
+ _ = self.request.getText
+ script = u"""
+<script type=\"text/javascript\">
+<!--// common functions
+
+function actionsMenuInit(title) {
+ // Initiliaze action menu
+ for (i = 0; i < document.forms.length; i++) {
+ var form = document.forms[i];
+ if (form.className == 'actionsmenu') {
+ // Check if this form needs update
+ var div = form.getElementsByTagName('div')[0];
+ var label = div.getElementsByTagName('label')[0];
+ if (label) {
+ // This is the first time: remove label and do buton.
+ div.removeChild(label);
+ var dobutton = div.getElementsByTagName('input')[0];
+ div.removeChild(dobutton);
+ // and add menu title
+ var select = div.getElementsByTagName('select')[0];
+ var item = document.createElement('option');
+ item.appendChild(document.createTextNode(title));
+ item.value = 'show';
+ select.insertBefore(item, select.options[0]);
+ select.selectedIndex = 0;
+ }
+ }
+ }
+}
+//-->
+</script>
+
+<script type="text/javascript" src="/htdocs/pphlogger.js"></script>
+
+""" % {
+ 'search_hint' : _('Search:', formatted=False).replace(':',''), # XXX TODO make own i18n string in 1.4
+ }
+ return script
+
+def execute(request):
+ """
+ Generate and return a theme object
+
+ @param request: the request object
+ @rtype: MoinTheme
+ @return: Theme object
+ """
+ return Theme(request)
+
+
================================================================
More information about the pld-cvs-commit
mailing list