diff --git a/trac/ticket/api.py b/trac/ticket/api.py
|
a
|
b
|
|
| 264 | 264 | 'type': config.get(name), |
| 265 | 265 | 'order': config.getint(name + '.order', 0), |
| 266 | 266 | 'label': config.get(name + '.label') or name.capitalize(), |
| | 267 | 'hint': config.get(name + '.hint') or None, |
| 267 | 268 | 'value': config.get(name + '.value', '') |
| 268 | 269 | } |
| 269 | 270 | if field['type'] == 'select' or field['type'] == 'radio': |
diff --git a/trac/ticket/templates/ticket.html b/trac/ticket/templates/ticket.html
|
a
|
b
|
|
| 303 | 303 | <py:for each="idx, field in enumerate(row)" |
| 304 | 304 | py:with="value = ticket.get_value_or_default(field.name)"> |
| 305 | 305 | <th class="col${idx + 1}" py:if="idx == 0 or not fullrow"> |
| 306 | | <label for="field-${field.name}" py:if="field" |
| 307 | | py:strip="field.type == 'radio'">${field.edit_label or field.label or field.name}:</label> |
| | 306 | <label for="${field.type != 'radio' and ('field-' + field.name) or None}" |
| | 307 | py:if="field">${field.edit_label or field.label or field.name}:</label> |
| 308 | 308 | </th> |
| 309 | 309 | <td class="col${idx + 1}" py:if="idx == 0 or not fullrow" |
| 310 | 310 | colspan="${fullrow and 3 or None}"> |
| 311 | 311 | <py:choose test="field.type" py:if="field"> |
| 312 | | <select py:when="'select'" id="field-${field.name}" name="field_${field.name}"> |
| | 312 | <select py:when="'select'" id="field-${field.name}" name="field_${field.name}" title="${field.hint}"> |
| 313 | 313 | <option py:if="field.optional"></option> |
| 314 | 314 | <option py:for="option in field.options" |
| 315 | 315 | selected="${value == option or None}" |
| … |
… |
|
| 323 | 323 | </optgroup> |
| 324 | 324 | </select> |
| 325 | 325 | <textarea py:when="'textarea'" id="field-${field.name}" name="field_${field.name}" |
| 326 | | cols="${field.width}" rows="${field.height}" |
| | 326 | cols="${field.width}" rows="${field.height}" title="${field.hint}" |
| 327 | 327 | py:content="value"></textarea> |
| 328 | 328 | <span py:when="'checkbox'"> |
| 329 | 329 | <input type="checkbox" id="field-${field.name}" name="field_${field.name}" |
| 330 | | checked="${value == '1' and 'checked' or None}" value="1" /> |
| | 330 | checked="${value == '1' and 'checked' or None}" value="1" title="${field.hint}" /> |
| 331 | 331 | <input type="hidden" name="field_checkbox_${field.name}" value="1" /> |
| 332 | 332 | </span> |
| 333 | | <label py:when="'radio'" |
| 334 | | py:for="idx, option in enumerate(field.options)"> |
| 335 | | <input type="radio" name="field_${field.name}" value="${option}" |
| 336 | | checked="${value == option or None}" /> |
| 337 | | ${option} |
| 338 | | </label> |
| | 333 | <span py:when="'radio'" title="${field.hint}"> |
| | 334 | <label py:for="option in field.options"> |
| | 335 | <input type="radio" name="field_${field.name}" value="${option}" |
| | 336 | checked="${value == option or None}" /> |
| | 337 | ${option} |
| | 338 | </label> |
| | 339 | </span> |
| 339 | 340 | <py:otherwise><!--! Text input fields --> |
| 340 | 341 | <py:choose> |
| 341 | 342 | <span py:when="field.cc_entry"><!--! Special case for Cc: field --> |
| … |
… |
|
| 352 | 353 | </span> |
| 353 | 354 | <!--! All the other text input fields --> |
| 354 | 355 | <input py:otherwise="" type="text" id="field-${field.name}" |
| 355 | | name="field_${field.name}" value="${value}" /> |
| | 356 | name="field_${field.name}" value="${value}" title="${field.hint}" /> |
| 356 | 357 | </py:choose> |
| 357 | 358 | </py:otherwise> |
| 358 | 359 | </py:choose> |