Continuing the endless quest to purge all HTML generation from

ViewVC's core libraries, turn the form hidden-values objects from HTML
strings to iterable objects that templates can use to *make* HTML strings.

* lib/viewvc.py
  (Request.get_form): Now prepare hidden values as an iterable list of
    objects with .name and .value attributes.
  (common_template_data): Don't add 'change_root_action' and
    'change_root_hidden_values' data dictionary items.
  (prepare_hidden_values): Remove as unused.

* templates/include/diff_form.ezt,
* templates/include/dir_footer.ezt,
* templates/include/dir_header.ezt,
* templates/include/paging.ezt,
* templates/include/pathrev_form.ezt,
* templates/include/sort.ezt,
* templates/diff.ezt,
* templates/log_table.ezt,
* templates/query_form.ezt,
* templates/revision.ezt
  Iterate over hidden-values items to generate <input type="hidden"
  .../> output.

* docs/upgrading-howto.html,
* docs/template-authoring-guide.html
  Note these changes.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@1894 8cb11bc2-c004-0410-86c3-e597b4017df7
remotes/tags/1.1.0-beta1
cmpilato 2008-05-21 19:51:26 +00:00
parent 263920a326
commit 43f5b14afa
13 changed files with 124 additions and 79 deletions

View File

@ -113,16 +113,6 @@ td {
<var>show_logs</var> variable in the <var>options</var> section
of the configuration file.</td>
</tr>
<tr class="varlevel1">
<td class="varname">change_root_action</td>
<td>String</td>
<td>Form action URL for the root selection form.</td>
</tr>
<tr class="varlevel1">
<td class="varname">change_root_hidden_values</td>
<td>String</td>
<td>Hidden value HTML markup for the root selection form.</td>
</tr>
<tr class="varlevel1">
<td class="varname">docroot</td>
<td>String</td>
@ -331,8 +321,8 @@ td {
</tr>
<tr class="varlevel1">
<td class="varname">pathrev_hidden_values</td>
<td>String</td>
<td>Hidden value HTML markup for the revision/tag selection form.</td>
<td>List</td>
<td>Hidden value name/value pairs for the revision/tag selection form.</td>
</tr>
<tr class="varlevel1">
<td class="varname">pathrev_clear_action</td>
@ -341,8 +331,8 @@ td {
</tr>
<tr class="varlevel1">
<td class="varname">pathrev_clear_hidden_values</td>
<td>String</td>
<td>Hidden value HTML markup for the path revision clear button.</td>
<td>List</td>
<td>Hidden value name/value pairs for the path revision clear button.</td>
</tr>
</tbody>
</table>
@ -720,8 +710,8 @@ td {
</tr>
<tr class="varlevel1">
<td class="varname">diff_format_hidden_values</td>
<td>String</td>
<td>Hidden value HTML markup for the diff format selection form.</td>
<td>List</td>
<td>Hidden value name/value pairs for the diff format selection form.</td>
</tr>
<tr class="varlevel1">
<td class="varname">left</td>
@ -900,8 +890,8 @@ td {
</tr>
<tr class="varlevel1">
<td class="varname">dir_paging_hidden_values</td>
<td>String</td>
<td>Hidden value HTML markup for the page selection form.</td>
<td>List</td>
<td>Hidden value name/value pairs for the page selection form.</td>
</tr>
<tr class="varlevel1">
<td class="varname">entries</td>
@ -1098,8 +1088,8 @@ td {
</tr>
<tr class="varlevel1">
<td class="varname">search_re_hidden_values</td>
<td>String</td>
<td>Hidden value HTML markup for the regular expression search form.</td>
<td>List</td>
<td>Hidden value name/value pairs for the regular expression search form.</td>
</tr>
<tr class="varlevel1">
<td class="varname">show_attic_href</td>
@ -1244,8 +1234,8 @@ td {
</tr>
<tr class="varlevel1">
<td class="varname">diff_select_hidden_values</td>
<td>String</td>
<td>Hidden value HTML markup for the diff selection form.</td>
<td>List</td>
<td>Hidden value name/value pairs for the diff selection form.</td>
</tr>
<tr class="varlevel1">
<td class="varname">entries</td>
@ -1525,8 +1515,8 @@ td {
</tr>
<tr class="varlevel1">
<td class="varname">log_paging_hidden_values</td>
<td>String</td>
<td>Hidden value HTML markup for the page selection form.</td>
<td>List</td>
<td>Hidden value name/value pairs for the page selection form.</td>
</tr>
<tr class="varlevel1">
<td class="varname">logsort</td>
@ -1541,8 +1531,8 @@ td {
</tr>
<tr class="varlevel1">
<td class="varname">logsort_hidden_values</td>
<td>String</td>
<td>Hidden value HTML markup for the log sort drop down box</td>
<td>List</td>
<td>Hidden value name/value pairs for the log sort drop down box</td>
</tr>
<tr class="varlevel1">
<td class="varname">mime_type</td>
@ -2012,8 +2002,8 @@ td {
</tr>
<tr class="varlevel1">
<td class="varname">query_hidden_values</td>
<td>String</td>
<td>Hidden value HTML markup for query form.</td>
<td>List</td>
<td>Hidden value name/value pairs for query form.</td>
</tr>
<tr class="varlevel1">
<td class="varname">querysort</td>
@ -2152,8 +2142,8 @@ td {
</tr>
<tr class="varlevel1">
<td class="varname">jump_rev_hidden_values</td>
<td>String</td>
<td>Hidden value HTML markup for revision jump form.</td>
<td>List</td>
<td>Hidden value name/value pairs for revision jump form.</td>
</tr>
<tr class="varlevel1">
<td class="varname">limit_changes</td>

View File

@ -302,6 +302,16 @@ allow_tar = 1
<td><em>all templates</em></td>
<td>added</td>
</tr>
<tr class="removed">
<td class="varname">change_root_action</td>
<td><em>all templates</em></td>
<td>removed</td>
</tr>
<tr class="removed">
<td class="varname">change_root_hidden_values</td>
<td><em>all templates</em></td>
<td>removed</td>
</tr>
<tr class="removed">
<td class="varname">roots</td>
<td><em>all templates</em> except roots.ezt</td>
@ -409,26 +419,16 @@ allow_tar = 1
<td>annotate.ezt</td>
<td>added</td>
</tr>
<tr class="changed">
<td class="varname">diff_format_hidden_values</td>
<td>diff.ezt</td>
<td>now is an iterable list of objects with .name and .value attributes</td>
</tr>
<tr class="changed">
<td class="varname">diff_type</td>
<td>diff.ezt</td>
<td>new value: <code>f</code></td>
</tr>
<tr class="changed">
<td class="varname">entries.log</td>
<td>directory.ezt, dir_alternate.ezt</td>
<td>now always contains untruncated log message</td>
</tr>
<tr class="added">
<td class="varname">entries.short_log</td>
<td>directory.ezt, dir_alternate.ezt</td>
<td>added</td>
</tr>
<tr class="added">
<td class="varname">rss_link_href</td>
<td>query.ezt, rss.ezt</td>
<td>added</td>
</tr>
<tr class="renamed">
<td class="varname">date_left</td>
<td>diff.ezt</td>
@ -539,31 +539,96 @@ allow_tar = 1
<td>diff.ezt</td>
<td>added</td>
</tr>
<tr class="changed">
<td class="varname">dir_paging_hidden_values</td>
<td>directory.ezt, , dir_alternate.ezt</td>
<td>now is an iterable list of objects with .name and .value attributes</td>
</tr>
<tr class="changed">
<td class="varname">entries.log</td>
<td>directory.ezt, dir_alternate.ezt</td>
<td>now always contains untruncated log message</td>
</tr>
<tr class="added">
<td class="varname">entries.short_log</td>
<td>directory.ezt, dir_alternate.ezt</td>
<td>added</td>
</tr>
<tr class="changed">
<td class="varname">search_re_hidden_values</td>
<td>directory.ezt, dir_alternate.ezt</td>
<td>now is an iterable list of objects with .name and .value attributes</td>
</tr>
<tr class="changed">
<td class="varname">search_tag_hidden_values</td>
<td>directory.ezt, dir_alternate.ezt</td>
<td>now is an iterable list of objects with .name and .value attributes</td>
</tr>
<tr class="changed">
<td class="varname">pathrev_clear_hidden_values</td>
<td>log.ezt, log_table.ezt, directory.ezt, dir_alternate.ezt</td>
<td>now is an iterable list of objects with .name and .value attributes</td>
</tr>
<tr class="changed">
<td class="varname">pathrev_hidden_values</td>
<td>log.ezt, log_table.ezt, directory.ezt, dir_alternate.ezt</td>
<td>now is an iterable list of objects with .name and .value attributes</td>
</tr>
<tr class="renamed">
<td class="varname">annotate_href</td>
<td>log.ezt</td>
<td>log.ezt, log_table.ezt</td>
<td>renamed to <code>head_annotate_href</code></td>
</tr>
<tr class="changed">
<td class="varname">diff_form_hidden_values</td>
<td>log.ezt, log_table.ezt</td>
<td>now is an iterable list of objects with .name and .value attributes</td>
</tr>
<tr class="renamed">
<td class="varname">download_href</td>
<td>log.ezt</td>
<td>log.ezt, log_table.ezt</td>
<td>renamed to <code>head_download_href</code></td>
</tr>
<tr class="renamed">
<td class="varname">download_text_href</td>
<td>log.ezt</td>
<td>log.ezt, log_table.ezt</td>
<td>renamed to <code>head_download_text_href</code></td>
</tr>
<tr class="changed">
<td class="varname">log_paging_hidden_values</td>
<td>log.ezt, log_table.ezt</td>
<td>now is an iterable list of objects with .name and .value attributes</td>
</tr>
<tr class="changed">
<td class="varname">logsort_hidden_values</td>
<td>log.ezt, log_table.ezt</td>
<td>now is an iterable list of objects with .name and .value attributes</td>
</tr>
<tr class="renamed">
<td class="varname">prefer_markup</td>
<td>log.ezt</td>
<td>log.ezt, log_table.ezt</td>
<td>renamed to <code>head_prefer_markup</code></td>
</tr>
<tr class="renamed">
<td class="varname">view_href</td>
<td>log.ezt</td>
<td>log.ezt, log_table.ezt</td>
<td>renamed to <code>head_view_href</code></td>
</tr>
<tr class="added">
<td class="varname">rss_link_href</td>
<td>query.ezt, rss.ezt</td>
<td>added</td>
</tr>
<tr class="changed">
<td class="varname">query_hidden_values</td>
<td>query_form.ezt</td>
<td>now is an iterable list of objects with .name and .value attributes</td>
</tr>
<tr class="changed">
<td class="varname">jump_rev_hidden_values</td>
<td>revision.ezt</td>
<td>now is an iterable list of objects with .name and .value attributes</td>
</tr>
</tbody>
</table>

View File

@ -412,13 +412,16 @@ class Request:
def get_form(self, **args):
"""Constructs a link to another ViewVC page just like the get_link
function except that it returns a base URL suitable for use as an HTML
form action and a string of HTML input type=hidden tags with the link
parameters."""
function except that it returns a base URL suitable for use as an
HTML form action, and an iterable object with .name and .value
attributes representing stuff that should be in <input
type=hidden> tags with the link parameters."""
url, params = apply(self.get_link, (), args)
action = self.server.escape(urllib.quote(url, _URL_SAFE_CHARS))
hidden_values = prepare_hidden_values(params)
hidden_values = []
for name, value in params.items():
hidden_values.append(_item(name=name, value=value))
return action, hidden_values
def get_link(self, view_func=None, where=None, pathtype=None, params=None):
@ -1181,10 +1184,6 @@ def common_template_data(request):
elif request.pathtype == vclib.FILE:
data['pathtype'] = 'file'
data['change_root_action'], data['change_root_hidden_values'] = \
request.get_form(view_func=view_directory, where='', pathtype=vclib.DIR,
params={'root': None})
if request.path_parts:
dir = _path_join(request.path_parts[:-1])
data['up_href'] = request.get_url(view_func=view_directory,
@ -1635,15 +1634,6 @@ def revcmp(rev1, rev2):
rev2 = map(int, string.split(rev2, '.'))
return cmp(rev1, rev2)
def prepare_hidden_values(params):
"""returns variables from params encoded as a invisible HTML snippet.
"""
hidden_values = []
for name, value in params.items():
hidden_values.append('<input type="hidden" name="%s" value="%s" />' %
(name, value))
return string.join(hidden_values, '')
def sort_file_data(file_data, roottype, sortdir, sortby, group_dirs):
# convert sortdir into a sign bit
s = sortdir == "down" and -1 or 1

View File

@ -196,7 +196,7 @@
<td>
<form method="get" action="[diff_format_action]">
<div>
[diff_format_hidden_values]
[for diff_format_hidden_values]<input type="hidden" name="[diff_format_hidden_values.name]" value="[diff_format_hidden_values.value]"/>[end]
<select name="diff_format" onchange="submit()">
<option value="h" [is diff_format "h"]selected="selected"[end]>Colored Diff</option>
<option value="l" [is diff_format "l"]selected="selected"[end]>Long Colored Diff</option>

View File

@ -15,7 +15,7 @@
<tr>
<td>&nbsp;</td>
<td>
[diff_select_hidden_values]
[for diff_select_hidden_values]<input type="hidden" name="[diff_select_hidden_values.name]" value="[diff_select_hidden_values.value]"/>[end]
Diffs between
[if-any tags]
<select name="r1">

View File

@ -7,7 +7,7 @@
<td>
<form method="get" action="[search_re_action]">
<div>
[search_re_hidden_values]
[for search_re_hidden_values]<input type="hidden" name="[search_re_hidden_values.name]" value="[search_re_hidden_values.value]"/>[end]
<input type="text" name="search" value="[search_re]" />
<input type="submit" value="Show" />
</div>
@ -20,7 +20,7 @@
<td>
<form method="get" action="[search_tag_action]">
<div>
[search_tag_hidden_values]
[for search_tag_hidden_values]<input type="hidden" name="[search_tag_hidden_values.name]" value="[search_tag_hidden_values.value]"/>[end]
<input type="submit" value="Show all files" />
</div>
</form>

View File

@ -47,7 +47,7 @@
[is picklist_len "1"]
[else]
<form method="get" action="[dir_paging_action]">
[dir_paging_hidden_values]
[for dir_paging_hidden_values]<input type="hidden" name="[dir_paging_hidden_values.name]" value="[dir_paging_hidden_values.value]"/>[end]
<input type="submit" value="Go to:" />
<select name="dir_pagestart" onchange="submit()">
[for picklist]

View File

@ -4,7 +4,7 @@
[else]
<hr />
<form method="get" action="[log_paging_action]">
[log_paging_hidden_values]
[for log_paging_hidden_values]<input type="hidden" name="[log_paging_hidden_values.name]" value="[log_paging_hidden_values.value]"/>[end]
<input type="submit" value="Go to:">
<select name="log_pagestart" onchange="submit()">
[for picklist]

View File

@ -1,6 +1,6 @@
<form method="get" action="[pathrev_action]" style="display: inline">
<div style="display: inline">
[pathrev_hidden_values]
[for pathrev_hidden_values]<input type="hidden" name="[pathrev_hidden_values.name]" value="[pathrev_hidden_values.value]"/>[end]
[is roottype "cvs"]
[define pathrev_selected][pathrev][end]
<select name="pathrev" onchange="submit()">
@ -41,7 +41,7 @@
[if-any pathrev]
<form method="get" action="[pathrev_clear_action]" style="display: inline">
<div style="display: inline">
[pathrev_clear_hidden_values]
[for pathrev_clear_hidden_values]<input type="hidden" name="[pathrev_clear_hidden_values.name]" value="[pathrev_clear_hidden_values.value]"/>[end]
[if-any lastrev]
[is pathrev lastrev][else]<input type="submit" value="Set to [lastrev]" />[end]
(<i>Current path doesn't exist after revision <strong>[lastrev]</strong></i>)

View File

@ -4,7 +4,7 @@
<div>
<hr />
<a name="logsort"></a>
[logsort_hidden_values]
[for logsort_hidden_values]<input type="hidden" name="[logsort_hidden_values.name]" value="[logsort_hidden_values.value]"/>[end]
Sort log by:
<select name="logsort" onchange="submit()">
<option value="cvs" [is logsort "cvs"]selected="selected"[end]>Not sorted</option>

View File

@ -110,7 +110,7 @@
[# Tags ]
[if-any entries.tags]
<form method=get action="[pathrev_action]" >
[pathrev_hidden_values]
[for pathrev_hidden_values]<input type="hidden" name="[pathrev_hidden_values.name]" value="[pathrev_hidden_values.value]"/>[end]
<select name="pathrev" onChange="submit()">
<option value="" [is pathrev ""]selected[end]>Show all tags</option>
[for entries.tags]

View File

@ -12,7 +12,7 @@ Browse Directory</a></p>
<form action="[query_action]" method="get">
<div class="vc_query_form">
[query_hidden_values]
[for query_hidden_values]<input type="hidden" name="[query_hidden_values.name]" value="[query_hidden_values.value]"/>[end]
<table cellspacing="0" cellpadding="5" class="auto">
[is roottype "cvs"]
[# For subversion, the branch field is not used ]

View File

@ -11,7 +11,7 @@
<tr align="left">
<th>Jump to revision:</th>
<td>
[jump_rev_hidden_values]
[for jump_rev_hidden_values]<input type="hidden" name="[jump_rev_hidden_values.name]" value="[jump_rev_hidden_values.value]"/>[end]
<input type="text" name="revision" value="[rev]" />
<input type="submit" value="Go" />
[if-any prev_href]