//検索 //検索ボックストグル function searchMenu() { $('#src-contents').html('') trend() $('#left-menu a').removeClass('active') $('#searchMenu').addClass('active') $('.menu-content').addClass('hide') $('#src-box').removeClass('hide') //$('ul.tabs').tabs('select_tab', 'src-sta'); } //検索取得 function src(mode, offset) { if (!offset) { $('#src-contents').html('') var add = '' } else { var add = '&type=accounts&offset=' + $('#src-accts .cvo').length } var q = $('#src').val() var acct_id = $('#src-acct-sel').val() if (acct_id == 'tootsearch') { tsAdd(q) return false } localStorage.setItem('last-use', acct_id) var domain = localStorage.getItem('domain_' + acct_id) var at = localStorage.getItem('acct_' + acct_id + '_at') var m = q.match(/^#(.+)$/) if (m) { q = m[1] } if (user == '--now') { var user = $('#his-data').attr('user-id') } if (!mode) { var start = 'https://' + domain + '/api/v2/search?resolve=true&q=' + encodeURIComponent(q) + add } else { var start = 'https://' + domain + '/api/v1/search?q=' + q } console.log('Try to search at ' + start) 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) { src('v1') return false }) .then(function(json) { console.log(['Search', json]) //ハッシュタグ if (json.hashtags[0]) { var tags = '' Object.keys(json.hashtags).forEach(function(key4) { var tag = json.hashtags[key4] if (mode) { tags = tags + ` #${escapeHTML(tag)}
` } else { tags = tags + graphDraw(tag, acct_id) } }) $('#src-contents').append('Tags
' + tags) } //トゥート if (json.statuses[0]) { var templete = parse(json.statuses, '', acct_id) $('#src-contents').append('
Mentions
' + templete) } //アカウント if (json.accounts[0]) { var templete = userparse(json.accounts, '', acct_id) if (!offset) { $('#src-contents').append( `
Accounts
${templete}
more...` ) } else { $('#src-accts').append(templete) } } jQuery('time.timeago').timeago() }) } function tsAdd(q) { var add = { domain: acct_id, type: 'tootsearch', data: q } var multi = localStorage.getItem('column') var obj = JSON.parse(multi) localStorage.setItem('card_' + obj.length, 'true') obj.push(add) var json = JSON.stringify(obj) localStorage.setItem('column', json) parseColumn('add') } function tootsearch(tlid, q) { if(!q || q=='undefined') { return false } var start = 'https://tootsearch.chotto.moe/api/v1/search?from=0&sort=created_at%3Adesc&q=' + q console.log('Toot search at ' + start) $('#notice_' + tlid).text('tootsearch(' + q + ')') $('#notice_icon_' + tlid).text('search') 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) setLog(start, 'JSON', error) console.error(error) }) .then(function(raw) { var templete = '' var json = raw.hits.hits var max_id = raw['hits'].length for (var i = 0; i < json.length; i++) { var toot = json[i]['_source'] if (lastid != toot.uri) { if (toot && toot.account) { templete = templete + parse([toot], 'noauth', null, tlid, 0, [], 'tootsearch') } } var lastid = toot.uri } if (!templete) { templete = lang.lang_details_nodata } else { templete = templete + `
` } $('#timeline_' + tlid).html(templete) jQuery('time.timeago').timeago() }) } function moreTs(tlid, q) { var sid = $('#timeline_' + tlid + ' .ts-marker') .last() .attr('data-maxid') moreloading = true var start = 'https://tootsearch.chotto.moe/api/v1/search?from=' + sid + '&sort=created_at%3Adesc&q=' + q $('#notice_' + tlid).text('tootsearch(' + q + ')') $('#notice_icon_' + tlid).text('search') 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) setLog(start, 'JSON', error) console.error(error) }) .then(function(raw) { var templete = '' var json = raw.hits.hits var max_id = raw['hits'].length for (var i = 0; i < json.length; i++) { var toot = json[i]['_source'] if (lastid != toot.uri) { if (toot && toot.account) { templete = templete + parse([toot], 'noauth', null, tlid, 0, [], 'tootsearch') } } var lastid = toot.uri } if (!templete) { templete = lang.lang_details_nodata } else { templete = templete + `
` } $('#timeline_' + tlid).append(templete) jQuery('time.timeago').timeago() }) } function graphDraw(tag, acct_id) { var tags = '' var his = tag.history return graphDrawCore(his, tag) } function graphDrawCore(his, tag) { var max = Math.max.apply(null, [ his[0].uses, his[1].uses, his[2].uses, his[3].uses, his[4].uses, his[5].uses, his[6].uses ]) var six = 50 - (his[6].uses / max) * 50 var five = 50 - (his[5].uses / max) * 50 var four = 50 - (his[4].uses / max) * 50 var three = 50 - (his[3].uses / max) * 50 var two = 50 - (his[2].uses / max) * 50 var one = 50 - (his[1].uses / max) * 50 var zero = 50 - (his[0].uses / max) * 50 return `
${his[0].uses}
toot
#${escapeHTML(tag.name)}
${his[0].accounts} ${lang.lang_src_people}
` } /* */ function trend() { console.log('get trend') $('#src-contents').html('') var acct_id = $('#src-acct-sel').val() if (acct_id == 'tootsearch') { return false } var domain = localStorage.getItem('domain_' + acct_id) var at = localStorage.getItem('acct_' + acct_id + '_at') var start = 'https://' + domain + '/api/v1/trends' console.log(start) 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) { setLog(start, 'JSON', error) console.error(error) }) .then(function(json) { var tags = '' Object.keys(json).forEach(function(keye) { var tag = json[keye] var his = tag.history tags = graphDrawCore(his, tag) $('#src-contents').append(tags) }) }) } function srcBox(mode) { var selectedText = window.getSelection().toString() if (mode == 'open') { $('#pageSrc').removeClass('hide') } else if (mode == 'close') { if(!selectedText) { $('#pageSrc').addClass('hide') $('#pageSrc').removeClass('keep') } } else { $('#pageSrc').toggleClass('hide') } if(!$('#pageSrc').hasClass('keep')) { $('#pageSrcInput').val(selectedText) } } $('#pageSrcInput').click(function() { $('#pageSrc').addClass('keep') }) $('#pageSrcInput').on('input', function(evt) { if(!$('#pageSrcInput').val()) { $('#pageSrc').removeClass('keep') } }) document.addEventListener('selectionchange', function() { var selectedText = window.getSelection().toString() if (selectedText && !$('input').is(':focus') && !$('textarea').is(':focus')) { srcBox('open') } }) function doSrc(type) { $('#pageSrc').addClass('hide') $('#pageSrc').removeClass('keep') var q = $('#pageSrcInput').val() if(type == 'web') { var start = localStorage.getItem('srcUrl') if(!start) { start = 'https://google.com/search?q={q}' } start = start.replace(/{q}/, q) postMessage(["openUrl", start], "*") } else if(type == 'ts') { tsAdd(q) } }