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);
}
});