Blame Artworks/Webenv/Moin/1.5.7/Modern.py

Alain Reguera Delgado 46de3c
# -*- coding: iso-8859-1 -*-
Alain Reguera Delgado 46de3c
"""
Alain Reguera Delgado 46de3c
    MoinMoin - Modern Theme
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
    Created for the CentOS Project Wiki. This is a
Alain Reguera Delgado 46de3c
    modification of the MoinMoin's modern default
Alain Reguera Delgado 46de3c
    wiki theme, and a continuation of previous
Alain Reguera Delgado 46de3c
    modern-CentOS theme.
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
    @copyright: 2008 by The CentOS ArtWork SIG.
Alain Reguera Delgado 46de3c
    @license: GNU GPL, see COPYING for details.  
Alain Reguera Delgado 46de3c
"""
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
from MoinMoin.theme import ThemeBase
Alain Reguera Delgado 46de3c
from MoinMoin import wikiutil
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
class Theme(ThemeBase):
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
    name = "Modern"
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
    def header(self, d):
Alain Reguera Delgado 46de3c
        """
Alain Reguera Delgado 46de3c
        Assemble page header
Alain Reguera Delgado 46de3c
        
Alain Reguera Delgado 46de3c
        @param d: parameter dictionary
Alain Reguera Delgado 46de3c
        @rtype: string
Alain Reguera Delgado 46de3c
        @return: page header html
Alain Reguera Delgado 46de3c
        """
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
        html = [
Alain Reguera Delgado 46de3c
            # Custom html above header
Alain Reguera Delgado 46de3c
            self.emit_custom_html(self.cfg.page_header1),
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
            # Header
Alain Reguera Delgado 46de3c
            u'
Alain Reguera Delgado 46de3c
            self.logo(),
Alain Reguera Delgado 46de3c
	    self.navigation(d),
Alain Reguera Delgado 46de3c
	    self.errormsg(d),
Alain Reguera Delgado 46de3c
            #self.googleads(d),
Alain Reguera Delgado 46de3c
            #self.trail(d),
Alain Reguera Delgado 46de3c
	    #self.navibar(d),
Alain Reguera Delgado 46de3c
	    #u'

',
Alain Reguera Delgado 46de3c
 	    #self.editbar(d),
Alain Reguera Delgado 46de3c
            u'',
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
            # Custom html below header (not recomended!)
Alain Reguera Delgado 46de3c
            #self.emit_custom_html(self.cfg.page_header2),
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
            # Page
Alain Reguera Delgado 46de3c
            self.msg(d),
Alain Reguera Delgado 46de3c
            u'
',
Alain Reguera Delgado 46de3c
            u'',
Alain Reguera Delgado 46de3c
            self.startPage(),
Alain Reguera Delgado 46de3c
            ]
Alain Reguera Delgado 46de3c
        return u'\n'.join(html)
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
    def editorheader(self, d):
Alain Reguera Delgado 46de3c
        """
Alain Reguera Delgado 46de3c
        Assemble page header for editor
Alain Reguera Delgado 46de3c
        
Alain Reguera Delgado 46de3c
        @param d: parameter dictionary
Alain Reguera Delgado 46de3c
        @rtype: string
Alain Reguera Delgado 46de3c
        @return: page header html
Alain Reguera Delgado 46de3c
        """
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
        html = [
Alain Reguera Delgado 46de3c
            # Custom html above header
Alain Reguera Delgado 46de3c
            self.emit_custom_html(self.cfg.page_header1),
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
            # Header
Alain Reguera Delgado 46de3c
            u'
Alain Reguera Delgado 46de3c
            self.logo(),
Alain Reguera Delgado 46de3c
	    self.navigation(d),
Alain Reguera Delgado 46de3c
	    self.errormsg(d),
Alain Reguera Delgado 46de3c
            u'',
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
            # Custom html below header (not recomended!)
Alain Reguera Delgado 46de3c
            # self.emit_custom_html(self.cfg.page_header2),
Alain Reguera Delgado 46de3c
            
Alain Reguera Delgado 46de3c
            # Page
Alain Reguera Delgado 46de3c
            self.msg(d),
Alain Reguera Delgado 46de3c
            u'
',
Alain Reguera Delgado 46de3c
	    self.title(d),
Alain Reguera Delgado 46de3c
            u'',
Alain Reguera Delgado 46de3c
            self.startPage(),
Alain Reguera Delgado 46de3c
            ]
Alain Reguera Delgado 46de3c
        return u'\n'.join(html)
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
    def footer(self, d, **keywords):
Alain Reguera Delgado 46de3c
        """ Assemble wiki footer
Alain Reguera Delgado 46de3c
        
Alain Reguera Delgado 46de3c
        @param d: parameter dictionary
Alain Reguera Delgado 46de3c
        @keyword ...:...
Alain Reguera Delgado 46de3c
        @rtype: unicode
Alain Reguera Delgado 46de3c
        @return: page footer html
Alain Reguera Delgado 46de3c
        """
Alain Reguera Delgado 46de3c
        page = d['page']
Alain Reguera Delgado 46de3c
        html = [
Alain Reguera Delgado 46de3c
            # End of page
Alain Reguera Delgado 46de3c
            self.pageinfo(page),
Alain Reguera Delgado 46de3c
            self.endPage(),
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
            # Pre footer custom html (not recommended!)
Alain Reguera Delgado 46de3c
            # self.emit_custom_html(self.cfg.page_footer1),
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
            # Footer
Alain Reguera Delgado 46de3c
	    u'
Alain Reguera Delgado 46de3c
            self.navibar(d),
Alain Reguera Delgado 46de3c
            self.editbar(d),
Alain Reguera Delgado 46de3c
            self.credits(d),
Alain Reguera Delgado 46de3c
            #self.showversion(d, **keywords),
Alain Reguera Delgado 46de3c
            u'',
Alain Reguera Delgado 46de3c
            
Alain Reguera Delgado 46de3c
            # Post footer custom html
Alain Reguera Delgado 46de3c
            # self.emit_custom_html(self.cfg.page_footer2),
Alain Reguera Delgado 46de3c
            ]
Alain Reguera Delgado 46de3c
        return u'\n'.join(html)
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
    def navigation (self, d): 
Alain Reguera Delgado 46de3c
    	"""
Alain Reguera Delgado 46de3c
	assemble HTML code for CentOS Global Navigation
Alain Reguera Delgado 46de3c
        
Alain Reguera Delgado 46de3c
        @rtype: unicode
Alain Reguera Delgado 46de3c
        @return: CentOS Global Navigation
Alain Reguera Delgado 46de3c
        """
Alain Reguera Delgado 46de3c
Alain Reguera Delgado 46de3c
	html = u'''
Alain Reguera Delgado 46de3c
    
Alain Reguera Delgado 46de3c
    
    Alain Reguera Delgado 46de3c
                
  • Home
  • Alain Reguera Delgado 46de3c
                
  • Downloads
  • Alain Reguera Delgado 46de3c
                
  • Docs
  • Alain Reguera Delgado 46de3c
                
  • Wiki
  • Alain Reguera Delgado 46de3c
                
  • Lists
  • Alain Reguera Delgado 46de3c
                
  • Bugs
  • Alain Reguera Delgado 46de3c
                
  • Forums
  • Alain Reguera Delgado 46de3c
                
  • Projects
  • Alain Reguera Delgado 46de3c
        
    Alain Reguera Delgado 46de3c
        
    Alain Reguera Delgado 46de3c
    ''' % d
    Alain Reguera Delgado 46de3c
            return html
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
        def errormsg(self, d): 
    Alain Reguera Delgado 46de3c
        	"""
    Alain Reguera Delgado 46de3c
    	assemble HTML code for CentOS Identification
    Alain Reguera Delgado 46de3c
            
    Alain Reguera Delgado 46de3c
            @rtype: unicode
    Alain Reguera Delgado 46de3c
            @return: CentOS Global Identification
    Alain Reguera Delgado 46de3c
            """
    Alain Reguera Delgado 46de3c
            html = [
    Alain Reguera Delgado 46de3c
                u'
    ',
    Alain Reguera Delgado 46de3c
    	    u'Wiki',
    Alain Reguera Delgado 46de3c
    	    u'
    Alain Reguera Delgado 46de3c
    	    self.username(d),
    Alain Reguera Delgado 46de3c
                self.editbar(d),
    Alain Reguera Delgado 46de3c
    	    self.searchform(d),
    Alain Reguera Delgado 46de3c
    	    u'',
    Alain Reguera Delgado 46de3c
                u'

    Wiki

    ',
    Alain Reguera Delgado 46de3c
                self.navibar(d),
    Alain Reguera Delgado 46de3c
                self.interwiki(d),
    Alain Reguera Delgado 46de3c
                self.trail(d),
    Alain Reguera Delgado 46de3c
                self.title(d),
    Alain Reguera Delgado 46de3c
                u'',
    Alain Reguera Delgado 46de3c
                ]
    Alain Reguera Delgado 46de3c
            return u'\n'.join(html)
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
        def googleads(self, d):
    Alain Reguera Delgado 46de3c
            """
    Alain Reguera Delgado 46de3c
            assemble HTML code for the Google Ads
    Alain Reguera Delgado 46de3c
            
    Alain Reguera Delgado 46de3c
            @rtype: unicode
    Alain Reguera Delgado 46de3c
            @return: Google Ads
    Alain Reguera Delgado 46de3c
            """
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
            html = u'''
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    <script type="text/javascript">
    Alain Reguera Delgado 46de3c
    google_ad_client = "pub-6973128787810819";
    Alain Reguera Delgado 46de3c
    google_ad_width = 468;
    Alain Reguera Delgado 46de3c
    google_ad_height = 68;
    Alain Reguera Delgado 46de3c
    google_ad_format = "468x60_as";
    Alain Reguera Delgado 46de3c
    google_ad_type = "text_image";
    Alain Reguera Delgado 46de3c
    google_ad_channel = "";
    Alain Reguera Delgado 46de3c
    google_color_border = "204c8d";
    Alain Reguera Delgado 46de3c
    google_color_bg = "345c97";
    Alain Reguera Delgado 46de3c
    google_color_link = "0000FF";
    Alain Reguera Delgado 46de3c
    google_color_text = "FFFFFF";
    Alain Reguera Delgado 46de3c
    google_color_url = "008000";
    Alain Reguera Delgado 46de3c
    //-->
    Alain Reguera Delgado 46de3c
    </script>
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
      src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    Alain Reguera Delgado 46de3c
    </script>
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    ''' % d
    Alain Reguera Delgado 46de3c
            return html
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
        def credits(self, d):
    Alain Reguera Delgado 46de3c
            """
    Alain Reguera Delgado 46de3c
            assemble HTML code for the credits.
    Alain Reguera Delgado 46de3c
            
    Alain Reguera Delgado 46de3c
            @rtype: unicode
    Alain Reguera Delgado 46de3c
            @return: Creative Common Reference
    Alain Reguera Delgado 46de3c
            """
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
            html = u'''
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    Creative Commons License
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c

    This wiki is licensed under a
    Alain Reguera Delgado 46de3c
    Creative Commons Attribution-Share Alike 3.0 Unported License.
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c

    The CentOS Project

    Alain Reguera Delgado 46de3c

    The Community Enterprise Operating System.

    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    ''' % d
    Alain Reguera Delgado 46de3c
            return html
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
        def searchform(self, d):
    Alain Reguera Delgado 46de3c
            """
    Alain Reguera Delgado 46de3c
            assemble HTML code for the search forms
    Alain Reguera Delgado 46de3c
            
    Alain Reguera Delgado 46de3c
            @param d: parameter dictionary
    Alain Reguera Delgado 46de3c
            @rtype: unicode
    Alain Reguera Delgado 46de3c
            @return: search form html
    Alain Reguera Delgado 46de3c
            """
    Alain Reguera Delgado 46de3c
            _ = self.request.getText
    Alain Reguera Delgado 46de3c
            form = self.request.form
    Alain Reguera Delgado 46de3c
            updates = {
    Alain Reguera Delgado 46de3c
                'search_label' : _('Search:'),
    Alain Reguera Delgado 46de3c
                'search_value': wikiutil.escape(form.get('value', [''])[0], 1),
    Alain Reguera Delgado 46de3c
                'search_full_label' : _('Text', formatted=False),
    Alain Reguera Delgado 46de3c
                'search_title_label' : _('Titles', formatted=False),
    Alain Reguera Delgado 46de3c
                }
    Alain Reguera Delgado 46de3c
            d.update(updates)
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
            html = u'''
    Alain Reguera Delgado 46de3c
    <form id="searchform" method="get" action="">
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    <input type="hidden" name="action" value="fullsearch">
    Alain Reguera Delgado 46de3c
    <input type="hidden" name="context" value="180">
    Alain Reguera Delgado 46de3c
    <label for="searchinput">%(search_label)s</label>
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
        onfocus="searchFocus(this)" onblur="searchBlur(this)"
    Alain Reguera Delgado 46de3c
        onkeyup="searchChange(this)" onchange="searchChange(this)" alt="Search">
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
        value="%(search_full_label)s" alt="Search Full Text">
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
        value="%(search_title_label)s" alt="Search Titles">
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    </form>
    Alain Reguera Delgado 46de3c
    <script type="text/javascript">
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    var f = document.getElementById('searchform');
    Alain Reguera Delgado 46de3c
    f.getElementsByTagName('label')[0].style.display = 'none';
    Alain Reguera Delgado 46de3c
    var e = document.getElementById('searchinput');
    Alain Reguera Delgado 46de3c
    searchChange(e);
    Alain Reguera Delgado 46de3c
    searchBlur(e);
    Alain Reguera Delgado 46de3c
    //-->
    Alain Reguera Delgado 46de3c
    </script>
    Alain Reguera Delgado 46de3c
    ''' % d
    Alain Reguera Delgado 46de3c
            return html
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    # The following code make the navibar visible to users with
    Alain Reguera Delgado 46de3c
    # write access right ONLY!.
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
        def shouldShowEditbar(self, page):
    Alain Reguera Delgado 46de3c
            """ Hide the edit bar if you can't edit """
    Alain Reguera Delgado 46de3c
            if self.request.user.may.write(page.page_name):
    Alain Reguera Delgado 46de3c
                return ThemeBase.shouldShowEditbar(self, page)
    Alain Reguera Delgado 46de3c
            return False
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
    # The follwing code is just to use class instead of id in
    Alain Reguera Delgado 46de3c
    # the navibar element. It is not recommended by CCS v2.1
    Alain Reguera Delgado 46de3c
    # standard the use of two equals id elements on the same
    Alain Reguera Delgado 46de3c
    # page.
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
        def navibar(self, d):
    Alain Reguera Delgado 46de3c
            """ Assemble the navibar
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
            @param d: parameter dictionary
    Alain Reguera Delgado 46de3c
            @rtype: unicode
    Alain Reguera Delgado 46de3c
            @return: navibar html
    Alain Reguera Delgado 46de3c
            """
    Alain Reguera Delgado 46de3c
            request = self.request
    Alain Reguera Delgado 46de3c
            found = {} # pages we found. prevent duplicates
    Alain Reguera Delgado 46de3c
            items = [] # navibar items
    Alain Reguera Delgado 46de3c
            item = u'
  • %s
  • '
    Alain Reguera Delgado 46de3c
            current = d['page_name']
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
            # Process config navi_bar
    Alain Reguera Delgado 46de3c
            if request.cfg.navi_bar:
    Alain Reguera Delgado 46de3c
                for text in request.cfg.navi_bar:
    Alain Reguera Delgado 46de3c
                    pagename, link = self.splitNavilink(text)
    Alain Reguera Delgado 46de3c
                    if pagename == current:
    Alain Reguera Delgado 46de3c
                        cls = 'wikilink current'
    Alain Reguera Delgado 46de3c
                    else:
    Alain Reguera Delgado 46de3c
                        cls = 'wikilink'
    Alain Reguera Delgado 46de3c
                    items.append(item % (cls, link))
    Alain Reguera Delgado 46de3c
                    found[pagename] = 1
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
            # Add user links to wiki links, eliminating duplicates.
    Alain Reguera Delgado 46de3c
            userlinks = request.user.getQuickLinks()
    Alain Reguera Delgado 46de3c
            for text in userlinks:
    Alain Reguera Delgado 46de3c
                # Split text without localization, user knows what he wants
    Alain Reguera Delgado 46de3c
                pagename, link = self.splitNavilink(text, localize=0)
    Alain Reguera Delgado 46de3c
                if not pagename in found:
    Alain Reguera Delgado 46de3c
                    if pagename == current:
    Alain Reguera Delgado 46de3c
                        cls = 'userlink current'
    Alain Reguera Delgado 46de3c
                    else:
    Alain Reguera Delgado 46de3c
                        cls = 'userlink'
    Alain Reguera Delgado 46de3c
                    items.append(item % (cls, link))
    Alain Reguera Delgado 46de3c
                    found[pagename] = 1
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
            # Add current page at end
    Alain Reguera Delgado 46de3c
            if not current in found:
    Alain Reguera Delgado 46de3c
                title = d['page'].split_title(request)
    Alain Reguera Delgado 46de3c
                title = self.shortenPagename(title)
    Alain Reguera Delgado 46de3c
                link = d['page'].link_to(request, title)
    Alain Reguera Delgado 46de3c
                cls = 'current'
    Alain Reguera Delgado 46de3c
                items.append(item % (cls, link))
    Alain Reguera Delgado 46de3c
    Alain Reguera Delgado 46de3c
            # Assemble html
    Alain Reguera Delgado 46de3c
            items = u''.join(items)
    Alain Reguera Delgado 46de3c
            html = u'''
    Alain Reguera Delgado 46de3c
      Alain Reguera Delgado 46de3c
      %s
      Alain Reguera Delgado 46de3c
      Alain Reguera Delgado 46de3c
      ''' % items
      Alain Reguera Delgado 46de3c
              return html
      Alain Reguera Delgado 46de3c
      Alain Reguera Delgado 46de3c
      def execute(request):
      Alain Reguera Delgado 46de3c
          """ Generate and return a theme object
      Alain Reguera Delgado 46de3c
              
      Alain Reguera Delgado 46de3c
          @param request: the request object
      Alain Reguera Delgado 46de3c
          @rtype: MoinTheme
      Alain Reguera Delgado 46de3c
          @return: Theme object
      Alain Reguera Delgado 46de3c
          """
      Alain Reguera Delgado 46de3c
          return Theme(request)