2018-01-28 23:22:43 +11:00
|
|
|
//BBCodeとMarkdownの入力・パーサー
|
2018-02-09 03:43:11 +11:00
|
|
|
//アカウント変えた時にBBとかMDとか
|
2019-05-19 17:39:30 +10:00
|
|
|
function mdCheck() {
|
2018-02-09 03:43:11 +11:00
|
|
|
var acct_id = $("#post-acct-sel").val();
|
2019-05-19 17:39:30 +10:00
|
|
|
var profimg = localStorage.getItem("prof_" + acct_id);
|
|
|
|
if (!profimg) {
|
|
|
|
profimg = "../../img/missing.svg";
|
2018-08-21 04:26:14 +10:00
|
|
|
}
|
2019-05-19 17:39:30 +10:00
|
|
|
$("#acct-sel-prof").attr("src", profimg);
|
|
|
|
if (localStorage.getItem("post_" + acct_id)) {
|
|
|
|
$("#toot-post-btn").text(localStorage.getItem("post_" + acct_id) + "(" + localStorage.getItem("domain_" + acct_id) + ")");
|
|
|
|
} else {
|
|
|
|
$("#toot-post-btn").text(lang.lang_toot + "(" + localStorage.getItem("domain_" + acct_id) + ")");
|
|
|
|
}
|
|
|
|
if (!localStorage.getItem("bb_" + acct_id) && !localStorage.getItem("md_" + acct_id)) {
|
|
|
|
$(".markdown").addClass("hide");
|
2018-02-09 03:43:11 +11:00
|
|
|
$(".anti-markdown").addClass("hide");
|
2019-05-19 17:39:30 +10:00
|
|
|
} else {
|
2018-06-18 00:26:45 +10:00
|
|
|
$(".anti-markdown").removeClass("hide");
|
2019-05-19 17:39:30 +10:00
|
|
|
}
|
|
|
|
if ($(".markdown").hasClass("hide")) {
|
|
|
|
localStorage.setItem("md", "hide");
|
|
|
|
} else {
|
2018-02-09 03:43:11 +11:00
|
|
|
localStorage.removeItem("md");
|
|
|
|
}
|
2018-03-20 15:55:25 +11:00
|
|
|
var domain = localStorage.getItem("domain_" + acct_id);
|
2019-05-19 17:39:30 +10:00
|
|
|
if (domain == "itabashi.0j0.jp") {
|
2018-04-09 00:17:33 +10:00
|
|
|
$("#limited-button").removeClass("hide");
|
2019-05-19 17:39:30 +10:00
|
|
|
} else {
|
2018-04-09 00:17:33 +10:00
|
|
|
$("#limited-button").addClass("hide");
|
2018-03-20 15:55:25 +11:00
|
|
|
}
|
2019-05-19 17:39:30 +10:00
|
|
|
if (domain == "kirishima.cloud") {
|
2018-03-31 13:39:06 +11:00
|
|
|
$("#faicon-btn").show();
|
2019-05-19 17:39:30 +10:00
|
|
|
} else {
|
2018-03-31 13:39:06 +11:00
|
|
|
$("#faicon-btn").hide();
|
|
|
|
}
|
2019-05-19 17:39:30 +10:00
|
|
|
if (domain == "imastodon.net") {
|
2018-05-20 16:17:10 +10:00
|
|
|
trendTag();
|
2019-05-19 17:39:30 +10:00
|
|
|
} else {
|
2018-05-20 16:17:10 +10:00
|
|
|
$("#trendtag").html("");
|
|
|
|
}
|
2019-05-19 17:39:30 +10:00
|
|
|
if (localStorage.getItem("mode_" + domain) == "misskey") {
|
2019-06-07 02:11:04 +10:00
|
|
|
M.toast({ html: lang.lang_bbmd_misskey, displayLength: 5000 })
|
2018-07-30 21:03:49 +10:00
|
|
|
}
|
2019-05-19 17:39:30 +10:00
|
|
|
if (idata[domain + "_letters"]) {
|
|
|
|
$("#textarea").attr("data-length", idata[domain + "_letters"])
|
|
|
|
} else {
|
2018-04-16 23:58:14 +10:00
|
|
|
$("#textarea").attr("data-length", 500)
|
|
|
|
}
|
2019-05-19 17:39:30 +10:00
|
|
|
if (idata[domain + "_glitch"] === "true") {
|
2018-09-06 02:47:27 +10:00
|
|
|
$("#local-button").removeClass("hide");
|
2019-05-19 17:39:30 +10:00
|
|
|
} else {
|
2018-12-09 05:46:01 +11:00
|
|
|
$("#local-button").addClass("hide");
|
2018-09-06 02:47:27 +10:00
|
|
|
}
|
2018-06-18 00:26:45 +10:00
|
|
|
var multi = localStorage.getItem("multi");
|
|
|
|
if (multi) {
|
|
|
|
var obj = JSON.parse(multi);
|
2019-05-19 17:39:30 +10:00
|
|
|
if (obj[acct_id].background && obj[acct_id].background != "def" && obj[acct_id].text && obj[acct_id].text != "def") {
|
2018-06-18 00:26:45 +10:00
|
|
|
$("#toot-post-btn").removeClass("indigo");
|
2019-05-19 17:39:30 +10:00
|
|
|
$("#toot-post-btn").css("background-color", "#" + obj[acct_id].background);
|
|
|
|
$("#toot-post-btn").css("color", obj[acct_id].text);
|
|
|
|
} else {
|
|
|
|
$("#toot-post-btn").css("background-color", "");
|
|
|
|
$("#toot-post-btn").css("color", "");
|
2018-06-18 00:26:45 +10:00
|
|
|
$("#toot-post-btn").addClass("indigo");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
loadVis();
|
2018-02-09 03:43:11 +11:00
|
|
|
}
|
2018-01-28 23:22:43 +11:00
|
|
|
//BOXのトグルボタン
|
2019-05-19 17:39:30 +10:00
|
|
|
function mdToggle() {
|
2018-01-28 23:22:43 +11:00
|
|
|
$(".markdown").toggleClass("hide");
|
|
|
|
$(".anti-markdown").toggleClass("hide");
|
2019-05-19 17:39:30 +10:00
|
|
|
if ($(".markdown").hasClass("hide")) {
|
|
|
|
localStorage.setItem("md", "hide");
|
|
|
|
} else {
|
2018-01-28 23:22:43 +11:00
|
|
|
localStorage.removeItem("md");
|
|
|
|
}
|
2019-05-19 17:39:30 +10:00
|
|
|
|
2018-01-28 23:22:43 +11:00
|
|
|
}
|
|
|
|
//最初に読み込みます(MD対応インスタンスかチェック)
|
2019-05-19 17:39:30 +10:00
|
|
|
if (localStorage.getItem("md") == "hide") {
|
2018-01-28 23:22:43 +11:00
|
|
|
$(".markdown").addClass("hide");
|
|
|
|
$(".anti-markdown").removeClass("hide");
|
|
|
|
}
|
|
|
|
//タグを選んだ時に(BB版)
|
2019-05-19 17:39:30 +10:00
|
|
|
function tagsel(tag) {
|
|
|
|
var acct_id = $("#post-acct-sel").val();
|
|
|
|
if (!localStorage.getItem("bb_" + acct_id)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
if (tag == "large" || tag == "size" || tag == "color" || tag == "colorhex") {
|
|
|
|
var sub = $("#" + tag).val();
|
|
|
|
var sub = sub.replace(/#/g, "");
|
|
|
|
surroundHTML(tag + "=" + sub, tag);
|
|
|
|
} else if (tag == "flip=vertical" || tag == "flip=horizontal") {
|
|
|
|
surroundHTML(tag, "flip");
|
|
|
|
} else {
|
|
|
|
surroundHTML(tag, tag);
|
|
|
|
}
|
|
|
|
$("#textarea").focus();
|
|
|
|
}
|
|
|
|
//HTMLをエスケープしてXSSを防ぐ
|
|
|
|
function escape_html(string) {
|
|
|
|
if (typeof string !== 'string') {
|
|
|
|
return string;
|
|
|
|
}
|
|
|
|
return string.replace(/[&'`"<>]/g, function (match) {
|
|
|
|
return {
|
|
|
|
'&': '&',
|
|
|
|
"'": ''',
|
|
|
|
'`': '`',
|
|
|
|
'"': '"',
|
|
|
|
'<': '<',
|
|
|
|
'>': '>',
|
|
|
|
}[match]
|
|
|
|
});
|
2018-01-28 23:22:43 +11:00
|
|
|
}
|
|
|
|
//テキストボックスで選択したやつをタグで囲む(BB版)
|
2019-05-19 17:39:30 +10:00
|
|
|
function surroundHTML(tagS, tagE) {
|
2018-02-09 03:43:11 +11:00
|
|
|
var acct_id = $("#post-acct-sel").val();
|
2019-05-19 17:39:30 +10:00
|
|
|
if (!localStorage.getItem("bb_" + acct_id)) {
|
|
|
|
return false;
|
|
|
|
}
|
2018-01-28 23:22:43 +11:00
|
|
|
var target = document.getElementById("textarea");
|
|
|
|
var pos = getAreaRange(target);
|
|
|
|
|
|
|
|
var val = target.value;
|
|
|
|
var range = val.slice(pos.start, pos.end);
|
2019-05-19 17:39:30 +10:00
|
|
|
var beforeNode = val.slice(0, pos.start);
|
|
|
|
var afterNode = val.slice(pos.end);
|
2018-01-28 23:22:43 +11:00
|
|
|
var insertNode;
|
2019-05-19 17:39:30 +10:00
|
|
|
if (range || pos.start != pos.end) {
|
|
|
|
insertNode = '[' + tagS + ']' + range + '[/' + tagE + ']';
|
|
|
|
target.value = beforeNode + insertNode + afterNode;
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (pos.start == pos.end) {
|
|
|
|
insertNode = '[' + tagS + ']' + '[/' + tagE + ']';
|
|
|
|
target.value = beforeNode + insertNode + afterNode;
|
|
|
|
}
|
2018-01-28 23:22:43 +11:00
|
|
|
}
|
2019-05-19 17:39:30 +10:00
|
|
|
function markdown(tag, ck, br, space) {
|
|
|
|
if (space == "before") {
|
|
|
|
tagE = tag;
|
|
|
|
tag = " " + tag;
|
|
|
|
} else {
|
|
|
|
tagE = tag;
|
|
|
|
}
|
|
|
|
surroundMD(tag, tagE, ck, br);
|
|
|
|
$("#textarea").focus();
|
|
|
|
}
|
|
|
|
function surroundMD(tagS, tagE, ck, br) {
|
2018-02-09 03:43:11 +11:00
|
|
|
var acct_id = $("#post-acct-sel").val();
|
2019-05-19 17:39:30 +10:00
|
|
|
if (!localStorage.getItem("md_" + acct_id)) {
|
|
|
|
return false;
|
|
|
|
}
|
2018-01-28 23:22:43 +11:00
|
|
|
var target = document.getElementById("textarea");
|
|
|
|
var pos = getAreaRange(target);
|
|
|
|
|
|
|
|
var val = target.value;
|
|
|
|
var range = val.slice(pos.start, pos.end);
|
2019-05-19 17:39:30 +10:00
|
|
|
var beforeNode = val.slice(0, pos.start);
|
|
|
|
var afterNode = val.slice(pos.end);
|
2018-01-28 23:22:43 +11:00
|
|
|
var insertNode;
|
2019-05-19 17:39:30 +10:00
|
|
|
if (br == "yes") {
|
|
|
|
var br = "\n";
|
|
|
|
} else {
|
|
|
|
var br = "";
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((range || pos.start != pos.end) && ck == "yes") {
|
|
|
|
insertNode = tagS + range + tagE;
|
|
|
|
target.value = beforeNode + insertNode + br + afterNode;
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (pos.start == pos.end || ck == "no") {
|
|
|
|
insertNode = tagS + range;
|
|
|
|
target.value = beforeNode + insertNode + br + afterNode;
|
2018-01-28 23:22:43 +11:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//テキストボックスの前後チェック
|
|
|
|
function getAreaRange(obj) {
|
|
|
|
var pos = new Object();
|
2019-05-19 17:39:30 +10:00
|
|
|
if (window.getSelection()) {
|
2018-01-28 23:22:43 +11:00
|
|
|
pos.start = obj.selectionStart;
|
2019-05-19 17:39:30 +10:00
|
|
|
pos.end = obj.selectionEnd;
|
2018-01-28 23:22:43 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
return pos;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Markdownのリンク挿入
|
2019-05-19 17:39:30 +10:00
|
|
|
function markdownLink() {
|
2018-02-09 03:43:11 +11:00
|
|
|
var acct_id = $("#post-acct-sel").val();
|
2019-05-19 17:39:30 +10:00
|
|
|
if (!localStorage.getItem("md_" + acct_id)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
var linkIns = "[" + $("#linkt").val() + "]" + "(" + $("#link2").val() + ")";
|
|
|
|
if (linkIns != "[]()") {
|
|
|
|
$("#textarea").val($("#textarea").val() + linkIns);
|
|
|
|
$("#linkt").val("");
|
|
|
|
$("#link2").val("");
|
|
|
|
$("#textarea").focus();
|
2018-01-28 23:22:43 +11:00
|
|
|
}
|
|
|
|
}
|
|
|
|
//Markdownのimg挿入
|
2019-05-19 17:39:30 +10:00
|
|
|
function markdownImage() {
|
2018-02-09 03:43:11 +11:00
|
|
|
var acct_id = $("#post-acct-sel").val();
|
2019-05-19 17:39:30 +10:00
|
|
|
if (!localStorage.getItem("md_" + acct_id)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
var imgIns = "![" + $("#image").val() + "]" + "(" + $("#image2").val() + ")";
|
|
|
|
if (imgIns != "![]()") {
|
|
|
|
$("#textarea").val($("#textarea").val() + imgIns);
|
|
|
|
$("#image").val("");
|
|
|
|
$("#image2").val("");
|
|
|
|
$("#textarea").focus();
|
2018-01-28 23:22:43 +11:00
|
|
|
}
|
|
|
|
}
|
|
|
|
//文字数をチェック(hタグ用)
|
|
|
|
function str_count(all, part) {
|
2019-05-19 17:39:30 +10:00
|
|
|
return (all.match(new RegExp(part, "g")) || []).length;
|
2018-01-28 23:22:43 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
//プレビュー
|
2019-05-19 17:39:30 +10:00
|
|
|
function preview() {
|
|
|
|
$("#preview-field").show();
|
|
|
|
$("#toot-field").hide();
|
|
|
|
$("#preview-btn").hide();
|
|
|
|
var bb = escape_html($("#textarea").val());
|
2018-01-28 23:22:43 +11:00
|
|
|
//quote
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/>(.+)$/g, '<blockquote>$1<\/blockquote>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//spin
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[spin\](.+)\[\/spin\]/g, '<span class="fa fa-spin">$1<\/span>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//pulse
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[pulse\](.+)\[\/pulse\]/g, '<span class="bbcode-pulse-loading">$1<\/span>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//large
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[large=([0-9]{1,2})x\](.+)\[\/large\]/g, '<span class="fa fa-$1x">$2<\/span>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//vertical
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[flip=vertical\](.+)\[\/flip\]/g, '<span class="fa fa-flip-vertical">$1<\/span>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//horizontal
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[flip=horizontal\](.+)\[\/flip\]/g, '<span class="fa fa-flip-horizontal">$1<\/span>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//b
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[b\](.+)\[\/b\]/g, '<b>$1<\/b>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//i
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[i\](.+)\[\/i\]/g, '<i>$1<\/i>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//u
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[u\](.+)\[\/u\]/g, '<u>$1<\/u>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//s
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[s\](.+)\[\/s\]/g, '<s>$1<\/s>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//size
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[size=([0-9]{1,2})\](.+)\[\/size\]/g, '<span style="font-size:$1px">$2<\/span>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//colorhex
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[colorhex=([A-Fa-f0-9]+)\](.+)\[\/colorhex\]/g, '<span style="color:#$1">$2<\/span>');
|
2018-01-28 23:22:43 +11:00
|
|
|
//code
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/`(.+)`/g, '<code>$1<\/code>');
|
2018-02-13 06:16:46 +11:00
|
|
|
//head
|
2018-01-28 23:22:43 +11:00
|
|
|
var m;
|
2019-05-19 17:39:30 +10:00
|
|
|
m = bb.match(/^#{1,6}(.+)$/gm);
|
|
|
|
if (m) {
|
|
|
|
for (let i = 0; i < m.length; i++) {
|
|
|
|
var t = m[i].match(/^#{1,6}(.+)$/);
|
|
|
|
var indexct = '<h' + str_count(m[i], "#") + '>' + t[1] + '</h' + str_count(m[i], "#") + '>';
|
|
|
|
var bb = bb.replace(new RegExp(m[i], ""), indexct);
|
|
|
|
}
|
2018-01-28 23:22:43 +11:00
|
|
|
}
|
2018-02-13 06:16:46 +11:00
|
|
|
//list(ul)
|
|
|
|
var li;
|
2019-05-19 17:39:30 +10:00
|
|
|
li = bb.match(/^\- (.+)$/gm);
|
|
|
|
if (li) {
|
|
|
|
for (let l = 0; l < li.length; l++) {
|
|
|
|
var u = li[l].match(/^\- (.+)$/);
|
|
|
|
var listUl = '<li>' + u[1] + '</li>';
|
|
|
|
if (l == 0) {
|
|
|
|
listUl = '<ul>' + listUl;
|
|
|
|
}
|
|
|
|
if (l == li.length - 1) {
|
|
|
|
listUl = listUl + '</ul>';
|
|
|
|
}
|
|
|
|
var bb = bb.replace(new RegExp(li[l], ""), listUl);
|
2018-02-13 06:16:46 +11:00
|
|
|
}
|
|
|
|
}
|
|
|
|
//list(ol)
|
|
|
|
var li;
|
2019-05-19 17:39:30 +10:00
|
|
|
li = bb.match(/^1\. (.+)$/gm);
|
|
|
|
if (li) {
|
|
|
|
for (let l = 0; l < li.length; l++) {
|
|
|
|
var u = li[l].match(/^1\. (.+)$/);
|
|
|
|
var listUl = '<li>' + u[1] + '</li>';
|
|
|
|
if (l === 0) {
|
|
|
|
listUl = '<ol>' + listUl;
|
|
|
|
}
|
|
|
|
if (l === li.length - 1) {
|
|
|
|
listUl = listUl + '</ol>';
|
|
|
|
}
|
|
|
|
var bb = bb.replace(new RegExp(li[l], ""), listUl);
|
2018-02-13 06:16:46 +11:00
|
|
|
}
|
|
|
|
}
|
2018-01-28 23:22:43 +11:00
|
|
|
//img
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/!\[(.+)\]\((https:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\)/g, '<img src="$2" text="$1" style="width:100%">');
|
2018-01-28 23:22:43 +11:00
|
|
|
//link
|
2019-05-19 17:39:30 +10:00
|
|
|
var bb = bb.replace(/\[(.+)\]\((https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\)/g, '<a href="$2" target="_blank">$1<\/a>');
|
|
|
|
bb = nl2br(bb);
|
|
|
|
bb = bb.replace(new RegExp("</li><br />", "g"), "");
|
2018-02-13 06:16:46 +11:00
|
|
|
$("#md-preview").html(bb);
|
2019-05-19 17:39:30 +10:00
|
|
|
}
|
|
|
|
//Editで戻る
|
|
|
|
function previewEdit() {
|
|
|
|
$("#preview-field").hide();
|
|
|
|
$("#toot-field").show();
|
|
|
|
$("#preview-btn").show();
|
|
|
|
$("#md-preview").html("");
|
|
|
|
}
|