564 lines
15 KiB
JavaScript
564 lines
15 KiB
JavaScript
//トゥートの詳細
|
|
function details(id, acct_id, tlid, mode) {
|
|
if(mode=="dm"){
|
|
$(".dm-hide").hide();
|
|
}else{
|
|
$(".dm-hide").show();
|
|
}
|
|
$(".toot-reset").html('<span class="no-data">'+lang.lang_details_nodata+'</span>');
|
|
var html = $("#timeline_"+tlid+" [toot-id=" + id + "]").html();
|
|
$("#toot-this").html(html);
|
|
$('#tootmodal').modal('open');
|
|
var domain = localStorage.getItem("domain_" + acct_id);
|
|
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
|
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
|
var start = "https://" + domain + "/api/notes/show";
|
|
var i={
|
|
method: 'POST',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
},
|
|
body:JSON.stringify({
|
|
i:at,
|
|
noteId:id
|
|
})
|
|
}
|
|
}else{
|
|
var start = "https://" + domain + "/api/v1/statuses/" + id;
|
|
var i={
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
'Authorization': 'Bearer ' + at
|
|
},
|
|
}
|
|
}
|
|
|
|
fetch(start, i).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
console.log(json);
|
|
if(!$("#timeline_"+tlid+" #pub_" + id).length){
|
|
var html = parse([json], '', acct_id);
|
|
$("#toot-this").html(html);
|
|
jQuery("time.timeago").timeago();
|
|
}
|
|
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
|
var url="https://"+domain+"/notes/"+json.id;
|
|
var scn=json.user.username;
|
|
if(!json.user.host){
|
|
var local=true;
|
|
}else{
|
|
var local=false;
|
|
scn=scn+"@"+host;
|
|
}
|
|
var rep="";
|
|
var uid=json.user.id;
|
|
if(json._replyIds){
|
|
replyTL(json._replyIds[0], acct_id);
|
|
}
|
|
}else{
|
|
var url=json.url
|
|
if(json.account.acct==json.account.username){
|
|
var local=true;
|
|
}else{
|
|
var local=false;
|
|
}
|
|
var scn=json.account.acct;
|
|
var uid=json.account.id;
|
|
if (json["in_reply_to_id"]) {
|
|
replyTL(json["in_reply_to_id"], acct_id);
|
|
}
|
|
}
|
|
$("#toot-this .fav_ct").text(json.favourites_count);
|
|
$("#toot-this .rt_ct").text(json.reblogs_count);
|
|
$("#tootmodal").attr("data-url",url);
|
|
$("#tootmodal").attr("data-id",json.id);
|
|
if(local){
|
|
$("#tootmodal").attr("data-user",scn+"@"+domain);
|
|
}else{
|
|
$("#tootmodal").attr("data-user",scn);
|
|
}
|
|
context(id, acct_id);
|
|
var dom=null;
|
|
if(!local){
|
|
dom=scn.replace(/.+@/g,'');
|
|
}else{
|
|
dom=domain;
|
|
}
|
|
beforeToot(id, acct_id, dom);
|
|
userToot(id, acct_id, uid);
|
|
afterToot(id, acct_id, dom);
|
|
afterUserToot(id, acct_id, uid);
|
|
afterFTLToot(id, acct_id, dom);
|
|
faved(id, acct_id);
|
|
rted(id, acct_id);
|
|
if($("#toot-this div").hasClass("cvo")){
|
|
$("#toot-this").removeClass("cvo");
|
|
}else{
|
|
$("#toot-this").addClass("cvo");
|
|
}
|
|
if(!$("#activator").hasClass("active")){
|
|
$('#det-col').collapsible('open', 4);
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
//返信タイムライン
|
|
function replyTL(id, acct_id) {
|
|
var domain = localStorage.getItem("domain_" + acct_id);
|
|
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
|
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
|
var start = "https://" + domain + "/api/notes/show";
|
|
var i={
|
|
method: 'POST',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
},
|
|
body:JSON.stringify({
|
|
i:at,
|
|
noteId:id
|
|
})
|
|
}
|
|
}else{
|
|
var start = "https://" + domain + "/api/v1/statuses/" + id;
|
|
var i={
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
'Authorization': 'Bearer ' + at
|
|
},
|
|
}
|
|
}
|
|
fetch(start, i).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
|
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"thread");
|
|
}else{
|
|
var mute=[];
|
|
}
|
|
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
|
var templete = misskeyParse([json], '', acct_id,"","",mute);
|
|
$("#toot-after").prepend(templete);
|
|
$("#toot-after .hide").html(lang.lang_details_filtered);
|
|
$("#toot-after .by_filter").css("display","block");
|
|
$("#toot-after .by_filter").removeClass("hide");
|
|
var rep="_replyIds";
|
|
if (json[rep]) {
|
|
replyTL(json[rep][0], acct_id);
|
|
}
|
|
}else{
|
|
var templete = parse([json], '', acct_id,"","",mute);
|
|
if(templete!=""){
|
|
$("#toot-reply .no-data").hide();
|
|
}
|
|
$("#toot-reply").prepend(templete);
|
|
$("#toot-reply .hide").html(lang.lang_details_filtered);
|
|
$("#toot-reply .by_filter").css("display","block");
|
|
$("#toot-reply .by_filter").removeClass("hide");
|
|
jQuery("time.timeago").timeago();
|
|
var rep="in_reply_to_id";
|
|
if (json[rep]) {
|
|
replyTL(json[rep], acct_id);
|
|
}
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
//コンテクストってなんですか
|
|
function context(id, acct_id) {
|
|
var domain = localStorage.getItem("domain_" + acct_id);
|
|
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
|
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
|
var start = "https://" + domain + "/api/notes/conversation";
|
|
var i={
|
|
method: 'POST',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
},
|
|
body:JSON.stringify({
|
|
i:at,
|
|
noteId:id
|
|
})
|
|
}
|
|
}else{
|
|
var start = "https://" + domain + "/api/v1/statuses/" + id + "/context";
|
|
var i={
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
'Authorization': 'Bearer ' + at
|
|
},
|
|
}
|
|
}
|
|
fetch(start, i).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
|
json.reverse();
|
|
console.log(json);
|
|
var templete = misskeyParse(json, '', acct_id,"","",[]);
|
|
$("#toot-reply").html(templete);
|
|
$("#toot-reply .hide").html(lang.lang_details_filtered);
|
|
$("#toot-reply .by_filter").css("display","block");
|
|
$("#toot-reply .by_filter").removeClass("hide");
|
|
jQuery("time.timeago").timeago();
|
|
}else{
|
|
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
|
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"thread");
|
|
}else{
|
|
var mute=[];
|
|
}
|
|
var templete = parse(json.descendants, '', acct_id,"","",mute);
|
|
if(templete!=""){
|
|
$("#toot-after .no-data").hide();
|
|
}
|
|
$("#toot-after").html(templete);
|
|
$("#toot-after .hide").html(lang.lang_details_filtered);
|
|
$("#toot-after .by_filter").css("display","block");
|
|
$("#toot-after .by_filter").removeClass("hide");
|
|
jQuery("time.timeago").timeago();
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
//前のトゥート(Back TL)
|
|
function beforeToot(id, acct_id, domain) {
|
|
//var domain = localStorage.getItem("domain_" + acct_id);
|
|
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
|
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
|
var start = "https://" + domain +
|
|
"/api/notes/local-timeline"
|
|
fetch(start, {
|
|
method: 'POST',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
},
|
|
body:JSON.stringify({
|
|
i:at,
|
|
untilID:id
|
|
})
|
|
}).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
var templete = misskeyParse(json, 'noauth', acct_id);
|
|
$("#toot-before").html(templete);
|
|
jQuery("time.timeago").timeago();
|
|
});
|
|
}else{
|
|
var start = "https://" + domain +
|
|
"/api/v1/timelines/public?local=true&max_id=" + id;
|
|
fetch(start, {
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
},
|
|
}).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
var templete = parse(json, 'noauth', acct_id);
|
|
if(templete!=""){
|
|
$("#toot-before .no-data").hide();
|
|
}
|
|
$("#toot-before").html(templete);
|
|
jQuery("time.timeago").timeago();
|
|
});
|
|
}
|
|
}
|
|
//前のユーザーのトゥート
|
|
function userToot(id, acct_id, user) {
|
|
var domain = localStorage.getItem("domain_" + acct_id);
|
|
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
|
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
|
var start = "https://" + domain +
|
|
"/api/users/notes"
|
|
fetch(start, {
|
|
method: 'POST',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
},
|
|
body:JSON.stringify({
|
|
i:at,
|
|
untilID:id,
|
|
userId:user
|
|
})
|
|
}).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
var templete = misskeyParse(json, 'noauth', acct_id);
|
|
$("#user-before").html(templete);
|
|
jQuery("time.timeago").timeago();
|
|
});
|
|
}else{
|
|
var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses?max_id=" + id;
|
|
fetch(start, {
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
'Authorization': 'Bearer ' + at
|
|
},
|
|
}).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
var templete = parse(json, '', acct_id);
|
|
if(templete!=""){
|
|
$("#user-before .no-data").hide();
|
|
}
|
|
$("#user-before").html(templete);
|
|
jQuery("time.timeago").timeago();
|
|
});
|
|
}
|
|
|
|
}
|
|
//後のLTL
|
|
function afterToot(id, acct_id, domain) {
|
|
//var domain = localStorage.getItem("domain_" + acct_id);
|
|
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
|
var start = "https://" + domain +
|
|
"/api/v1/timelines/public?local=true&min_id=" + id;
|
|
fetch(start, {
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
},
|
|
}).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
var templete = parse(json, 'noauth', acct_id);
|
|
if(templete!=""){
|
|
$("#ltl-after .no-data").hide();
|
|
}
|
|
$("#ltl-after").html(templete);
|
|
jQuery("time.timeago").timeago();
|
|
});
|
|
}
|
|
//後のUTL
|
|
function afterUserToot(id, acct_id, user) {
|
|
var domain = localStorage.getItem("domain_" + acct_id);
|
|
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
|
var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses?min_id=" + id;
|
|
fetch(start, {
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
'Authorization': 'Bearer ' + at
|
|
},
|
|
}).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
var templete = parse(json, '', acct_id);
|
|
if(templete!=""){
|
|
$("#user-after .no-data").hide();
|
|
}
|
|
$("#user-after").html(templete);
|
|
jQuery("time.timeago").timeago();
|
|
});
|
|
}
|
|
//後のFTL
|
|
function afterFTLToot(id, acct_id, domain) {
|
|
//var domain = localStorage.getItem("domain_" + acct_id);
|
|
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
|
var start = "https://" + domain +
|
|
"/api/v1/timelines/public?min_id=" + id;
|
|
fetch(start, {
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
},
|
|
}).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
var templete = parse(json, 'noauth', acct_id);
|
|
if(templete!=""){
|
|
$("#ftl-after .no-data").hide();
|
|
}
|
|
$("#ftl-after").html(templete);
|
|
jQuery("time.timeago").timeago();
|
|
});
|
|
}
|
|
|
|
//ふぁぼ一覧
|
|
function faved(id, acct_id) {
|
|
var domain = localStorage.getItem("domain_" + acct_id);
|
|
if(localStorage.getItem("mode_" + domain)=="misskey"){ return false; }
|
|
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
|
var start = "https://" + domain + "/api/v1/statuses/" + id + "/favourited_by";
|
|
fetch(start, {
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
'Authorization': 'Bearer ' + at
|
|
},
|
|
}).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
var templete = userparse(json, '', acct_id);
|
|
if(templete!=""){
|
|
$("#toot-fav .no-data").hide();
|
|
}
|
|
$("#toot-fav").html(templete);
|
|
});
|
|
}
|
|
|
|
//ブースト一覧
|
|
function rted(id, acct_id) {
|
|
var domain = localStorage.getItem("domain_" + acct_id);
|
|
if(localStorage.getItem("mode_" + domain)=="misskey"){ return false; }
|
|
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
|
var start = "https://" + domain + "/api/v1/statuses/" + id + "/reblogged_by";
|
|
fetch(start, {
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
'Authorization': 'Bearer ' + at
|
|
},
|
|
}).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
var templete = userparse(json, '', acct_id);
|
|
$("#toot-rt").html(templete);
|
|
});
|
|
}
|
|
//URL等のコピー
|
|
function cbCopy(mode){
|
|
var url=$("#tootmodal").attr("data-url");
|
|
var urls = url.match(/https?:\/\/([-.a-zA-Z0-9]+)/);
|
|
var domain=urls[1];
|
|
if(mode=="emb"){
|
|
var emb='<iframe src="'+url+'/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400"></iframe><script src="https://'+domain+'/embed.js" async="async"></script>';
|
|
execCopy(emb)
|
|
Materialize.toast(lang.lang_details_embed, 1500);
|
|
}else{
|
|
if(execCopy(url)){
|
|
Materialize.toast(lang.lang_details_url, 1500);
|
|
}
|
|
|
|
}
|
|
}
|
|
//本文のコピー
|
|
function staCopy(id){
|
|
var html=$("[toot-id="+id+"] .toot").html();
|
|
html = html.replace(/^<p>(.+)<\/p>$/,"$1");
|
|
html = html.replace(/<br\s?\/?>/, "\n");
|
|
html = html.replace(/<p>/, "\n");
|
|
html = html.replace(/<\/p>/, "\n");
|
|
console.log(html);
|
|
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
|
|
html=$.strip_tags(html);
|
|
if(execCopy(html)){
|
|
Materialize.toast(lang.lang_details_txt, 1500);
|
|
}
|
|
|
|
}
|
|
//翻訳
|
|
function trans(tar,to){
|
|
var html=$("#toot-this .toot").html();
|
|
if(html.match(/^<p>(.+)<\/p>$/)){
|
|
html = html.match(/^<p>(.+)<\/p>$/)[1];
|
|
}
|
|
html = html.replace(/<br\s?\/?>/g, "\n");
|
|
html = html.replace(/<p>/g, "\n");
|
|
html = html.replace(/<\/p>/g, "\n");
|
|
html=$.strip_tags(html);
|
|
if(~tar.indexOf("zh")){
|
|
tar="zh";
|
|
}
|
|
$("#toot-this .additional").text("Loading...(Powered by Google Translate)");
|
|
var exec='https://script.google.com/macros/s/AKfycbxhwW5tjjop9Irg-y1zr_WsXlCKEzwWG6KuoOt_vVRDfEbRv0c/exec?format=json&text='+encodeURIComponent(html)+'&source='+tar+'&target='+to
|
|
console.log(exec);
|
|
fetch(exec, {
|
|
method: 'GET',
|
|
}).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(text) {
|
|
$("#toot-this .additional").html('<span class="gray">'+text.text+'</span>');
|
|
});
|
|
}
|
|
//ブラウザで開く
|
|
function brws(){
|
|
var url=$("#tootmodal").attr("data-url");
|
|
const {
|
|
shell
|
|
} = require('electron');
|
|
|
|
shell.openExternal(url);
|
|
}
|
|
//外部からトゥート開く
|
|
function detEx(url,acct_id){
|
|
if(acct_id=="main"){
|
|
acct_id=localStorage.getItem("main");
|
|
}
|
|
var domain = localStorage.getItem("domain_"+acct_id);
|
|
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
|
var start = "https://" + domain + "/api/v1/search?resolve=true&q="+url
|
|
fetch(start, {
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
'Authorization': 'Bearer ' + at
|
|
}
|
|
}).then(function(response) {
|
|
return response.json();
|
|
}).catch(function(error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function(json) {
|
|
if(!json.statuses){
|
|
const {
|
|
shell
|
|
} = require('electron');
|
|
|
|
shell.openExternal(url);
|
|
}else{
|
|
var id=json.statuses[0].id;
|
|
$(".loadp").text($(".loadp").attr("href"));
|
|
$(".loadp").removeClass("loadp");
|
|
details(id, acct_id, 0)
|
|
}
|
|
|
|
});
|
|
return;
|
|
} |