annotate examples/trac/htdocs/js/query.js @ 92:01d36818bb3d trunk

More performance improvements... this time for whitespace normalization and template loops.
author cmlenz
date Thu, 20 Jul 2006 23:06:36 +0000
parents 93b4dcbafd7b
children
rev   line source
39
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
1 function initializeFilters() {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
2
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
3 // Bail early for Konqueror and IE5.2/Mac, which don't fully support dynamic
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
4 // creation of form controls
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
5 try {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
6 var test = document.createElement("input");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
7 test.type = "button";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
8 if (test.type != "button") throw Error();
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
9 } catch (e) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
10 return;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
11 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
12
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
13 // Removes an existing row from the filters table
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
14 function removeRow(button, propertyName) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
15 var tr = getAncestorByTagName(button, "tr");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
16
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
17 var mode = null;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
18 var selects = tr.getElementsByTagName("select");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
19 for (var i = 0; i < selects.length; i++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
20 if (selects[i].name == propertyName + "_mode") {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
21 mode = selects[i];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
22 break;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
23 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
24 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
25 if (mode && (getAncestorByTagName(mode, "tr") == tr)) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
26 // Check whether there are more 'or' rows for this filter
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
27 var next = tr.nextSibling;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
28 if (next && (next.className == propertyName)) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
29 function getChildElementAt(e, idx) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
30 e = e.firstChild;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
31 var cur = 0;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
32 while (cur <= idx) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
33 while (e && e.nodeType != 1) e = e.nextSibling;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
34 if (cur++ == idx) break;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
35 e = e.nextSibling;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
36 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
37 return e;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
38 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
39
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
40 var thisTh = getChildElementAt(tr, 0);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
41 var nextTh = getChildElementAt(next, 0);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
42 next.insertBefore(thisTh, nextTh);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
43 nextTh.colSpan = 1;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
44
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
45 thisTd = getChildElementAt(tr, 0);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
46 nextTd = getChildElementAt(next, 1);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
47 next.replaceChild(thisTd, nextTd);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
48 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
49 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
50
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
51 var tBody = tr.parentNode;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
52 tBody.deleteRow(tr.sectionRowIndex);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
53 if (!tBody.rows.length) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
54 tBody.parentNode.removeChild(tBody);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
55 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
56
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
57 if (propertyName) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
58 var select = document.forms["query"].elements["add_filter"];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
59 for (var i = 0; i < select.options.length; i++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
60 var option = select.options[i];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
61 if (option.value == propertyName) option.disabled = false;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
62 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
63 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
64 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
65
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
66 // Initializes a filter row, the 'input' parameter is the submit
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
67 // button for removing the filter
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
68 function initializeFilter(input) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
69 var removeButton = document.createElement("input");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
70 removeButton.type = "button";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
71 removeButton.value = input.value;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
72 if (input.name.substr(0, 10) == "rm_filter_") {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
73 removeButton.onclick = function() {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
74 var endIndex = input.name.search(/_\d+$/);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
75 if (endIndex < 0) endIndex = input.name.length;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
76 removeRow(removeButton, input.name.substring(10, endIndex));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
77 return false;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
78 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
79 } else {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
80 removeButton.onclick = function() {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
81 removeRow(removeButton);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
82 return false;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
83 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
84 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
85 input.parentNode.replaceChild(removeButton, input);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
86 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
87
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
88 // Make the submit buttons for removing filters client-side triggers
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
89 var filters = document.getElementById("filters");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
90 var inputs = filters.getElementsByTagName("input");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
91 for (var i = 0; i < inputs.length; i++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
92 var input = inputs[i];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
93 if (input.type == "submit" && input.name
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
94 && input.name.match(/^rm_filter_/)) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
95 initializeFilter(input);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
96 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
97 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
98
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
99 // Make the drop-down menu for adding a filter a client-side trigger
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
100 var addButton = document.forms["query"].elements["add"];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
101 addButton.parentNode.removeChild(addButton);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
102 var select = document.getElementById("add_filter");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
103 select.onchange = function() {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
104 if (select.selectedIndex < 1) return;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
105
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
106 if (select.options[select.selectedIndex].disabled) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
107 // Neither IE nor Safari supported disabled options at the time this was
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
108 // written, so alert the user
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
109 alert("A filter already exists for that property");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
110 return;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
111 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
112
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
113 // Convenience function for creating a <label>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
114 function createLabel(text, htmlFor) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
115 var label = document.createElement("label");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
116 if (text) label.appendChild(document.createTextNode(text));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
117 if (htmlFor) label.htmlFor = htmlFor;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
118 return label;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
119 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
120
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
121 // Convenience function for creating an <input type="checkbox">
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
122 function createCheckbox(name, value, id) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
123 var input = document.createElement("input");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
124 input.type = "checkbox";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
125 if (name) input.name = name;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
126 if (value) input.value = value;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
127 if (id) input.id = id;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
128 return input;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
129 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
130
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
131 // Convenience function for creating an <input type="radio">
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
132 function createRadio(name, value, id) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
133 var input = document.createElement("input");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
134 input.type = "radio";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
135 if (name) input.name = name;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
136 if (value) input.value = value;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
137 if (id) input.id = id;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
138 return input;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
139 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
140
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
141 // Convenience function for creating a <select>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
142 function createSelect(name, options, optional) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
143 var e = document.createElement("select");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
144 if (name) e.name = name;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
145 if (optional) e.options[0] = new Option();
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
146 if (options) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
147 for (var i = 0; i < options.length; i++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
148 var option;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
149 if (typeof(options[i]) == "object") {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
150 option = new Option(options[i].text, options[i].value);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
151 } else {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
152 option = new Option(options[i], options[i]);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
153 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
154 e.options[e.options.length] = option;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
155 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
156 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
157 return e;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
158 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
159
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
160 var propertyName = select.options[select.selectedIndex].value;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
161 var property = properties[propertyName];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
162 var table = document.getElementById("filters").getElementsByTagName("table")[0];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
163 var tr = document.createElement("tr");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
164 tr.className = propertyName;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
165
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
166 var alreadyPresent = false;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
167 for (var i = 0; i < table.rows.length; i++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
168 if (table.rows[i].className == propertyName) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
169 var existingTBody = table.rows[i].parentNode;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
170 alreadyPresent = true;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
171 break;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
172 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
173 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
174
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
175 // Add the row header
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
176 var th = document.createElement("th");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
177 th.scope = "row";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
178 if (!alreadyPresent) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
179 th.appendChild(createLabel(property.label));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
180 } else {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
181 th.colSpan = 2;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
182 th.appendChild(createLabel("or"));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
183 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
184 tr.appendChild(th);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
185
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
186 var td = document.createElement("td");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
187 if (property.type == "radio" || property.type == "checkbox") {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
188 td.colSpan = 2;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
189 td.className = "filter";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
190 if (property.type == "radio") {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
191 for (var i = 0; i < property.options.length; i++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
192 var option = property.options[i];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
193 td.appendChild(createCheckbox(propertyName, option,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
194 propertyName + "_" + option));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
195 td.appendChild(document.createTextNode(" "));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
196 td.appendChild(createLabel(option ? option : "none",
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
197 propertyName + "_" + option));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
198 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
199 } else {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
200 td.appendChild(createRadio(propertyName, "1", propertyName + "_on"));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
201 td.appendChild(document.createTextNode(" "));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
202 td.appendChild(createLabel("yes", propertyName + "_on"));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
203 td.appendChild(createRadio(propertyName, "!1", propertyName + "_off"));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
204 td.appendChild(document.createTextNode(" "));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
205 td.appendChild(createLabel("no", propertyName + "_off"));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
206 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
207 tr.appendChild(td);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
208 } else {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
209 if (!alreadyPresent) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
210 // Add the mode selector
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
211 td.className = "mode";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
212 var modeSelect = createSelect(propertyName + "_mode",
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
213 modes[property.type]);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
214 td.appendChild(modeSelect);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
215 tr.appendChild(td);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
216 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
217
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
218 // Add the selector or text input for the actual filter value
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
219 td = document.createElement("td");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
220 td.className = "filter";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
221 if (property.type == "select") {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
222 var element = createSelect(propertyName, property.options, true);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
223 } else if (property.type == "text") {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
224 var element = document.createElement("input");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
225 element.type = "text";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
226 element.name = propertyName;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
227 element.size = 42;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
228 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
229 td.appendChild(element);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
230 element.focus();
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
231 tr.appendChild(td);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
232 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
233
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
234 // Add the add and remove buttons
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
235 td = document.createElement("td");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
236 td.className = "actions";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
237 var removeButton = document.createElement("input");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
238 removeButton.type = "button";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
239 removeButton.value = "-";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
240 removeButton.onclick = function() { removeRow(removeButton, propertyName) };
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
241 td.appendChild(removeButton);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
242 tr.appendChild(td);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
243
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
244 if (alreadyPresent) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
245 existingTBody.appendChild(tr);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
246 } else {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
247 // Find the insertion point for the new row. We try to keep the filter rows
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
248 // in the same order as the options in the 'Add filter' drop-down, because
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
249 // that's the order they'll appear in when submitted.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
250 var insertionPoint = getAncestorByTagName(select, "tbody");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
251 outer: for (var i = select.selectedIndex + 1; i < select.options.length; i++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
252 for (var j = 0; j < table.tBodies.length; j++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
253 if (table.tBodies[j].rows[0].className == select.options[i].value) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
254 insertionPoint = table.tBodies[j];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
255 break outer;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
256 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
257 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
258 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
259 // Finally add the new row to the table
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
260 var tbody = document.createElement("tbody");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
261 tbody.appendChild(tr);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
262 insertionPoint.parentNode.insertBefore(tbody, insertionPoint);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
263 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
264
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
265 // Disable the add filter in the drop-down list
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
266 if (property.type == "radio" || property.type == "checkbox") {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
267 select.options[select.selectedIndex].disabled = true;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
268 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
269 select.selectedIndex = 0;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
270 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
271 }
Copyright (C) 2012-2017 Edgewall Software