[z3-checkins] r5575 - z3/www/trunk

faassen at codespeak.net faassen at codespeak.net
Wed Jul 14 19:44:55 MEST 2004


Author: faassen
Date: Wed Jul 14 19:44:53 2004
New Revision: 5575

Modified:
   z3/www/trunk/mkwebsite.py
Log:
Massive refactoring to support more easy creation of subsites and
auto-updating of various links.


Modified: z3/www/trunk/mkwebsite.py
==============================================================================
--- z3/www/trunk/mkwebsite.py	(original)
+++ z3/www/trunk/mkwebsite.py	Wed Jul 14 19:44:53 2004
@@ -8,59 +8,121 @@
             'http://codespeak.net/svn/z3/%s/trunk/%s' % (package, path)),
             name)
 
+class Site(publish.Website):
+    def __init__(self, path, root_project, css_link):
+        publish.Website.__init__(self, path)
+        self._root = root_project
+        self._projects = []
+        self._css_link = css_link
+        
+    def registerProject(self, project):
+        self._projects.append(project)
+       
+    def getMainProjectLinks(self):
+        result = [(self._root.getShortTitle(), 'index.html')]
+        for project in self._projects:
+            result.append((project.getShortTitle(), project.getName()))
+        return result
+    
+    def getProjectLinks(self):
+        result = []
+        for title, link in self.getMainProjectLinks():
+            if link == 'index.html':
+                link = '..'
+            else:
+                link = '../' + link
+            result.append((title, link))
+        return result
+
+    def getRootLayouter(self):
+        # layouter for pages in the website root
+        return publish.FileSimpleLayouter(
+            self._root.getTemplatePath(),
+            style=self._css_link,
+            banner=self._root.getBannerLink(),
+            site_links=self.getMainProjectLinks(),
+            )
+    
+    def getProjectLayouter(self, project):
+        # layouter for pages in directories under root
+        banner_link = project.getBannerLink()
+        if banner_link is None:
+            banner_link = '../' + self._root.getBannerLink()
+        return publish.FileSimpleLayouter(
+            project.getTemplatePath(),
+            style='../' + self._css_link,
+            banner=banner_link,
+            site_links=self.getProjectLinks(),
+            )
+
+    def construct(self):
+        self._root.construct(self)
+        for project in self._projects:
+            project.construct(self)
+            
+class Project:
+    def __init__(self, name, short_title, title, factory,
+                 template_path=None, banner_link=None):
+        self._name = name
+        self._short_title = short_title
+        self._title = title
+        self._factory = factory
+        self._template_path = template_path
+        self._banner_link = banner_link
+        
+    def getName(self):
+        return self._name
+
+    def getShortTitle(self):
+        return self._short_title
+    
+    def getTitle(self):
+        return self._title
+
+    def getTemplatePath(self):
+        return self._template_path
+    
+    def getBannerLink(self):
+        return self._banner_link
+    
+    def construct(self, site):
+        self._factory(site, self)
+        
 def createWebSite(path):
     """Create the website from various resources, and save.
 
     path - directory to store the created website.
     """
 
-    # the project links
-    main_project_links = [
-        ('Z3 Base', 'index.html'),
-        ('Five', 'five'),
-        ]
+    root = Project('z3 base', 'Z3 Base', 'Zope 3 Base', root_site,
+                   'layout/main_layout.html', 'z3-banner.png')
     
-    # layouter for pages in the website root
-    main_layouter = publish.FileSimpleLayouter(
-        'layout/main_layout.html',
-        style='style.css',
-        banner='z3-banner.png',
-        site_links=main_project_links,
-        )
+    site = Site(path, root, 'style.css')
 
-    # construct project links for pages under main from main_project_links
-    project_links = []
-    for name, link in main_project_links:
-        if link == 'index.html':
-            link = '..'
-        else:
-            link = '../' + link
-        project_links.append((name, link))
-
-    # layouter for pages in directories under root
-    page_layouter = publish.FileSimpleLayouter(
+    five = Project(
+        'five', 'Five', 'Five: Zope 3 in Zope 2',
+        five_site,
         'layout/layout.html',
-        style='../style.css',
-        banner='../z3-banner.png',
-        site_links=project_links,
-        )
+        'five-banner.png')
     
-    # layouter for redirect pages
-    redirect_layouter = publish.FileSimpleLayouter(
-        'layout/redirect.html',
-        style='style.css',
-        banner='z3-banner.png',
-        site_links=project_links,
-        )
-
-    # create a website object
-    website = publish.Website(path)
+    site.registerProject(five)
+    
+    modzope = Project(
+        'modzope', 'modzope', 'modzope: Zope 3 integrated into Apache',
+        modzope_site,
+        'layout/layout.html')
+    
+    site.registerProject(modzope)
 
-    # site root
-    # *********
+    # construct site
+    site.construct()
     
+    # save site to disk
+    site.save()
+
+def root_site(site, project):
     # register essential resources in root of site
-    website.registerResources(
+    site.registerResources(
         [
         publish.FileResource('resource/style.css'),
         publish.FileResource('resource/z3-banner.png'),
@@ -71,7 +133,7 @@
         )
 
     # register pages for root of site
-    main_quick_links = [
+    quick_links = [
         ('svn (the code)',
          'http://codespeak.net/svn/z3/'),
 
@@ -79,17 +141,26 @@
          'http://codespeak.net/mailman/listinfo/z3-checkins'),
         ]
     
-    website.registerPages(
+    site.registerPages(
         [
         publish.FileRstPage('text/index.txt'),
         ],
-        main_layouter,
+        site.getRootLayouter(),
         '.',
-        quick_links=main_quick_links,
+        quick_links=quick_links,
         )
-
+   
     # redirect old five page
-    website.registerPages(
+
+    # layouter for redirect pages
+    redirect_layouter = publish.FileSimpleLayouter(
+        'layout/redirect.html',
+        style='style.css',
+        banner=project.getBannerLink(),
+        site_links=site.getProjectLinks(),
+        )
+
+    site.registerPages(
         [
         publish.SimplePage('five'),
         ],
@@ -98,35 +169,23 @@
         url='http://codespeak.net/z3/five',
         )
 
-    # five
-    # ****
-    
-    # construct five subsite
-
+def five_site(site, project):    
     # special banner resource for five
-    website.registerResources(
+    site.registerResources(
         [
         publish.FileResource('resource/five-banner.png'),
         ],
-        'five',
-        )
-
-    # special layouter for five
-    five_page_layouter = publish.FileSimpleLayouter(
-        'layout/layout.html',
-        style='../style.css',
-        banner='five-banner.png',
-        site_links=project_links,
+        project.getName(),
         )
 
-    five_nav_links = [
+    nav_links = [
         ('Five main', 'index.html'),
         ('Features', 'features.html'),
         ('Directives', 'directives.html'),
         ('Manual', 'manual.html')
         ]
 
-    five_quick_links = [
+    quick_links = [
         ('svn (the code)',
          'http://codespeak.net/svn/z3/Five/'),
 
@@ -137,44 +196,39 @@
          'http://codespeak.net/mailman/listinfo/z3-checkins'),
         ]
     
-    website.registerPages(
+    site.registerPages(
         [
         Z3Page('Five', 'doc/main.txt', 'index'),
         Z3Page('Five', 'doc/features.txt'),
         Z3Page('Five', 'doc/directives.txt'),
         Z3Page('Five', 'doc/manual.txt'),
         ],
-        five_page_layouter,
-        'five',
-        nav_links=five_nav_links,
-        quick_links=five_quick_links,
-        )
-
-    # modzope
-    # *******
-    
-    modzope_nav_links = [
+        site.getProjectLayouter(project),
+        project.getName(),
+        nav_links=nav_links,
+        quick_links=quick_links,
+        )
+ 
+def modzope_site(site, project):
+    nav_links = [
         ('modzope main', 'index.html'),
         ]
-
-    modzope_quick_links = [
+    
+    quick_links = [
         ('svn (the code)',
          'http://codespeak.net/svn/z3/modzope/'),
         ]
     
-    website.registerPages(
+    site.registerPages(
         [
         Z3Page('modzope', 'README.txt', 'index'),
         ],
-        page_layouter,
-        'modzope',
-        nav_links=modzope_nav_links,
-        quick_links=modzope_quick_links,
+        site.getProjectLayouter(project),
+        project.getName(),
+        nav_links=nav_links,
+        quick_links=quick_links,
         )
     
-    # finally, save website
-    website.save()
-
 def main():
     import sys
     try:


More information about the z3-checkins mailing list