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(); // CONCENTRATE 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++) { // let me see you strip if(t.value.charAt(pos) != "\n") break; } for(;end > pos; end--) { // front and back if(t.value.charAt(end - 1) != "\n") break; } var quote = ""; var cpos = end; if(t.value.charAt(pos - 1) != "\n") { // in the middle of something? quote += "\n"; // PRE-pend, dang it cpos += 1; } if(pos == end) { // no selection. text only. final destination. quote += text; cpos += text.length; } else { var lines = t.value.substring(pos, end).split("\n"); for(var i=0; i < lines.length; i++) { // do we want to prepend for empty lines inside selection? // if not, add check here. DECISIONS quote += text + lines[i] + "\n"; cpos += text.length; // should i add 1 here for the newline? who knows! } quote = quote.slice(0, -1); // strip bo(g|n)us newline } 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, "_kursiv_", marxup_italics); button(orz, "*fet*", marxup_bold); button(orz, "= overskrift", marxup_header); } });