TheDesk Airi (ver.8)

This commit is contained in:
cutls 2018-03-21 14:36:02 +09:00
parent d6acb0bebc
commit a84a1da29b
20 changed files with 214 additions and 84 deletions

View File

@ -1,19 +1,19 @@
## For Astarte(kirishima.cloud), My Primary Instance
TheDesk :thedesk: Airi (ver.7)
TheDesk :thedesk: Airi (ver.8)
・バグフィックス
カスタム絵文字検索
Pleroma暫定対応(投稿・表示のみ。)
個別インスタンスの対応
UI改善
キーボードショートカット追加・変更
他垢からふぁぼ・フォローなどが可能に
https://thedesk.top
:github: https://github.com/cutls/TheDesk #Desk #DeskUpdate
## For Vanilla Instances
Windows/LinuxクライアントTheDesk Airi (ver.7)リリース
Windows/LinuxクライアントTheDesk Airi (ver.8)リリース
・バグフィックス
カスタム絵文字検索
Pleroma暫定対応(投稿・表示のみ。)
個別インスタンスの対応
UI改善
キーボードショートカット追加・変更
他垢からふぁぼ・フォローなどが可能に
TheDeskはマルチカラムマルチアカウントはもちろんのことなにかとマストドンライフをシンプルに効率化するクライアントです。
https://thedesk.top

View File

@ -5,6 +5,7 @@
</head>
<body>
<h1>503 Service Unavailable</h1>
TheDeskは2017年12月30日 23:59に終了したCroudiaというSNSのクライアントから始まりました。<br>
<u>4月1日</u>よりTheDeskはCroudiaクライアントとして生まれ変わりました。<br><br><br><br>
TheDeskは2017年12月30日 23:59に終了したCroudiaというSNSのクライアントから始まりました。(Since 2016-5 as CroudiaDeck)<br>
<a onclick="localStorage.setItem('sincere','true'); location.href='index.html';" style="cursor:pointer;">TheDeskに戻る</a>
</body>

View File

