1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
// Used for dynamically updating the height of a textarea
function resizeTextArea(id, rows) {
var textarea = document.getElementById(id);
if (!textarea || (typeof(textarea.rows) == "undefined")) return;
textarea.rows = rows;
}
// A better way than for example hardcoding foo.onload
function addEvent(element, type, func){
if (element.addEventListener) {
element.addEventListener(type, func, false);
return true;
} else if (element.attachEvent) {
return element.attachEvent("on" + type, func);
}
return false;
}
// Adapted from http://www.kryogenix.org/code/browser/searchhi/
function searchHighlight() {
if (!document.createElement) return;
var div = document.getElementById("searchable");
if (!div) return;
function getSearchWords(url) {
if (url.indexOf('?') == -1) return [];
var queryString = url.substr(url.indexOf('?') + 1);
var params = queryString.split('&');
for (var p in params) {
var param = params[p].split('=');
if (param.length < 2) continue;
if (param[0] == 'q' || param[0] == 'p') { // q= for Google, p= for Yahoo
return unescape(param[1].replace(/\+/g, ' ')).split(/\s+/);
}
}
return [];
}
function highlightWord(node, word, searchwordindex) {
// If this node is a text node and contains the search word, highlight it by
// surrounding it with a span element
if (node.nodeType == 3) { // Node.TEXT_NODE
var pos = node.nodeValue.toLowerCase().indexOf(word.toLowerCase());
if (pos >= 0 && !/^searchword\d$/.test(node.parentNode.className)) {
var span = document.createElement("span");
span.className = "searchword" + (searchwordindex % 5);
span.appendChild(document.createTextNode(
node.nodeValue.substr(pos, word.length)));
var newNode = node.splitText(pos);
newNode.nodeValue = newNode.nodeValue.substr(word.length);
node.parentNode.insertBefore(span, newNode);
return true;
}
} else if (!node.nodeName.match(/button|select|textarea/i)) {
// Recurse into child nodes
for (var i = 0; i < node.childNodes.length; i++) {
if (highlightWord(node.childNodes[i], word, searchwordindex)) i++;
}
}
return false;
}
var words = getSearchWords(document.URL);
if (!words.length) words = getSearchWords(document.referrer);
if (words.length) {
for (var w in words) {
if (words[w].length) highlightWord(div, words[w], w);
}
}
}
function enableControl(id, enabled) {
if (typeof(enabled) == "undefined") enabled = true;
var control = document.getElementById(id);
if (!control) return;
control.disabled = !enabled;
var labels = document.getElementsByTagName("label");
for (var i = 0; i < labels.length; i++) {
if (labels[i].htmlFor == id) {
labels[i].className = enabled ? "enabled" : "disabled";
}
}
}
function addWikiFormattingToolbar(textarea) {
if ((typeof(document["selection"]) == "undefined")
&& (typeof(textarea["setSelectionRange"]) == "undefined")) {
return;
}
var toolbar = document.createElement("div");
toolbar.className = "wikitoolbar";
function addButton(id, title, fn) {
var a = document.createElement("a");
a.href = "#";
a.id = id;
a.title = title;
a.onclick = function() { try { fn() } catch (e) { } return false };
a.tabIndex = 400;
toolbar.appendChild(a);
}
function encloseSelection(prefix, suffix) {
textarea.focus();
var start, end, sel, scrollPos, subst;
if (typeof(document["selection"]) != "undefined") {
sel = document.selection.createRange().text;
} else if (typeof(textarea["setSelectionRange"]) != "undefined") {
start = textarea.selectionStart;
end = textarea.selectionEnd;
scrollPos = textarea.scrollTop;
sel = textarea.value.substring(start, end);
}
if (sel.match(/ $/)) { // exclude ending space char, if any
sel = sel.substring(0, sel.length - 1);
suffix = suffix + " ";
}
subst = prefix + sel + suffix;
if (typeof(document["selection"]) != "undefined") {
var range = document.selection.createRange().text = subst;
textarea.caretPos -= suffix.length;
} else if (typeof(textarea["setSelectionRange"]) != "undefined") {
textarea.value = textarea.value.substring(0, start) + subst +
textarea.value.substring(end);
if (sel) {
textarea.setSelectionRange(start + subst.length, start + subst.length);
} else {
textarea.setSelectionRange(start + prefix.length, start + prefix.length);
}
textarea.scrollTop = scrollPos;
}
}
addButton("strong", "Bold text: '''Example'''", function() {
encloseSelection("'''", "'''");
});
addButton("em", "Italic text: ''Example''", function() {
encloseSelection("''", "''");
});
addButton("heading", "Heading: == Example ==", function() {
encloseSelection("\n== ", " ==\n", "Heading");
});
addButton("link", "Link: [http://www.example.com/ Example]", function() {
encloseSelection("[", "]");
});
addButton("code", "Code block: {{{ example }}}", function() {
encloseSelection("\n{{{\n", "\n}}}\n");
});
addButton("hr", "Horizontal rule: ----", function() {
encloseSelection("\n----\n", "");
});
textarea.parentNode.insertBefore(toolbar, textarea);
var br = document.createElement("br");
br.style.clear = "left";
textarea.parentNode.insertBefore(br, textarea);
}
|