Changes between Version 5 and Version 6 of EggCookingTutorial/AdvancedEggCooking2


Ignore:
Timestamp:
Sep 5, 2005, 4:37:44 AM (9 years ago)
Author:
gotoh
Comment:

updated to adapt to new ITemplateProvider and added the whole of final code.

Legend:

Unmodified
Added
Removed
Modified
  • EggCookingTutorial/AdvancedEggCooking2

    v5 v6  
    5757Trac doesn't know where our fine stylesheet and image is located. So you have to tell it to Trac.
    5858
    59 Add static data path to end of our plugin in file ''helloworld.py'':
     59Add the following code at the tail in file ''helloworld.py'' which
     60implements {{{get_htdocs_dir()}}} to tell the static data path information for this plugin
     61with identical prefix 'helloworld'.
    6062{{{
    6163#!python
    62     def get_htdocs_dir(self):
     64    def get_htdocs_dirs(self):
    6365        """
    64         Return the absolute path of a directory containing additional
    65         static resources (such as images, style sheets, etc).
     66        Return a list of directories with static resources (such as style
     67        sheets, images, etc.)
     68
     69        Each item in the list must be a `(prefix, abspath)` tuple. The
     70        `prefix` part defines the path in the URL that requests to these
     71        resources are prefixed with.
     72       
     73        The `abspath` is the absolute path to the directory containing the
     74        resources on the local file system.
    6675        """
    6776        from pkg_resources import resource_filename
    68         return resource_filename(__name__, 'htdocs')   
     77        return [('helloworld', resource_filename(__name__, 'htdocs'))]
    6978}}}
    7079
     
    7584#!python
    7685    def process_request(self, req):
     86        add_stylesheet(req, 'helloworld/css/helloworld.css')
     87        return 'helloworld.cs', None
     88}}}
     89Note that prefix path 'helloworld/' specified by {{{get_htdocs_dirs()}}} should be used.
     90
     91And also import {{{add_stylesheet()}}} at the beginning of ''helloworld.py''.
     92{{{
     93#!python
     94from trac.web.chrome import INavigationContributor, ITemplateProvider, add_stylesheet
     95}}}
     96
     97== Complete version of code ==
     98The whole of final code is here:
     99{{{
     100#!python
     101# Helloworld plugin
     102
     103from trac.core import *
     104from trac.web.chrome import INavigationContributor, ITemplateProvider, add_stylesheet
     105from trac.web.main import IRequestHandler
     106from trac.util import escape
     107
     108class UserbaseModule(Component):
     109    implements(INavigationContributor, IRequestHandler, ITemplateProvider)
     110       
     111    # INavigationContributor methods
     112    def get_active_navigation_item(self, req):
     113        return 'helloworld'
     114               
     115    def get_navigation_items(self, req):
     116        yield 'mainnav', 'helloworld', '<a href="%s">Hello</a>' \
     117                                       % escape(self.env.href.helloworld())
     118       
     119    # IRequestHandler methods
     120    def match_request(self, req):
     121        return req.path_info == '/helloworld'
     122                                       
     123    def process_request(self, req):
    77124        add_stylesheet(req, 'css/helloworld.css')
    78125        return 'helloworld.cs', None
     126               
     127    # ITemplateProvider methods
     128    def get_templates_dirs(self):
     129        """
     130        Return the absolute path of the directory containing the provided
     131        ClearSilver templates.
     132        """
     133        from pkg_resources import resource_filename
     134        return [resource_filename(__name__, 'templates')]
     135   
     136    def get_htdocs_dirs(self):
     137        """
     138        Return a list of directories with static resources (such as style
     139        sheets, images, etc.)
     140
     141        Each item in the list must be a `(prefix, abspath)` tuple. The
     142        `prefix` part defines the path in the URL that requests to these
     143        resources are prefixed with.
     144       
     145        The `abspath` is the absolute path to the directory containing the
     146        resources on the local file system.
     147        """
     148        from pkg_resources import resource_filename
     149        return [('helloworld', resource_filename(__name__, 'htdocs'))]
    79150}}}
    80151