TheDesk Mio (15.9.0)

This commit is contained in:
cutls 2018-07-17 00:39:06 +09:00
parent 49a45f2ecf
commit faa8b70aff
15 changed files with 567 additions and 66 deletions

View File

@ -1,19 +1,19 @@
## For Astarte(kirishima.cloud), My Primary Instance ## For Astarte(kirishima.cloud), My Primary Instance
TheDesk :thedesk: Mio (15.8.0) TheDesk :thedesk: Mio (15.9.0)
Glance TLの不具合解消 フィルター機能に対応
フォントが変更可能に 削除して再編集に対応
同一インスタンスで複数垢ログインに対応 削除追跡(削除されたトゥートが画面から消えずに背景色のみ変化します。)
カラーテーマの追加 通知が表示されないバグ・削除時に境界線が太くなる現象の修正など
ほか ほか
https://thedesk.top https://thedesk.top
:github: https://github.com/cutls/TheDesk #Desk #DeskUpdate :github: https://github.com/cutls/TheDesk #Desk #DeskUpdate
## For Other Instances ## For Other Instances
PCクライアントTheDesk Mio (15.8.0) PCクライアントTheDesk Mio (15.9.0)
Glance TLの不具合解消 フィルター機能に対応
フォントが変更可能に 削除して再編集に対応
同一インスタンスで複数垢ログインに対応 削除追跡(削除されたトゥートが画面から消えずに背景色のみ変化します。)
カラーテーマの追加 通知が表示されないバグ・削除時に境界線が太くなる現象の修正など
https://thedesk.top https://thedesk.top

View File

