//カード処理やメンション、ハッシュタグの別途表示 //全ての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-regTag') } if (tagThis) { $(this).attr('href', "javascript:tagShow('" + tagThis + "')") } }) //トゥートサムネ $('#timeline_' + tlid + ' .toot a:not(.parsed)').each(function(i, elem) { 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 { $(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', `javascript: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", "www.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 = `
${escapeHTML(json.author_name)}
${escapeHTML(json.title)} ${pxvImg}
` } else { if (json.title) { analyze = `URL ${lang.lang_cards_check} :
Title: ${escapeHTML(json.title)}
${escapeHTML(json.description)}
` } if (json.html || json.provider_name == 'Twitter') { if(isHad) { var prved = `✅` var title = lang.lang_cards_trusted }else{ var prved = '⚠️' var title = lang.lang_cards_untrusted } analyze =` ${lang.lang_parse_html}(${domain})${prved} ${analyze}
` } } return analyze } function cardHtmlShow(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;\/?:\@&=+\$,%#]+)/ ) 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) { json = json.card if (json.html) { analyze = json.html + `picture_in_picture_alt` } if (json.provider_name == 'Twitter') { var url = json.author_url var status = json.url.match(/^https:\/\/twitter.com\/[_a-zA-Z0-9-]+\/status\/([0-9]+)/); var statusId = false if(status){ if(status.length > 0){ var statusId = status[1] } } console.log(statusId) if(statusId){ url = json.url analyze = `
${json.author_name}
${json.description}${json.url}
` } } $('[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"); } }