aboutsummaryrefslogtreecommitdiff
path: root/ukulele.js
diff options
context:
space:
mode:
authorthe little girl <yui@blekksprut.net>2014-09-22 21:24:14 +0900
committerthe little girl <yui@blekksprut.net>2014-09-22 21:24:14 +0900
commit292a17b7803a6a066583bafb941dce0c48211a8e (patch)
treee1ec1ef2624ca34a93fb14c298b2c94ed7291528 /ukulele.js
parent65caed0a231c60a578f89fffd4347d6df0405cc5 (diff)
downloadukulele-292a17b7803a6a066583bafb941dce0c48211a8e.tar.xz
wiki -> ukulele
Diffstat (limited to 'ukulele.js')
-rw-r--r--ukulele.js129
1 files changed, 129 insertions, 0 deletions
diff --git a/ukulele.js b/ukulele.js
new file mode 100644
index 0000000..1d47062
--- /dev/null
+++ b/ukulele.js
@@ -0,0 +1,129 @@
+function insert(text) {
+ var t = document.getElementsByName('t')[0];
+ if(!t) return;
+ if(t.selectionStart || t.selectionStart == '0') {
+ var pos = t.selectionStart;
+ var end = t.selectionEnd;
+ t.value = t.value.substring(0, pos) + text + t.value.substring(end, t.value.length);
+ }
+ t.focus();
+ var cpos = t.selectionStart;
+ t.setSelectionRange(cpos, cpos);
+}
+
+function wrap(prefix, postfix) {
+ var t = document.getElementsByName('t')[0];
+ if(!t) return;
+ if(t.selectionStart || t.selectionStart == '0') {
+ var pos = t.selectionStart;
+ var end = t.selectionEnd;
+ var n = t.value.indexOf("\n", pos);
+ if(n > 0 && n < end) end = n;
+ t.value = t.value.substring(0, pos) + prefix + t.value.substring(pos, end) + postfix + t.value.substring(end, t.value.length);
+ }
+ t.focus();
+ var cpos = t.selectionEnd + prefix.length + postfix.length;
+ t.setSelectionRange(cpos, cpos);
+}
+
+function prepend(text) {
+ var t = document.getElementsByName('t')[0];
+ if(!t) return;
+ if(t.selectionStart || t.selectionStart == '0') {
+ var pos = t.selectionStart;
+ var end = t.selectionEnd;
+ for(;pos < end; pos++) {
+ if(t.value.charAt(pos) != "\n") break;
+ }
+ for(;end > pos; end--) {
+ if(t.value.charAt(end - 1) != "\n") break;
+ }
+ var quote = "";
+ var cpos = end;
+ if(t.value.charAt(pos - 1) != "\n") {
+ quote += "\n";
+ cpos += 1;
+ }
+ if(pos == end) {
+ quote += text;
+ cpos += text.length;
+ } else {
+ var lines = t.value.substring(pos, end).split("\n");
+ for(var i=0; i < lines.length; i++) {
+ quote += text + lines[i] + "\n";
+ cpos += text.length;
+ }
+ quote = quote.slice(0, -1);
+ }
+ t.value = t.value.substring(0, pos) + quote + t.value.substring(end, t.value.length);
+ }
+ t.focus();
+ t.setSelectionRange(cpos, cpos);
+}
+
+function marxup_bold(e) {
+ wrap("*", "*");
+}
+
+function marxup_header(e) {
+ prepend("= ");
+}
+
+function marxup_italics(e) {
+ wrap("_", "_");
+}
+
+function marxup_link(e) {
+ wrap("[", "]");
+}
+
+function marxup_quote(e) {
+ prepend("> ");
+}
+
+function marxup_list(e) {
+ prepend("* ");
+}
+
+function button(node, html, fun) {
+ var a = document.createElement("a");
+ a.innerHTML = html;
+ a.href = "#";
+ a.onclick = fun;
+ node.parentNode.insertBefore(a, node.nextSibling);
+}
+
+function orz(src) {
+ insert("\n@" + src.replace(".t.jpg", "") + "\n");
+}
+
+document.addEventListener("DOMContentLoaded", function(e) {
+ var title = document.getElementsByTagName('h1')[0];
+ var headers = document.getElementsByTagName("h2");
+ if(headers.length > 0) {
+ var menu = document.createElement("div"); menu.className = 'magisk meny';
+ for(var i = 0; i < headers.length; i++) {
+ var a = document.createElement("a");
+ var id = "h-" + i; headers[i].id = id; a.href = "#" + id;
+ a.textContent = headers[i].textContent;
+ menu.appendChild(a);
+ menu.appendChild(document.createElement("br"));
+ }
+ title.parentNode.insertBefore(menu, title.nextSibling);
+ }
+
+ var orz = document.getElementById('orz');
+ if(orz) {
+ orz.onclick = function(e) {
+ window.open("/orz");
+ return false;
+ }
+ button(orz, "> sitat", marxup_quote);
+ button(orz, "* liste", marxup_list);
+ button(orz, "[lenke]", marxup_link);
+ button(orz, "<i>_kursiv_</i>", marxup_italics);
+ button(orz, "<b>*fet*</b>", marxup_bold);
+ button(orz, "= overskrift", marxup_header);
+ }
+});
+