@ -27,7 +27,7 @@
<script type="text/javascript" src="./js/ui/jquery-ui.min.js"></script>
<script>
//必ずアプデ時のremove instance消して
var ver="Airi (ver.7)";
var ver="Airi (ver.8)";
//betaを入れるとバージョンチェックしない
//var ver="beta";
var acct_id=0;
@ -166,7 +166,7 @@ var tlid=0;
</div>
<div class="small-menu">
<a href="setting.html" class="nex waves-effect">
<i class="material-icons nex" title="設定" data-trans-title="setting">settings</i>
<i class="material-icons nex" title="設定(Ctrl+Shift+S)" data-trans-title="setting">settings</i>
<span class="side-label" data-trans="setting">設定</span>
</a>
</div>
@ -190,7 +190,7 @@ var tlid=0;
</div>
<div class="small-menu">
<a href="acct.html" class="nex waves-effect">
<i class="material-icons" title="アカウントマネージャー" data-trans-title="manager">account_circle</i>
<i class="material-icons" title="アカウントマネージャー(Ctrl+Shift+M)" data-trans-title="manager">account_circle</i>
<span class="side-label" data-trans="manager_short">管理</span>
</a>
</div>
@ -224,7 +224,7 @@ var tlid=0;
</span>
<br>
<a id="clear" class="setting nex waves-effect">
<i class="material-icons nex mize" title="トゥートボックスのクリア" data-trans-title="post_box_clear">clear</i>
<i class="material-icons nex mize" title="トゥートボックスのクリア(Ctrl+Shit+C)" data-trans-title="post_box_clear">clear</i>
</a>
<a onclick="zoomBox()" class="setting nex waves-effect">
<i class="material-icons nex mize" title="ボックスの拡大・縮小(E)" data-trans-title="post_box_zoom">zoom_out_map</i>
@ -236,7 +236,7 @@ var tlid=0;
</div>
<span id="radio-sta" class="radio"></span>
<div id="radio-view" class="hide radio mize">
<a onclick="nowplaying()" class="pointer"><i class="fa fa-spotify"></i>NowPlaying</a>
<a onclick="nowplaying()" class="pointer" title="Ctrl+Shift+N"><i class="fa fa-spotify"></i>NowPlaying</a>
<span class="cbadge pointer waves-effect" onclick="Rplay('https://listen.moe/stream','Listen.moe')" data-name="Listen.moe">Listen.moe</span>
<span class="cbadge pointer waves-effect" onclick="Rplay('http://itori.animenfo.com:443/;','AnimeNfo Radio')" data-name="AnimeNfo Radio">AnimeNfo Radio</span>
<span class="cbadge pointer waves-effect" onclick="Rplay('http://hyades.shoutca.st:8043/stream','LoFi hip hop Radio')" data-name="LoFi hip hop Radio">LoFi hip hop Radio</span>
@ -263,7 +263,7 @@ var tlid=0;
</div>
<div class="mize" style="float:left;">
<a onclick="profShow()" style="vertical-align:-1.5rem;">
<i class="material-icons nex pointer mize waves-effect" title="選択中のプロフィール表示" data-trans-title="post_box_prof">account_circle</i>
<i class="material-icons nex pointer mize waves-effect" title="選択中のプロフィール表示(Ctrl+Shift+P)" data-trans-title="post_box_prof">account_circle</i>
</a>
</div>
<!--Markdown-->
@ -320,6 +320,7 @@ var tlid=0;
<span class="sml gray pointer more-show anti-markdown hide mize">
<a onclick="mdToggle()">Markdownエディタを表示</a>
</span>
<br>
<span id="suggest"></span>
</div>
@ -483,6 +484,21 @@ var tlid=0;
</div>
</li>
</ul>
他のアカウントを使用(<i class="fa fa-retweet"></i>/<i class="fa fa-star"></i>の解除はできません)<br>
<div class="row">
<div class="col s4">
<select id="status-acct-sel" class="acct-sel"></select>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share left"></i>返信</button>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i class="fa fa-retweet left"></i>ブースト</button>
</div>
<div class="col s3">
<button class="dropdown-button btn waves-effect orange" style="width:100%;" onclick="staEx('fav')"><i class="fa fa-star left"></i>お気に入り登録</button>
</div>
</div>
<div id="toot-tools">
</div>
<div id="toot-after">
@ -526,31 +542,34 @@ var tlid=0;
<div class="col s12" id="my-data-nav">
<ul class="custom-tabs transparent">
<li class="custom-tab col my-data-width active-back">
<a go="#his-tl">Timeline</a>
<a go="#his-tl">タイムライン</a>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follow-list">Follows</a>
<a go="#his-follow-list">フォロー</a>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follower-list">Followers</a>
<a go="#his-follower-list">フォロワー</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-action">他アカウントで操作</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-fav-list">Favorites</a>
<a go="#his-fav-list">お気に入り登録</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-blocking-list">Blocking</a>
<a go="#his-blocking-list">ブロック</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-muting-list">Muting</a>
<a go="#his-muting-list">ミュート</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-domain-list">Domain Blocking</a>
<a go="#his-domain-list">ドメインブロック</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-prof-list">Edit Profile</a>
<a go="#his-prof-list">プロフィール編集</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-request-list">Follow Request</a>
<a go="#his-request-list">フォローリクエスト</a>
</li>
</ul>
</div>
@ -569,6 +588,11 @@ var tlid=0;
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="fer('--now','more')">もっと</button>
</div>
<div id="his-action" class="col s12 tab-content">
他のアカウントを使用してフォロー(解除はできません)<br>
<div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div>
<a href="#!" class="waves-effect btn" onclick="follow('selector','true')">フォロー</a>
</div>
<div id="his-fav-list" class="col s12 tab-content">
<div id="his-fav-list-contents" class="cont-series">
</div>

View File

@ -42,6 +42,20 @@ $(function($) {
}
}
}
//Ctrl+Sift+C:全消し
if (event.ctrlKey && event.shiftKey) {
if (e.keyCode === 67) {
clear();
return false;
}
}
//Ctrl+Sift+N:NowPlaying
if (event.ctrlKey && event.shiftKey) {
if (e.keyCode === 78) {
nowplaying()
return false;
}
}
//input/textareaにフォーカスなし時
if (!hasFocus && !hasFocus2) {
//X:開閉
@ -74,10 +88,24 @@ $(function($) {
return false;
}
}
//Sift+C:全消し
if (event.shiftKey) {
if (e.keyCode === 67) {
clear();
//Ctrl+Sift+S:設定
if (event.ctrlKey && event.shiftKey) {
if (e.keyCode === 83) {
location.href = "setting.html";
return false;
}
}
//Ctrl+Sift+M:アカマネ
if (event.ctrlKey && event.shiftKey) {
if (e.keyCode === 77) {
location.href = "acct.html";
return false;
}
}
//Ctrl+Sift+P:プロフ
if (event.ctrlKey && event.shiftKey) {
if (e.keyCode === 80) {
profShow()
return false;
}
}

View File

@ -377,9 +377,10 @@ function multi() {
'" class="left circle" ' + sel + '>' + acct.user + '@' + acct.domain +
'</option>';
$(".acct-sel").append(templete);
});
$("#src-acct-sel").append('<option value="tootsearch">Tootsearch</option>');
$('select').material_select('update');
});
}
//バージョンエンコ

