Search code examples
pythontemplatestracgenshi

Genshi auto load css/js need exclude specific file


I'm making a bootstrap theme for Trac installation. This is my first time using Genshi so please be patient :)

So I've following:

<head py:match="head" py:attrs="select('@*')">
      ${select('*|comment()|text()')}
      <link rel="stylesheet" type="text/css" href="${chrome.htdocs_location}css/bootstrap.min.css" />
      <link rel="stylesheet" type="text/css" href="${chrome.htdocs_location}css/style.css" />
</head>

This loads my custom css, but JS/css that trac needs to use.

So result is this:

      <link rel="help" href="/pixelperfect/wiki/TracGuide" />
      <link rel="start" href="/pixelperfect/wiki" />
      <link rel="stylesheet" href="/pixelperfect/chrome/common/css/trac.css" type="text/css" />
      <link rel="stylesheet" href="/pixelperfect/chrome/common/css/wiki.css" type="text/css" />
      <link rel="stylesheet" type="text/css" href="/pixelperfect/chrome/common/css/bootstrap.min.css" />
      <link rel="stylesheet" type="text/css" href="/pixelperfect/chrome/common/css/style.css" />

All is good, except that I would like to exclude trac.css out of there completely.

So my question is twofold: 1. How does genshi know what to load? Where is the manfest of all css/js files that it displays. 2. Is it genshi or python doing this?

Any help and relevant reading appreciated! :)

Thanks!


Solution

  • On 1: The information on CSS files is accumulated in the 'links' dictionary of a request's Chrome property (req.chrome['links']), for JS files it is the 'scripts' dictionary. See add_link and add_script functions from trac.web.chrome respectively.

    The default style sheet is added to the Chrome object directly. See the add_stylesheet call in trac.web.chrome.Chrome.prepare_request() method.

    On 2: Its part of the Request object, that is processed by Genshi. Preparation is done in Python anyway, but it is in the Trac Python scripts domain rather than in Genshi Python scripts.