@ -106,6 +106,7 @@ iframe {
} }
.cvo { .cvo {
padding-left: 5px; padding-left: 5px;
border-bottom:0.5px solid;
padding-right: 2px; padding-right: 2px;
word-break: break-all; word-break: break-all;
width: 100%; width: 100%;
@ -169,8 +170,15 @@ grid-area: toot;
} }
.area-actions { .area-actions {
margin:2px; padding:0;
grid-area: actions; margin:0;
top:-20px;
display:flex;
justify-content:space-around;
width:300px;
max-width:100%;
margin:2px;
grid-area: actions;
} }
.area-vis { .area-vis {
margin:2px; margin:2px;
@ -338,6 +346,18 @@ p:not(:last-child){
.modal-footer{ .modal-footer{
background-color:var(--box); background-color:var(--box);
} }
.ballons{
background-color: var(--box);
position:absolute;
bottom:0px;
right:0px;
}
.btn-flat{ .btn-flat{
color:var(--color); color:var(--color);
}
.toot a span.ellipsis:after{
content:"...";
}
.toot a:not(.mention) span:last-of-type{
display:none;
} }

View File

@ -113,19 +113,58 @@ var tlid=0;
</div> </div>
<!--リスト--> <!--リスト-->
<div id="list-box" class="hide notf-box z-depth-4"> <div id="list-box" class="hide notf-box z-depth-4">
アカウント選択 <div class="input-field" style="width:calc( 100% - 100px);float:left">
<div class="input-field">
<select id="list-acct-sel" class="acct-sel"></select> <select id="list-acct-sel" class="acct-sel"></select>
<label></label> <label>アカウント選択</label>
</div> </div>
<button class="btn waves-effect indigo" style="width:calc( 60% - 40px);" onclick="list()" data-trans-i="lists"> <div style="float:left; padding-top:8px; padding-bottom:28px;">
リスト一覧 <button class="btn waves-effect indigo" style="width:80px;" onclick="list()" data-trans-i="lists">
</button><br><br> 一覧
</button>
</div>
<br><br>
<div id="lists"></div> <div id="lists"></div>
<div id="lists-user"></div> <div id="lists-user"></div>
<input type="text" style="width:150px" id="list-add" placeholder="タイトル"> <input type="text" style="width:150px" id="list-add" placeholder="タイトル">
<button class="btn waves-effect" style="width:120px;" onclick="makeNewList()">新規作成</button> <button class="btn waves-effect" style="width:120px;" onclick="makeNewList()">新規作成</button>
</div> </div>
<!--フィルター-->
<div id="filter-box" class="hide notf-box z-depth-4">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="filter-acct-sel" class="acct-sel"></select>
<label>アカウント選択</label>
</div>
<div style="float:left; padding-top:8px; padding-bottom:28px;">
<button class="btn waves-effect indigo" style="width:80px;" onclick="filter()" data-trans-i="filters">
一覧
</button>
</div>
<div id="filtered-words"></div>
<input type="hidden" id="filter-edit-id">
<input type="text" style="width:150px" id="filter-add-word" placeholder="フィルターワード"><br>
適用範囲<br>
<input type="checkbox" class="filled-in" id="home_filter" value="home" />
<label for="home_filter">ホーム</label>
<input type="checkbox" class="filled-in" id="local_filter" value="public" />
<label for="local_filter">ローカル</label>
<input type="checkbox" class="filled-in" id="notf_filter" value="notifications" />
<label for="notf_filter">通知</label>
<input type="checkbox" class="filled-in" id="conv_filter" value="thread" />
<label for="conv_filter">会話</label><br>
オプション<br>
<input type="checkbox" class="filled-in" id="wholeword_filter" value="1" />
<label for="wholeword_filter">単語マッチ</label><br>
<span class="sml">非ラテン系の文字列では「単語マッチ」は推奨されません。</span><br>
<input type="checkbox" class="filled-in" id="except_filter" value="1" />
<label for="except_filter">除外</label><br>
<span class="sml">「除外」時マッチしたトゥートは非可逆的に除外され、削除後も閲覧できません。</span><br>
有効期限(あと)<span class="sml">未指定(または0分)で「無制限」になります。<b>仕様上数値の正確性を保証できません。</b></span><br><br>
<input type="text" style="width:50px" id="days_filter" placeholder="d" value="0">
<input type="text" style="width:50px" id="hours_filter" placeholder="h" value="0">時間
<input type="text" style="width:50px" id="mins_filter" placeholder="m" value="0">
<button class="btn waves-effect" style="width:120px;" onclick="makeNewFilter()" id="add-filter-btn">追加</button><br>
<span class="sml">Integrated TL/Plus TLは、公開/ホームのフィルターワードが合算されて適応されます。どちらか一方の指定でも非表示になります。</span>
</div>
<div id="main"> <div id="main">
<!--TLのTL--> <!--TLのTL-->
<div id="timeline-container"> <div id="timeline-container">
@ -177,6 +216,12 @@ var tlid=0;
<span class="side-label" data-trans="list">リスト</span> <span class="side-label" data-trans="list">リスト</span>
</a> </a>
</div> </div>
<div class="small-menu" id="filter-tgl">
<a onclick="filterToggle()" class="nex waves-effect">
<i class="material-icons" title="フィルター" data-trans-title="filter">filter_list</i>
<span class="side-label" data-trans="filter">Filter</span>
</a>
</div>
<div class="small-menu"> <div class="small-menu">
<a href="index.html" class="nex mize waves-effect"> <a href="index.html" class="nex mize waves-effect">
<i class="material-icons nex" title="スーパーリロード(F5/⌘+R)" data-trans-title="reload">refresh</i> <i class="material-icons nex" title="スーパーリロード(F5/⌘+R)" data-trans-title="reload">refresh</i>

View File

@ -351,6 +351,7 @@ function multiSelector() {
}else{ }else{
Object.keys(obj).forEach(function(key) { Object.keys(obj).forEach(function(key) {
var acct = obj[key]; var acct = obj[key];
var list = key * 1 + 1; var list = key * 1 + 1;
if (key == last) { if (key == last) {
sel = "selected"; sel = "selected";

View File

@ -226,6 +226,34 @@ function del(id, acct_id) {
} }
} }
} }
//redraft
function redraft(id, acct_id){
if(confirm("削除して再編集しますか?そのトゥートの全てのデータがリセットされます。この機能はベータ版です。画像は~v2.4.1で破棄されます。")){
show();
del(id, acct_id);
$("#post-acct-sel").prop("disabled", true);
var medias=$("[toot-id="+id+"]").attr("data-medias");
var vismode=$("[toot-id="+id+"] .vis-data").attr("data-vis");
vis(vismode);
$("#media").val(medias);
var ct=medias.split(",").length;
$("[toot-id="+id+"] img.toot-img").each(function(i, elem) {
if(i<ct){
var url=$(elem).attr("src");
console.log(url);
$('#preview').append('<img src="' + url + '" style="width:50px; max-height:100px;">');
}
});
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");
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
html=$.strip_tags(html);
$("#textarea").val(html);
}
}
//ピン留め //ピン留め
function pin(id, acct_id) { function pin(id, acct_id) {
if ($("#pub_" + id).hasClass("pined")) { if ($("#pub_" + id).hasClass("pined")) {

View File

@ -70,8 +70,17 @@ function replyTL(id, acct_id) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function(json) { }).then(function(json) {
var templete = parse([json], '', acct_id); if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"thread");
}else{
var mute=[];
}
console.log(mute);
var templete = parse([json], '', acct_id,"","",mute);
$("#toot-reply").prepend(templete); $("#toot-reply").prepend(templete);
$("#toot-reply .hide").html("フィルターされました。");
$("#toot-reply .by_filter").css("display","block");
$("#toot-reply .by_filter").removeClass("hide");
jQuery("time.timeago").timeago(); jQuery("time.timeago").timeago();
if (json.in_reply_to_id) { if (json.in_reply_to_id) {
replyTL(json.in_reply_to_id, acct_id); replyTL(json.in_reply_to_id, acct_id);
@ -96,9 +105,16 @@ function context(id, acct_id) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function(json) { }).then(function(json) {
var templete = parse(json.descendants, '', acct_id); 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); $("#toot-after").html(templete);
$("#toot-after .hide").html("フィルターされました。");
$("#toot-after .by_filter").css("display","block");
$("#toot-after .by_filter").removeClass("hide");
jQuery("time.timeago").timeago(); jQuery("time.timeago").timeago();
}); });
} }

View File

@ -1,3 +1,4 @@
/*メディアフィルター機能*/
//各TL上方のMedia[On/Off] //各TL上方のMedia[On/Off]
function mediaToggle(tlid) { function mediaToggle(tlid) {
var media = localStorage.getItem("media_" + tlid); var media = localStorage.getItem("media_" + tlid);
@ -26,3 +27,320 @@ function mediaCheck(tlid) {
$("#timeline_"+tlid).removeClass("media-filter") $("#timeline_"+tlid).removeClass("media-filter")
} }
} }
/* 削除追跡*/
function catchToggle(tlid) {
var catchck = localStorage.getItem("catch_" + tlid);
if (catchck) {
localStorage.removeItem("catch_" + tlid);
$("#sta-del-" + tlid).text("Off");
$("#sta-del-" + tlid).css("color",'red');
parseColumn();
} else {
localStorage.setItem("catch_" + tlid, "true");
$("#sta-del-" + tlid).text("On");
$("#sta-del-" + tlid).css("color",'#009688');
$("#timeline_"+tlid).addClass("media-filter");
parseColumn();
}
}
function catchCheck(tlid) {
var catchck = localStorage.getItem("catch_" + tlid);
if (catchck) {
$("#sta-del-" + tlid).text("On");
$("#sta-del-" + tlid).css("color",'#009688');
} else {
$("#sta-del-" + tlid).text("Off");
$("#sta-del-" + tlid).css("color",'red');
}
}
function catchCheck(tlid) {
var catchck = localStorage.getItem("catch_" + tlid);
if (catchck) {
$("#sta-del-" + tlid).text("On");
$("#sta-del-" + tlid).css("color",'#009688');
} else {
$("#sta-del-" + tlid).text("Off");
$("#sta-del-" + tlid).css("color",'red');
}
}
function delreset(tlid){
$("[tlid=" + tlid + "] .by_delcatch").hide();
$("[tlid=" + tlid + "] .by_delcatch").remove();
}
/*ワードフィルター機能*/
function filterToggle(){
if ($("#filter-box").hasClass("hide")) {
$("#filter-box").removeClass("hide");
$("#filter-box").addClass("show");
$("#filter-box").css("top",$('#filter-tgl').offset().top-$('#filter-box').height()/2+"px");
$("#filter-box").css("left",$('#filter-tgl').offset().left-410+"px");
//フィルターロード
} else {
$("#filter-box").removeClass("show");
$("#filter-box").addClass("hide")
}
}
function filter(){
$("#filtered-words").html("");
$("#filter-edit-id").val("")
var acct_id = $("#filter-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/filters"
console.log(start)
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) {
console.log(json);
if (json) {
var filters = "";
Object.keys(json).forEach(function(key) {
var filterword = json[key];
var context = filterword.context.join(',');
filters = filters + filterword.phrase+'<span class="sml">(for '+context+')</span>:<a onclick="filterEdit(\'' + filterword.id + '\',\'' + acct_id +
'\')" class="pointer">編集</a>/<a onclick="filterDel(' + filterword.id + ',' + acct_id +
')" class="pointer">削除</a><br> ';
});
if(filters==""){
filters="フィルターはありません<br>";
}
$("#filtered-words").html(filters);
}else{
$("#filtered-words").html("フィルターはありません");
}
});
}
function makeNewFilter(){
var acct_id = $("#filter-acct-sel").val();
var phr=$("#filter-add-word").val();
var cont=[];
if($("#home_filter:checked").val()){
cont.push("home");
}
if($("#local_filter:checked").val()){
cont.push("public");
}
if($("#notf_filter:checked").val()){
cont.push("notifications");
}
if($("#conv_filter:checked").val()){
cont.push("thread");
}
console.log(cont);
if(!cont.length){
$("#filtered-words").html('Error:適応範囲を最低一つ以上チェックしてください。');
}
var exc=$("#except_filter:checked").val();
var who=$("#wholeword_filter:checked").val();
var time=$("#days_filter").val()*24*60*60+$("#hours_filter").val()*60*60+$("#mins_filter").val()*60;
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if($("#filter-edit-id").val()){
var start = "https://" + domain + "/api/v1/filters/"+$("#filter-edit-id").val();
var method="PUT"
}else{
var start = "https://" + domain + "/api/v1/filters"
var method="POST"
}
var httpreq = new XMLHttpRequest();
httpreq.open(method, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({
phrase: phr,
context: cont,
irreversible: exc,
whole_word:who,
expires_in:time
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
filter();
filterUpdate(acct_id)
$("#filter-add-word").val("");
$("#home_filter").prop("checked",false);
$("#local_filter").prop("checked",false);
$("#notf_filter").prop("checked",false);
$("#conv_filter").prop("checked",false);
$("#except_filter").prop("checked",false);
$("#wholeword_filter").prop("checked",false);
$("#days_filter").val("0");
$("#hours_filter").val("0");
$("#mins_filter").val("0");
$("#add-filter-btn").text("追加");
$("#filter-edit-id").val("")
}
}
}
function filterEdit(id,acct_id){
$("#filter-add-word").val("");
$("#home_filter").prop("checked",false);
$("#local_filter").prop("checked",false);
$("#notf_filter").prop("checked",false);
$("#conv_filter").prop("checked",false);
$("#except_filter").prop("checked",false);
$("#wholeword_filter").prop("checked",false);
$("#days_filter").val("0");
$("#hours_filter").val("0");
$("#mins_filter").val("0");
$("#add-filter-btn").text("編集");
$("#filter-edit-id").val(id);
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/filters/"+id
console.log(start)
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) {
console.log(json);
if (json) {
var now = new Date() ;
now = now.getTime() ;
var now = Math.floor(now / 1000 ) ;
$("#filter-add-word").val(json.phrase);
Object.keys(json.context).forEach(function(key) {
var context = json.context[key];
$("[value="+context+"]").prop("checked",true);
});
if(json.irreversible){
$("#except_filter").prop("checked",true);
}
if(json.whole_word){
$("#wholeword_filter").prop("checked",true);
}
var expires=date(json.expires_at, 'unix')-now;
var mins=Math.floor(expires/60)%60;
var hours=Math.floor(expires/3600)%24;
var days=Math.floor(expires/3600/24);
$("#days_filter").val(days);
$("#hours_filter").val(hours);
$("#mins_filter").val(mins);
}
});
}
function filterDel(id,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/filters/"+id;
var httpreq = new XMLHttpRequest();
httpreq.open("DELETE", start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send();
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
filter();
filterUpdate(acct_id)
}
}
}
function getFilter(acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/filters"
console.log(start)
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) {
localStorage.setItem("filter_"+ acct_id ,JSON.stringify(json));
});
}
function getFilterType(json,type){
if(type=="local"){
type="public";
}else if(type=="list"){
type="home";
}else if(type=="notf"){
type="notifi";
}
var mutedfilters=[];
Object.keys(json).forEach(function(key) {
var filterword = json[key];
var phrases = filterword.phrase;
if(filterword.context.join(",").indexOf(type)!== -1){
mutedfilters.push(phrases);
}
});
return mutedfilters;
}
function filterUpdate(acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/filters"
console.log(start)
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) {
localStorage.setItem("filter_"+ acct_id ,JSON.stringify(json));
filterUpdateInternal(json,"home");
filterUpdateInternal(json,"local");
filterUpdateInternal(json,"notf");
filterUpdateInternal(json,"pub");
});
}
function filterUpdateInternal(json,type){
var home=getFilterType(json,type);
var wordmute = localStorage.getItem("word_mute");
if(wordmute){
var wordmute = JSON.parse(wordmute);
home = home.concat(wordmute);
}
if(home){
$("[data-acct="+acct_id+"] [data-type="+type+"] .cvo").each(function(i, elem) {
var id=$(elem).attr("toot-id");
$("[toot-id="+id+"]").removeClass("hide");
var text=$(elem).find('.toot').html();
Object.keys(home).forEach(function(key8) {
var word = home[key8];
var regExp = new RegExp( word, "g" );
if($.strip_tags(text).match(regExp)){
$("[toot-id="+id+"]").addClass("hide");
}
});
});
}
}

