//お気に入り登録やブースト等、フォローやブロック等 //お気に入り登録 function fav(id, acct_id, remote) { if ($("#pub_" + id).hasClass("faved")) { var flag = "unfavourite"; } else { var flag = "favourite"; } var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); var start = "https://" + domain + "/api/v1/statuses/" + id + "/" + flag; var httpreq = new XMLHttpRequest(); httpreq.open("POST", start, true); httpreq.setRequestHeader("Content-Type", "application/json"); httpreq.setRequestHeader("Authorization", "Bearer " + at); httpreq.responseType = "json"; httpreq.send(); httpreq.onreadystatechange = function() { if (httpreq.readyState === 4) { var json = httpreq.response; if (this.status !== 200) { setLog(start, this.status, json); } if (json.reblog) { json = json.reblog; } if (remote != "remote") { //APIのふぁぼカウントがおかしい if ($("[unique-id=" + id + "] .fav_ct").text() == json.favourites_count) { if (flag == "unfavourite") { var fav = json.favourites_count - 1; if (fav * 1 < 0) { fav = 0; } } else { var fav = json.favourites_count; //var fav = json.favourites_count; } } else { var fav = json.favourites_count; } $("[unique-id=" + id + "] .fav_ct").text(fav); $("[unique-id=" + id + "] .rt_ct").text(json.reblogs_count); if ($("[unique-id=" + id + "]").hasClass("faved")) { $("[unique-id=" + id + "]").removeClass("faved"); $(".fav_" + id).removeClass("yellow-text"); } else { $("[unique-id=" + id + "]").addClass("faved"); $(".fav_" + id).addClass("yellow-text"); } } else { M.toast({ html: lang.lang_status_favWarn, displayLength: 1000 }); } } }; } //ブースト function rt(id, acct_id, remote, vis) { if ($("#pub_" + id).hasClass("rted")) { var flag = "unreblog"; } else { var flag = "reblog"; } var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); var start = "https://" + domain + "/api/v1/statuses/" + id + "/" + flag; var httpreq = new XMLHttpRequest(); httpreq.open("POST", start, true); httpreq.setRequestHeader("Content-Type", "application/json"); httpreq.setRequestHeader("Authorization", "Bearer " + at); httpreq.responseType = "json"; if (vis) { httpreq.send(JSON.stringify({ visibility: vis })); } else { httpreq.send(); } httpreq.onreadystatechange = function() { if (httpreq.readyState === 4) { var json = httpreq.response; if (this.status !== 200) { setLog(start, this.status, json); } if (json.reblog) { json = json.reblog; } console.log(["Success: boost", json]); $("[unique-id=" + id + "] .fav_ct").text(json.favourites_count); if (!json.reblog) { if (flag == "unreblog") { var rt = json.reblogs_count - 1; if (rt * 1 < 0) { rt = 0; } } else { var rt = json.reblogs_count; } $("[unique-id=" + id + "] .rt_ct").text(rt); } else { $("[unique-id=" + id + "] .rt_ct").text(json.reblogs_count); } if ($("[unique-id=" + id + "]").hasClass("rted")) { $("[unique-id=" + id + "]").removeClass("rted"); $(".rt_" + id).removeClass("light-blue-text"); } else { $("[unique-id=" + id + "]").addClass("rted"); $(".rt_" + id).addClass("light-blue-text"); } } }; } function boostWith(vis) { var id = $("#tootmodal").attr("data-id"); var acct_id = $("#tootmodal").attr("data-acct"); rt(id, acct_id, false, vis); } //フォロー async function follow(acct_id, resolve) { if (!acct_id && acct_id != "selector") { var acct_id = $("#his-data").attr("use-acct"); } else if (acct_id == "selector") { var acct_id = $("#user-acct-sel").val(); } if (!resolve && $("#his-data").hasClass("following")) { var flag = "unfollow"; var flagm = "delete"; } else { var flag = "follow"; var flagm = "create"; } var id = $("#his-data").attr("user-id"); if (resolve == "selector") { var fullacct = $("#his-acct").attr("fullname"); var id = await acctResolve(acct_id, fullacct); console.log(id); } var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag; if (localStorage.getItem("mode_" + domain) == "misskey") { var start = "https://" + domain + "/api/following/" + flagm; var ent = { i: at, userId: id }; } else if (flag == "follow") { var ent = {}; } var httpreq = new XMLHttpRequest(); httpreq.open("POST", start, true); httpreq.setRequestHeader("Content-Type", "application/json"); httpreq.setRequestHeader("Authorization", "Bearer " + at); httpreq.responseType = "json"; httpreq.send(JSON.stringify(ent)); httpreq.onreadystatechange = function() { if (httpreq.readyState === 4) { var json = httpreq.response; if (this.status !== 200) { setLog(start, this.status, json); } console.log(["Success: folllow", json]); if ($("#his-data").hasClass("following")) { $("#his-data").removeClass("following"); $("#his-follow-btn-text").text(lang.lang_status_follow); } else { $("#his-data").addClass("following"); $("#his-follow-btn-text").text(lang.lang_status_unfollow); } } }; } async function acctResolve(acct_id, user) { console.log("Get user data of " + user); var domain = localStorage.getItem("domain_" + acct_id); if (localStorage.getItem("mode_" + domain) == "misskey") { return false; } var at = localStorage.getItem("acct_" + acct_id + "_at"); var start = "https://" + domain + "/api/v2/search?resolve=true&q=" + user; let promise = await fetch(start, { method: "GET", headers: { "content-type": "application/json", Authorization: "Bearer " + at } }); var idJson = await promise.json(); if (idJson.accounts[0]) { var id = idJson.accounts[0].id; } else { M.toast({ html: lang.lang_fatalerroroccured, displayLength: 2000 }); } return id; } //ブロック function block(acct_id) { if ($("#his-data").hasClass("blocking")) { var flag = "unblock"; var txt = lang.lang_status_unmute; } else { var flag = "block"; var txt = lang.lang_status_block; } Swal.fire({ title: txt, text: "", type: "warning", showCancelButton: true, confirmButtonColor: "#3085d6", cancelButtonColor: "#d33", confirmButtonText: lang.lang_yesno, cancelButtonText: lang.lang_no }).then(result => { if (result.value) { if (!acct_id) { var acct_id = $("#his-data").attr("use-acct"); } var id = $("#his-data").attr("user-id"); var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag; var httpreq = new XMLHttpRequest(); httpreq.open("POST", start, true); httpreq.setRequestHeader("Content-Type", "application/json"); httpreq.setRequestHeader("Authorization", "Bearer " + at); httpreq.responseType = "json"; httpreq.send(); httpreq.onreadystatechange = function() { if (httpreq.readyState === 4) { if (this.status !== 200) { setLog(start, this.status, this.response); } if ($("#his-data").hasClass("blocking")) { $("#his-data").removeClass("blocking"); $("#his-block-btn-text").text(lang.lang_status_block); } else { $("#his-data").addClass("blocking"); $("#his-block-btn-text").text(lang.lang_status_unblock); } } }; } }); } //ミュート function muteDo(acct_id) { if ($("#his-data").hasClass("muting")) { var flag = "unmute"; var flagm = "delete"; var txt = lang.lang_status_unmute; } else { var flag = "mute"; var flagm = "create"; var txt = lang.lang_status_mute; } Swal.fire({ title: txt, text: "", type: "warning", showCancelButton: true, confirmButtonColor: "#3085d6", cancelButtonColor: "#d33", confirmButtonText: lang.lang_yesno, cancelButtonText: lang.lang_no }).then(result => { if (result.value) { if (!acct_id) { var acct_id = $("#his-data").attr("use-acct"); } var id = $("#his-data").attr("user-id"); var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); if (localStorage.getItem("mode_" + domain) == "misskey") { var start = "https://" + domain + "/api/mute/" + flagm; var ent = { i: at, userId: id }; var rq = JSON.stringify(ent); } else { var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag; var rq = ""; } var httpreq = new XMLHttpRequest(); httpreq.open("POST", start, true); httpreq.setRequestHeader("Content-Type", "application/json"); httpreq.setRequestHeader("Authorization", "Bearer " + at); httpreq.responseType = "json"; httpreq.send(rq); httpreq.onreadystatechange = function() { if (httpreq.readyState === 4) { if (this.status !== 200) { setLog(start, this.status, this.response); } if ($("#his-data").hasClass("muting")) { $("#his-data").removeClass("muting"); $("#his-mute-btn-text").text(lang.lang_status_mute); } else { $("#his-data").addClass("muting"); $("#his-mute-btn-text").text(lang.lang_status_unmute); } } }; } }); } //投稿削除 function del(id, acct_id) { var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); if (localStorage.getItem("mode_" + domain) == "misskey") { var start = "https://" + domain + "/api/notes/delete"; var httpreq = new XMLHttpRequest(); httpreq.open("POST", start, true); httpreq.setRequestHeader("Content-Type", "application/json"); httpreq.responseType = "json"; httpreq.send(JSON.stringify({ i: at, noteId: id })); $("[toot-id=" + id + "]").hide(); $("[toot-id=" + id + "]").remove(); } else { var start = "https://" + domain + "/api/v1/statuses/" + id; var httpreq = new XMLHttpRequest(); httpreq.open("DELETE", start, true); httpreq.setRequestHeader("Content-Type", "application/json"); httpreq.setRequestHeader("Authorization", "Bearer " + at); httpreq.responseType = "json"; httpreq.send(); } httpreq.onreadystatechange = function() { if (httpreq.readyState === 4) { if (this.status !== 200) { setLog(start, this.status, this.response); } } }; } //redraft function redraft(id, acct_id) { Swal.fire({ title: lang.lang_status_redraftTitle, text: lang.lang_status_redraft, type: "warning", showCancelButton: true, confirmButtonColor: "#3085d6", cancelButtonColor: "#d33", confirmButtonText: lang.lang_yesno, cancelButtonText: lang.lang_no }).then(result => { if (result.value) { show(); del(id, acct_id); $("#post-acct-sel").prop("disabled", true); $("#post-acct-sel").val(acct_id); $("select").formSelect(); mdCheck(); var medias = $("[toot-id=" + id + "]").attr("data-medias"); var vismode = $("[toot-id=" + id + "] .vis-data").attr("data-vis"); vis(vismode); $("#media").val(medias); var ct = medias.split(",").length; $("[toot-id=" + id + "] img.toot-img").each(function(i, elem) { if (i < ct) { var url = $(elem).attr("src"); console.log("Play back image data:" + url); $("#preview").append(''); } }); var html = $("[toot-id=" + id + "] .toot").html(); html = html.replace(/^
(.+)<\/p>$/, "$1");
html = html.replace(/
/, "\n");
html = html.replace(/
/, "\n"); html = html.replace(/<\/p>/, "\n"); html = html.replace(//g, "$1"); html = $.strip_tags(html); localStorage.setItem("nohide", true); show(); $("#textarea").val(html); var cwtxt = $("[toot-id=" + id + "] .cw_text").html(); if (cwtxt != "") { cwtxt = $.strip_tags(cwtxt); cw(); $("#cw-text").val(cwtxt); } } }); } //ピン留め function pin(id, acct_id) { if ($("#pub_" + id).hasClass("pined")) { var flag = "unpin"; } else { var flag = "pin"; } var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); var start = "https://" + domain + "/api/v1/statuses/" + id + "/" + flag; var httpreq = new XMLHttpRequest(); httpreq.open("POST", start, true); httpreq.setRequestHeader("Content-Type", "application/json"); httpreq.setRequestHeader("Authorization", "Bearer " + at); httpreq.responseType = "json"; httpreq.send(); httpreq.onreadystatechange = function() { if (httpreq.readyState === 4) { var json = httpreq.response; if (this.status !== 200) { setLog(start, this.status, this.response); } console.log(["Success: pinned", json]); if ($("[toot-id=" + id + "]").hasClass("pined")) { $("[toot-id=" + id + "]").removeClass("pined"); $(".pin_" + id).removeClass("blue-text"); } else { $("[toot-id=" + id + "]").addClass("pined"); $(".pin_" + id).addClass("blue-text"); } } }; } //フォロリク function request(id, flag, acct_id) { var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); var start = "https://" + domain + "/api/v1/follow_requests/" + id + "/" + flag; var httpreq = new XMLHttpRequest(); httpreq.open("POST", start, true); httpreq.setRequestHeader("Content-Type", "application/json"); httpreq.setRequestHeader("Authorization", "Bearer " + at); httpreq.responseType = "json"; httpreq.send(); httpreq.onreadystatechange = function() { if (httpreq.readyState === 4) { var json = httpreq.response; if (this.status !== 200) { setLog(start, this.status, this.response); } console.log(["Success: request", "type:" + flag, json]); showReq(); } }; } //ドメインブロック(未実装) function domainblock(add, flag, acct_id) { if (!acct_id) { var acct_id = $("#his-data").attr("use-acct"); } var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); var start = "https://" + domain + "/api/v1/domain_blocks"; var httpreq = new XMLHttpRequest(); httpreq.open("POST", start, true); httpreq.setRequestHeader("Content-Type", "application/json"); httpreq.setRequestHeader("Authorization", "Bearer " + at); httpreq.responseType = "json"; httpreq.send(); httpreq.onreadystatechange = function() { if (httpreq.readyState === 4) { var json = httpreq.response; if (this.status !== 200) { setLog(start, this.status, this.response); } console.log(["Success: domain block", json]); showDom(); } }; } function addDomainblock() { var domain = $("#domainblock").val(); domainblock(domain, "POST"); } //ユーザー強調 function empUser() { var usr = localStorage.getItem("user_emp"); var obj = JSON.parse(usr); var id = $("#his-acct").attr("fullname"); if (!obj) { var obj = []; obj.push(id); M.toast({ html: id + lang.lang_status_emphas, displayLength: 4000 }); } else { var can; Object.keys(obj).forEach(function(key) { var usT = obj[key]; if (usT != id && !can) { can = false; } else { can = true; obj.splice(key, 1); M.toast({ html: id + lang.lang_status_unemphas, displayLength: 4000 }); } }); } var json = JSON.stringify(obj); localStorage.setItem("user_emp", json); } //Endorse function pinUser() { var id = $("#his-data").attr("user-id"); var acct_id = $("#his-data").attr("use-acct"); if ($("#his-end-btn").hasClass("endorsed")) { var flag = "unpin"; } else { var flag = "pin"; } var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag; var httpreq = new XMLHttpRequest(); httpreq.open("POST", start, true); httpreq.setRequestHeader("Content-Type", "application/json"); httpreq.setRequestHeader("Authorization", "Bearer " + at); httpreq.responseType = "json"; httpreq.send(); httpreq.onreadystatechange = function() { if (httpreq.readyState === 4) { var json = httpreq.response; if (this.status !== 200) { setLog(start, this.status, this.response); } if ($("#his-end-btn").hasClass("endorsed")) { $("#his-end-btn").removeClass("endorsed"); $("#his-end-btn").text(lang.lang_status_endorse); } else { $("#his-end-btn").addClass("endorsed"); $("#his-end-btn").text(lang.lang_status_unendorse); } } }; } //URLコピー function tootUriCopy(url) { execCopy(url); M.toast({ html: lang.lang_details_url, displayLength: 1500 }); } //他のアカウントで… function staEx(mode) { var url = $("#tootmodal").attr("data-url"); var acct_id = $("#status-acct-sel").val(); var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); var start = "https://" + domain + "/api/v2/search?resolve=true&q=" + url; fetch(start, { method: "GET", headers: { "content-type": "application/json", Authorization: "Bearer " + at } }) .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); setLog(start, "JSON", error); console.error(error); }) .then(function(json) { var id = json.statuses[0].id; if (mode == "rt") { rt(id, acct_id, "remote"); } else if (mode == "fav") { fav(id, acct_id, "remote"); } else if (mode == "reply") { reEx(id); } }); return; } function toggleAction(id, tlid, acct_id) { if (tlid == "notf") { var tlide = "[data-acct=" + acct_id + "] .notf-timeline"; } else if (tlid == "user") { var tlide = "#his-tl-contents"; } else { var tlide = "[tlid=" + tlid + "]"; } if (!$(tlide + " [toot-id=" + id + "]").hasClass("ext-mode")) { $(tlide + " [toot-id=" + id + "] .type-a").hide(); $(tlide + " [toot-id=" + id + "] .type-b").show(); $(tlide + " [toot-id=" + id + "]").addClass("ext-mode"); $(tlide + " [toot-id=" + id + "] .act-icon").text("expand_less"); } else { $(tlide + " [toot-id=" + id + "] .type-b").hide(); $(tlide + " [toot-id=" + id + "] .type-a").show(); $(tlide + " [toot-id=" + id + "]").removeClass("ext-mode"); $(tlide + " [toot-id=" + id + "] .act-icon").text("expand_more"); } }