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