thedesk/app/js/tl/datails.js

518 lines
14 KiB
JavaScript
Raw Normal View History

2018-01-28 23:22:43 +11:00
//トゥートの詳細
2018-03-11 01:22:59 +11:00
function details(id, acct_id, tlid) {
2019-01-26 14:24:26 +11:00
$(".toot-reset").html(lang.lang_details_nodata);
2018-09-10 03:06:00 +10:00
var html = $("#timeline_"+tlid+" [toot-id=" + id + "]").html();
2018-01-28 23:22:43 +11:00
$("#toot-this").html(html);
$('#tootmodal').modal('open');
var domain = localStorage.getItem("domain_" + acct_id);
2018-07-07 03:51:48 +10:00
var at = localStorage.getItem("acct_"+ acct_id + "_at");
2018-08-23 03:29:39 +10:00
if(localStorage.getItem("mode_" + domain)=="misskey"){
2018-07-30 21:03:49 +10:00
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) {
2018-01-28 23:22:43 +11:00
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
2018-07-30 21:03:49 +10:00
console.log(json);
2018-03-21 16:36:02 +11:00
if(!$("#timeline_"+tlid+" #pub_" + id).length){
2018-04-10 02:22:08 +10:00
var html = parse([json], '', acct_id);
2018-03-21 16:36:02 +11:00
$("#toot-this").html(html);
jQuery("time.timeago").timeago();
}
2018-08-23 03:29:39 +10:00
if(localStorage.getItem("mode_" + domain)=="misskey"){
var url="https://"+domain+"/notes/"+json.id;
2018-07-30 21:03:49 +10:00
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);
}
}
2018-01-28 23:22:43 +11:00
$("#toot-this .fav_ct").text(json.favourites_count);
$("#toot-this .rt_ct").text(json.reblogs_count);
2018-07-30 21:03:49 +10:00
$("#tootmodal").attr("data-url",url);
2018-03-11 01:22:59 +11:00
$("#tootmodal").attr("data-id",json.id);
2018-07-30 21:03:49 +10:00
if(local){
$("#tootmodal").attr("data-user",scn+"@"+domain);
2018-03-21 16:36:02 +11:00
}else{
2018-07-30 21:03:49 +10:00
$("#tootmodal").attr("data-user",scn);
2018-01-28 23:22:43 +11:00
}
context(id, acct_id);
2018-07-30 21:03:49 +10:00
if(!local){
var dom=scn.replace(/.+@/g,'');
2018-05-20 16:17:10 +10:00
}else{
var dom=domain;
}
beforeToot(id, acct_id, dom);
2018-07-30 21:03:49 +10:00
userToot(id, acct_id, uid);
2018-01-28 23:22:43 +11:00
faved(id, acct_id);
rted(id, acct_id);
2018-09-10 03:06:00 +10:00
if($("#toot-this div").hasClass("cvo")){
$("#toot-this").removeClass("cvo");
}else{
$("#toot-this").addClass("cvo");
}
2018-02-26 00:37:04 +11:00
if(!$("#activator").hasClass("active")){
2018-05-02 14:14:03 +10:00
$('#det-col').collapsible('open', 1);
2018-02-26 00:37:04 +11:00
}
2018-01-28 23:22:43 +11:00
});
}
//返信タイムライン
function replyTL(id, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
2018-07-07 03:51:48 +10:00
var at = localStorage.getItem("acct_"+ acct_id + "_at");
2018-08-23 03:29:39 +10:00
if(localStorage.getItem("mode_" + domain)=="misskey"){
2018-07-30 21:03:49 +10:00
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) {
2018-01-28 23:22:43 +11:00
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
2018-07-17 01:39:06 +10:00
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"thread");
}else{
var mute=[];
}
2018-08-23 03:29:39 +10:00
if(localStorage.getItem("mode_" + domain)=="misskey"){
2018-07-30 21:03:49 +10:00
var templete = misskeyParse([json], '', acct_id,"","",mute);
$("#toot-after").prepend(templete);
2019-01-26 14:24:26 +11:00
$("#toot-after .hide").html(lang.lang_details_filtered);
2018-07-30 21:03:49 +10:00
$("#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);
$("#toot-reply").prepend(templete);
2019-01-26 14:24:26 +11:00
$("#toot-reply .hide").html(lang.lang_details_filtered);
2018-07-30 21:03:49 +10:00
$("#toot-reply .by_filter").css("display","block");
$("#toot-reply .by_filter").removeClass("hide");
2018-01-28 23:22:43 +11:00
jQuery("time.timeago").timeago();
2018-07-30 21:03:49 +10:00
var rep="in_reply_to_id";
if (json[rep]) {
replyTL(json[rep], acct_id);
}
2018-01-28 23:22:43 +11:00
}
2018-07-30 21:03:49 +10:00
2018-01-28 23:22:43 +11:00
});
}
//コンテクストってなんですか
function context(id, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
2018-07-07 03:51:48 +10:00
var at = localStorage.getItem("acct_"+ acct_id + "_at");
2018-08-23 03:29:39 +10:00
if(localStorage.getItem("mode_" + domain)=="misskey"){
2018-07-30 21:03:49 +10:00
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) {
2018-01-28 23:22:43 +11:00
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
2018-08-23 03:29:39 +10:00
if(localStorage.getItem("mode_" + domain)=="misskey"){
json.reverse();
2018-07-30 21:03:49 +10:00
console.log(json);
var templete = misskeyParse(json, '', acct_id,"","",[]);
$("#toot-reply").html(templete);
2019-01-26 14:24:26 +11:00
$("#toot-reply .hide").html(lang.lang_details_filtered);
2018-07-30 21:03:49 +10:00
$("#toot-reply .by_filter").css("display","block");
$("#toot-reply .by_filter").removeClass("hide");
jQuery("time.timeago").timeago();
2018-07-17 01:39:06 +10:00
}else{
2018-07-30 21:03:49 +10:00
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);
$("#toot-after").html(templete);
2019-01-26 14:24:26 +11:00
$("#toot-after .hide").html(lang.lang_details_filtered);
2018-07-30 21:03:49 +10:00
$("#toot-after .by_filter").css("display","block");
$("#toot-after .by_filter").removeClass("hide");
jQuery("time.timeago").timeago();
2018-07-17 01:39:06 +10:00
}
2018-07-30 21:03:49 +10:00
2018-01-28 23:22:43 +11:00
});
}
//前のトゥート(Back TL)
2018-05-20 16:17:10 +10:00
function beforeToot(id, acct_id, domain) {
//var domain = localStorage.getItem("domain_" + acct_id);
2018-07-07 03:51:48 +10:00
var at = localStorage.getItem("acct_"+ acct_id + "_at");
2018-08-23 03:29:39 +10:00
if(localStorage.getItem("mode_" + domain)=="misskey"){
2018-07-30 21:03:49 +10:00
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 +
2018-01-28 23:22:43 +11:00
"/api/v1/timelines/public?local=true&max_id=" + id;
2018-07-30 21:03:49 +10:00
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);
$("#toot-before").html(templete);
jQuery("time.timeago").timeago();
});
}
2018-01-28 23:22:43 +11:00
}
2018-05-02 14:14:03 +10:00
//前のユーザーのトゥート
function userToot(id, acct_id, user) {
var domain = localStorage.getItem("domain_" + acct_id);
2018-07-07 03:51:48 +10:00
var at = localStorage.getItem("acct_"+ acct_id + "_at");
2018-08-23 03:29:39 +10:00
if(localStorage.getItem("mode_" + domain)=="misskey"){
2018-07-30 21:03:49 +10:00
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);
$("#user-before").html(templete);
jQuery("time.timeago").timeago();
});
}
2018-05-02 14:14:03 +10:00
}
2018-01-28 23:22:43 +11:00
//ふぁぼ一覧
function faved(id, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
2018-08-23 03:29:39 +10:00
if(localStorage.getItem("mode_" + domain)=="misskey"){ return false; }
2018-07-07 03:51:48 +10:00
var at = localStorage.getItem("acct_"+ acct_id + "_at");
2018-01-28 23:22:43 +11:00
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) {
2018-04-10 02:22:08 +10:00
var templete = userparse(json, '', acct_id);
2018-01-28 23:22:43 +11:00
$("#toot-fav").html(templete);
});
}
//ブースト一覧
function rted(id, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
2018-08-23 03:29:39 +10:00
if(localStorage.getItem("mode_" + domain)=="misskey"){ return false; }
2018-07-07 03:51:48 +10:00
var at = localStorage.getItem("acct_"+ acct_id + "_at");
2018-01-28 23:22:43 +11:00
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) {
2018-04-10 02:22:08 +10:00
var templete = userparse(json, '', acct_id);
2018-01-28 23:22:43 +11:00
$("#toot-rt").html(templete);
});
}
2018-02-18 03:44:03 +11:00
//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)
2019-01-26 14:24:26 +11:00
Materialize.toast(lang.lang_details_embed, 1500);
2018-02-18 03:44:03 +11:00
}else{
2018-02-25 19:41:34 +11:00
if(execCopy(url)){
2019-01-26 14:24:26 +11:00
Materialize.toast(lang.lang_details_url, 1500);
2018-02-25 19:41:34 +11:00
}
2018-02-18 03:44:03 +11:00
}
2018-03-11 01:22:59 +11:00
}
2018-03-27 13:39:35 +11:00
//本文のコピー
function staCopy(id){
var html=$("[toot-id="+id+"] .toot").html();
2018-06-18 00:26:45 +10:00
html = html.replace(/^<p>(.+)<\/p>$/,"$1");
2018-03-27 13:39:35 +11:00
html = html.replace(/<br\s?\/?>/, "\n");
html = html.replace(/<p>/, "\n");
html = html.replace(/<\/p>/, "\n");
2018-06-18 00:26:45 +10:00
console.log(html);
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
2018-03-27 13:39:35 +11:00
html=$.strip_tags(html);
if(execCopy(html)){
2019-01-26 14:24:26 +11:00
Materialize.toast(lang.lang_details_txt, 1500);
2018-03-27 13:39:35 +11:00
}
}
2018-03-11 01:22:59 +11:00
//魚拓
function shot(){
2018-06-18 00:26:45 +10:00
var title=$("#tootmodal").attr("data-id");
var off = $('#toot-this').offset();
var w=$("#toot-this").width()+50;
var h=$("#toot-this").height()+50;
2018-03-11 01:22:59 +11:00
var electron = require("electron");
2018-06-18 00:26:45 +10:00
const fs = require("fs");
const os = require('os')
const shell = electron.shell;
const path = require('path')
2018-03-11 01:22:59 +11:00
var ipc = electron.ipcRenderer;
2018-06-18 00:26:45 +10:00
let options = {
types: ['screen'],
thumbnailSize: {
width: window.parent.screen.width,
height: window.parent.screen.height
}
}
const desktopCapturer = electron.desktopCapturer;
desktopCapturer.getSources(options, function(error, sources) {
if (error) return console.log(error)
sources.forEach(function(source) {
if (source.name === 'Screen 1' || source.name === 'TheDesk') {
var durl=source.thumbnail.toDataURL();
var b64 = durl.match(
/data:image\/png;base64,(.+)/
);
const screenshotPath = path.join(os.tmpdir(), 'screenshot.png');
const savePath = path.join(os.tmpdir(), 'screenshot.png');
2018-09-06 02:47:27 +10:00
var ipc = electron.ipcRenderer;
if(localStorage.getItem("savefolder")){
var save=localStorage.getItem("savefolder");
}else{
var save="";
}
ipc.send('shot', ['file://' + screenshotPath,w,h,b64[1],title,off.top+50,off.left,save]);
2018-06-18 00:26:45 +10:00
if($("#toot-this .img-parsed").length>0){
for(i=0;i<$("#toot-this .img-parsed").length;i++){
2018-09-06 02:47:27 +10:00
var url=$("#toot-this .img-parsed").eq(i).attr("data-url");
if(localStorage.getItem("savefolder")){
var save=localStorage.getItem("savefolder");
}else{
var save="";
}
ipc.send('shot-img-dl', [url,title+"_img"+i+".png",save]);
2018-06-18 00:26:45 +10:00
}
}
return;
const message = `Saved screenshot to: ${screenshotPath}`
//screenshotMsg.textContent = message
}
})
})
2018-03-31 13:39:06 +11:00
}
//翻訳
function trans(tar){
var html=$("#toot-this .toot").html();
if(html.match(/^<p>(.+)<\/p>$/)){
html = html.match(/^<p>(.+)<\/p>$/)[1];
}
2018-04-01 07:00:27 +10:00
html = html.replace(/<br\s?\/?>/g, "\n");
html = html.replace(/<p>/g, "\n");
html = html.replace(/<\/p>/g, "\n");
2018-03-31 13:39:06 +11:00
html=$.strip_tags(html);
$("#toot-this .additional").text("Loading...(Powered by Google Translate)");
2018-04-01 07:00:27 +10:00
var exec='https://script.google.com/macros/s/AKfycbz0ETqcUxwNlw961GjErNb7vr_X18N2s1AS5Xu5nFTbYXcdcRM/exec?text='+encodeURIComponent(html)+'&source='+tar+'&target=ja'
console.log(exec);
2018-03-31 13:39:06 +11:00
fetch(exec, {
method: 'GET',
}).then(function(response) {
return response.text();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(text) {
$("#toot-this .additional").html('<span class="gray">'+text+'</span>');
});
2018-04-07 14:31:09 +10:00
}
//ブラウザで開く
function brws(){
var url=$("#tootmodal").attr("data-url");
const {
shell
} = require('electron');
shell.openExternal(url);
}
//外部からトゥート開く
2018-04-09 00:17:33 +10:00
function detEx(url,acct_id){
2018-05-20 16:17:10 +10:00
if(acct_id=="main"){
acct_id=localStorage.getItem("main");
}
2018-04-09 00:17:33 +10:00
var domain = localStorage.getItem("domain_"+acct_id);
2018-07-07 03:51:48 +10:00
var at = localStorage.getItem("acct_"+ acct_id + "_at");
2018-04-07 14:31:09 +10:00
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;
2018-04-09 00:17:33 +10:00
$(".loadp").text($(".loadp").attr("href"));
$(".loadp").removeClass("loadp");
details(id, acct_id, 0)
2018-04-07 14:31:09 +10:00
}
});
return;
2018-02-18 03:44:03 +11:00
}