Mercurial > p > roundup > code
annotate templates/classic/html/help_controls.js @ 3696:790363e96852
Sorting/grouping by multiple properties.
- Implement sorting/grouping by multiple properties for the web
interface. I'm now using @sort0/@sortdir0,@sort1/@sortdir1,... and
@group0/@groupdir0,... when generating URLs from a search template.
These are converted to a list internally. When saving URLs (e.g. when
storing queries) I'm using @sort=prop1,prop2,... and @group=... with
optional '-' prepended to individual props.
This means saved URLs are backward compatible with existing trackers
(and yes, this was a design goal).
I need the clumsy version with @sort0,@sort1 etc, because I'm
currently using several selectors and checkboxes (as the classic
template does, too). I don't think there is a way around that in HTML?
- Updated (hopefully all) documentation to reflect the new URL format
and the consequences in the web-interface.
- I've set the number of sort/group properties in the classic template
to two -- this can easily be reverted by changing n_sort to 1.
Richard, would you look over these changes? I've set a tag before and
(will set) after commit, so that it would be easy to merge out.
Don't be too scared about the size of the change, most is documentation,
the guts are in cgi/templating.py and small changes in the classic
template.
| author | Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net> |
|---|---|
| date | Wed, 30 Aug 2006 20:28:26 +0000 |
| parents | 3f3ca882deb2 |
| children | 18def94e5150 |
| rev | line source |
|---|---|
|
1663
09f0a54829eb
Fixed spelling of "supersede";
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1608
diff
changeset
|
1 // initial values for either Nosy, Superseder, Topic and Waiting On, |
|
09f0a54829eb
Fixed spelling of "supersede";
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1608
diff
changeset
|
2 // depending on which has called |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2361
diff
changeset
|
3 original_field = form[field].value; |
|
1608
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
4 |
|
2361
9cdc49488fe6
define the "undefined" var manually
Richard Jones <richard@users.sourceforge.net>
parents:
2273
diff
changeset
|
5 // Some browsers (ok, IE) don't define the "undefined" variable. |
|
9cdc49488fe6
define the "undefined" var manually
Richard Jones <richard@users.sourceforge.net>
parents:
2273
diff
changeset
|
6 undefined = document.geez_IE_is_really_friggin_annoying; |
|
1608
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
7 |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
8 function trim(value) { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
9 var temp = value; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
10 var obj = /^(\s*)([\W\w]*)(\b\s*$)/; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
11 if (obj.test(temp)) { temp = temp.replace(obj, '$2'); } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
12 var obj = / /g; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 while (temp.match(obj)) { temp = temp.replace(obj, " "); } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 return temp; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
15 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
16 |
|
1899
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
17 function determineList() { |
|
3043
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
18 // generate a comma-separated list of the checked items |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
19 var list = new String(''); |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
20 |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
21 // either a checkbox object or an array of checkboxes |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
22 var check = document.frm_help.check; |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
23 |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
24 if ((check.length == undefined) && (check.checked != undefined)) { |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
25 // only one checkbox on page |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
26 if (check.checked) { |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
27 list = check.value; |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
28 } |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
29 } else { |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
30 // array of checkboxes |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
31 for (box=0; box < check.length; box++) { |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
32 if (check[box].checked) { |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
33 if (list.length == 0) { |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
34 separator = ''; |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
35 } |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
36 else { |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
37 separator = ','; |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
38 } |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
39 // we used to use an Array and push / join, but IE5.0 sux |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
40 list = list + separator + check[box].value; |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
41 } |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
42 } |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
43 } |
|
3f3ca882deb2
fix "(list)" popup when list is one item long [SF#1064716]
Richard Jones <richard@users.sourceforge.net>
parents:
2761
diff
changeset
|
44 return list; |
|
1899
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
45 } |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
46 |
|
1608
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 function updateList() { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 // write back to opener window |
|
1764
cd50fbc275a1
Fix JavaScript error when help was asked while no keyword was defined.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1663
diff
changeset
|
49 if (document.frm_help.check==undefined) { return; } |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2361
diff
changeset
|
50 form[field].value = determineList(); |
|
1608
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 function updatePreview() { |
|
1899
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
54 // update the preview box |
|
1764
cd50fbc275a1
Fix JavaScript error when help was asked while no keyword was defined.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1663
diff
changeset
|
55 if (document.frm_help.check==undefined) { return; } |
|
1899
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
56 writePreview(determineList()); |
|
1608
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 function clearList() { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 // uncheck all checkboxes |
|
1764
cd50fbc275a1
Fix JavaScript error when help was asked while no keyword was defined.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1663
diff
changeset
|
61 if (document.frm_help.check==undefined) { return; } |
|
1608
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 for (box=0; box < document.frm_help.check.length; box++) { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 document.frm_help.check[box].checked = false; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
66 |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
67 function reviseList(vals) { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
68 // update the checkboxes based on the preview field |
|
1764
cd50fbc275a1
Fix JavaScript error when help was asked while no keyword was defined.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1663
diff
changeset
|
69 if (document.frm_help.check==undefined) { return; } |
|
1608
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 var to_check; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 var list = vals.split(","); |
|
1899
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
72 if (document.frm_help.check.length==undefined) { |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
73 check = document.frm_help.check; |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
74 to_check = false; |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
75 for (val in list) { |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
76 if (check.value==trim(list[val])) { |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
77 to_check = true; |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
78 break; |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
79 } |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
80 } |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
81 check.checked = to_check; |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
82 } else { |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
83 for (box=0; box < document.frm_help.check.length; box++) { |
|
1608
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 check = document.frm_help.check[box]; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 to_check = false; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 for (val in list) { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
87 if (check.value==trim(list[val])) { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 to_check = true; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 break; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 check.checked = to_check; |
|
1899
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
93 } |
|
1608
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
94 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 function resetList() { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
98 // reset preview and check boxes to initial values |
|
1764
cd50fbc275a1
Fix JavaScript error when help was asked while no keyword was defined.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1663
diff
changeset
|
99 if (document.frm_help.check==undefined) { return; } |
|
1899
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
100 writePreview(original_field); |
|
d6c039c5b52b
fixed javascript for help window for only one checkbox case
Richard Jones <richard@users.sourceforge.net>
parents:
1764
diff
changeset
|
101 reviseList(original_field); |
|
1608
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
102 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
103 |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
104 function writePreview(val) { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
105 // writes a value to the text_preview |
|
1663
09f0a54829eb
Fixed spelling of "supersede";
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1608
diff
changeset
|
106 document.frm_help.text_preview.value = val; |
|
1608
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
107 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
108 |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
109 function focusField(name) { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 for(i=0; i < document.forms.length; ++i) { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
111 var obj = document.forms[i].elements[name]; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
112 if (obj && obj.focus) {obj.focus();} |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
115 |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 function selectField(name) { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
117 for(i=0; i < document.forms.length; ++i) { |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 var obj = document.forms[i].elements[name]; |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
119 if (obj && obj.focus){obj.focus();} |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 if (obj && obj.select){obj.select();} |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
121 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
122 } |
|
49dd1bf17d66
new improved help controls
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
123 |
