# HG changeset patch # User cmlenz # Date 1178187896 0 # Node ID 3549279963ea7f0d5232da2f32d4ddc08c01c524 # Parent e16a3a3862e716b2193d585758b33e32e5fc01dd Ported [571] to 0.4.x. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -17,6 +17,8 @@ function with multiple string arguments (such as ``ngettext``), a single item with a tuple of strings is yielded, instead an item for each string argument. + * The `HTMLFormFiller` stream filter no longer alters form elements for which + the data element contains no corresponding item. Version 0.4 diff --git a/genshi/filters/html.py b/genshi/filters/html.py --- a/genshi/filters/html.py +++ b/genshi/filters/html.py @@ -88,8 +88,8 @@ type = attrs.get('type') if type in ('checkbox', 'radio'): name = attrs.get('name') - if name: - value = self.data.get(name) + if name and name in self.data: + value = self.data[name] declval = attrs.get('value') checked = False if isinstance(value, (list, tuple)): @@ -109,22 +109,24 @@ attrs -= 'checked' elif type in (None, 'hidden', 'text'): name = attrs.get('name') - if name: - value = self.data.get(name) + if name and name in self.data: + value = self.data[name] if isinstance(value, (list, tuple)): value = value[0] if value is not None: attrs |= [(QName('value'), unicode(value))] elif tagname == 'select': name = attrs.get('name') - select_value = self.data.get(name) - in_select = True + if name in self.data: + select_value = self.data[name] + in_select = True elif tagname == 'textarea': name = attrs.get('name') - textarea_value = self.data.get(name) - if isinstance(textarea_value, (list, tuple)): - textarea_value = textarea_value[0] - in_textarea = True + if name in self.data: + textarea_value = self.data.get(name) + if isinstance(textarea_value, (list, tuple)): + textarea_value = textarea_value[0] + in_textarea = True elif in_select and tagname == 'option': option_start = kind, data, pos option_value = attrs.get('value') @@ -132,7 +134,6 @@ continue yield kind, (tag, attrs), pos - elif in_form and kind is TEXT: if in_select and in_option: if option_value is None: