ponepaste/theme/bulma/js/paste.js
2022-03-26 23:57:28 -04:00

162 lines
4.4 KiB
JavaScript

function selectText(e) {
if (document.selection) {
var t = document.body.createTextRange();
t.moveToElementText(document.getElementById(e));
t.select();
} else if (window.getSelection) {
var t = document.createRange();
t.selectNode(document.getElementById(e));
window.getSelection().addRange(t);
}
}
function setSelectionRange(e, t, n) {
if (e.setSelectionRange) {
e.focus();
e.setSelectionRange(t, n);
} else if (e.createTextRange) {
var r = e.createTextRange();
r.collapse(true);
r.moveEnd("character", n);
r.moveStart("character", t);
r.select();
}
}
function replaceSelection(e, t) {
if (e.setSelectionRange) {
var n = e.selectionStart;
var r = e.selectionEnd;
e.value = e.value.substring(0, n) + t + e.value.substring(r);
if (n !== r) {
setSelectionRange(e, n, n + t.length);
} else {
setSelectionRange(e, n + t.length, n + t.length);
}
} else if (document.selection) {
var i = document.selection.createRange();
if (i.parentElement() === e) {
var s = i.text === "";
i.text = t;
if (!s) {
i.moveStart("character", -t.length);
i.select();
}
}
}
}
function catchTab(e, t) {
let c;
if (navigator.userAgent.match("Gecko")) {
c = t.which;
} else {
c = t.keyCode;
}
if (c === 9) {
const n = e.scrollTop;
replaceSelection(e, String.fromCharCode(9));
stopEvent(t);
e.scrollTop = n;
return false;
}
}
function stopEvent(e) {
if (e.preventDefault) {
e.preventDefault();
}
if (e.stopPropagation) {
e.stopPropagation();
}
e.stopped = true;
}
var js = {
text: {
lines: function (e) {
return this.getLines(e).length;
},
getLines: function (e) {
return e.split("\n");
},
},
textElement: {
value: function (e) {
return e.value.replace(/\r/g, "");
},
caretPosition: function (e) {
var t = {};
if (document.selection) {
var n = document.selection.createRange();
var r = document.body.createTextRange();
r.moveToElementText(e);
var i;
for (i = 0; r.compareEndPoints("StartToStart", n) < 0; i++) {
r.moveStart("character", 1);
}
t.start = i;
t.end = i + n.text.replace(/\r/g, "").length;
} else if (e.selectionStart || e.selectionStart === 0) {
t.start = e.selectionStart;
t.end = e.selectionEnd;
}
return t;
},
setCaretPosition: function (e, t) {
e.focus();
if (e.setSelectionRange) {
e.setSelectionRange(t.start, t.end);
} else if (e.createTextRange) {
var n = e.createTextRange();
n.moveStart("character", t.start);
n.moveEnd("character", t.end);
n.select();
}
},
},
};
function highlight(e) {
const t = js.textElement.caretPosition(e);
if (!t.start && !t.end) return;
const n = js.text.getLines(js.textElement.value(e));
let r = 0,
i = 0;
let s = "";
let o = false;
let u = 0;
for (const a in n) {
i = r + n[a].length;
if (t.start >= r && t.start <= i) o = true;
if (o) {
const f = n[a].substr(0, 11) === "!highlight!";
if (!u) {
if (f) u = 1;
else u = 2;
}
if (u === 1 && f) n[a] = n[a].substr(11, n[a].length - 11);
else if (u === 2 && !f) s += "!highlight!";
}
s = s + n[a] + "\n";
if (t.end >= r && t.end <= i) o = false;
r = i + 1;
}
e.value = s.substring(0, s.length - 1);
const l = t.start + (u === 1 ? -11 : 11);
js.textElement.setCaretPosition(e, {
start: l,
end: l,
});
}
function togglev() {
if (
document.getElementsByTagName("ol")[0].style.listStyle.substr(0, 4) ===
"none"
) {
document.getElementsByTagName("ol")[0].style.listStyle = "decimal";
} else {
document.getElementsByTagName("ol")[0].style.listStyle = "none";
}
}