Django

Code

Changeset 4961

Show
Ignore:
Timestamp:
04/08/07 20:22:45 (1 year ago)
Author:
adrian
Message:

Fixed #3929 -- Newforms Textarea widget now always includes 'rows' and 'cols' attributes, even if you don't pass them in, for HTML correctness. Thanks, and welcome back, Luke Plant

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/newforms/widgets.py

    r4918 r4961  
    122122 
    123123class Textarea(Widget): 
     124    def __init__(self, attrs=None): 
     125        # The 'rows' and 'cols' attributes are required for HTML correctness. 
     126        self.attrs = {'cols': '40', 'rows': '10'} 
     127        if attrs: 
     128            self.attrs.update(attrs) 
     129 
    124130    def render(self, name, value, attrs=None): 
    125131        if value is None: value = '' 
  • django/trunk/tests/modeltests/model_forms/models.py

    r4796 r4961  
    160160<option value="2">Bob Woodward</option> 
    161161</select></td></tr> 
    162 <tr><th>Article:</th><td><textarea name="article"></textarea></td></tr> 
     162<tr><th>Article:</th><td><textarea rows="10" cols="40" name="article"></textarea></td></tr> 
    163163<tr><th>Categories:</th><td><select multiple="multiple" name="categories"> 
    164164<option value="1">Entertainment</option> 
     
    200200<option value="2">Bob Woodward</option> 
    201201</select></li> 
    202 <li>Article: <textarea name="article">Hello.</textarea></li> 
     202<li>Article: <textarea rows="10" cols="40" name="article">Hello.</textarea></li> 
    203203<li>Categories: <select multiple="multiple" name="categories"> 
    204204<option value="1">Entertainment</option> 
     
    232232<option value="2">Bob Woodward</option> 
    233233</select></li> 
    234 <li>Article: <textarea name="article">Hello.</textarea></li> 
     234<li>Article: <textarea rows="10" cols="40" name="article">Hello.</textarea></li> 
    235235<li>Categories: <select multiple="multiple" name="categories"> 
    236236<option value="1" selected="selected">Entertainment</option> 
     
    310310<option value="2">Bob Woodward</option> 
    311311</select></li> 
    312 <li>Article: <textarea name="article"></textarea></li> 
     312<li>Article: <textarea rows="10" cols="40" name="article"></textarea></li> 
    313313<li>Categories: <select multiple="multiple" name="categories"> 
    314314<option value="1">Entertainment</option> 
     
    329329<option value="3">Carl Bernstein</option> 
    330330</select></li> 
    331 <li>Article: <textarea name="article"></textarea></li> 
     331<li>Article: <textarea rows="10" cols="40" name="article"></textarea></li> 
    332332<li>Categories: <select multiple="multiple" name="categories"> 
    333333<option value="1">Entertainment</option> 
  • django/trunk/tests/regressiontests/forms/tests.py

    r4930 r4961  
    194194>>> w = Textarea() 
    195195>>> w.render('msg', '') 
    196 u'<textarea name="msg"></textarea>' 
     196u'<textarea rows="10" cols="40" name="msg"></textarea>' 
    197197>>> w.render('msg', None) 
    198 u'<textarea name="msg"></textarea>' 
     198u'<textarea rows="10" cols="40" name="msg"></textarea>' 
    199199>>> w.render('msg', 'value') 
    200 u'<textarea name="msg">value</textarea>' 
     200u'<textarea rows="10" cols="40" name="msg">value</textarea>' 
    201201>>> w.render('msg', 'some "quoted" & ampersanded value') 
    202 u'<textarea name="msg">some &quot;quoted&quot; &amp; ampersanded value</textarea>' 
    203 >>> w.render('msg', 'value', attrs={'class': 'pretty'}) 
    204 u'<textarea name="msg" class="pretty">value</textarea>' 
     202u'<textarea rows="10" cols="40" name="msg">some &quot;quoted&quot; &amp; ampersanded value</textarea>' 
     203>>> w.render('msg', 'value', attrs={'class': 'pretty', 'rows': 20}) 
     204u'<textarea class="pretty" rows="20" cols="40" name="msg">value</textarea>' 
    205205 
    206206You can also pass 'attrs' to the constructor: 
    207207>>> w = Textarea(attrs={'class': 'pretty'}) 
    208208>>> w.render('msg', '') 
    209 u'<textarea class="pretty" name="msg"></textarea>' 
     209u'<textarea rows="10" cols="40" name="msg" class="pretty"></textarea>' 
    210210>>> w.render('msg', 'example') 
    211 u'<textarea class="pretty" name="msg">example</textarea>' 
     211u'<textarea rows="10" cols="40" name="msg" class="pretty">example</textarea>' 
    212212 
    213213'attrs' passed to render() get precedence over those passed to the constructor: 
    214214>>> w = Textarea(attrs={'class': 'pretty'}) 
    215215>>> w.render('msg', '', attrs={'class': 'special'}) 
    216 u'<textarea class="special" name="msg"></textarea>' 
     216u'<textarea rows="10" cols="40" name="msg" class="special"></textarea>' 
    217217 
    218218>>> w.render('msg', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}) 
    219 u'<textarea class="fun" name="msg">\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</textarea>' 
     219u'<textarea rows="10" cols="40" name="msg" class="fun">\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</textarea>' 
    220220 
    221221# CheckboxInput Widget ######################################################## 
     
    19671967<input type="text" name="subject" /> 
    19681968>>> print f['message'] 
    1969 <textarea name="message"></textarea> 
     1969<textarea rows="10" cols="40" name="message"></textarea> 
    19701970 
    19711971as_textarea(), as_text() and as_hidden() are shortcuts for changing the output 
    19721972widget type: 
    19731973>>> f['subject'].as_textarea() 
    1974 u'<textarea name="subject"></textarea>' 
     1974u'<textarea rows="10" cols="40" name="subject"></textarea>' 
    19751975>>> f['message'].as_text() 
    19761976u'<input type="text" name="message" />' 
     
    19921992>>> f = ContactForm({'subject': 'Hello', 'message': 'I love you.'}, auto_id=False) 
    19931993>>> f['subject'].as_textarea() 
    1994 u'<textarea name="subject">Hello</textarea>' 
     1994u'<textarea rows="10" cols="40" name="subject">Hello</textarea>' 
    19951995>>> f['message'].as_text() 
    19961996u'<input type="text" name="message" value="I love you." />'