//入力時にハッシュタグと@をサジェスト 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 blankBefore = ' ' var blankAfter = ' ' var textarea = document.querySelector('#textarea') var sentence = textarea.value var len = sentence.length var pos = textarea.selectionStart if (del) { var delLen = del.length } else { var delLen = 0 } var before = sentence.substr(0, pos - delLen) var last = before.substr(-1, 1) if (last == ' ') blankBefore = '' var after = sentence.substr(pos, len) var start = after.substr(0, 1) if (start == ' ') blankAfter = '' if (len == 0) { var word = code } else if (len == pos) { var word = blankBefore + code } else if (pos == 0) { var word = code + blankAfter } else { var word = blankBefore + code + blankAfter } sentence = before + word + after textarea.value = sentence 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') } }) } }