//カード処理やメンション、ハッシュタグの別途表示
//全てのTL処理で呼び出し
function additional(acct_id, tlid) {
//メンション系
//$(".mention").attr("href", "");
$('#timeline-container .mention').addClass('parsed')
$('#timeline-container .hashtag, #timeline-container [rel=tag]').each(function(i, elem) {
var tags = $(this)
.attr('href')
.match(/https?:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/)
if (tags) {
var tagThis = tags[2]
} else {
var tagThis = $(this).attr('data-tag')
}
if (tagThis) {
$(this).attr('onclick', "tagShow('" + tagThis + "')")
$(this).attr('href', '#')
}
})
//トゥートサムネ
$('#timeline_' + tlid + ' .toot a:not(.parsed)').each(function(i, elem) {
var domain = localStorage.getItem('domain_' + acct_id)
var at = localStorage.getItem('acct_' + acct_id + '_at')
var card = localStorage.getItem('card_' + tlid)
var text = $(this).attr('href')
if (text) {
if (text.indexOf('twimg.com') === -1) {
var urls = text.match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
)
}
} else {
text = ''
var urls = []
}
//トゥートのURLぽかったら
toot = text.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/)
if (toot) {
if (toot[1]) {
$(this).attr('data-acct', acct_id)
}
}
if (urls) {
$(this).remove()
} else if (!card) {
var id = $(this)
.parents('.cvo')
.attr('toot-id')
if (localStorage.getItem('mode_' + domain) == 'misskey') {
var start = 'https://' + domain + '/url?url=' + text
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json'
}
//body: JSON.stringify({})
})
.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.title) {
$('[toot-id=' + id + '] .additional').html(
'URL' +
lang.lang_cards_check +
':
Title:' +
escapeHTML(json.title) +
'
' +
escapeHTML(json.description) +
''
)
$('[toot-id=' + id + '] a:not(.parsed)').addClass('parsed')
$('[toot-id=' + id + ']').addClass('parsed')
}
})
}
} else {
$(this).attr('title', text)
}
})
$('i.unparsed').each(function(i, elem) {
var dem = $(this).text()
var dom = $(this)
var start = './js/emoji/emoji-map.json'
var xmlHttpRequest = new XMLHttpRequest()
xmlHttpRequest.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
if (this.response) {
var json = this.response
if (this.status !== 200) {
setLog(start, this.status, this.response)
}
var emojis = json.emojis
for (i = 0; i < emojis.length; i++) {
var emojie = emojis[i]
var regExp = new RegExp(dem, 'g')
if (emojie.emoji.match(regExp)) {
var sc = emojie.name
var sc = 'twa-' + sc.replace(/_/g, '-')
dom.addClass(sc)
dom.text('')
dom.removeClass('unparsed')
break
}
}
}
}
}
xmlHttpRequest.open('GET', start, true)
xmlHttpRequest.responseType = 'json'
xmlHttpRequest.send(null)
})
$('#timeline_' + tlid + ' .toot:not(:has(a:not(.add-show,.parsed)))').each(function(i, elem) {
$(this)
.parent()
.find('.add-show')
.hide()
})
//Markdownイメージビューワー
$('#timeline_' + tlid + ' .toot a:not(.img-parsed):has(img)').each(function(i, elem) {
var ilink = $(this).attr('href')
var id = $(this)
.parents('.cvo')
.attr('toot-id')
$(this).attr('href', '#')
$(this).attr('onclick', "imgv('" + id + "','" + i + "')")
$(this).attr('data-type', 'image')
$(this).attr('id', id + '-image-' + i)
$(this).attr('data-url', ilink)
$(this).addClass('img-parsed')
})
}
function additionalIndv(tlid, acct_id, id) {
var domain = localStorage.getItem('domain_' + acct_id)
var at = localStorage.getItem('acct_' + acct_id + '_at')
var text = $('[toot-id=' + id + '] .toot a').attr('href')
var urls = text.match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
)
if (urls) {
$('[toot-id=' + id + '] .toot a').remove()
} else {
if (localStorage.getItem('mode_' + domain) == 'misskey') {
var start = 'https://' + domain + '/url?url=' + text
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json'
}
//body: JSON.stringify({})
})
.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.title) {
$('[toot-id=' + id + '] .additional').html(
`URL${lang.lang_cards_check}:
Title:${escapeHTML(
json.title
)}
${escapeHTML(json.description)}`
)
$('[toot-id=' + id + '] a:not(.parsed)').addClass('parsed')
$('[toot-id=' + id + ']').addClass('parsed')
}
})
} else {
var id = $('[toot-id=' + id + '] .toot a')
.parents('.cvo')
.attr('toot-id')
var start = 'https://' + domain + '/api/v1/statuses/' + id
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at
}
//body: JSON.stringify({})
})
.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) {
cards = json.card
var analyze = cardHtml(cards, acct_id, id)
$('[toot-id=' + id + '] .additional').html(analyze)
if (json.title) {
$('[toot-id=' + id + '] a:not(.parsed)').addClass('parsed')
$('[toot-id=' + id + ']').addClass('parsed')
}
})
}
}
}
function cardHtml(json, acct_id, id) {
var analyze = ''
var domain = json.url.match(/^https?:\/{2,}(.*?)(?:\/|\?|#|$)/)[1];
var ok = [
"pixiv.net",
"twitter.com",
"mobile.twitter.com",
"open.spotify.com",
"youtube.com",
"youtu.be",
"m.youtube.com",
"nicovideo.jp",
"twitcasting.tv"
]
var isHad = _.includes(ok, domain);
if (json.provider_name == 'pixiv') {
if (json.image) {
var pxvImg = `
`
} else {
var pxvImg = ''
}
analyze = `
${json.author_name}` } $('[toot-id=' + id + '] .additional').html(analyze) }) } //各TL上方のLink[On/Off] function cardToggle(tlid) { var card = localStorage.getItem('card_' + tlid) if (!card) { localStorage.setItem('card_' + tlid, 'true') $('#sta-card-' + tlid).text('Off') $('#sta-card-' + tlid).css('color', 'red') } else { localStorage.removeItem('card_' + tlid) $('#sta-card-' + tlid).text('On') $('#sta-card-' + tlid).css('color', '#009688') } } //各TL上方のLink[On/Off]をチェック function cardCheck(tlid) { var card = localStorage.getItem('card_' + tlid) if (!card) { $('#sta-card-' + tlid).text('On') $('#sta-card-' + tlid).css('color', '#009688') } else { $('#sta-card-' + tlid).text('Off') $('#sta-card-' + tlid).css('color', 'red') } } function mov(id, tlid, type) { var click = false if (tlid == 'notf') { var tlide = '[data-notf=' + acct_id + ']' } else if (tlid == 'user') { var tlide = '#his-data' } else { var tlide = '[tlid=' + tlid + ']' } var mouseover = localStorage.getItem('mouseover') if (!mouseover) { mouseover = '' } if (mouseover == 'yes') { mouseover = 'hide' } else if (mouseover == 'click') { if (type == 'mv') { mouseover = '' } else { mouseover = 'hide' } click = true } else if (mouseover == 'no') { mouseover = '' } if (mouseover == 'hide') { if (click) { $(tlide + ' [toot-id=' + id + ']').toggleClass('hide-actions') } else { $(tlide + ' [toot-id=' + id + ']').removeClass('hide-actions') } //$(tlide + " [toot-id=" + id + "] .area-vis").toggleClass("hide") //$(tlide + " [toot-id=" + id + "] .area-actions").toggleClass("hide") //$(tlide + " [toot-id=" + id + "] .area-side").toggleClass("hide") } } function resetmv(type) { var mouseover = localStorage.getItem('mouseover') if (!mouseover) { mouseover = '' } else if (mouseover == 'yes') { mouseover = 'hide' } else if (mouseover == 'no') { mouseover = '' } else if (mouseover == 'click' && type != 'mv') { mouseover = 'hide' } if (mouseover == 'hide') { $('.cvo').addClass('hide-actions') //$(".area-vis").addClass("hide"); //$(".area-actions").addClass("hide"); //$(".area-side").addClass("hide"); } }
${json.description}${json.url}