Hi,

I have some more suggestions for how we might provide limited support for plugin templates to allow them to blend in a little easier with our theme.

https://issues.apache.org/bloodhound/ticket/88 contains the initial suggestion, including a helper function to help add classes to elements and applying it to tables.

https://issues.apache.org/bloodhound/ticket/36 begins to look at buttons with the same approach.

If this idea is seen as having merit and appears to work then further tickets should be raised for other predictable conversions.

Cheers,
    Gary


On 25/05/12 01:29, Apache Bloodhound wrote:
#88: Generic conversions of tables to bootstrap
--------------------------+-----------------
   Reporter:  gjm          |      Owner:  gjm
       Type:  enhancement  |     Status:  new
   Priority:  major        |  Milestone:
  Component:  dashboard    |    Version:
Resolution:               |   Keywords:
--------------------------+-----------------

Comment (by gjm):

  Part of the barrier to doing this is a simple way of adding the bootstrap
  classes to objects - it is useful to make this fairly simple so that it is
  reusable for other conversions. The following might suffice as a starting
  point.

  {{{
  #!diff
  Index: trunk/bloodhound_theme/bhtheme/theme.py
  ===================================================================
  --- trunk/bloodhound_theme/bhtheme/theme.py     (revision 1341781)
  +++ trunk/bloodhound_theme/bhtheme/theme.py     (working copy)
  @@ -105,6 +106,21 @@
       def post_process_request(self, req, template, data, content_type):
           """Post process request filter.
           Removes all trac provided css if required"""
  +        def add_classes(attributes,*args):
  +            """Helper function to add classes to the existing attributes
  found
  +            by a select('@*') or similar. Example use:
  +<element py:attrs="add_classes(select('@*'), 'cl1', 'cl2')"/>
  +            """
  +            attrib_list = list(attributes)
  +            if attrib_list:
  +                attrs = dict(list(attrib_list[0]))
  +            else:
  +                attrs = {}
  +            if len(args):
  +                attrs['class'] = ' '.join((attrs.get('class',''),) +
  args)
  +            return attrs
  +        data['add_classes'] = add_classes
  +
           def is_active_theme():
               is_active = False
               active_theme = ThemeEngineSystem(self.env).theme
  }}}

  Using this, it is then possible to transform unconverted tables with
  something like this:

  {{{
  #!diff
  Index: trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html
  ===================================================================
  --- trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html
  (revision 1341816)
  +++ trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html
  (working copy)
  @@ -252,4 +252,30 @@
     </body></py:match>

     <xi:include href="bh_admin.html" py:with="bh_fix_legacy = True"/>
  +
  +<py:match path="table[not(contains(@class,'table'))]" once="false"
  buffer="true">
  +<table py:attrs="add_classes(select('@*'), 'table', 'table-striped',
  'table-bordered', 'table-condensed')">
  +      ${select('*|text()|comment()')}
  +</table>
  +</py:match>
  +
   </html>
  }}}

  Similar conversions could be applied for buttons and other common
  interface pieces but these should be considered in separate tickets.

  Comments appreciated.


Reply via email to