annotate examples/trac/htdocs/js/trac.js @ 39:93b4dcbafd7b trunk

Copy Trac to main branch.
author cmlenz
date Mon, 03 Jul 2006 18:53:27 +0000
parents
children
rev   line source
39
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
1 // Used for dynamically updating the height of a textarea
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
2 function resizeTextArea(id, rows) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
3 var textarea = document.getElementById(id);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
4 if (!textarea || (typeof(textarea.rows) == "undefined")) return;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
5 textarea.rows = rows;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
6 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
7
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
8 // A better way than for example hardcoding foo.onload
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
9 function addEvent(element, type, func){
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
10 if (element.addEventListener) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
11 element.addEventListener(type, func, false);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
12 return true;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
13 } else if (element.attachEvent) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
14 return element.attachEvent("on" + type, func);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
15 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
16 return false;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
17 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
18
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
19 // Convenience function for the nearest ancestor element with a specific tag
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
20 // name
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
21 function getAncestorByTagName(e, tagName) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
22 tagName = tagName.toLowerCase();
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
23 do {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
24 e = e.parentNode;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
25 } while ((e.nodeType == 1) && (e.tagName.toLowerCase() != tagName));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
26 return (e.nodeType == 1) ? e : null;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
27 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
28
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
29 // Adapted from http://www.kryogenix.org/code/browser/searchhi/
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
30 function searchHighlight() {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
31 if (!document.createElement) return;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
32
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
33 var div = document.getElementById("searchable");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
34 if (!div) return;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
35
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
36 function getSearchWords(url) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
37 if (url.indexOf('?') == -1) return [];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
38 var queryString = url.substr(url.indexOf('?') + 1);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
39 var params = queryString.split('&');
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
40 for (var p in params) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
41 var param = params[p].split('=');
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
42 if (param.length < 2) continue;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
43 if (param[0] == 'q' || param[0] == 'p') { // q= for Google, p= for Yahoo
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
44 var query = unescape(param[1].replace(/\+/g, ' '));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
45 if (query[0] == '!') query = query.slice(1);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
46 words = query.split(/(".*?")|('.*?')|(\s+)/);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
47 var words2 = new Array();
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
48 for (var w in words) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
49 words[w] = words[w].replace(/^\s+$/, '');
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
50 if (words[w] != '') {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
51 words2.push(words[w].replace(/^['"]/, '').replace(/['"]$/, ''));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
52 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
53 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
54 return words2;
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 return [];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
58 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
59
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
60 function highlightWord(node, word, searchwordindex) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
61 // If this node is a text node and contains the search word, highlight it by
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
62 // surrounding it with a span element
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
63 if (node.nodeType == 3) { // Node.TEXT_NODE
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
64 var pos = node.nodeValue.toLowerCase().indexOf(word.toLowerCase());
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
65 if (pos >= 0 && !/^searchword\d$/.test(node.parentNode.className)) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
66 var span = document.createElement("span");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
67 span.className = "searchword" + (searchwordindex % 5);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
68 span.appendChild(document.createTextNode(
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
69 node.nodeValue.substr(pos, word.length)));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
70 node.parentNode.insertBefore(span, node.parentNode.insertBefore(
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
71 document.createTextNode(node.nodeValue.substr(pos + word.length)),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
72 node.nextSibling));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
73 node.nodeValue = node.nodeValue.substr(0, pos);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
74 return true;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
75 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
76 } else if (!node.nodeName.match(/button|select|textarea/i)) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
77 // Recurse into child nodes
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
78 for (var i = 0; i < node.childNodes.length; i++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
79 if (highlightWord(node.childNodes[i], word, searchwordindex)) i++;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
80 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
81 }
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 var words = getSearchWords(document.URL);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
86 if (!words.length) words = getSearchWords(document.referrer);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
87 if (words.length) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
88 for (var w in words) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
89 if (words[w].length) highlightWord(div, words[w], w);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
90 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
91 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
92 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
93
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
94 function enableControl(id, enabled) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
95 if (typeof(enabled) == "undefined") enabled = true;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
96 var control = document.getElementById(id);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
97 if (!control) return;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
98 control.disabled = !enabled;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
99 var label = getAncestorByTagName(control, "label");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
100 if (label) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
101 label.className = enabled ? "enabled" : "disabled";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
102 } else {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
103 var labels = document.getElementsByTagName("label");
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
104 for (var i = 0; i < labels.length; i++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
105 if (labels[i].htmlFor == id) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
106 labels[i].className = enabled ? "enabled" : "disabled";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
107 break;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
108 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
109 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
110 }
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 function addHeadingLinks(container) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
114 var base = document.location.pathname;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
115 function addLinks(elems) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
116 for (var i = 0; i < elems.length; i++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
117 var hn = elems[i];
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
118 if (hn.id) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
119 var link = document.createElement('a');
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
120 link.href = base + '#' + hn.id;
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
121 link.className = 'anchor';
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
122 link.title = "Link to this section";
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
123 link.appendChild(document.createTextNode(" \u00B6"));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
124 hn.appendChild(link);
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
125 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
126 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
127 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
128 for (var lvl = 0; lvl <= 6; lvl++) {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
129 addLinks(container.getElementsByTagName('h' + lvl));
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
130 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
131 }
Copyright (C) 2012-2017 Edgewall Software