View File

@ -16,9 +16,9 @@ function mdCheck(){
}
var domain = localStorage.getItem("domain_" + acct_id);
if(domain=="mstdn.y-zu.org"){
//$("#private-button").text("限定公開(Yづドン!)");
$("#private-button").text("限定公開(Yづドン!)");
}else{
//$("#private-button").text("非公開(Private)");
$("#private-button").text("非公開(Private)");
}
}
//BOXのトグルボタン

View File

@ -26,7 +26,7 @@ function post() {
var nsfw = "false";
}
var vis = $("#vis").text();
if(vis!="public"){
if(vis!="inherit"){
toot.visibility=vis;
}
if ($("#cw").hasClass("cw-avail")) {

View File

@ -10,3 +10,10 @@ function re(id,at,acct_id,mode){
$("#textarea").attr("placeholder","返信モードです。クリアするときはShift+Cを押してください。");
vis(mode);
}
function reEx(id){
$('#tootmodal').modal('close');
var at=$("#tootmodal").attr("data-user");
var acct_id = $("#status-acct-sel").val();
var mode=$("#tootmodal .vis-data").attr("data-vis");
re(id,at,acct_id,mode);
}

View File

@ -1,6 +1,6 @@
//お気に入り登録やブースト等、フォローやブロック等
//お気に入り登録
function fav(id, acct_id) {
function fav(id, acct_id, remote) {
if ($("#pub_" + id).hasClass("faved")) {
var flag = "unfavourite";
} else {
@ -23,6 +23,7 @@ function fav(id, acct_id) {
console.error(error);
}).then(function(json) {
console.log(json);
if(!remote){
//APIのふぁぼカウントがおかしい
if ($("[toot-id=" + id + "] .fav_ct").text() == json.favourites_count){
if(flag=="unfavourite"){
@ -46,11 +47,14 @@ function fav(id, acct_id) {
$("[toot-id=" + id +"]").addClass("faved");
$(".fav_" + id).addClass("yellow-text");
}
}else{
Materialize.toast("お気に入り登録しました。インスタンスが違うときは時間がかかる場合があります。", 1000);
}
});
}
//ブースト
function rt(id, acct_id) {
function rt(id, acct_id, remote) {
if ($("#pub_" + id).hasClass("rted")) {
var flag = "unreblog";
} else {
@ -73,6 +77,7 @@ function rt(id, acct_id) {
console.error(error);
}).then(function(json) {
console.log(json);
if(!remote){
$("[toot-id=" + id + "] .fav_ct").text(json.favourites_count);
if (!json.reblog) {
if(flag=="unreblog"){
@ -92,21 +97,28 @@ function rt(id, acct_id) {
$("[toot-id=" + id +"]").addClass("rted");
$(".rt_" + id).addClass("teal-text");
}
}else{
Materialize.toast("ブーストしました。インスタンスが違うときは時間がかかる場合があります。", 1000);
}
});
}
//フォロー
function follow(acct_id) {
if (!acct_id) {
function follow(acct_id,remote) {
if (!acct_id && acct_id!="selector") {
var acct_id = $('#his-data').attr("use-acct");
}else if (acct_id=="selector") {
var acct_id = $("#user-acct-sel").val();
}
var id = $("#his-data").attr("user-id");
var remote = $("#his-data").attr("remote");
if ($("#his-data").hasClass("following")) {
if (!remote && $("#his-data").hasClass("following")) {
var flag = "unfollow";
} else {
var flag = "follow";
}
var id = $("#his-data").attr("user-id");
if(!remote){
var remote = $("#his-data").attr("remote");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if(remote=="true" && flag=="follow"){
@ -353,3 +365,34 @@ function tootUriCopy(url){
execCopy(url);
Materialize.toast("トゥートURLをコピーしました", 1500);
}
//他のアカウントで…
function staEx(mode){
var url=$("#tootmodal").attr("data-url");
var acct_id = $("#status-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_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) {
var id=json.statuses[0].id;
if(mode=="rt"){
rt(id, acct_id, 'remote')
}else if(mode=="fav"){
fav(id, acct_id, 'remote')
}else if(mode=="reply"){
reEx(id)
}
});
return;
}

View File

@ -3,28 +3,6 @@ function details(id, acct_id, tlid) {
$(".toot-reset").html("データなし");
var html = $("#timeline_"+tlid+" #pub_" + id).html();
$("#toot-this").html(html);
if(!$("#timeline_"+tlid+" #pub_" + id).length){
console.log("API Using");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/statuses/" + 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 html = parse([json]);
$("#toot-this").html(html);
jQuery("time.timeago").timeago();
});
}
$('#tootmodal').modal('open');
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
@ -41,10 +19,20 @@ function details(id, acct_id, tlid) {
todo(error);
console.error(error);
}).then(function(json) {
if(!$("#timeline_"+tlid+" #pub_" + id).length){
var html = parse([json]);
$("#toot-this").html(html);
jQuery("time.timeago").timeago();
}
$("#toot-this .fav_ct").text(json.favourites_count);
$("#toot-this .rt_ct").text(json.reblogs_count);
$("#tootmodal").attr("data-url",json.url);
$("#tootmodal").attr("data-id",json.id);
if(json.account.acct==json.account.username){
$("#tootmodal").attr("data-user",json.account.acct+"@"+domain);
}else{
$("#tootmodal").attr("data-user",json.account.acct);
}
if (json.in_reply_to_id) {
replyTL(json.in_reply_to_id, acct_id);
}

View File

@ -306,19 +306,19 @@ function parse(obj, mix, acct_id, tlid, popup) {
var visen = toot.visibility;
if (visen == "public") {
var vis =
'<i class="text-darken-3 material-icons gray sml" title="公開">public</i>';
'<i class="text-darken-3 material-icons gray sml vis-data" title="公開" data-vis="public">public</i>';
var can_rt = "";
} else if (visen == "unlisted") {
var vis =
'<i class="text-darken-3 material-icons blue-text" title="未収載">lock_open</i>';
'<i class="text-darken-3 material-icons blue-text vis-data" title="未収載" data-vis="unlisted">lock_open</i>';
var can_rt = "";
} else if (visen == "plivate") {
var vis =
'<i class="text-darken-3 material-icons orange-text" title="非公開">lock</i>';
'<i class="text-darken-3 material-icons orange-text vis-data" title="非公開" data-vis="private">lock</i>';
var can_rt = "hide";
} else if (visen == "direct") {
var vis =
'<i class="text-darken-3 material-icons red-text" title="ダイレクト">mail</i>';
'<i class="text-darken-3 material-icons red-text vis-data" title="ダイレクト" data-vis="direct">mail</i>';
var can_rt = "hide";
}
if (toot.account.acct == localStorage.getItem("user_" + acct_id)) {

View File

@ -1,3 +1,12 @@
//タグ表示
if(location.search){
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
var mode=m[1];
var codex=m[2];
if(mode=="tag"){
tl('tag',decodeURI(codex),0,'add');
}
}
//よく使うタグ
function tagShow(tag){
$("[data-tag="+tag+"]").toggleClass("hide");

View File

@ -87,7 +87,7 @@
')" class="setting nex" title="このアカウントの'+unique_notf+'"><i class="material-icons waves-effect nex notf-icon_' +
acct.domain + '">notifications</i></a></div>'+
'<div class="area-a2"><a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">remove_circle</i></a></div>'+
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">cancel</i></a></div>'+
'<div class="area-a3"><a onclick="mediaToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="メディアフィルター">perm_media</i><span id="sta-media-' +
key + '">On</span></div>'+
@ -157,6 +157,7 @@
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
parseColumn();
sortload()
}
})
}

View File

@ -190,7 +190,7 @@ function load() {
var size = localStorage.getItem("size");
if (!size) {
var size = "15";
var size = "13";
}
$("#size").val(size);

View File

@ -10,7 +10,8 @@ function sortload(){
if(localStorage.getItem("card_" + key)=="true"){
flag="true"
}
var html='<li class="drag-content" data-id="'+key+'" data-flag="'+flag+'">'+localStorage.getItem("domain_" + acct.domain)+" "+cap(acct.type, acct.data)+' TL</li>';
var html='<li class="drag-content" data-id="'+key+'" data-flag="'+flag+'">'+localStorage.getItem("domain_" + acct.type)+localStorage.getItem("domain_" + acct.domain)+" "+cap(acct.type, acct.data)+' TL <a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">cancel</i></a></li>';
$("#sort").append(html);
});
drag();

View File

@ -6,9 +6,30 @@ if(location.search){
var mode=m[1];
var codex=m[2];
if(mode=="user"){
udg(codex,0);
udgEx(codex,0);
}
}
function udgEx(user,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/search?resolve=true&q="+user
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 id=json.accounts[0].id;
udg(id,0);
});
return;
}
function udg(user, acct_id) {
reset();
if (!user) {
@ -90,9 +111,11 @@ function udg(user, acct_id) {
$("#his-domain-btn").hide();
$("#his-emp-btn").hide();
$(".only-my-data").show();
$(".only-his-data").hide();
} else {
relations(user, acct_id);
$(".only-my-data").hide();
$(".only-his-data").show();
}
}
todc();

View File

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

View File

@ -5,10 +5,7 @@
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
<link href="./css/master.css" type="text/css" rel="stylesheet">
<link href="./css/auth.css" type="text/css" rel="stylesheet">
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
<link href='./css/tl.css' rel='stylesheet' type='text/css'>
<link href='./css/userdata.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
<meta charset="utf-8">
</head>
@ -16,9 +13,6 @@
<script type="text/javascript" src="./js/common/jquery.js"></script>
<script type="text/javascript" src="./js/platform/first.js"></script>
<script type="text/javascript" src="./js/common/materialize.js"></script>
<script type="text/javascript" src="./js/ui/tips.js"></script>
<script type="text/javascript" src="./js/common/time.js"></script>
<script type="text/javascript" src="./js/common/modal.js"></script>
<h4>設定</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
@ -204,7 +198,15 @@
</li>
<li>E:投稿パネルの幅を切り替え
</li>
<li>Shift+C:入力内容を消す
<li>Ctrl+Shift+C:入力内容を消す
</li>
<li>Ctrl+Shift+S:設定
</li>
<li>Ctrl+Shift+M:アカウントマネージャー
</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)
</li>
<li>Ctrl+Shift+P:現在選択中のプロフィール
</li>
<li>←/→:イメージビューワー起動時に画像切り替え
</li>
@ -227,7 +229,7 @@
<a href="https://enty.jp/Cutls" class="btn waves-effect purple lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>支援(Enty)</a>
<a href="https://trello.com/b/FZtwd1xx" class="btn waves-effect blue darken-2" style="width:100%; max-width:500px;"><i class="material-icons left">list</i>Trello(今後のToDo)</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2" style="width:100%; max-width:500px;"><i class="fa fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=12336" class="btn waves-effect blue lighten-2" style="width:100%; max-width:500px;"><img src="./img/desk_full.svg" class="left" width="25" style="padding-top:5px;">Developer: Cutls@kirishima.cloud</a>
<a href="index.html?mode=user&code=Cutls@kirishima.cloud" class="btn waves-effect blue lighten-2" style="width:100%; max-width:500px;"><img src="./img/desk_full.svg" class="left" width="25" style="padding-top:5px;">Developer: Cutls@kirishima.cloud</a>
<br>
寿司を投げる<br>
<a href="https://osushi.love/Cutls_P" target="_blank">Osushi.love</a>(スマートフォンから)<br>
@ -235,9 +237,11 @@
<span style="font-family:Open Sans;">Copyright &copy; TheDesk on Mastodon 2018 & Cutls.com 2015 All Rights Reserved.
<a href="https://github.com/cutls/TheDesk/blob/master/LICENSE.md">TheDesk LICENSE (Latest Ver.)</a>
<br>Developer: Cutls P(
<a href="index.html?mode=user&code=12336">@Cutls@kirishima.cloud</a>)
<a href="index.html?mode=user&code=Cutls@kirishima.cloud">@Cutls@kirishima.cloud</a>)
<br>
</span>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>を応援しています。<br>
<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="./js/common/about.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>
<script type="text/javascript" src="./js/login/logout.js"></script>

View File

@ -1 +1 @@
{"warn":"これはGCPにアップして下さい","warn2":"これはGCPにアップして下さい","warn3":"これはGCPにアップして下さい","desk":"Airi (ver.7)","date":"2018-03-20","detail":"内部V:13.7.0|バグフィックスPleroma暫定対応カスタム絵文字検索など"}
{"warn":"これはGCPにアップして下さい","warn2":"これはGCPにアップして下さい","warn3":"これはGCPにアップして下さい","desk":"Airi (ver.8)","date":"2018-03-20","detail":"内部V:13.8.0|バグフィックスUI改善キーボードショートカット追加・変更他垢からふぁぼ・フォローなど"}