Description

Including a databrowser widget will break the autofilter javascript because of the ID qualification done in the html formatter (id = self.qualify_id(id)).

Steps to reproduce

  1. put a databrowser widget with autofilter on a page
  2. include it on another page

Example

http://wireless.kernel.org/en/users/Drivers/ar9170#availabledevices

(fixed by the patch below though)

Component selection

Details

MoinMoin Version

1.8rc1

OS and Version

Python Version

Server Setup

Server Details

Language you are using the wiki in (set in the browser/UserPreferences)

Workaround

N/A

Discussion

   1 ---
   2  MoinMoin/widget/browser.py      |    8 +++++---
   3  wiki/htdocs/common/js/common.js |    2 +-
   4  2 files changed, 6 insertions(+), 4 deletions(-)
   5 
   6 --- moin.orig/MoinMoin/widget/browser.py	2009-01-16 13:27:31.000000000 +0100
   7 +++ moin/MoinMoin/widget/browser.py	2009-01-16 13:29:29.000000000 +0100
   8 @@ -15,7 +15,8 @@ class DataBrowserWidget(base.Widget):
   9          _ = request.getText
  10          base.Widget.__init__(self, request, **kw)
  11          self.data = None
  12 -        self.data_id = 'dbw.'
  13 +        self.unqual_data_id = 'dbw.'
  14 +        self.data_id = request.formatter.qualify_id(self.unqual_data_id)
  15          # prefixed with __ are untranslated and to be used in the JS
  16          self._all = _('[all]')
  17          self.__all = '[all]'
  18 @@ -37,7 +38,8 @@ class DataBrowserWidget(base.Widget):
  19          """
  20          self.data = dataset
  21          if dataset.data_id:
  22 -            self.data_id = 'dbw.%s.' % dataset.data_id
  23 +            self.unqual_data_id = 'dbw.%s.' % dataset.data_id
  24 +            self.data_id = self.request.formatter.qualify_id(self.unqual_data_id)
  25  
  26      def _name(self, elem):
  27          """ return name tag for a HTML element
  28 @@ -115,7 +117,7 @@ class DataBrowserWidget(base.Widget):
  29          if havefilters:
  30              result.append(fmt.rawHTML('<input type="submit" value="%s" %s>' % (self._filter, self._name('submit'))))
  31  
  32 -        result.append(fmt.table(1, id='%stable' % self.data_id))
  33 +        result.append(fmt.table(1, id='%stable' % self.unqual_data_id))
  34  
  35          # add header line
  36          if self._show_header:
  37 --- moin.orig/wiki/htdocs/common/js/common.js	2009-01-16 13:27:31.000000000 +0100
  38 +++ moin/wiki/htdocs/common/js/common.js	2009-01-16 13:29:29.000000000 +0100
  39 @@ -302,7 +302,7 @@ function dbw_hide_buttons() {
  40              elem = form.elements[eidx];
  41              name = elem.name;
  42              if (name) {
  43 -                if (name.substr(0,4) == 'dbw.' && name.substr(-7) == '.submit')
  44 +                if (name.indexOf('dbw.') >= 0 && name.substr(-7) == '.submit')
  45                      elem.style.display = 'none';
  46              }
  47          }
dbwfix.patch

Plan


CategoryMoinMoinBugFixed

MoinMoin: MoinMoinBugs/IncludingDataBrowserWidgetBreaksJavascript (last edited 2009-01-16 12:44:46 by 131)