//絵文字ピッカー //最初に読み込む $("#emoji-before").addClass("disabled"); $("#emoji-next").addClass("disabled"); //絵文字ボタンのトグル function emojiToggle(reaction) { var acct_id = $("#post-acct-sel").val(); var selin = $("#textarea").prop('selectionStart'); if (!selin) { selin = 0; } if ($("#emoji").hasClass("hide")) { $("#emoji").removeClass("hide") $("#right-side").show() $("#right-side").css("width", "300px") $("#left-side").css("width", "calc(100% - 300px)") var width = localStorage.getItem("postbox-width"); if (width) { width = width.replace("px", "") * 1 + 300 } else { width = 600 } $("#post-box").css("width", width + "px") $("#suggest").html(""); if (!localStorage.getItem("emojis_" + acct_id)) { var html = ''; $("#emoji-list").html(html); } else { emojiList('home', reaction); } } else { $("#poll").addClass("hide") $("#right-side").hide() $("#right-side").css("width", "300px") $("#emoji").addClass("hide") $("#suggest").html(""); $("#left-side").css("width", "100%") var width = localStorage.getItem("postbox-width"); if (width) { width = width.replace("px", "") * 1 } else { width = 300 } $("#post-box").css("width", width + "px") } } //絵文字リスト挿入 function emojiGet(parse, started) { $('#emoji-list').text('Loading...'); var acct_id = $("#post-acct-sel").val(); var domain = localStorage.getItem("domain_" + acct_id); if (localStorage.getItem("mode_" + domain) != "misskey") { var start = "https://" + domain + "/api/v1/custom_emojis"; fetch(start, { method: 'GET', headers: { 'content-type': 'application/json' }, }).then(function (response) { if (!response.ok) { response.text().then(function(text) { setLog(response.url, response.status, text); }); } return response.json(); }).catch(function (error) { todo(error); console.error(error); }).then(function (json) { if (parse == "true") { $('#emoji-list').text('Parsing...'); var md = { "categorized": {}, "uncategorized": [] }; var if_categorized = false Object.keys(json).forEach(function (key) { var emoji = json[key]; if (emoji.visible_in_picker) { var listed = true } else { var listed = false } if (emoji.category) { var cat = emoji.category if (!md["categorized"][cat]) { md["categorized"][cat] = [] } md["categorized"][cat].push({ "shortcode": emoji.shortcode, "url": emoji.url, "listed": listed }) if_categorized = true } else { md["uncategorized"].push({ "shortcode": emoji.shortcode, "url": emoji.url, "listed": listed }) } }); console.log(md) //絵文字をマストドン公式と同順にソート md["uncategorized"].sort(function (a, b) { if (a.shortcode < b.shortcode) return -1; if (a.shortcode > b.shortcode) return 1; return 0; }); Object.keys(md["categorized"]).forEach(function (key) { md["categorized"][key].sort(function (a, b) { if (a.shortcode < b.shortcode) return -1; if (a.shortcode > b.shortcode) return 1; return 0; }); }); md["if_categorized"] = if_categorized localStorage.setItem("emojis_" + acct_id, JSON.stringify(md)); } else { localStorage.setItem("emojis_" + acct_id, JSON.stringify(md)); } localStorage.setItem("emojiseek", 0); if (!started) { emojiList('home') } }); } else { var start = "https://" + domain + "/api/meta"; fetch(start, { method: 'POST', headers: { 'content-type': 'application/json' }, }).then(function (response) { if (!response.ok) { response.text().then(function(text) { setLog(response.url, response.status, text); }); } return response.json(); }).catch(function (error) { todo(error); console.error(error); }).then(function (json) { if (json.enableEmojiReaction) { localStorage.setItem("emojiReaction_" + acct_id, "true"); } else { localStorage.setItem("emojiReaction_" + acct_id, "disabled"); } var emojis = json.emojis; var md = {"uncategorized": []} Object.keys(emojis).forEach(function (key) { var emoji = emojis[key]; md["uncategorized"].push({ "shortcode": emoji.name, "url": emoji.url, "listed": true }) }); md["if_categorized"] = false if (parse == "true") { $('#emoji-list').text('Parsing...'); //絵文字をマストドン公式と同順にソート md["uncategorized"].sort(function (a, b) { if (a.shortcode < b.shortcode) return -1; if (a.shortcode > b.shortcode) return 1; return 0; }); localStorage.setItem("emojis_" + acct_id, JSON.stringify(md)); } else { localStorage.setItem("emojis_" + acct_id, JSON.stringify(md)); } localStorage.setItem("emojiseek", 0); if (!started) { emojiList('home') } }); } } //リストの描画 function emojiList(target, reaction) { $("#now-emoji").text(lang.lang_emoji_custom); var acct_id = $("#post-acct-sel").val(); if (reaction && localStorage.getItem("emojiReaction_" + acct_id) != "true") { console.error("Disabled") clear() hide(); return false; } var start = localStorage.getItem("emojiseek"); if (target == "next") { var start = start * 1 + 127; localStorage.setItem("emojiseek", start); } else if (target == "before") { var start = start - 127; localStorage.setItem("emojiseek", start); } else { var start = 0; localStorage.getItem("emojiseek", 0) } var html = ''; var raw = JSON.parse(localStorage.getItem("emojis_" + acct_id)); console.log(raw) if (raw.if_categorized) { var obj = [{ "divider": true, "cat": lang.lang_emoji_uncat }] var cats = raw["uncategorized"] obj = obj.concat(cats); Object.keys(raw["categorized"]).forEach(function (key) { var cats = raw["categorized"][key]; obj = obj.concat([{ "divider": true, "cat": key }]); obj = obj.concat(cats); }); } else { var obj = raw["uncategorized"] } console.log(obj) var num = obj.length; if (num < start) { var start = 0; localStorage.setItem("emojiseek", start); } var page = Math.ceil(num / 126); $("#emoji-sum").text(page); var ct = Math.ceil(start / 126); if (ct === 0) { if(num > 0){ var ct = 1; } $("#emoji-before").addClass("disabled"); } else { $("#emoji-before").removeClass("disabled"); } if (page != 1) { $("#emoji-next").removeClass("disabled"); } else { $("#emoji-next").addClass("disabled"); } $("#emoji-count").text(ct); for (i = start; i < start + 126; i++) { var emoji = obj[i]; if (emoji) { if (reaction) { html = html + ''; } else { if(emoji.divider){ html = html + '

'+ emoji.cat +'

' }else{ if (emoji.listed) { html = html + ''; } } } } } $("#emoji-list").html(html); } //絵文字など様々なものをテキストボックスに挿入 function emojiInsert(code, del) { var now = $("#textarea").val(); var selin = $("#textarea").prop('selectionStart'); if (localStorage.getItem("emoji-zero-width") == "yes") { var blank = "​"; } else { var blank = " "; } var before = now.substr(0, selin); if (before.slice(-1) != " ") { before = before + blank } var after = now.substr(selin, now.length); if (after.slice(-1) != " ") { after = blank + after } newt = before + code + after; if (!del) { $("#textarea").val(newt); //emoji(); } else { var regExp = new RegExp(del.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g"); var now = now.replace(regExp, ""); $("#textarea").val(now + blank + code); } $("#textarea").focus(); } //改行挿入 function brInsert(code) { if (!$('#post-box').hasClass("appear")) { localStorage.setItem("nohide", true); show(); } var now = $("#textarea").val(); $("#textarea").val(now + code); $("#textarea").focus(); }