//入力時にハッシュタグと@をサジェスト var timer = null; var input = document.getElementById("textarea"); var prev_val = input.value; var oldSuggest; var suggest; input.addEventListener( "focus", function() { localStorage.removeItem("cursor"); var acct_id = $("#post-acct-sel").val(); $("#suggest").html(""); window.clearInterval(timer); timer = window.setInterval(function() { var new_val = input.value; if (new_val == "") { $("#suggest").html(""); if ($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")) { $("#right-side").hide(); $("#right-side").css("width", "300px"); $("#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"); } return; } if (prev_val != new_val) { var tag = new_val.match(/#(\S{3,})/); var acct = new_val.match(/@(\S{3,})/); if (tag && tag[1]) { var q = tag[1]; } else if (acct && acct[1]) { var q = acct[1]; } else { $("#suggest").html(""); if ($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")) { $("#right-side").hide(); $("#right-side").css("width", "300px"); $("#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"); } return; } var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); suggest = "https://" + domain + "/api/v2/search?q=" + q; if (suggest != oldSuggest) { console.log("Try to get suggest at " + suggest); fetch(suggest, { 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) { console.log(["Search", json]); //ハッシュタグ if (json.hashtags[0] && tag) { if (tag[1]) { var tags = []; Object.keys(json.hashtags).forEach(function(key4) { var tag = json.hashtags[key4]; var his = tag.history; var uses = his[0].uses * 1 + his[1].uses * 1 + his[2].uses * 1 + his[3].uses * 1 + his[4].uses * 1 + his[5].uses * 1 + his[6].uses * 1; tagHTML = "
#' + escapeHTML(tag.name) + " " + uses + "toot(s)"; var item = { uses: uses, html: tagHTML }; tags.push(item); }); var num_a = -1; var num_b = 1; tags = tags.sort(function(a, b) { var x = a["uses"]; var y = b["uses"]; if (x > y) return num_a; if (x < y) return num_b; return 0; }); var ins = ""; var nev = false; Object.keys(tags).forEach(function(key7) { ins = ins + tags[key7].html; if (key7 <= 0 && !nev) { ins = ins + "
"; nev = true; } }); $("#suggest").html(ins); $("#right-side").show(); $("#right-side").css("width", "200px"); $("#left-side").css("width", "calc(100% - 200px)"); var width = localStorage.getItem("postbox-width"); if (width) { width = width.replace("px", "") * 1 + 200; } else { width = 500; } $("#post-box").css("width", width + "px"); $("#poll").addClass("hide"); $("#emoji").addClass("hide"); } } else if (json.accounts[0] && acct[1]) { var accts = ""; Object.keys(json.accounts).forEach(function(key3) { var acct = json.accounts[key3]; if (acct.acct != q) { //Instance Actorって… if (acct.username.indexOf(".") < 0) { accts = accts + "@' + acct.acct + "
"; } } }); $("#right-side").show(); $("#right-side").css("width", "200px"); $("#left-side").css("width", "calc(100% - 200px)"); var width = localStorage.getItem("postbox-width"); if (width) { width = width.replace("px", "") * 1 + 200; } else { width = 500; } $("#post-box").css("width", width + "px"); $("#suggest").html(accts); $("#poll").addClass("hide"); $("#emoji").addClass("hide"); } else { if ($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")) { $("#right-side").hide(); $("#right-side").css("width", "300px"); $("#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"); } } }); } } oldSuggest = suggest; prev_value = new_val; }, 1000); }, false ); input.addEventListener( "blur", function() { window.clearInterval(timer); favTag(); }, false ); function tagInsert(code, del) { var now = $("#textarea").val(); var selin = $("#textarea").prop("selectionStart"); if (!del) { } else { var regExp = new RegExp(del.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g"); var now = now.replace(regExp, ""); selin = selin - del.length; } if (selin > 0) { var before = now.substr(0, selin); var after = now.substr(selin, now.length); newt = before + " " + code + " " + after; } else { newt = code + " " + now; } $("#textarea").val(newt); $("#textarea").focus(); if ($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")) { $("#right-side").hide(); $("#right-side").css("width", "300px"); $("#left-side").css("width", "50%"); var width = localStorage.getItem("postbox-width").replace("px", "") * 1; if (!width) { width = 300; } $("#post-box").css("width", width + "px"); } $("#suggest").html(""); } function cgNPs(q) { suggest = "https://cg.toot.app/api/v1/search/light?q=" + q; if (suggest != oldSuggest) { console.log("Try to get suggest at " + suggest); fetch(suggest, { 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); setLog(start, "JSON", error); console.error(error); }) .then(function(json) { if (json[0]) { var tags = ""; Object.keys(json).forEach(function(key4) { var tag = json[key4]; tags = tags + "' + escapeHTML(json[key4]) + " "; }); $("#suggest").html("Cinderella NowPlaying:" + tags); } else { $("#suggest").html("Cinderella NowPlaying:Not Found"); } }); } }