360 lines
9.1 KiB
JavaScript
360 lines
9.1 KiB
JavaScript
//検索
|
|
//検索ボックストグル
|
|
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 +
|
|
`<a onclick="tl('tag','${tag}','${acct_id}','add')" class="pointer">
|
|
#${escapeHTML(tag)}
|
|
</a>
|
|
<br> `
|
|
} else {
|
|
tags = tags + graphDraw(tag, acct_id)
|
|
}
|
|
})
|
|
$('#src-contents').append('Tags<br>' + tags)
|
|
}
|
|
//トゥート
|
|
if (json.statuses[0]) {
|
|
var templete = parse(json.statuses, '', acct_id)
|
|
$('#src-contents').append('<br>Mentions<br>' + templete)
|
|
}
|
|
//アカウント
|
|
if (json.accounts[0]) {
|
|
var templete = userparse(json.accounts, '', acct_id)
|
|
if (!offset) {
|
|
$('#src-contents').append(
|
|
`<br>Accounts<div id="src-accts">
|
|
${templete}
|
|
</div><a onclick="src(false,'more')" class="pointer">more...</a>`
|
|
)
|
|
} 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 + `<div class="hide ts-marker" data-maxid="${max_id}"></div>`
|
|
}
|
|
$('#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 + `<div class="hide ts-marker" data-maxid="${max_id}"></div>`
|
|
}
|
|
$('#timeline_' + tlid).append(templete)
|
|
|
|
jQuery('time.timeago').timeago()
|
|
})
|
|
}
|
|
function graphDraw(tag, acct_id) {
|
|
var tags = ''
|
|
var his = tag.history
|
|
return graphDrawCore(his, tag, acct_id)
|
|
}
|
|
function graphDrawCore(his, tag, acct_id) {
|
|
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 `<div class="tagComp">
|
|
<div class="tagCompSvg">
|
|
<svg version="1.1" viewbox="0 0 60 50" width="60" height="50">
|
|
<g>
|
|
<path d="M0,${six} L10,${five} 20,${four} 30,${three} 40,${two} 50,${one} 60,${zero} 61,61 0,61"
|
|
style="stroke: #0f8c0c;fill: rgba(13,113,19,.25); stroke-width: 1;">
|
|
</path>
|
|
</g>
|
|
</svg>
|
|
</div>
|
|
<div class="tagCompToot">
|
|
<span style="font-size:200%">${his[0].uses}</span>
|
|
</div>
|
|
<div class="tagCompToots">
|
|
toot
|
|
</div>
|
|
<div class="tagCompTag">
|
|
<a onclick="tl('tag','${escapeHTML(
|
|
tag.name
|
|
)}','${acct_id}','add')" class="pointer" title="${escapeHTML(tag.name)}">
|
|
#${escapeHTML(tag.name)}
|
|
</a>
|
|
</div>
|
|
<div class="tagCompUser">
|
|
${his[0].accounts}
|
|
${lang.lang_src_people}
|
|
</div>
|
|
</div>`
|
|
}
|
|
/*
|
|
<svg version="1.1" viewbox="0 0 50 300" width="100%" height="50">
|
|
<path d="M0,0 L10,0 20,10 20,50" fill="#3F51B5"></path>
|
|
</svg>
|
|
*/
|
|
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, acct_id)
|
|
|
|
$('#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)
|
|
}
|
|
} |