View File

@ -1,6 +1,6 @@
//Integrated TL //Integrated TL
function mixtl(acct_id, tlid, type) { function mixtl(acct_id, tlid, type,delc) {
console.log(type); console.log(delc);
localStorage.removeItem("morelock") localStorage.removeItem("morelock")
localStorage.setItem("now", type); localStorage.setItem("now", type);
todo("Integrated TL Loading...(Local)"); todo("Integrated TL Loading...(Local)");
@ -48,11 +48,16 @@ function mixtl(acct_id, tlid, type) {
var pkey=key*1+1; var pkey=key*1+1;
if(pkey<timeline.length){ if(pkey<timeline.length){
if(date(timeline[key].created_at,"unix")!=date(timeline[pkey].created_at,"unix")){ if(date(timeline[key].created_at,"unix")!=date(timeline[pkey].created_at,"unix")){
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"mix");
}else{
var mute=[];
}
if(type=="integrated"){ if(type=="integrated"){
templete = templete+parse([timeline[key]], '', acct_id, tlid); templete = templete+parse([timeline[key]], '', acct_id, tlid, "", mute);
}else if(type=="plus"){ }else if(type=="plus"){
if(timeline[key].account.acct==timeline[key].account.username){ if(timeline[key].account.acct==timeline[key].account.username){
templete = templete+parse([timeline[key]], '', acct_id, tlid); templete = templete+parse([timeline[key]], '', acct_id, tlid, "", mute);
} }
} }
@ -62,7 +67,7 @@ function mixtl(acct_id, tlid, type) {
}); });
$("#timeline_" + tlid).html(templete); $("#timeline_" + tlid).html(templete);
mixre(acct_id, tlid, type); mixre(acct_id, tlid, type, mute,delc);
additional(acct_id, tlid); additional(acct_id, tlid);
jQuery("time.timeago").timeago(); jQuery("time.timeago").timeago();
todc(); todc();
@ -72,7 +77,7 @@ function mixtl(acct_id, tlid, type) {
//Streamingに接続 //Streamingに接続
function mixre(acct_id, tlid, TLtype) { function mixre(acct_id, tlid, TLtype, mute,delc) {
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at"); var at = localStorage.getItem("acct_"+ acct_id + "_at");
var startHome = "wss://" + domain + var startHome = "wss://" + domain +
@ -99,10 +104,16 @@ function mixre(acct_id, tlid, TLtype) {
console.log(obj); console.log(obj);
var type = JSON.parse(mess.data).event; var type = JSON.parse(mess.data).event;
if (type == "delete") { if (type == "delete") {
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide(); if(delc=="true"){
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove(); $("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch");
}else{
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
}
} else if (type == "update") { } else if (type == "update") {
var templete = parse([obj], '', acct_id, tlid); var templete = parse([obj], '', acct_id, tlid,"",mute);
if (!$("#timeline_"+tlid+" [toot-id="+obj.id+"]").length) { if (!$("#timeline_"+tlid+" [toot-id="+obj.id+"]").length) {
var pool = localStorage.getItem("pool_" + tlid); var pool = localStorage.getItem("pool_" + tlid);
if (pool && templete) { if (pool && templete) {
@ -126,14 +137,19 @@ function mixre(acct_id, tlid, TLtype) {
console.log(obj); console.log(obj);
var type = JSON.parse(mess.data).event; var type = JSON.parse(mess.data).event;
if (type == "delete") { if (type == "delete") {
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide(); if(delc=="true"){
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove(); $("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
$("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch");
}else{
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
}
} else if (type == "update") { } else if (type == "update") {
if(TLtype=="integrated"){ if(TLtype=="integrated"){
var templete = parse([obj], '', acct_id, tlid); var templete = parse([obj], '', acct_id, tlid);
}else if(TLtype=="plus"){ }else if(TLtype=="plus"){
if(obj.account.acct==obj.account.username){ if(obj.account.acct==obj.account.username){
var templete = parse([obj], '', acct_id, tlid); var templete = parse([obj], '', acct_id, tlid,"",mute);
}else{ }else{
var templete=""; var templete="";
} }
@ -212,11 +228,16 @@ function mixmore(tlid,type) {
var pkey=key*1+1; var pkey=key*1+1;
if(pkey<20){ if(pkey<20){
if(date(timeline[key].created_at,"unix")!=date(timeline[pkey].created_at,"unix")){ if(date(timeline[key].created_at,"unix")!=date(timeline[pkey].created_at,"unix")){
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"mix");
}else{
var mute=[];
}
if(type=="integrated"){ if(type=="integrated"){
templete = templete+parse([timeline[key]], '', acct_id, tlid); templete = templete+parse([timeline[key]], '', acct_id, tlid,"",mute);
}else if(type=="plus"){ }else if(type=="plus"){
if(timeline[key].account.acct==timeline[key].account.username){ if(timeline[key].account.acct==timeline[key].account.username){
templete = templete+parse([timeline[key]], '', acct_id, tlid); templete = templete+parse([timeline[key]], '', acct_id, tlid,"",mute);
} }
} }
} }

View File

@ -22,8 +22,10 @@ function notf(acct_id, tlid, sys) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function(json) { }).then(function(json) {
if(json[0]){
var templete=""; var templete="";
var lastnotf=localStorage.getItem("lastnotf_" + acct_id); var lastnotf=localStorage.getItem("lastnotf_" + acct_id);
console.log(domain);
localStorage.setItem("lastnotf_" + acct_id,json[0].id); localStorage.setItem("lastnotf_" + acct_id,json[0].id);
Object.keys(json).forEach(function(key) { Object.keys(json).forEach(function(key) {
var obj = json[key]; var obj = json[key];
@ -37,7 +39,7 @@ function notf(acct_id, tlid, sys) {
var os = electron.remote.process.platform; var os = electron.remote.process.platform;
var options = { var options = {
body: ct+"件の新しい通知", body: ct+"件の新しい通知",
icon: tlocalStorage.getItem("prof_"+acct_id) icon: localStorage.getItem("prof_"+acct_id)
}; };
if(os=="darwin"){ if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options); var n = new Notification('TheDesk:'+domain, options);
@ -46,12 +48,16 @@ function notf(acct_id, tlid, sys) {
} }
} }
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"notif");
}else{
var mute=[];
}
if(obj.type!="follow"){ if(obj.type!="follow"){
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1); templete = templete+parse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{ }else{
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1); templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
} }
}); });
if (sys == "direct") { if (sys == "direct") {
@ -61,6 +67,7 @@ function notf(acct_id, tlid, sys) {
} }
jQuery("time.timeago").timeago(); jQuery("time.timeago").timeago();
}
$("#notf-box").addClass("fetched"); $("#notf-box").addClass("fetched");
todc(); todc();
}); });

View File

@ -1,8 +1,8 @@
//オブジェクトパーサー(トゥート) //オブジェクトパーサー(トゥート)
function parse(obj, mix, acct_id, tlid, popup) { function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
var templete = ''; var templete = '';
var actb = localStorage.getItem("action_btns"); var actb = localStorage.getItem("action_btns");
var actb='re,rt,fav,qt,del,pin'; var actb='re,rt,fav,qt,del,pin,red';
if(actb){ if(actb){
var actb = actb.split(','); var actb = actb.split(',');
var disp={}; var disp={};
@ -55,7 +55,13 @@ function parse(obj, mix, acct_id, tlid, popup) {
var wordmute = localStorage.getItem("word_mute"); var wordmute = localStorage.getItem("word_mute");
if(wordmute){ if(wordmute){
var wordmute = JSON.parse(wordmute); var wordmute = JSON.parse(wordmute);
wordmute = wordmute.concat(mutefilter);
}else{
wordmute = mutefilter;
} }
if (!sent) { if (!sent) {
var sent = 500; var sent = 500;
} }
@ -368,12 +374,14 @@ function parse(obj, mix, acct_id, tlid, popup) {
} }
var mediack = toot.media_attachments[0]; var mediack = toot.media_attachments[0];
//メディアがあれば //メディアがあれば
var media_ids="";
if (mediack) { if (mediack) {
hasmedia = "hasmedia"; hasmedia = "hasmedia";
var cwdt = 100 / toot.media_attachments.length var cwdt = 100 / toot.media_attachments.length;
Object.keys(toot.media_attachments).forEach(function(key2) { Object.keys(toot.media_attachments).forEach(function(key2) {
var media = toot.media_attachments[key2]; var media = toot.media_attachments[key2];
var purl = media.preview_url; var purl = media.preview_url;
media_ids=media_ids+media.id+",";
var url = media.url; var url = media.url;
if (toot.sensitive && nsfw) { if (toot.sensitive && nsfw) {
var sense = "sensitive" var sense = "sensitive"
@ -386,6 +394,7 @@ function parse(obj, mix, acct_id, tlid, popup) {
purl + '" class="' + sense + purl + '" class="' + sense +
' toot-img pointer" style="width:' + cwdt + '%; height:'+imh+'px;"></a></span>'; ' toot-img pointer" style="width:' + cwdt + '%; height:'+imh+'px;"></a></span>';
}); });
media_ids = media_ids.slice(0, -1) ;
} else { } else {
viewer = ""; viewer = "";
hasmedia = "nomedia"; hasmedia = "nomedia";
@ -473,10 +482,14 @@ function parse(obj, mix, acct_id, tlid, popup) {
Object.keys(wordmute).forEach(function(key8) { Object.keys(wordmute).forEach(function(key8) {
var worde = wordmute[key8]; var worde = wordmute[key8];
if(worde){ if(worde){
var word=worde.tag; if(worde.tag){
var word=worde.tag;
}else{
var word=worde
}
var regExp = new RegExp( word, "g" ) ; var regExp = new RegExp( word, "g" ) ;
if($.strip_tags(content).match(regExp)){ if($.strip_tags(content).match(regExp)){
boostback = "hide"; boostback = "hide by_filter";
} }
} }
}); });
@ -500,7 +513,7 @@ function parse(obj, mix, acct_id, tlid, popup) {
} }
templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' + templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' +
boostback + ' ' + fav_app + ' ' + rt_app + ' ' + pin_app + boostback + ' ' + fav_app + ' ' + rt_app + ' ' + pin_app +
' ' + hasmedia + '" toot-id="' + id + '" unixtime="' + date(obj[ ' ' + hasmedia + '" toot-id="' + id + '" data-medias="'+media_ids+' " unixtime="' + date(obj[
key].created_at, 'unix') + '" '+if_notf+' onmouseover="mov(\'' + toot.id + '\',\''+tlid+'\')" onmouseout="resetmv()">' + key].created_at, 'unix') + '" '+if_notf+' onmouseover="mov(\'' + toot.id + '\',\''+tlid+'\')" onmouseout="resetmv()">' +
'<div class="area-notice"><span class="gray sharesta">' + notice + home + '<div class="area-notice"><span class="gray sharesta">' + notice + home +
'</span></div>' + '</span></div>' +
@ -527,7 +540,7 @@ function parse(obj, mix, acct_id, tlid, popup) {
'</span>' + '</span>' +
'' + mentions + tags + '</div>' + '' + mentions + tags + '</div>' +
'<div class="area-vis"></div>'+ '<div class="area-vis"></div>'+
'<div class="area-actions '+mouseover+'" style="padding:0; margin:0; top:-20px; display:flex; justify-content:space-around; max-width:100%; ">' + '<div class="area-actions '+mouseover+'">' +
'<div class="action">'+vis+'</div>'+ '<div class="action">'+vis+'</div>'+
'<div class="action '+antinoauth+'"><a onclick="detEx(\''+toot.url+'\',\'main\')" class="waves-effect waves-dark details" style="padding:0">詳細(メインアカウント経由)</a></div>' + '<div class="action '+antinoauth+'"><a onclick="detEx(\''+toot.url+'\',\'main\')" class="waves-effect waves-dark details" style="padding:0">詳細(メインアカウント経由)</a></div>' +
'<div class="action '+disp["re"]+' '+noauth+'"><a onclick="re(\'' + toot.id + '<div class="action '+disp["re"]+' '+noauth+'"><a onclick="re(\'' + toot.id +
@ -552,14 +565,17 @@ function parse(obj, mix, acct_id, tlid, popup) {
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートを削除"><i class="fa fa-trash-o"></i></a></div>' + ')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートを削除"><i class="fa fa-trash-o"></i></a></div>' +
'<div class="' + if_mine + ' action pin '+disp["pin"]+' '+noauth+'"><a onclick="pin(\'' + toot.id + '\',' + '<div class="' + if_mine + ' action pin '+disp["pin"]+' '+noauth+'"><a onclick="pin(\'' + toot.id + '\',' +
acct_id + acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートをピン留め"><i class="fa fa-map-pin pin_' + toot.id + ' '+if_pin+'"></i></a></div>' +trans+ ')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートをピン留め"><i class="fa fa-map-pin pin_' + toot.id + ' '+if_pin+'"></i></a></div>'
+'<div class="' + if_mine + ' action '+disp["red"]+' '+noauth+'"><a onclick="redraft(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートを削除して再投稿"><i class="material-icons">redo</i></a></div>'+trans+
'<div class="action ' + if_mine + ' '+noauth+'"><a onclick="toggleAction(\'' + toot.id + '\',\''+tlid+'\',\''+acct_id+'\')" class="waves-effect waves-dark btn-flat" style="padding:0"><i class="text-darken-3 material-icons act-icon">expand_more</i></a></div>' + '<div class="action ' + if_mine + ' '+noauth+'"><a onclick="toggleAction(\'' + toot.id + '\',\''+tlid+'\',\''+acct_id+'\')" class="waves-effect waves-dark btn-flat" style="padding:0"><i class="text-darken-3 material-icons act-icon">expand_more</i></a></div>' +
'<div class="action '+noauth+'"><a onclick="details(\'' + toot.id + '\',' + acct_id + '<div class="action '+noauth+'"><a onclick="details(\'' + toot.id + '\',' + acct_id +
',\''+tlid+'\')" class="waves-effect waves-dark btn-flat details" style="padding:0"><i class="text-darken-3 material-icons">more_vert</i></a></div>' + ',\''+tlid+'\')" class="waves-effect waves-dark btn-flat details" style="padding:0"><i class="text-darken-3 material-icons">more_vert</i></a></div>' +
'<span class="cbadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tags(via)+'\')" title="via ' + $.strip_tags(via) + '">via ' + '<span class="cbadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tags(via)+'\')" title="via ' + $.strip_tags(via) + '">via ' +
via + via +
'</span></div></div>' + '</span></div></div>' +
'</div></div>' + divider; '</div></div>';
}); });
if (mix == "mix") { if (mix == "mix") {
return [templete, local, times] return [templete, local, times]

View File

@ -10,7 +10,7 @@ if(location.search){
} }
//よく使うタグ //よく使うタグ
function tagShow(tag){ function tagShow(tag){
$("[data-tag="+tag+"]").toggleClass("hide"); $("[data-tag="+decodeURI(tag)+"]").toggleClass("hide");
} }
//タグ追加 //タグ追加
function tagPin(tag){ function tagPin(tag){

View File

@ -1,5 +1,5 @@
//TL取得 //TL取得
function tl(type, data, acct_id, tlid) { function tl(type, data, acct_id, tlid, delc) {
scrollevent(); scrollevent();
localStorage.removeItem("morelock"); localStorage.removeItem("morelock");
localStorage.removeItem("pool"); localStorage.removeItem("pool");
@ -36,14 +36,14 @@ function tl(type, data, acct_id, tlid) {
$("#notice_" + tlid).text("Integrated TL(" + localStorage.getItem( $("#notice_" + tlid).text("Integrated TL(" + localStorage.getItem(
"user_" + acct_id) + "@" + domain + ")"); "user_" + acct_id) + "@" + domain + ")");
$("#notice_icon_" + tlid).text("merge_type"); $("#notice_icon_" + tlid).text("merge_type");
mixtl(acct_id, tlid, "integrated"); mixtl(acct_id, tlid, "integrated",delc);
return; return;
}else if (type == "plus") { }else if (type == "plus") {
//Local+なら飛ばす //Local+なら飛ばす
$("#notice_" + tlid).text("Local+ TL(" + localStorage.getItem( $("#notice_" + tlid).text("Local+ TL(" + localStorage.getItem(
"user_" + acct_id) + "@" + domain + ")"); "user_" + acct_id) + "@" + domain + ")");
$("#notice_icon_" + tlid).text("people_outline"); $("#notice_icon_" + tlid).text("people_outline");
mixtl(acct_id, tlid, "plus"); mixtl(acct_id, tlid, "plus",delc);
return; return;
}else if (type == "notf") { }else if (type == "notf") {
//通知なら飛ばす //通知なら飛ばす
@ -89,18 +89,24 @@ function tl(type, data, acct_id, tlid) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function(json) { }).then(function(json) {
var templete = parse(json, type, acct_id, tlid); if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),type);
}else{
var mute=[];
}
var templete = parse(json, type, acct_id, tlid, "", mute);
$("#timeline_" + tlid).html(templete); $("#timeline_" + tlid).html(templete);
additional(acct_id, tlid); additional(acct_id, tlid);
jQuery("time.timeago").timeago(); jQuery("time.timeago").timeago();
todc(); todc();
reload(type, '', acct_id, tlid, data); reload(type, '', acct_id, tlid, data, mute, delc);
$(window).scrollTop(0); $(window).scrollTop(0);
}); });
} }
//Streaming接続 //Streaming接続
function reload(type, cc, acct_id, tlid, data) { function reload(type, cc, acct_id, tlid, data, mute, delc) {
if (!type) { if (!type) {
var type = localStorage.getItem("now"); var type = localStorage.getItem("now");
} }
@ -157,13 +163,19 @@ function reload(type, cc, acct_id, tlid, data) {
var typeA = JSON.parse(mess.data).event; var typeA = JSON.parse(mess.data).event;
if (typeA == "delete") { if (typeA == "delete") {
var obj = JSON.parse(mess.data).payload; var obj = JSON.parse(mess.data).payload;
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide(); if(delc=="true"){
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove(); $("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch");
}else{
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
}
} else if (typeA == "update") { } else if (typeA == "update") {
var obj = JSON.parse(JSON.parse(mess.data).payload); var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj); console.log(obj);
if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){ if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){
var templete = parse([obj], type, acct_id, tlid); var templete = parse([obj], type, acct_id, tlid,"",mute);
var pool = localStorage.getItem("pool_" + tlid); var pool = localStorage.getItem("pool_" + tlid);
if (pool) { if (pool) {
pool = templete + pool; pool = templete + pool;
@ -181,6 +193,8 @@ function reload(type, cc, acct_id, tlid, data) {
} }
todc(); todc();
}else if(typeA=="filters_changed"){
filterUpdate(acct_id);
} }
websocket[wsid].onclose = function(mess) { websocket[wsid].onclose = function(mess) {
console.log("Close Streaming API:" + type); console.log("Close Streaming API:" + type);
@ -241,7 +255,7 @@ function moreload(type, tlid) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function(json) { }).then(function(json) {
var templete = parse(json, '', acct_id, tlid); var templete = parse(json, '', acct_id, tlid,"",mute);
$("#timeline_" + tlid).append(templete); $("#timeline_" + tlid).append(templete);
additional(acct_id, tlid); additional(acct_id, tlid);
jQuery("time.timeago").timeago(); jQuery("time.timeago").timeago();

View File

@ -42,6 +42,8 @@ function parseColumn() {
localStorage.setItem("acct_"+ key + "_at", acct.at); localStorage.setItem("acct_"+ key + "_at", acct.at);
notf(key, 0); notf(key, 0);
ckdb(key); ckdb(key);
//フィルターデータ読もう
getFilter(key);
}); });
} }
var acctlist=obj; var acctlist=obj;
@ -113,13 +115,16 @@ function parseColumn() {
')" class="setting nex" title="このカラムの設定"'+icnsert+'><i class="material-icons waves-effect nex">settings</i></a></div></div>'+ ')" class="setting nex" title="このカラムの設定"'+icnsert+'><i class="material-icons waves-effect nex">settings</i></a></div></div>'+
'<div class="hide notf-indv-box z-depth-4" id="notf-box_' + key + '<div class="hide notf-indv-box z-depth-4" id="notf-box_' + key +
'"><div id="notifications_' + key + '"><div id="notifications_' + key +
'" data-notf="' + acct.domain + '"></div></div><div class="hide notf-indv-box" id="util-box_' + key + '" data-notf="' + acct.domain + '" data-type="notf"></div></div><div class="hide notf-indv-box" id="util-box_' + key +
'" style="padding:5px;"><a onclick="mediaToggle(' + key + '" style="padding:5px;"><a onclick="mediaToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="メディアフィルター">perm_media</i><span id="sta-media-' + ')" class="setting nex"><i class="material-icons waves-effect nex" title="メディアフィルター">perm_media</i><span id="sta-media-' +
key + '">On</span></a>メディアフィルター<br><a onclick="cardToggle(' + key + key + '">On</span></a>メディアフィルター<br><a onclick="cardToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="リンクの解析を切り替え(OFFで制限を回避出来る場合があります)">link</i><span id="sta-card-' + ')" class="setting nex"><i class="material-icons waves-effect nex" title="リンクの解析を切り替え(OFFで制限を回避出来る場合があります)">link</i><span id="sta-card-' +
key + '">On</span></a>リンク解析<br>TLヘッダーの色<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key + key + '">On</span></a>リンク解析<br><a onclick="catchToggle(' + key +
'" class="tl" tlid="' + key + '"'+notf_attr+'><div style="text-align:center">[ここにトゥートはありません。]<br>F5/⌘+Rで再読込できます。</div></div></div></div>'; ')" class="setting nex"><i class="material-icons waves-effect nex" title="削除捕捉(削除されても残ります。背景色が変化します。)">delete</i><span id="sta-del-' +
key + '">On</span></a>削除捕捉<a onclick="delreset(' + key +
')" class="pointer">リセット</a><br>TLヘッダーの色<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
'" class="tl" tlid="' + key + '"'+notf_attr+' data-type="' + acct.type + '"><div style="text-align:center">[ここにトゥートはありません。]<br>F5/⌘+Rで再読込できます。</div></div></div></div>';
$("#timeline-container").append(html); $("#timeline-container").append(html);
localStorage.removeItem("pool_" + key); localStorage.removeItem("pool_" + key);
if (acct.data) { if (acct.data) {
@ -127,9 +132,15 @@ function parseColumn() {
} else { } else {
var data = ""; var data = "";
} }
tl(acct.type, data, acct.domain, key); if(localStorage.getItem("catch_" + tlid)){
var delc="true";
}else{
var delc="false";
}
tl(acct.type, data, acct.domain, key, delc);
cardCheck(key); cardCheck(key);
mediaCheck(key); mediaCheck(key);
catchCheck(key)
}); });
var width = localStorage.getItem("width"); var width = localStorage.getItem("width");
if (width) { if (width) {

View File

@ -70,7 +70,7 @@ function pinutl(before,user, acct_id) {
}).then(function(json) { }).then(function(json) {
var templete = parse(json, '', acct_id); var templete = parse(json, '', acct_id);
if(!json[0]){ if(!json[0]){
templete="データはありません<br>"; templete="";
} }
var height = $("#his-data-content").height() - 245; var height = $("#his-data-content").height() - 245;
$(".tab-content").css('height', height); $(".tab-content").css('height', height);
@ -396,10 +396,14 @@ function showFrl(more, acct_id) {
$("#his-follow-recom-contents").html("データはありません(Mastodon 2.4.3~が必要です)<br>"); $("#his-follow-recom-contents").html("データはありません(Mastodon 2.4.3~が必要です)<br>");
console.error(error); console.error(error);
}).then(function(json) { }).then(function(json) {
console.log(json);
if(!json[0]){ if(!json[0]){
templete="データはありません(Mastodon 2.4.3~)<br>"; console.log("No data");
templete="データはありません(非フォローだけど絡みがある時に表示されます。)<br>";
}else{
var templete = userparse(json,'',acct_id);
} }
var templete = userparse(json,'',acct_id);
if (more) { if (more) {
$("#his-follow-recom-contents").append(templete); $("#his-follow-recom-contents").append(templete);
} else { } else {

View File

@ -1,6 +1,6 @@
{ {
"name": "TheDesk", "name": "TheDesk",
"version": "15.8.0", "version": "15.9.0",
"description": "TheDesk on Mastodonはシンプルと多機能を両立したデスクトップ向けクライアントです", "description": "TheDesk on Mastodonはシンプルと多機能を両立したデスクトップ向けクライアントです",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {