Changeset 1678

Show
Ignore:
Timestamp:
12/13/06 01:27:58 (2 years ago)
Author:
coderanger
Message:

ThemeEnginePlugin:

Got the basics working.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • themeengineplugin/0.10/setup.py

    r1677 r1678  
    88    version = '1.0', 
    99    packages = ['themeengine'], 
    10     package_data = { 'themeengine': [ 'templates/*.cs', 'htdocs/*.png' ] }, 
     10    package_data = { 'themeengine': [ 'templates/*.cs', 'templates/header/*.cs', 'templates/footer/*.cs', 'htdocs/*.css' ] }, 
    1111 
    1212    author = "Noah Kantrowitz", 
  • themeengineplugin/0.10/themeengine/filter.py

    r1677 r1678  
    11from trac.core import * 
    22from trac.config import Option 
    3 from trac.web.chrome import ITemplateProvider 
    4 from trac.web.api import IRequestFilter 
     3from trac.web.chrome import ITemplateProvider, add_link 
     4from trac.web.api import IRequestFilter, IRequestHandler 
    55from trac.util.html import Markup 
    66 
    77import os 
    88from pkg_resources import resource_filename 
     9try: 
     10    set = set 
     11except ImportError: 
     12    from sets import Set as set 
     13 
    914 
    1015from api import IThemeProvider, NullTheme 
     
    2934    providers = ExtensionPoint(IThemeProvider) 
    3035     
    31     implements(IRequestFilter, ITemplateProvider) 
     36    implements(IRequestFilter, IRequestHandler, ITemplateProvider) 
    3237     
    3338    def __init__(self): 
     
    3641        for provider in self.providers: 
    3742            for name in provider.get_theme_names(): 
    38                 self.info[name] = provider.get_theme_info(name) 
    39                 self.info[name]['provider'] = provider 
    40                 self.info[name]['module'] = provider.__class__.__module__ 
     43                theme = provider.get_theme_info(name) 
     44                theme['provider'] = provider 
     45                theme['module'] = provider.__class__.__module__ 
     46                 
     47                folders = set() 
     48                for t in ('header', 'footer', 'css'): 
     49                    if t in theme: 
     50                        dir, file = os.path.split(resource_filename(theme['module'], theme[t])) 
     51                        folders.add(dir) 
     52                        theme[t] = file 
     53                self.log.debug('ThemeEngine: folders are %s', ', '.join(folders)) 
     54                theme['folders'] = list(folders) 
     55                 
     56                self.info[name] = theme 
    4157 
    4258    # IRequestFilter methods 
     
    4965            return template, content_type # No theme, early bail out 
    5066 
    51         self._do_template(req, 'header') 
    52         self._do_template(req, 'footer') 
    53                      
     67        self._alter_loadpaths(req.hdf, theme['folders']) 
     68        #self._alter_loadpaths(req.hdf, resource_filename(__name__, 'templates')) 
     69        if 'header' in theme and theme['header'] != 'header.cs': 
     70            self._alter_loadpaths(req.hdf, resource_filename(__name__, 'templates/header')) 
     71        if 'footer' in theme and theme['footer'] != 'footer.cs': 
     72            self._alter_loadpaths(req.hdf, resource_filename(__name__, 'templates/footer')) 
     73        if 'css' in theme: 
     74            add_link(req, 'stylesheet', req.href.themeengine('theme.css'), mimetype='text/css') 
     75 
     76        req.hdf['themeengine'] = theme 
     77                         
    5478        return template, content_type 
     79 
     80    # IRequestHandler methods 
     81    def match_request(self, req): 
     82        return req.path_info == '/themeengine/theme.css' 
     83         
     84    def process_request(self, req): 
     85        self._alter_loadpaths(req.hdf, self.theme['folders']) 
     86        return self.theme['css'], 'text/css' 
    5587 
    5688    # ITemplateProvider methods 
     
    6193         
    6294    def get_htdocs_dirs(self): 
    63         from pkg_resources import resource_filename 
    6495        yield ('themeengine', resource_filename(__name__, 'htdocs')) 
    6596        if self.theme and 'htdocs' in self.theme:  
     
    77108            node = node.next() 
    78109        if prepend: 
    79             paths += old_paths 
     110            paths = paths + old_paths 
    80111        hdf.removeTree('hdf.loadpaths') 
    81112        hdf['hdf.loadpaths'] = paths 
  • themeengineplugin/0.10/themeengine/templates/footer/footer.cs

    r1677 r1678  
    1 <?cs var:themeengine.footer ?> 
     1<?cs linclude:themeengine.footer ?> 
  • themeengineplugin/0.10/themeengine/templates/header/header.cs

    r1677 r1678  
    1 <?cs var:themeengine.header ?> 
     1<?cs linclude:themeengine.header ?>