/* thx to "yot" from Heyuri.net. */
/* Add emotes v1.2 */
/* get it from https://2ch.sh/src/2572.js */
/* textboard edition */
/*
add text to where the cursor is located in a textarea (and focus on it)
this also replaces any selected text!
this function taken from https://stackoverflow.com/a/11077016
with minor changes
myField: which textarea to change (in this file, it's gonna be COMMENT)
myValue: what text to add
*/
function insertAtCursor(myField, myValue) {
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = myValue;
}
//MOZILLA and others
else if (myField.selectionStart || myField.selectionStart === 0) {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos)
+ myValue
+ myField.value.substring(endPos, myField.value.length);
myField.selectionStart = startPos + myValue.length;
myField.selectionEnd = startPos + myValue.length;
myField.focus();
} else {
myField.value += myValue;
}
}
/* DATA */
const emotes_list = [
{src:"mona2.gif", value:":mona2:"},
{src:"nida.gif", value:":nida:"},
{src:"iyahoo.gif", value:":iyahoo:"},
{src:"banana.gif", value:":banana:"},
{src:"onigiri.gif", value:":onigiri:"},
{src:"anime_shii01.gif", value:":shii:"},
{src:"anime_saitama05.gif", value:":saitama:"},
{src:"foruda.gif", value:":foruda:"},
{src:"nagato.gif", value:":nagato:"},
{src:"u_pata.gif", value:":pata:"},
{src:"u_sasu.gif", value:":depression:"},
{src:"anime_saitama06.gif", value:":saitama2:"},
{src:"anime_miruna_pc.gif", value:":monapc:"},
{src:"purin.gif", value:":purin:"},
{src:"anime_imanouchi04.gif", value:":ranta:"},
];
const shift_jis = [
{display: "ヽ(´ー`)ノ", value: "[kao]ヽ(´ー`)ノ[/kao]"},
{display: "(;´Д`)", value: "[kao](;´Д`)[/kao]"},
{display: "ヽ(´∇`)ノ", value: "[kao]ヽ(´∇`)ノ[/kao]"},
{display: "(´人`)", value: "[kao](´人`)[/kao]"},
{display: "(^Д^)", value: "[kao](^Д^)[/kao]"},
{display: "(´ー`)", value: "[kao](´ー`)[/kao]"},
{display: "( ´,_ゝ`)", value: "[kao]( ´,_ゝ`)[/kao]"},
{display: "(´~`)", value: "[kao](´~`)[/kao]"},
{display: "(;゚Д゚)", value: "[kao](;゚Д゚)[/kao]"},
{display: "(;゚∀゚)", value: "[kao](;゚∀゚)[/kao]"},
{display: "┐(゚~゚)┌", value: "[kao]┐(゚~゚)┌[/kao]"},
{display: "ヽ(`Д´)ノ", value: "[kao]ヽ(`Д´)ノ[/kao]"},
{display: "( ´ω`)", value: "[kao]( ´ω`)[/kao]"},
{display: "(゚ー`)", value: "[kao](゚ー`)[/kao]"},
{display: "(・∀・)", value: "[kao](・∀・)[/kao]"},
{display: "(⌒∇⌒ゞ)", value: "[kao](⌒∇⌒ゞ)[/kao]"},
{display: "(゚血゚#)", value: "[kao](゚血゚#)[/kao]"},
{display: "(゚ー゚)", value: "[kao](゚ー゚)[/kao]"},
{display: "(´¬`)", value: "[kao](´¬`)[/kao]"},
{display: "(´π`)", value: "[kao](´π`)[/kao]"},
{display: "ヽ(゚ρ゚)ノ", value: "[kao]ヽ(゚ρ゚)ノ[/kao]"},
{display: "Σ(;゚Д゚)", value: "[kao]Σ(;゚Д゚)[/kao]"},
{display: "Σ(゚д゚|||)", value: "[kao]Σ(゚д゚|||)[/kao]"},
{display: "(*゚∀゚)", value: "[kao](*゚∀゚)[/kao]"},
{display: "( ̄ー ̄)", value: "[kao]( ̄ー ̄)[/kao]"},
{display: "\(^o^)/", value: "[kao]\(^o^)/[/kao]"},
{display: "(´・ω・`)", value: "[kao](´・ω・`)[/kao]"},
{display: "(σ・∀・)σ", value: "[kao](σ・∀・)σ[/kao]"},
{display: "(*^ー゚)b ", value: "[kao](*^ー゚)b [/kao]"},
{display: "(-_-)", value: "[kao](-_-)[/kao]"},
{display: "(=゚ω゚)ノ", value: "[kao](=゚ω゚)ノ[/kao]"},
{display: "(・A・)", value: "[kao](・A・)[/kao]"},
{display: "( ´∀`)つ", value: "[kao]( ´∀`)つ[/kao]"},
{display: "(@^▽^)/", value: "[kao](@^▽^)/[/kao]"}
];
const bbcode = [
{meaning:"Bold ",code:"b"},
{meaning:"Italics ",code:"i"},
{meaning:"Underline ",code:"u"},
{meaning:"Strikethrough ",code:"del"},
{meaning:" Spoiler ",code:"s"},
{meaning:"
Preformatted
",code:"pre"},
{meaning:"Blockquote
",code:"quote"},
{meaning:" Code
",code:"code"},
];
const selector_bbcode = [ // BBCodes with selectors
{meaning:"Color ", code:"color",selector:"#800043"},
{meaning:"Size
",code:"s",selector:"7"},
];
/* CONSTANTS */
const NUM_EMOTES = emotes_list.length;
const COMMENT = document.getElementById("com");
/* FUNCTIONS */
const onClickHandler = (e) => insertAtCursor(COMMENT, e.target.title); //COMMENT.value += e.target.title;
const SUMMARY_ELEMENT = (summary_title) => {
return ""+summary_title+"";
};
const insertBBCode = () => {
if (text_input.value === "") {
return;
} else {
let formatted_str = "";
// get all checkboxes
let checkboxes = document.querySelectorAll("#bbcode_container > label > input[type=checkbox]");
// run through all checkboxes
checkboxes.forEach((checkbox,index) => {
if (checkbox.checked) {
switch(index) {
case 8: // COLOR
formatted_str += "["+selector_bbcode[0].code+"="+selector_bbcode[0].selector+"]";
break;
case 9: // SIZE
formatted_str += "["+selector_bbcode[1].code+selector_bbcode[1].selector+"]";
break;
default:
//console.log(checkbox,"checkbox");
formatted_str += "["+bbcode[index].code+"]";
break;
}
}
})
// add string in text input after running through checkboxes
formatted_str += text_input.value;
// check in reverse and add closing tags
for (let index=checkboxes.length; index>=0;index--) {
if (checkboxes[index]?.checked) { // '?.'-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining
switch(index) {
case 8: // COLOR
formatted_str += "[/"+selector_bbcode[0].code+"]";
break;
case 9: // SIZE
formatted_str += "[/"+selector_bbcode[1].code+selector_bbcode[1].selector+"]";
break;
default:
//console.log(checkbox,"checkbox");
formatted_str += "[/"+bbcode[index].code+"]";
break;
}
}
}
// add the BBCode formatted string to the comment field
insertAtCursor(COMMENT, formatted_str)//COMMENT.value += formatted_str;
}
};
/* EMOTES */
let emotes_container = document.createElement("details");
emotes_container.innerHTML += SUMMARY_ELEMENT("Emotes");
emotes_list.forEach((emote,index) => {
let button = document.createElement('button');
button.type = "button";
button.title = emote.value;
button.innerHTML += '
';
button.addEventListener("click", onClickHandler);
emotes_container.appendChild(button);
if (index%8 === 7) { // 8 emotes per row
emotes_container.appendChild(document.createElement('br'));
}
});
// A.after(B), B.after(C), etc... = A --> B --> C --> ...
COMMENT.after(emotes_container); // insert emotes after comment box
/* SHIFT_JIS */
let sjis_container = document.createElement("details");
sjis_container.innerHTML += SUMMARY_ELEMENT("Kaomoji");
shift_jis.forEach((sjis, index) => {
let button = document.createElement('button');
button.type = "button";
button.title = sjis.value;
button.dataset.value = sjis.value;
button.innerHTML += '' + sjis.display + '
';
button.addEventListener("click", onClickHandler);
sjis_container.appendChild(button);
if (index % 7 === 6) { // 7 kaomoji per row
sjis_container.appendChild(document.createElement('br'));
}
});
emotes_container.after(sjis_container); // insert sjis after emotes
/* BBCODE */
let bbcode_container = document.createElement("details");
bbcode_container.id = "bbcode_container";
bbcode_container.innerHTML += SUMMARY_ELEMENT("BBCode");
bbcode.forEach((code,index) => {
let input_label = document.createElement("label");
let checkbox = document.createElement("input");
checkbox.type = "checkbox";
input_label.appendChild(checkbox);
input_label.innerHTML += code.meaning+" ";
if (index%4 === 0 && index !== 0) { // 5 BBCodes per row
bbcode_container.appendChild(document.createElement('br'));
}
bbcode_container.appendChild(input_label);
});
bbcode_container.appendChild(document.createElement('br'));
/* bbcode with selectors */
// color
let color_label = document.createElement("label");
let color_checkbox = document.createElement("input");
color_checkbox.type = "checkbox";
color_label.appendChild(color_checkbox);
color_label.innerHTML += selector_bbcode[0].meaning;
let color_input = document.createElement("input");
color_input.type = "color";
color_input.value = "#800043";
color_input.addEventListener('change',(e)=>selector_bbcode[0].selector=e.target.value);
color_label.appendChild(color_input);
bbcode_container.appendChild(color_label);
//size
let size_label = document.createElement("label");
let size_checkbox = document.createElement("input");
size_checkbox.type = "checkbox";
size_label.appendChild(size_checkbox);
size_label.innerHTML += selector_bbcode[1].meaning;
let size_input = document.createElement("input");
size_input.type = "number";
size_input.value = "7";
size_input.min = "1";
size_input.max = "7";
size_input.size = "1";
size_input.addEventListener('change',(e)=>selector_bbcode[1].selector=e.target.value);
size_label.appendChild(size_input);
bbcode_container.appendChild(size_label);
bbcode_container.appendChild(document.createElement("br"));
// text input + add button
let text_input = document.createElement("textarea");
text_input.rows = "3";
text_input.cols = "30";
text_input.id = "bbcode_text_input";
let add_button = document.createElement("input");
add_button.type = "button";
add_button.value = "Add";
add_button.id = "bbcode_add_button";
add_button.addEventListener('click', insertBBCode);
bbcode_container.appendChild(text_input);
bbcode_container.appendChild(add_button);
sjis_container.after(bbcode_container);