TheDesk Akane (16.0.0) -phase 2

This commit is contained in:
cutls 2018-07-29 16:37:54 +09:00
parent 7f64bd6d2a
commit 5a920d63fd
37 changed files with 1220 additions and 474 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@ TheDesk-*
app/.DS_Store
.DS_Store
enq.md
app/.tkn

View File

@ -25,6 +25,10 @@ body,html{overflow-y: scroll;}
<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/lang/lang.js"></script>
<script>
var lang="en";
</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>

View File

@ -21,7 +21,6 @@
flex-direction:row;
overflow-x:scroll;
display: flex;
justify-content: center;
width:100vw;
}

View File

@ -54,13 +54,24 @@
margin-right:15px;
border-radius:5px;
}
#spot-box{
white-space: nowrap;
text-overflow: ellipsis;
}
#spot-img{
margin-right:2px;
}
#spot-art{
margin-right:2px;
margin-left:2px;
}
.btnsgroup .grouptitle{
font-family:Open Sans;
font-size:15px;
}
@media screen and (max-width: 1344px) {
.btnsgroup .grouptitle{ display: none; }
#tips{ display: none; }
#tips,#tips-menu{ display: none; }
}
iframe {
max-width:100%;

View File

@ -18,6 +18,8 @@
<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/lang/lang.js"></script>
<script type="text/javascript" src="./js/lang/parse.lang.js"></script>
<script type="text/javascript" src="./js/common/time.js"></script>
<script type="text/javascript" src="./js/common/version.js"></script>
<script type="text/javascript" src="./js/common/keyshortcut.js"></script>
@ -27,6 +29,7 @@
var ver="Akane (16.0.0) beta";
//betaを入れるとバージョンチェックしない
//var ver="beta";
var lang="en";
var acct_id=0;
var tlid=0;
verck(ver);
@ -735,6 +738,9 @@ var tlid=0;
<a onclick="tips('trend')" class="nex waves-effect imasonly" style="display:none;">
<i class="material-icons nex" title="アイマストドントレンド" data-trans-title="trendtip">whatshot</i>
</a>
<a onclick="tips('spotify')" class="nex waves-effect">
<i class="fa fa-spotify nex" title="Spotify" data-trans-title="spotifytips"></i>
</a>
</div>
</div>
<div id="tips" class="hide">

View File

@ -47,7 +47,7 @@ function verck(ver) {
var newest=mess.desk;
}
if (newest == ver) {
todo("お使いのバージョン" + mess.desk + "は最新です。");
todo(lang_version_usever[lang].replace("{{ver}}" ,mess.desk));
//betaならアプデチェックしない
} else if (ver.indexOf("beta")==-1) {
localStorage.removeItem("instance")
@ -56,7 +56,7 @@ function verck(ver) {
var ipc = electron.ipcRenderer;
ipc.send('update', "true");
}else{
todo("アップデートはスキップされました。");
todo(lang_version_skipver[lang]);
}
}else{
var ipc = electron.ipcRenderer;

View File

@ -9,16 +9,32 @@ var defaultemoji={
place:place,
symbol:symbol
};
var defaultemojiname={
activity:"活動",
flag:"国旗",
food:"食べ物",
nature:"自然",
object:"もの",
people:"ひと",
place:"場所",
symbol:"記号"
};
if(lang=="ja"){
var defaultemojiname={
activity:"活動",
flag:"国旗",
food:"食べ物",
nature:"自然",
object:"もの",
people:"ひと",
place:"場所",
symbol:"記号"
};
var lang_defaultemojis_text="{{cat}}の絵文字";
}else if(lang=="en"){
var defaultemojiname={
activity:"Activities",
flag:"Flags",
food:"Foods",
nature:"Nature",
object:"Tools",
people:"People",
place:"Places",
symbol:"Symbols"
};
var lang_defaultemojis_text="Emojis of {{cat}}";
}
function defaultEmoji(target){
var json=defaultemoji[target];
var emojis="";
@ -27,7 +43,7 @@ function defaultEmoji(target){
emojis = emojis + '<a onclick="defEmoji(\''+emoji["shortcode"]+'\')" class="pointer"><span style="width: 20px; height: 20px; display: inline-block; background-image: url(\'./img/sheet.png\'); background-size: 4900%; background-position: '+emoji["css"]+';"></span></a>';
});
$("#emoji-list").html(emojis);
$("#now-emoji").text(defaultemojiname[target]+"の絵文字");
$("#now-emoji").text(lang_defaultemojis_text.replace("{{cat}}" ,defaultemojiname[target]));
$(".emoji-control").addClass("hide");
}
function customEmoji(){

237
app/js/lang/lang.js Normal file
View File

@ -0,0 +1,237 @@
//commonError
var lang_toot={
"ja":"トゥート",
"en":"Toot"
}
var lang_there={
"ja":"あり",
"en":"Yes"
}
var lang_nothing={
"ja":"なし",
"en":"None"
}
var lang_yesno={
"ja":"はい",
"en":"Yes"
}
var lang_no={
"ja":"いいえ",
"en":"No"
}
var lang_progress={
"ja":"処理中",
"en":"Wait..."
}
var lang_edit={
"ja":"編集",
"en":"Edit"
}
var lang_del={
"ja":"削除",
"en":"Delete"
}
var lang_add={
"ja":"追加",
"en":"Add"
}
var lang_fatalerroroccured={
"ja":"エラーが発生しました。しばらく待ってから再起動してください。",
"en":"Some errors are occured, please restart TheDesk."
}
//common/version.js
var lang_version_usever={
"ja":"お使いのバージョン{{ver}}は最新です。",
"en":"No update is found({{ver}})"
}
var lang_version_skipver={
"ja":"アップデートはスキップされました。",
"en":"Update was ignored."
}
//login
//login/login.js
var lang_login_noauth={
"ja":"認証せずに見る",
"en":"Show TL of unlogined accounts"
}
//login/manager.js
var lang_manager_info={
"ja":"インスタンス情報",
"en":"About this instance"
}
var lang_manager_refresh={
"ja":"情報更新",
"en":"Refresh"
}
var lang_manager_delete={
"ja":"削除",
"en":"Logout"
}
var lang_manager_color={
"ja":"アカウントカラーを選択",
"en":"Account Color"
}
var lang_manager_confirm={
"ja":"を削除します。",
"en":"is about to logout. Continue?"
}
var lang_manager_mainAcct={
"ja":"メインアカウントを設定しました。",
"en":"Done:choose main account"
}
//post/emoji.js
var lang_emoji_get={
"ja":"絵文字リストを取得",
"en":"Get emojis"
}
var lang_emoji_custom={
"ja":"カスタム絵文字",
"en":"Custom emojis"
}
//post/img.js
var lang_postimg_previewdis={
"ja":"プレビューできません。",
"en":"cannot preview"
}
var lang_postimg_aftupload={
"ja":"アップロード後はアカウントを切り替えられません。",
"en":"You cannot change accounts after uploading."
}
//post/post.js
var lang_post_tagTL={
"ja":"デフォルトタグが挿入されていません。このまま投稿するとローカルには表示されません。",
"en":"This toot does not contain a default tag. This toot will not be shown on Local TL. Continue?"
}
//post/status.js
var lang_status_favWarn={
"ja":"お気に入り登録しました。インスタンスが違うときは時間がかかる場合があります。",
"en":"It will take a miunte to favourite a remote toot."
}
var lang_status_btWarn={
"ja":"ブーストしました。インスタンスが違うときは時間がかかる場合があります。",
"en":"It will take a miunte to boost a remote toot."
}
var lang_status_follow={
"ja":"フォロー",
"en":"Follow"
}
var lang_status_unfollow={
"ja":"フォロー解除",
"en":"Unfollow"
}
var lang_status_block={
"ja":"ブロック",
"en":"Block"
}
var lang_status_unblock={
"ja":"ブロック解除",
"en":"Unblock"
}
var lang_status_mute={
"ja":"ミュート",
"en":"Mute"
}
var lang_status_unmute={
"ja":"ミュート解除",
"en":"Unmute"
}
var lang_status_redraft={
"ja":"削除して再編集しますか?そのトゥートの全てのデータがリセットされます。この機能はベータ版です。画像は~v2.4.1で破棄されます。",
"en":"Continue to delete & redraft? You lose statuses of this toot. This fanction may contain some bugs. Images of this toot will be deleted on older than Mastodon 2.4.1."
}
var lang_status_emphas={
"ja":"を強調します。リロードしてください。",
"en":"'s toots are emphasized. Please reload after this action."
}
var lang_status_unemphas={
"ja":"を強調解除します。リロードしてください。",
"en":"'s toots are not emphasized. Please reload after this action."
}
//post/use-txtbox.js
var lang_usetxtbox_reply={
"ja":"返信モードです。クリアするときはCtrl+Shift+Cを押してください。",
"en":"Reply Mode. Ctrl+Shift+C to clear."
}
//tl/card.js
var lang_cards_check={
"ja":"チェック",
"en":" check"
}
var lang_cards_pip={
"ja":"ながら観モード",
"en":"PiP mode"
}
//tl/details.js
var lang_details_nodata={
"ja":"データなし",
"en":"No data"
}
var lang_details_filtered={
"ja":"フィルターされました。",
"en":"Filtered toot"
}
var lang_details_embed={
"ja":"埋め込みHTMLがコピーされました。",
"en":"Embed HTML is cliped."
}
var lang_details_url={
"ja":"トゥートURLがコピーされました。",
"en":"URL of this toot is cliped."
}
var lang_details_txt={
"ja":"トゥート本文がコピーされました。",
"en":"Content of this toot is cliped."
}
//tl/filter.js
var lang_filter_nodata={
"ja":"フィルターはありません",
"en":"No data"
}
var lang_filter_errordegree={
"ja":"適応範囲を最低一つ以上チェックしてください。",
"en":"Please check a context"
}
//tl/list.js
var lang_list_nodata={
"ja":"リストはありません",
"en":"No data"
}
var lang_list_show={
"ja":"表示",
"en":"Show"
}
var lang_list_users={
"ja":"ユーザー一覧",
"en":"Users list"
}
var lang_list_nouser={
"ja":"ユーザーはいません",
"en":"No users in this list."
}
var lang_list_add={
"ja":"リストに追加",
"en":"Add to the list"
}
var lang_list_remove={
"ja":"リストから削除",
"en":"Remove from the list"
}
//js/notification.js
var lang_notf_new={
"ja":"件の新しい通知",
"en":" new notifications"
}
//js/speech.js
var lang_speech_refresh={
"ja":"音声読み上げ設定を更新しました。",
"en":"Refresh setting of TTS"
}
//js/src.js
var lang_src_ts={
"ja":"時系列",
"en":"chronological order"
}
var lang_src_people={
"ja":"人がトゥート",
"en":" people toot"
}

140
app/js/lang/parse.lang.js Normal file
View File

@ -0,0 +1,140 @@
var lang_parse_mentioned={
"ja":"が返信しました",
"en":" replied to you"
}
var lang_parse_faved={
"ja":"がお気に入り登録しました",
"en":" favourited your toot"
}
var lang_parse_bted={
"ja":"がブーストしました",
"en":" boosted your toot"
}
var lang_parse_btedsimple={
"ja":"がブースト",
"en":" boosted"
}
var lang_parse_notftime={
"ja":"通知された時間",
"en":"Actioned at"
}
var lang_parse_cwshow={
"ja":"見る",
"en":"Show"
}
var lang_parse_fulltext={
"ja":"以下全文",
"en":"Full size text:"
}
var lang_parse_autofold={
"ja":"自動折り畳み",
"en":"Auto folded"
}
var lang_parse_more={
"ja":"続き...",
"en":"More"
}
var lang_parse_url={
"ja":"URL解析",
"en":"URL Analyzer"
}
var lang_parse_tagTL={
"ja":"{{tag}}のタイムライン",
"en":"Timeline of {{tag}}"
}
var lang_parse_tagtoot={
"ja":"{{tag}}でトゥート",
"en":"Toot with {{tag}}"
}
var lang_parse_tagpin={
"ja":"{{tag}}をよく使うタグへ",
"en":"Pin {{tag}}"
}
var lang_parse_public={
"ja":"公開",
"en":"Public"
}
var lang_parse_unlisted={
"ja":"未収載",
"en":"Unlisted"
}
var lang_parse_private={
"ja":"非公開",
"en":"Private"
}
var lang_parse_direct={
"ja":"ダイレクト",
"en":"Direct"
}
var lang_parse_clickcopy={
"ja":"クリックして本文をコピー",
"en":"Click to copy text of this toot"
}
var lang_parse_clickcopyurl={
"ja":"クリックしてトゥートURLをコピー",
"en":"Click to copy URL of this toot"
}
var lang_parse_trans={
"ja":"このトゥートを日本語に翻訳",
"en":"Translate to Japanese"
}
var lang_parse_replyto={
"ja":"このトゥートに返信",
"en":"Reply to this toot"
}
var lang_parse_bt={
"ja":"このトゥートをブースト",
"en":"Boost this toot"
}
var lang_parse_fav={
"ja":"このトゥートをお気に入り登録",
"en":"Favourite this toot"
}
var lang_parse_quote={
"ja":"このトゥートを引用",
"en":"Quote this toot"
}
var lang_parse_del={
"ja":"このトゥートを削除",
"en":"Delete this toot"
}
var lang_parse_pin={
"ja":"このトゥートをピン留め",
"en":"Pin this toot"
}
var lang_parse_det={
"ja":"詳細(メインアカウント経由)",
"en":"Details via your main account."
}
var lang_parse_redraft={
"ja":"このトゥートを削除して再編集",
"en":"Delete & re-draft"
}
var lang_parse_followed={
"ja":"フォローされました。",
"en":"Followed you"
}
var lang_parse_clientop={
"ja":"クライアント処理",
"en":"Operation of this client"
}
var lang_parse_clienttxt={
"ja":"に対する処理を選択してください。",
"en":" will be"
}
var lang_parse_clientno={
"ja":"何もしない",
"en":"done nothing"
}
var lang_parse_clientemp={
"ja":"強調表示/解除",
"en":"emphasized(/not emphasized)"
}
var lang_parse_clientmute={
"ja":"ミュート",
"en":"muted"
}
var lang_parse_mute={
"ja":"ミュートします。設定から解除できます。",
"en":" will be muted. You can remove on a setting."
}

View File

@ -172,7 +172,7 @@ function getdata() {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
Materialize.toast(lang_fatalerroroccured[lang]+"Error:" + json.error,
5000);
return;
}
@ -222,7 +222,7 @@ function getdataAdv(domain, at) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
Materialize.toast(lang_fatalerroroccured[lang]+"Error:" + json.error,
5000);
return;
}
@ -348,7 +348,7 @@ function multiSelector() {
console.log(obj.length)
if(obj.length<1){
$("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
$("#add-acct-sel").html('<option value="noauth">認証せずに見る</option>');
$("#add-acct-sel").html('<option value="noauth">'+lang_login_noauth[lang]+'</option>');
}else{
Object.keys(obj).forEach(function(key) {
var acct = obj[key];
@ -368,7 +368,7 @@ function multiSelector() {
profimg="./img/missing.svg";
}
$("#acct-sel-prof").attr("src",profimg);
$("#toot-post-btn").text("トゥート("+domain+")");
$("#toot-post-btn").text(lang_toot[lang]+"("+domain+")");
if(acct.background && acct.background!="def" && acct.text && acct.text!="def"){
$("#toot-post-btn").removeClass("indigo");
$("#toot-post-btn").css("background-color","#"+acct.background);
@ -395,7 +395,7 @@ function multiSelector() {
});
$("#src-acct-sel").append('<option value="tootsearch">Tootsearch</option>');
$("#add-acct-sel").append('<option value="noauth">認証せずに見る</option>');
$("#add-acct-sel").append('<option value="noauth">'+lang_login_noauth[lang]+'</option>');
}
$('select').material_select('update');
}

View File

@ -40,11 +40,11 @@ function load() {
acct.name + '</span>' + escapeHTML(acct.user) + '@' + acct.domain +
'</div><div class="card-action"><a class="waves-effect disTar pointer white-text" onclick="data(\'' +
acct.domain +
'\')"><i class="material-icons">info</i>インスタンス情報</a><a class="waves-effect disTar pointer white-text" onclick="refresh(' +
'\')"><i class="material-icons">info</i>'+lang_manager_info[lang]+'</a><a class="waves-effect disTar pointer white-text" onclick="refresh(' +
key +
')"><i class="material-icons">refresh</i>情報更新</a><a class="waves-effect disTar pointer red-text" onclick="multiDel(' +
')"><i class="material-icons">refresh</i>'+lang_manager_refresh[lang]+'</a><a class="waves-effect disTar pointer red-text" onclick="multiDel(' +
key +
')"><i class="material-icons">delete</i>削除</a><br>アカウントカラーの選択<div id="colorsel_'+key+'" class="colorsel"></div></div></div>';
')"><i class="material-icons">delete</i>'+lang_manager_delete[lang]+'</a><br>'+lang_manager_color[lang]+'<div id="colorsel_'+key+'" class="colorsel"></div></div></div>';
$("#acct-list").append(templete);
colorpicker(key)
});
@ -61,7 +61,11 @@ function load() {
}else{
$("#linux").prop("checked", true);
}
}
ipc.send('mkc', "");
ipc.on('mkcr', function (event, arg) {
localStorage.setItem("mkc",arg)
})
}
//最初に読む
@ -114,7 +118,7 @@ function multiDel(target) {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
//削除確認ダイアログ
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] + "を削除します")) {
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] +lang_manager_confirm[lang])) {
Object.keys(obj).forEach(function(key) {
var nk=key-1;
//公開範囲(差分のみ)
@ -178,7 +182,7 @@ function multiDel(target) {
function multiDel2(target) {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] + "を削除します")) {
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] +lang_manager_confirm[lang])) {
obj.splice(target, 1);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
@ -301,7 +305,7 @@ function misskeyLogin() {
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({
appSecret: "D8Zoa1CFA12SeeJpAZDMc2VyAqtjqXZV"
appSecret: localStorage.getItem("mkc")
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
@ -399,7 +403,7 @@ function getdata(domain, at) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
Materialize.toast(lang_fatalerroroccured[lang]+"Error:" + json.error,
5000);
return;
}
@ -459,7 +463,7 @@ function refresh(target) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
Materialize.toast(lang_fatalerroroccured[lang]+"Error:" + json.error,
5000);
return;
}
@ -506,7 +510,7 @@ function multisel() {
console.log(obj.length)
if(obj.length<1){
$("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
$("#add-acct-sel").html('<option value="noauth">認証せずに見る</option>');
$("#add-acct-sel").html('<option value="noauth">'+lang_login_noauth[lang]+'</option>');
}else{
Object.keys(obj).forEach(function(key) {
var acct = obj[key];
@ -536,7 +540,7 @@ function multisel() {
function mainacct(){
var acct_id = $("#main-acct-sel").val();
localStorage.setItem("main", acct_id);
Materialize.toast("メインアカウントを設定しました。", 3000);
Materialize.toast(lang_manager_mainAcct[lang], 3000);
}
function colorpicker(key){
temp=
@ -620,7 +624,7 @@ input.addEventListener("focus", function() {
console.log(json);
if (!json.error) {
var urls = "もしかして:";
var urls = "Suggest:";
Object.keys(json.instances).forEach(function(key) {
var url = json.instances[key];
urls = urls + ' <a onclick="login(\'' + url.name +

View File

@ -155,7 +155,7 @@ function progshow(e) {
if(percent<1){
$("#imgup").text(Math.floor(percent*100)+"%");
}else{
$("#imgup").text("処理中");
$("#imgup").text(lang_progress[lang]);
}
}
}

View File

@ -4,7 +4,7 @@ function mdCheck(){
var acct_id = $("#post-acct-sel").val();
var profimg=localStorage.getItem("prof_"+acct_id);
$("#acct-sel-prof").attr("src",profimg);
$("#toot-post-btn").text("トゥート("+localStorage.getItem("domain_"+acct_id)+")");
$("#toot-post-btn").text(lang_toot[lang]+"("+localStorage.getItem("domain_"+acct_id)+")");
if(!localStorage.getItem("bb_"+acct_id) && !localStorage.getItem("md_"+acct_id)){
$(".markdown").addClass("hide");
$(".anti-markdown").addClass("hide");

View File

@ -15,7 +15,7 @@ function emoji() {
$("#emoji").removeClass("hide")
if (!localStorage.getItem("emoji_" + acct_id)) {
var html =
'<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet(\'true\');">絵文字リスト取得</button>';
'<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet(\'true\');">'+lang_emoji_get[lang]+'</button>';
$("#emoji-list").html(html);
} else {
emojiList('home');
@ -63,7 +63,7 @@ function emojiGet(parse) {
//リストの描画
function emojiList(target) {
$("#now-emoji").text("カスタム絵文字");
$("#now-emoji").text(lang_emoji_custom[lang]);
var acct_id = $("#post-acct-sel").val();
var start = localStorage.getItem("emojiseek");
if (target == "next") {

View File

@ -43,7 +43,7 @@ function pimg(files) {
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('bmp-image', [files[i].path,i]);
todo("変換中...");
todo(lang_progress[lang]);
}else{
handleFileUpload(files[i], obj,i);
@ -117,7 +117,7 @@ function media(b64, type, no) {
var html = '<img src="' + json.preview_url + '" style="width:50px; max-height:100px;">';
$('#preview').append(html);
} else {
$('#preview').append("プレビューできません");
$('#preview').append(lang_postimg_previewdis[lang]);
}
if (!img) {
var img = "no-act";
@ -135,8 +135,8 @@ function media(b64, type, no) {
todc();
$("#toot-post-btn").prop("disabled", false);
$('select').material_select();
$("#mec").text("あり");
Materialize.toast("ファイルアップロード後はアカウントを切り替えられません。", 1000);
$("#mec").text(lang_there[lang]);
Materialize.toast(lang_postimg_aftupload[lang], 1000);
$("#imgup").text("");
$("#imgsel").show();
localStorage.removeItem("image");

View File

@ -11,7 +11,7 @@ function post() {
if(domain=="theboss.tech"){
if(~str.indexOf("#")){
if(str.indexOf("#theboss_tech")=="-1"){
if(!confirm("デフォルトタグが挿入されていません。このまま投稿するとローカルには表示されません。")){
if(!confirm(lang_post_tagTL[lang])){
return false;
}
}
@ -20,7 +20,7 @@ function post() {
if(domain=="dtp-mstdn.jp"){
if(~str.indexOf("#")){
if(str.indexOf("#dtp")=="-1"){
if(!confirm("デフォルトタグが挿入されていません。このまま投稿するとローカルには表示されません。")){
if(!confirm(lang_post_tagTL[lang])){
return false;
}
}
@ -91,7 +91,7 @@ function clear() {
if(localStorage.getItem("stable")){
$("#textarea").val(localStorage.getItem("stable"));
}
$("#textarea").attr("placeholder", "");
$("#textarea").attr("placeholder", lang_toot[lang]);
$("#reply").val("");
$("#media").val("");
var cwt = localStorage.getItem("cw-text");
@ -102,13 +102,13 @@ function clear() {
}
$("#cw").removeClass("yellow-text");
$("#cw").removeClass("cw-avail");
$("#rec").text("いいえ");
$("#mec").text("なし");
$("#rec").text(lang_no[lang]);
$("#mec").text(lang_nothing[lang]);
loadVis();
$("#nsfw").removeClass("yellow-text");
$("#nsfw").html("visibility_off");
$("#nsfw").removeClass("nsfw-avail");
$("#nsc").text("なし");
$("#nsc").text(lang_nothing[lang]);
$("#drag").css("background-color", "#e0e0e0");
$("#preview").html("");
$("#toot-post-btn").prop("disabled", false);

View File

@ -43,7 +43,7 @@ function fav(id, acct_id, remote) {
$(".fav_" + id).addClass("yellow-text");
}
}else{
Materialize.toast("お気に入り登録しました。インスタンスが違うときは時間がかかる場合があります。", 1000);
Materialize.toast(lang_status_favWarn[lang], 1000);
}
}
}
@ -90,7 +90,7 @@ function rt(id, acct_id, remote) {
$(".rt_" + id).addClass("teal-text");
}
} else {
Materialize.toast("ブーストしました。インスタンスが違うときは時間がかかる場合があります。", 1000);
Materialize.toast(lang_status_btWarn[lang], 1000);
}
}
}
@ -135,10 +135,10 @@ function follow(acct_id,remote) {
console.log(json);
if ($("#his-data").hasClass("following")) {
$("#his-data").removeClass("following");
$("#his-follow-btn").text("フォロー");
$("#his-follow-btn").text(lang_status_follow[lang]);
} else {
$("#his-data").addClass("following");
$("#his-follow-btn").text("フォロー解除");
$("#his-follow-btn").text(lang_status_unfollow[lang]);
}
}
}
@ -168,10 +168,10 @@ function block(acct_id) {
if (httpreq.readyState == 4) {
if ($("#his-data").hasClass("blocking")) {
$("#his-data").removeClass("blocking");
$("#his-block-btn").text("ブロック");
$("#his-block-btn").text(lang_status_block[lang]);
} else {
$("#his-data").addClass("blocking");
$("#his-block-btn").text("ブロック解除");
$("#his-block-btn").text(lang_status_unblock[lang]);
}
}
}
@ -201,10 +201,10 @@ function mute(acct_id) {
if (httpreq.readyState == 4) {
if ($("#his-data").hasClass("muting")) {
$("#his-data").removeClass("muting");
$("#his-mute-btn").text("ミュート");
$("#his-mute-btn").text(lang_status_mute[lang]);
} else {
$("#his-data").addClass("muting");
$("#his-mute-btn").text("ミュート解除");
$("#his-mute-btn").text(lang_status_unmute[lang]);
}
}
}
@ -228,7 +228,7 @@ function del(id, acct_id) {
}
//redraft
function redraft(id, acct_id){
if(confirm("削除して再編集しますか?そのトゥートの全てのデータがリセットされます。この機能はベータ版です。画像は~v2.4.1で破棄されます。")){
if(confirm(lang_status_redraft[lang])){
show();
del(id, acct_id);
$("#post-acct-sel").prop("disabled", true);
@ -251,6 +251,8 @@ function redraft(id, acct_id){
html = html.replace(/<\/p>/, "\n");
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
html=$.strip_tags(html);
localStorage.setItem("nohide",true);
show();
$("#textarea").val(html);
}
}
@ -341,7 +343,7 @@ function empUser(){
if(!obj){
var obj=[];
obj.push(id);
Materialize.toast(id+"を強調します。設定を適用するにはF5を押して下さい。", 4000);
Materialize.toast(id+lang_status_emphas[lang], 4000);
}else{
var can;
Object.keys(obj).forEach(function(key) {
@ -351,7 +353,7 @@ function empUser(){
}else{
can=true;
obj.splice(key, 1);
Materialize.toast(id+"の強調を解除しました。設定を適用するにはF5を押して下さい。", 4000);
Materialize.toast(id+lang_status_unemphas[lang], 4000);
}
});
}

View File

@ -9,7 +9,7 @@ function re(id,at,acct_id,mode){
$("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true);
$('select').material_select();
$("#textarea").attr("placeholder","返信モードです。クリアするときはCtrl+Shift+Cを押してください。");
$("#textarea").attr("placeholder",lang_usetxtbox_reply[lang]);
$("#textarea").focus();
vis(mode);
}

View File

@ -70,11 +70,11 @@ function additional(acct_id, tlid) {
}
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URLチェック:<br>Title:" + json.title + "<br>" +
"<span class=\"gray\">URL"+lang_cards_check[lang]+":<br>Title:" + json.title + "<br>" +
json.description + "</span>");
}
if (json.html) {
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons" onclick="pip('+id+')">picture_in_picture_alt</i>');
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons" onclick="pip('+id+')" title="'+lang_cards_pip[lang]+'">picture_in_picture_alt</i>');
}
if (json.title) {
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
@ -172,11 +172,11 @@ function additionalIndv(tlid, acct_id, id) {
}else{
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URLチェック:<br>Title:" + json.title + "<br>" +
"<span class=\"gray\">URL"+lang_cards_check[lang]+":<br>Title:" + json.title + "<br>" +
json.description + "</span>");
}
if (json.html) {
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons sml pointer" onclick="pip(\''+id+'\')" title="ながら観モード">picture_in_picture_alt</i>');
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons sml pointer" onclick="pip(\''+id+'\')" title="'+lang_cards_pip[lang]+'">picture_in_picture_alt</i>');
}
}

View File

@ -1,6 +1,6 @@
//トゥートの詳細
function details(id, acct_id, tlid) {
$(".toot-reset").html("データなし");
$(".toot-reset").html(lang_details_nodata[lang]);
var html = $("#timeline_"+tlid+" #pub_" + id).html();
$("#toot-this").html(html);
$('#tootmodal').modal('open');
@ -78,7 +78,7 @@ function replyTL(id, acct_id) {
console.log(mute);
var templete = parse([json], '', acct_id,"","",mute);
$("#toot-reply").prepend(templete);
$("#toot-reply .hide").html("フィルターされました。");
$("#toot-reply .hide").html(lang_details_filtered[lang]);
$("#toot-reply .by_filter").css("display","block");
$("#toot-reply .by_filter").removeClass("hide");
jQuery("time.timeago").timeago();
@ -112,7 +112,7 @@ function context(id, acct_id) {
}
var templete = parse(json.descendants, '', acct_id,"","",mute);
$("#toot-after").html(templete);
$("#toot-after .hide").html("フィルターされました。");
$("#toot-after .hide").html(lang_details_filtered[lang]);
$("#toot-after .by_filter").css("display","block");
$("#toot-after .by_filter").removeClass("hide");
jQuery("time.timeago").timeago();
@ -215,10 +215,10 @@ function cbCopy(mode){
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("埋め込みHTMLをコピーしました", 1500);
Materialize.toast(lang_details_embed[lang], 1500);
}else{
if(execCopy(url)){
Materialize.toast("トゥートURLをコピーしました", 1500);
Materialize.toast(lang_details_url[lang], 1500);
}
}
@ -234,7 +234,7 @@ function staCopy(id){
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
html=$.strip_tags(html);
if(execCopy(html)){
Materialize.toast("トゥート本文をコピーしました", 1500);
Materialize.toast(lang_details_txt[lang], 1500);
}
}

View File

@ -97,15 +97,15 @@ function filter(){
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> ';
'\')" class="pointer">'+lang_edit[lang]+'</a>/<a onclick="filterDel(' + filterword.id + ',' + acct_id +
')" class="pointer">'+lang_del[lang]+'</a><br> ';
});
if(filters==""){
filters="フィルターはありません<br>";
filters=lang_filter_nodata[lang]+"<br>";
}
$("#filtered-words").html(filters);
}else{
$("#filtered-words").html("フィルターはありません");
$("#filtered-words").html(lang_filter_nodata[lang]);
}
});
}
@ -127,7 +127,7 @@ function makeNewFilter(){
}
console.log(cont);
if(!cont.length){
$("#filtered-words").html('Error:適応範囲を最低一つ以上チェックしてください。');
$("#filtered-words").html('Error:'+lang_filter_errordegree[lang]);
}
var exc=$("#except_filter:checked").val();
var who=$("#wholeword_filter:checked").val();
@ -169,7 +169,7 @@ function makeNewFilter(){
$("#days_filter").val("0");
$("#hours_filter").val("0");
$("#mins_filter").val("0");
$("#add-filter-btn").text("追加");
$("#add-filter-btn").text(lang_add[lang]);
$("#filter-edit-id").val("")
}
}
@ -185,7 +185,7 @@ function filterEdit(id,acct_id){
$("#days_filter").val("0");
$("#hours_filter").val("0");
$("#mins_filter").val("0");
$("#add-filter-btn").text("編集");
$("#add-filter-btn").text(lang_edit[lang]);
$("#filter-edit-id").val(id);
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");

View File

@ -36,12 +36,12 @@ function list(){
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + list.title+':<a onclick="listShow(' + list.id + ',\'' + list.title + '\',\'' + acct_id +
'\')" class="pointer">表示</a>/<a onclick="listUser(' + list.id + ',' + acct_id +
')" class="pointer">ユーザー一覧</a><br> ';
'\')" class="pointer">'+lang_list_show[lang]+'</a>/<a onclick="listUser(' + list.id + ',' + acct_id +
')" class="pointer">'+lang_list_users[lang]+'</a><br> ';
});
$("#lists").html(lists);
}else{
$("#lists").html("リストはありません");
$("#lists").html(lang_list_nodata[lang]);
}
});
}
@ -93,11 +93,11 @@ function listUser(id,acct_id){
var lists = "";
var templete = userparse(json,'',acct_id);
if(!json[0]){
templete="ユーザーはいません";
templete=lang_list_nouser[lang];
}
$("#lists-user").html(templete);
}else{
$("#lists-user").html("ユーザーはいません");
$("#lists-user").html(lang_list_nouser[lang]);
}
});
}
@ -119,7 +119,7 @@ function hisList(user,acct_id){
console.error(error);
}).then(function(json) {
if (json) {
var lists = "リストに追加<br>";
var lists = lang_list_add[lang]+"<br>";
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + '<a onclick="listAdd(' + list.id + ',\'' + user + '\',\'' + acct_id +
@ -127,7 +127,7 @@ function hisList(user,acct_id){
});
$("#his-lists-a").html(lists);
}else{
$("#his-lists-a").html('リストはありません');
$("#his-lists-a").html(lang_list_nodata[lang]);
}
});
var start = "https://" + domain + "/api/v1/accounts/"+user+"/lists"
@ -145,7 +145,7 @@ function hisList(user,acct_id){
console.error(error);
}).then(function(json) {
if (json) {
var lists = "リストから削除<br>";
var lists = lang_list_remove[lang]+"<br>";
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + '<a onclick="listRemove(' + list.id + ',\'' + user + '\',\'' + acct_id +
@ -153,7 +153,7 @@ function hisList(user,acct_id){
});
$("#his-lists-b").html(lists);
}else{
$("#his-lists-b").html('リストはありません');
$("#his-lists-b").html(lang_list_nodata[lang]);
}
});
}

View File

@ -38,13 +38,13 @@ function notf(acct_id, tlid, sys) {
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: ct+"件の新しい通知",
body: ct+lang_notf_new[lang],
icon: localStorage.getItem("prof_"+acct_id)
};
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', ['TheDesk:'+domain,ct+"件の新しい通知",localStorage.getItem("prof_"+acct_id)]);
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]);
}
}

View File

@ -152,10 +152,10 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
if (mix == "notf") {
if (toot.type == "mention") {
var what = "が返信しました";
var what = lang_parse_mentioned[lang];
var icon = "fa-share teal-text";
} else if (toot.type == "reblog") {
var what = "がブーストしました";
var what = lang_parse_bted[lang];
var icon = "fa-retweet light-blue-text";
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
what = ":「わかるわ」";
@ -163,7 +163,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
what = "がしばきました";
}
} else if (toot.type == "favourite") {
var what = "がお気に入り登録しました";
var what = lang_parse_faved[lang];
var icon = "fa-star yellow-text";
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
what = "の頭にティンときたようです";
@ -172,7 +172,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
}
var noticetext = '<span class="cbadge cbadge-hover"title="' + date(toot.created_at,
'absolute') + '(通知された時間)"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
'absolute') + '('+lang_parse_notftime[lang]+')"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
datetype) +
'</span><i class="big-text fa '+icon+'"></i><a onclick="udg(\'' + toot.account.id +
'\',\'' + acct_id + '\')" class="pointer grey-text">' + dis_name +
@ -193,7 +193,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
var domain = localStorage.getItem("domain_" + acct_id);
if(popup>0){
Materialize.toast("["+domain+"より]"+escapeHTML(toot.account.display_name)+what, popup * 1000);
Materialize.toast("["+domain+"]"+escapeHTML(toot.account.display_name)+what, popup * 1000);
}
if(native=="yes"){
var electron = require("electron");
@ -235,7 +235,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}else{
var if_notf="";
if (toot.reblog) {
var rebtxt = "がブースト";
var rebtxt = lang_parse_btedsimple[lang];
var rticon = "fa-retweet light-blue-text";
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
rebtxt = ":「わかるわ」";
@ -324,19 +324,19 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
var spoiler = "cw cw_hide_" + toot.id;
var api_spoil = "gray";
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
'\')" class="nex parsed">見る</a><br>';
'\')" class="nex parsed">'+lang_parse_cwshow[lang]+'</a><br>';
} else {
var ct1 = toot.content.split('</p>').length + toot.content.split('<br />').length -2;
var ct2 = toot.content.split('</p>').length + toot.content.split('<br>').length -2;
if(ct1>ct2){ var ct= ct1; }else{ var ct= ct2; }
if ((sent < ct && $.mb_strlen($.strip_tags(toot.content)) > 5) || ($.strip_tags(toot.content).length > ltr && $.mb_strlen($.strip_tags(toot.content)) > 5)) {
var content = '<span class="gray">以下全文</span><br>' + toot.content
var content = '<span class="gray">'+lang_parse_fulltext[lang]+'</span><br>' + toot.content
var spoil = '<span class="cw-long-' + toot.id + '">' + $.mb_substr($.strip_tags(
toot.content), 0, 100) +
'</span><span class="gray">自動折りたたみ</span>';
'</span><span class="gray">'+lang_parse_autofold[lang]+'</span>';
var spoiler = "cw cw_hide_" + toot.id;
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
'\')" class="nex parsed">続き…</a><br>';
'\')" class="nex parsed">'+lang_parse_more[lang]+'</a><br>';
} else {
var content = toot.content;
var spoil = escapeHTML(toot.spoiler_text);
@ -349,7 +349,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
);
if (urls) {
var analyze = '<a onclick="additionalIndv(\'' + tlid + '\',' + acct_id +
',\'' + id + '\')" class="add-show pointer">URL解析</a><br>';
',\'' + id + '\')" class="add-show pointer">'+lang_parse_url[lang]+'</a><br>';
} else {
var analyze = '';
}
@ -434,8 +434,8 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
Object.keys(toot.tags).forEach(function(key4) {
var tag = toot.tags[key4];
tags = tags + '<span class="hide" data-tag="' + tag.name + '">#' + tag.name + ':<a onclick="tl(\'tag\',\'' + tag.name + '\',' + acct_id +
',\'add\')" class="pointer" title="#' + tag.name + 'のタイムライン">TL</a> <a onclick="brInsert(\'#' + tag.name + '\')" class="pointer" title="#' + tag.name + 'でトゥート">Toot</a> '+
'<a onclick="tagPin(\'' + tag.name + '\')" class="pointer" title="#' + tag.name + 'をよく使うタグへ">Pin</a></span> ';
',\'add\')" class="pointer" title="' +lang_parse_tagTL[lang].replace("{{tag}}" ,'#'+tag.name)+ '">TL</a> <a onclick="brInsert(\'#' + tag.name + '\')" class="pointer" title="' + lang_parse_tagtoot[lang].replace("{{tag}}" ,'#'+tag.name) + '">Toot</a> '+
'<a onclick="tagPin(\'' + tag.name + '\')" class="pointer" title="' +lang_parse_tagpin[lang].replace("{{tag}}" ,'#'+tag.name)+ '">Pin</a></span> ';
});
tags = '<div style="float:right">' + tags + '</div>';
}
@ -444,19 +444,19 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
var visen = toot.visibility;
if (visen == "public") {
var vis =
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="公開(クリックして本文コピー)" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="'+lang_parse_public[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
var can_rt = "";
} else if (visen == "unlisted") {
var vis =
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="未収載(クリックして本文コピー)" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang_parse_unlisted[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
var can_rt = "";
} else if (visen == "private") {
var vis =
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="非公開(クリックして本文コピー)" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="'+lang_parse_private[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
var can_rt = "hide";
} else if (visen == "direct") {
var vis =
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="ダイレクト(クリックして本文コピー)" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="'+lang_parse_direct[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
var can_rt = "hide";
}
if (toot.account.acct == localStorage.getItem("user_" + acct_id)) {
@ -523,7 +523,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
//日本語じゃない
if(toot.language!="ja"){
var trans='<div class="action pin"><a onclick="trans(\''+toot.language+'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートを日本語に翻訳"><i class="material-icons">g_translate</i></a></div>';
var trans='<div class="action pin"><a onclick="trans(\''+toot.language+'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_trans[lang]+'"><i class="material-icons">g_translate</i></a></div>';
}else{
var trans="";
}
@ -544,7 +544,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
toot.account.acct + locked + '</span></div>' +
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'' +
toot.url + '\');" title="' + date(toot.created_at, 'absolute') +
'(クリックでトゥートURLをコピー)"><i class="fa fa-clock-o"></i>' +
'('+lang_parse_clickcopyurl[lang]+')"><i class="fa fa-clock-o"></i>' +
date(toot.created_at, datetype) + '</span>' +
'</div></div>' +
'<div class="area-toot"><span class="toot ' + spoiler + '">' + content +
@ -558,33 +558,33 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
'<div class="area-vis"></div>'+
'<div class="area-actions '+mouseover+'">' +
'<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">'+lang_parse_det[lang]+'</a></div>' +
'<div class="action '+disp["re"]+' '+noauth+'"><a onclick="re(\'' + toot.id +
'\',\'' + toot.account.acct + '\',' +
acct_id + ',\''+visen+
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートに返信"><i class="fa fa-share"></i></a></div>' +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_replyto[lang]+'"><i class="fa fa-share"></i></a></div>' +
'<div class="action '+can_rt+' '+disp["rt"]+' '+noauth+'"><a onclick="rt(\'' + toot.id + '\',' + acct_id +
',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートをブースト"><i class="text-darken-3 fa fa-retweet ' +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_bt[lang]+'"><i class="text-darken-3 fa fa-retweet ' +
if_rt + ' rt_' + toot.id + '"></i><span class="rt_ct">' + toot.reblogs_count +
'</span></a></div>' +
'<div class="action '+can_rt+' '+disp["qt"]+' '+noauth+'"><a onclick="qt(\'' + toot.id + '\',' + acct_id +
',\'' + toot.account.acct +'\',\''+toot.url+
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートを引用"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_quote[lang]+'"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
'<div class="action '+disp["fav"]+' '+noauth+'"><a onclick="fav(\'' + toot.id + '\',' + acct_id +
',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートをお気に入り登録"><i class="fa text-darken-3 fa-star' +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_fav[lang]+'"><i class="fa text-darken-3 fa-star' +
if_fav + ' fav_' + toot.id + '"></i><span class="fav_ct">' + toot.favourites_count +
'</a></span></div>' +
'<div class="' + if_mine + ' action '+disp["del"]+' '+noauth+'"><a onclick="del(\'' + toot.id + '\',' +
acct_id +
')" 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="'+lang_parse_del[lang]+'"><i class="fa fa-trash-o"></i></a></div>' +
'<div class="' + if_mine + ' action pin '+disp["pin"]+' '+noauth+'"><a onclick="pin(\'' + toot.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>'
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_pin[lang]+'"><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+
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_redraft[lang]+'"><i class="material-icons">redo</i></a></div>'+trans+
'<span class="cbadge viabadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tags(via)+'\')" title="via ' + $.strip_tags(via) + '">via ' +
via +
'</span>'+
@ -623,7 +623,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
} else {
var auth = "";
}
var ftxt="フォローされました";
var ftxt=lang_parse_followed[lang];
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
ftxt = "名刺をいただきました";
}else if(localStorage.getItem("domain_" + acct_id)=="mstdn.osaka" && !locale){
@ -631,7 +631,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
}
if(popup > 0 || popup==-1){
var notftext='<span class="cbadge"title="' + date(toot.created_at,
'absolute') + '(通知された時間)"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
'absolute') + '('+lang_parse_notftime[lang]+')"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
datetype) +
'</span>'+ftxt+'。<br>';
}else{
@ -663,23 +663,23 @@ function userparse(obj, auth, acct_id, tlid, popup) {
}
dis_name=twemoji.parse(dis_name);
templete = templete +
'<div class="" style="padding-top:5px;" user-id="' + toot.id + '">' +
'<div class="cvo" style="padding-top:5px;" user-id="' + toot.id + '"><div class="area-notice">' +
notftext +
'<div style="padding:0; margin:0; width:400px; max-width:100%; display:flex; align-items:flex-end;">' +
'<div style="flex-basis:40px;"><a onclick="udg(\'' + toot.id + '\',' +
'</div><div class="area-icon"><a onclick="udg(\'' + toot.id + '\',' +
acct_id + ');" user="' + toot.acct + '" class="udg">' +
'<img src="' + toot.avatar + '" width="40" class="prof-img" user="' + toot
.acct + '"></a></div>' +
'<div style="flex-grow:3; overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"><big>' +
dis_name + '</big></div>' +
'<div class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
toot.acct + locked + '</div>' +
'</div>' + auth +
'<div style="justify-content:space-around"> <div class="cbadge" style="width:100px;">Follows:' +
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
dis_name + '</span>' +
'<span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
toot.acct + locked + auth +'</span>' +
'</div>' +
'</div>' +
'<div style="justify-content:space-around" class="area-toot"> <div class="cbadge" style="width:100px;">Follows:' +
toot.following_count +
'</div><div class="cbadge" style="width:100px;">Followers:' + toot.followers_count +
'</div>' +
'<div class="divider"></div>' +
'</div>' +
'</div>' +
'</div>';
@ -696,9 +696,9 @@ function client(name) {
var dialog=remote.dialog;
const options = {
type: 'info',
title: 'クライアント処理',
message: name+"に対する処理を選択してください。",
buttons: ['何もしない','強調表示/解除', 'ミュート']
title: lang_parse_clientop[lang],
message: name+lang_parse_clienttxt[lang],
buttons: [lang_parse_clientno[lang],lang_parse_clienemp[lang], lang_parse_clientmute[lang]]
}
dialog.showMessageBox(options, function(arg) {
if(arg==1){
@ -707,7 +707,7 @@ function client(name) {
if(!obj){
var obj=[];
obj.push(name);
Materialize.toast(name+"を強調表示します。", 2000);
Materialize.toast(name+lang_status_emphas[lang], 2000);
}else{
var can;
Object.keys(obj).forEach(function(key) {
@ -717,12 +717,12 @@ function client(name) {
}else{
can=true;
obj.splice(key, 1);
Materialize.toast(name+"の強調表示を解除しました。", 2000);
Materialize.toast(name+lang_status_unemphas[lang], 2000);
}
});
if(!can){
obj.push(name);
Materialize.toast(name+"を強調表示します。", 2000);
Materialize.toast(name+lang_status_emphas[lang], 2000);
}else{
}
@ -738,7 +738,7 @@ function client(name) {
obj.push(name);
var json = JSON.stringify(obj);
localStorage.setItem("client_mute", json);
Materialize.toast(name+"をミュートします。設定から削除できます。", 2000);
Materialize.toast(name+lang_parse_mute[lang], 2000);
}else{
return;
}

View File

@ -86,7 +86,7 @@ function voiceSettings(){
localStorage.setItem("voice_speed", $("#voicespeed").val()/10);
localStorage.setItem("voice_pitch", $("#voicepitch").val()/50);
localStorage.setItem("voice_vol", $("#voicevol").val()/100);
Materialize.toast("音声読み上げ設定を更新しました。", 3000);
Materialize.toast(lang_speech_refresh[lang], 3000);
}
function voiceSettingLoad(){
var speed=localStorage.getItem("voice_speed");

View File

@ -101,9 +101,9 @@ function tootsearch(q){
}
});
if(!templete){
templete="データはありません。";
templete=lang_details_nodata[lang];
}
$("#src-contents").html("Tootsearch(時系列)<br>" + templete);
$("#src-contents").html("Tootsearch("+lang_src_ts[lang]+")<br>" + templete);
jQuery("time.timeago").timeago();
});
}
@ -147,7 +147,7 @@ function trend(){
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">'+
'<g><path d="M0,'+six+' L10,'+five+' 20,'+four+' 30,'+three+' 40,'+two+' 50,'+one+' 60,'+zero+'" style="stroke: #9e9e9e; stroke-width: 1;fill: none;"></path></g>'+
'</svg><span style="font-size:200%">'+his[0].uses+'</span>toots&nbsp;<a onclick="tl(\'tag\',\'' + tag.name + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+"人がトゥート";
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+lang_src_people[lang];
$("#src-contents").append(tags);
});
@ -169,12 +169,12 @@ function graphDraw(tag){
if(max==0){
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">'+
'</svg><span style="font-size:200%">'+his[0].uses+'</span>toots&nbsp;<a onclick="tl(\'tag\',\'' + tag.name + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+"人がトゥート";
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+lang_src_people[lang];
}else{
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">'+
'<g><path d="M0,'+six+' L10,'+five+' 20,'+four+' 30,'+three+' 40,'+two+' 50,'+one+' 60,'+zero+'" style="stroke: #9e9e9e; stroke-width: 1;fill: none;"></path></g>'+
'</svg><span style="font-size:200%">'+his[0].uses+'</span>toots&nbsp;<a onclick="tl(\'tag\',\'' + tag.name + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+"人がトゥート";
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+lang_src_people[lang];
}
return tags;

View File

@ -362,6 +362,10 @@ function cap(type, data, acct_id) {
var response= "Glance TL"
} else if (type == "dm") {
var response= "DM"
} else if (type == "mix") {
var response= "Integrated"
} else if (type == "plus") {
var response= "Local+"
}
return response;
}

View File

@ -213,6 +213,8 @@ function addselCk(){
}
//カラム削除
function removeColumn(tlid) {
$("#sort-box").addClass("hide");
$("#sort-box").removeClass("show");
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
//聞く

View File

@ -40,6 +40,8 @@ function goTop(id){
$("#timeline_box_"+id+"_box .tl-box").animate({scrollTop:0});
}
function goColumn(key){
$("#sort-box").addClass("hide");
$("#sort-box").removeClass("show");
if($('[tlid='+key+']').length){
console.log($('[tlid='+key+']').offset().left);
$("#timeline-container").animate({scrollLeft:$("#timeline-container").scrollLeft()+$('[tlid='+key+']').offset().left});

View File

@ -26,7 +26,7 @@ function sortload(){
}
var html='<li class="drag-content" data-id="'+key+'" data-flag="'+flag+'"'+insert+'><a onclick="goColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムへ">forward</i></a> <a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">cancel</i></a><br>'+localStorage.getItem("user_" + acct.domain)+"@"+localStorage.getItem("domain_" + acct.domain)+" "+cap(acct.type, acct.data)+'</li>';
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">cancel</i></a><br>'+localStorage.getItem("user_" + acct.domain)+"@"+localStorage.getItem("domain_" + acct.domain)+" "+cap(acct.type, acct.data,acct.domain)+'</li>';
$("#sort").append(html);
});
drag();
@ -48,6 +48,8 @@ function Scap(type, data) {
return "Notification"
} else if (type == "mix") {
return "Integrated"
}else{
console.log(type);
}
}

View File

@ -11,6 +11,7 @@ function tips(mode){
var ipc = electron.ipcRenderer;
ipc.send('endmem', "");
clearInterval(clockint);
clearInterval(spotStart);
if(mode=="ver"){
tipsToggle()
$("#tips-text").html('<img src="./img/desk.png" width="20"><span style="font-size:20px">TheDesk</span> '+localStorage.getItem("ver"))
@ -27,6 +28,11 @@ function tips(mode){
tipsToggle()
localStorage.setItem("tips","trend")
trendTagonTip()
}else if(mode=="spotify"){
tipsToggle()
localStorage.setItem("tips","spotify")
var json=nowplaying("spotifytips")
spotifytips(json)
}
}
//メモリ
@ -74,6 +80,78 @@ function trendTagonTip(){
});
}
//Spotify
function spotifytips(){
var start = "https://thedesk.top/now-playing?at="+localStorage.getItem("spotify")+"&rt="+localStorage.getItem("spotify-refresh");
var at = localStorage.getItem("spotify");
if(at){
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) {
console.log(json);
var ms=json.progress_ms;
var last=1000-ms%1000;
var item=json.item;
var img=item.album.images[0].url;
var artisttxt="";
for(i=0;i<item.artists.length;i++){
if(i>0){
artisttxt=artisttxt+","+item.artists[i].name;
}else{
artisttxt=item.artists[0].name;
}
}
sleep(last);
var tms=item.duration_ms;
var per=ms/item.duration_ms*100;
ms=ms/1000;
tms=tms/1000;
var s=Math.round(ms)%60;
if(s<10){
s="0"+s;
}
var m=(Math.round(ms)-Math.round(ms)%60)/60;
var ts=Math.round(tms)%60;
if(ts<10){
ts="0"+ts;
}
var tm=(Math.round(tms)-Math.round(tms)%60)/60;
$("#tips-text").html('<div id="spot-box"><i class="material-icons pointer" onclick="spotifytips()" style="font-size:12px">refresh</i><img src="'+img+'" width="20" id="spot-img">'+item.name+'<span class="gray sml" id="spot-art">'+artisttxt+'</span><span id="spot-m">'+m+'</span>:<span id="spot-s">'+s+'</span>/'+tm+":"+ts+'</span></div><div class="progress grey"><div class="determinate spotify-prog grey lighten-2" style="width: '+per+'%" data-s="'+Math.round(ms)+'" data-total="'+item.duration_ms+'"></div></div>');
spotint=setInterval(spotStart, 1000);
});
}else{
alert("アカウント連携設定をして下さい。");
}
}
function spotStart(){
var total=$(".spotify-prog").attr("data-total");
var s=$(".spotify-prog").attr("data-s");
var news=s*1+1;
var per=news*100000/total;
var ns=news%60;
var nm=(news-ns)/60;
if(ns<10){
ns="0"+ns;
}
if(per>=100){
clearInterval(spotStart);
spotifytips()
}else{
$("#spot-m").text(nm);
$("#spot-s").text(ns);
}
$(".spotify-prog").attr("data-s",news);
$(".spotify-prog").css("width",per+"%");
}
function trendTagonTipInterval(){
setTimeout(trendTagonTip, 6000000);

129
app/language/index.en.json Normal file
View File

@ -0,0 +1,129 @@
{
"draghere":"Drag here to upload",
"close":"Close",
"showSelectProf":"Show profile of the selecting account",
"toot":"Toot",
"nsfwDes":"Mark media as sensitive",
"cwDes":"Hide text behind warning",
"selfile":"Attach..",
"adobephoto":"Adobe Photo Editor",
"insertEmoji":"Emojis",
"NowPlayingDes":"NowPlaying[Click to insert info of Spotify(account link is required.)/control+click to insert that of iTunes(macOS)]",
"clearToot":"Clear toot box",
"replyMode":"Reply",
"no":"No",
"yes":"Yes",
"temp":"Attaching files",
"nothing":"None",
"vis":"Adjust status privacy",
"cwtext":"Warning text",
"selectVis":"Adjust status privacy",
"publicJP":"",
"unlistedJP":"",
"privateJP":"",
"directJP":"",
"emojiWarn":"",
"refreshEmoji":"Refresh emojis list",
"closeThisBox":"Close this box",
"showThisEmoji":" are shown.",
"customEmoji":"Custom emojis",
"peopleEmoji":"Emojis of people",
"natureEmoji":"Emojis of nature",
"foodEmoji":"Emojis of foods",
"activityEmoji":"Emojis of activities",
"placeEmoji":"Emojis of places",
"thingsEmoji":"Emojis of tools",
"symbolEmoji":"Emojis of symbols",
"flagsEmoji":"Emojis of flags",
"contextBefore":"Context before this toot",
"thisToot":"This toot",
"contextAfter":"Context after this toot",
"beforeLTL":"Local TL before this toot",
"beforeUTL":"User TL before this toot",
"favedPeople":"People who favourited it",
"btedPeople":"People who boosted it",
"useOtherAcct1":"Use other account",
"useOtherAcct2":":unfav and unBT are disabled.",
"reply":"Reply",
"bt":"Boost",
"favRegist":"Favourite",
"openBrowser":"Open in browser",
"screenshot":"Take a screenshot",
"copyURL":"Copy URL of this toot",
"embed":"Embed",
"toots":"Toots",
"follow":"Follow",
"follower":"Follower",
"timeline":"Timeline",
"operateOtherAcct":"Cross-account",
"list":"List",
"blocks":"Blocks",
"mutes":"Mutes",
"domainBlock":"Domain block",
"editProf":"Edit profile",
"followReq":"Follow requests",
"likeHimOrHer":"Resembling",
"frc":"Suggest",
"more":"More",
"revoverJP":"",
"revoverJPde":"",
"or":"or",
"openProf":"Show profile",
"warnListRegist":"Follow to add this user to lists.",
"blockDomain":"Add blocking domain",
"name":"Display name",
"note":"Note",
"editProfImg":"Change avataor",
"editHeader":"Change header image",
"likeUserDes":"Get people resembling this user.",
"get":"Get",
"historyBack":"Back",
"empUser":"Emphasize this user",
"TheDeskDes":"TheDesk is open-source software. We need your friendly support!",
"EntySupport":"Support on Enty",
"AWLSupport":"Amazon Wish List",
"SendAmazonGift1":"Give me Amazon Gift Card:",
"SendAmazonGift2":"",
"sendSushi":": give me sushi",
"local":"Local",
"localMedia":"Local(Media)",
"home":"Home",
"fed":"Federated",
"fedMedia":"Federated(Media)",
"dm":"Direct Message",
"integratedTLDes":"Integrated(Local and Home)",
"localPlusDes":"Integrated(Local and replies and BT on Home)",
"notf":"Notifications",
"showThisTL":"Show this TL:",
"add":"Add",
"search":"Search",
"sortSet":"Sort",
"selectAcct":"Select an account",
"listLocale":"List",
"degree":"Filter contexts",
"conver":"Conversations",
"option":"Options",
"matchWord":"Whole word",
"warnMatchWord":"Nice for Latin language",
"except":"Drop instead of hide",
"exceptWorn":"Filtered toots will disappear irreversibly, even if filter is later removed",
"avalableBefore":"Expire after",
"warnAvBefore":"Unset or \"0\" means \"Never\"",
"warnAvBefore2":"This value may contain some error",
"days":"days",
"hours":"hours",
"mins":"minutes",
"warnOnIntegratedTL":"Integrated TL/Plus TL will hide both Home-filtering words and Local-filtering words.",
"helloTheDesk":"<h3>Welcome to TheDesk</h3><a href=\"acct.html\">Add an account</a> or click <i class=\"material-icons\">add</i> to add a column.",
"addColumn":"Add a column",
"sortColumns":"Sort",
"acctMan":"Account Manager",
"filter":"Filter",
"setting":"Settings",
"f5":"Super Reload",
"nanoDes":"The smallest Mastodon,",
"verTips":"Version",
"clockTips":"Clock",
"ramTips":"RAM status",
"changeTips":"Change Tips"
}

130
app/language/index.ja.json Normal file
View File

@ -0,0 +1,130 @@
{
"draghere":"ここにドラッグして添付(ドラッグと同時にアップロードされます)",
"close":"Close",
"showSelectProf":"選択したアカウントのプロフィールを表示",
"closethisbox":"このボックスを閉じる",
"toot":"トゥート",
"nsfwDes":"画像に制限を付与",
"cwDes":"コンテンツワーニング(トゥートを表示する前にメッセージで隠す)",
"selfile":"ファイルを選択",
"adobephoto":"Adobeフォトエディタ",
"insertEmoji":"絵文字を挿入",
"NowPlayingDes":"NowPlaying[クリックでSpotify(アカウント連携が必要です)/control+クリックでiTunes(macOSが必要です)]",
"clearToot":"トゥートボックスのクリア",
"replyMode":"返信モード",
"no":"いいえ",
"yes":"はい",
"temp":"添付ファイル",
"nothing":"なし",
"vis":"公開範囲",
"cwtext":"警告文",
"selectVis":"公開範囲指定",
"publicJP":"公開",
"unlistedJP":"未収載",
"privateJP":"非公開",
"directJP":"ダイレクト",
"emojiWarn":"インスタンスによって実装が異なります。",
"refreshEmoji":"絵文字更新",
"closeThisBox":"このボックスを閉じる",
"showThisEmoji":"一覧を表示中",
"customEmoji":"カスタム絵文字",
"peopleEmoji":"ひと",
"natureEmoji":"自然",
"foodEmoji":"食べ物",
"activityEmoji":"活動",
"placeEmoji":"場所",
"thingsEmoji":"もの",
"symbolEmoji":"記号",
"flagsEmoji":"国旗",
"contextBefore":"これより前の会話",
"thisToot":"対象のトゥート",
"contextAfter":"これより後の会話",
"beforeLTL":"これより前のLocal TL(エアリプソース確認)",
"beforeUTL":"これより前のユーザーTL(BTソース確認)",
"favedPeople":"このトゥートをお気に入りに登録した人",
"btedPeople":"このトゥートをブーストした人",
"useOtherAcct1":"他のアカウントを使用",
"useOtherAcct2":"の解除はできません",
"reply":"返信",
"bt":"ブースト",
"favRegist":"お気に入り登録",
"openBrowser":"ブラウザで開く",
"screenshot":"スクリーンショット",
"copyURL":"URLをコピー",
"embed":"埋め込む",
"toots":"トゥート",
"follow":"フォロー",
"follower":"フォロワー",
"timeline":"タイムライン",
"operateOtherAcct":"他のアカウントで操作",
"list":"リスト",
"blocks":"ブロック",
"mutes":"ミュート",
"domainBlock":"ドメインブロック",
"editProf":"プロフィール編集",
"followReq":"フォローリクエスト",
"likeHimOrHer":"似てる",
"frc":"おすすめ",
"more":"もっと",
"revoverJP":"する",
"revoverJPde":"で",
"or":"または",
"openProf":"プロフィールを表示",
"warnListRegist":"リストに追加するためにはフォローが必要です。",
"blockDomain":"ブロックするドメイン",
"name":"名前",
"note":"自己紹介",
"editProfImg":"アバターを変更",
"editHeader":"ヘッダーを変更",
"likeUserDes":"似ているユーザーを取得できます。",
"get":"取得",
"historyBack":"一つ前のユーザーデータ",
"empUser":"ユーザー強調",
"TheDeskDes":"TheDeskはオープンソース・ソフトウェアです。<br>皆様のあたたかいご支援のもとで製作されています。",
"EntySupport":"Entyで支援",
"AWLSupport":"Amazonほしいものリスト",
"SendAmazonGift1":"",
"SendAmazonGift2":"にAmazonギフトカードを送る",
"sendSushi":"で寿司を贈る",
"local":"ローカル",
"localMedia":"ローカル(メディア)",
"home":"ホーム",
"fed":"連合",
"fedMedia":"連合(メディア)",
"dm":"ダイレクトメッセージ",
"integratedTLDes":"統合(ローカルとホーム)",
"localPlusDes":"統合(ローカルとブースト・リプライ)",
"notf":"通知",
"showThisTL":"表示するタイムライン",
"add":"追加",
"search":"検索",
"sortSet":"並べ替え設定",
"selectAcct":"アカウントを選択",
"listLocale":"一覧",
"degree":"適応範囲",
"conver":"会話",
"option":"オプション",
"matchWord":"単語マッチ",
"warnMatchWord":"非ラテン系の文字列では「単語マッチ」は推奨されません。",
"except":"除外",
"exceptWorn":"「除外」時マッチしたトゥートは非可逆的に除外され、削除後も閲覧できません。",
"avalableBefore":"有効期限(あと)",
"warnAvBefore":"未指定(または0分)で「無制限」になります。",
"warnAvBefore2":"仕様上数値の正確性を保証できません。",
"days":"日",
"hours":"時間",
"mins":"分",
"warnOnIntegratedTL":"Integrated TL/Plus TLは、公開/ホームのフィルターワードが合算されて適応されます。どちらか一方の指定でも非表示になります。",
"helloTheDesk":"<h3>Welcome to TheDesk</h3><a href=\"acct.html\">アカウントを追加</a>するか下の<i class=\"material-icons\">add</i>ボタンよりカラムを追加してください。",
"addColumn":"カラム追加",
"sortColumns":"カラム一覧/並べ替え",
"acctMan":"アカウントマネージャー",
"filter":"フィルター",
"setting":"設定",
"f5":"スーパーリロード",
"nanoDes":"最小のマストドン。",
"verTips":"バージョン",
"clockTips":"時計",
"ramTips":"システムメモリ容量",
"changeTips":"Tips変更"
}

View File

@ -509,5 +509,9 @@ function mems(){
var mem=os.totalmem()-os.freemem();
mainWindow.webContents.send('memory', [mem,os.cpus()[0].model,os.totalmem()]);
}
ipc.on('mkc', (e, arg) => {
var mkc = fs.readFileSync(__dirname + '/.tkn', 'utf8');
mainWindow.webContents.send('mkcr', mkc);
});
app.setAsDefaultProtocolClient('thedesk')

View File

@ -76,7 +76,7 @@ textarea {
<select id="type-sel" style="max-width:60px">
<option value="local">Local</option>
<option value="home">Home</option>
</select><button onclick="tl()">表示</button><button onclick="window.close()">x</button><br>
</select><button onclick="tl()">Show</button><button onclick="window.close()">x</button><br>
<div id="timeline_nano">
</div>
@ -84,7 +84,7 @@ textarea {
<textarea id="textarea" style="width:80%; background-color:transparent"></textarea>
<input type="hidden" id="reply">
<input type="hidden" id="media">
<button class="btn" onclick="post()">投稿</button>
<button class="btn" onclick="post()">Post</button>
<script src="https://twemoji.maxcdn.com/2/twemoji.min.js?2.7"></script>
<script type="text/javascript" src="./js/post/post.js"></script>
<script type="text/javascript" src="./js/post/reply.js"></script>

View File

@ -18,13 +18,15 @@
<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/lang/lang.js"></script>
<script type="text/javascript" src="./js/lang/parse.lang.js"></script>
<script type="text/javascript" src="./js/common/time.js"></script>
<script type="text/javascript" src="./js/common/version.js"></script>
<script type="text/javascript" src="./js/common/keyshortcut.js"></script>
<script type="text/javascript" src="./js/common/modal.js"></script>
<script type="text/javascript" src="./js/ui/jquery-ui.min.js"></script>
<script>
var ver="Mio (15.10.0)";
var ver="Akane (16.0.0) beta";
//betaを入れるとバージョンチェックしない
//var ver="beta";
var acct_id=0;
@ -36,247 +38,26 @@ var tlid=0;
<!--TL-->
<!--ドラッグハンドラ-->
<div id="drag">
<div id="drag-content" data-trans="drag_here">ここにドラッグして添付(ドラッグと同時にアップロードされます)
<div id="drag-content" data-trans="drag_here">{{draghere}}
<br>
<button class="btn waves-effect" onclick="closedrop()" data-trans="close">閉じる</button>
</div>
</div>
<!--カラム追加-->
<div id="add-box" class="hide z-depth-4 notf-box">
<div class="input-field"><span data-trans="your_acct">アカウント選択</span>
<br>
<select id="add-acct-sel" class="acct-sel" style="color:black" onchange="addselCk()"></select>
<label></label>
</div>
<div class="input-field">
<div id="auth">
<select id="type-sel" style="color:black">
<option value="local" data-trans="local">ローカル</option>
<option value="local-media" data-trans="local-media">ローカル(メディア)</option>
<option value="home" data-trans="home">ホーム</option>
<option value="pub" data-trans="public">連合</option>
<option value="pub-media" data-trans="public-media">連合(メディア)</option>
<option value="dm" data-trans="dm">ダイレクトメッセージ</option>
<option value="mix" data-trans="integrated">統合(ローカルとホーム)</option>
<option value="plus" data-trans="plus">統合(ローカルとブースト・リプライ)</option>
<option value="notf" data-trans="notification">通知</option>
</select>
<label data-trans="show_tl">表示するタイムライン</label>
</div>
<div id="noauth" class="hide">表示するタイムライン
<input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);" placeholder="e.g:mstdn.jp">
</div>
</div>
<button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()" data-trans-i="add">
<i class="material-icons left">add</i>追加
</button>
<br>
<br>
<button class="btn waves-effect orange " style="width:calc( 100% - 10px);" onclick="addToggle()" data-trans-i="close">
<i class="material-icons left">close</i>閉じる
</button>
</div>
<!--検索-->
<div id="src-box" class="hide notf-box z-depth-4" style="width:500px">
<div class="input-field">
<select id="src-acct-sel" class="acct-sel" onchange="trend()"></select>
</div><div class="input-field">
<i class="material-icons prefix">search</i>
<input id="src" type="text" class="validate" style="width:calc( 60% - 40px);">
<label for="src" data-trans="src">検索</label>
<button class="btn waves-effect indigo" style="width:calc( 40% - 40px);" onclick="src()" data-trans-i="src">
<i class="material-icons left">search</i>検索
</button>
<br>
<br>
</div>
<div id="search">
<div id="src-contents">
</div>
<button class="btn waves-effect orange " style="width:calc( 100% - 10px);" onclick="srcToggle()">
<i class="material-icons left" data-trans-i="close">close</i>閉じる
</button>
</div>
</div>
<!--並べ替え-->
<div id="sort-box" class="hide notf-box z-depth-4">
<ul id="sort"></ul>
<button onclick="sort()" class="btn waves-effect light-blue nex" style="width:100%; max-width:200px;" data-trans-i="sort">
<i class="material-icons left">sort</i>並べ替え設定
</button>
<button class="btn waves-effect orange " style="width:calc( 100% - 10px);" onclick="sortToggle()" data-trans-i="close">
<i class="material-icons left">close</i>閉じる
</button>
</div>
<!--リスト-->
<div id="list-box" class="hide notf-box z-depth-4">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="list-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="list()" data-trans-i="lists">
一覧
</button>
</div>
<br><br>
<div id="lists"></div>
<div id="lists-user"></div>
<input type="text" style="width:150px" id="list-add" placeholder="タイトル">
<button class="btn waves-effect" style="width:120px;" onclick="makeNewList()">新規作成</button>
</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">
<!--TLのTL-->
<div id="timeline-container">
まずは右のアカウントボタンからアカウントを追加してください。<br>
右のカラム追加ボタンで認証せずにローカルタイムラインを見ることもできます。
</div>
<!--サイドバー-->
<div id="sidebar">
<div id="sidebar-top">
<div class="side-dead"></div>
<div class="big-menu" id="add-tgl">
<a onclick="addToggle()" class="nex waves-effect" data-trans-i="add">
<i class="material-icons nex big-icon" title="カラム追加" data-trans-title="column_add">add</i>
</a>
<br>
<span class="side-label" data-trans="column_add">カラム追加</span>
</div>
<div class="big-menu">
<a href="acct.html" class="nex waves-effect">
<i class="material-icons nex big-icon" title="アカウントマネージャー(Ctrl+Shift+M)" data-trans-title="manager">account_circle</i>
</a>
<br>
<span class="side-label" data-trans="manager_short">アカウント</span>
</div>
<div class="big-menu" id="sort-tgl">
<a onclick="sortToggle()" class="nex waves-effect">
<i class="material-icons nex big-icon" title="カラム一覧/並べ替え" data-trans-title="sort">sort</i>
</a>
<br>
<span class="side-label" data-trans="sort">カラム一覧</span>
</div>
<div class="side-dead">
</div>
<div class="small-menu" id="src-tgl">
<a onclick="srcToggle()" class="nex waves-effect">
<i class="material-icons" title="検索" data-trans-title="src">search</i>
<span class="side-label" data-trans="src">検索</span>
</a>
</div>
<div class="small-menu">
<a href="setting.html" class="nex waves-effect">
<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>
<div class="small-menu" id="list-tgl">
<a onclick="listToggle()" class="nex waves-effect">
<i class="material-icons" title="リスト" data-trans-title="list">view_headline</i>
<span class="side-label" data-trans="list">リスト</span>
</a>
</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">
<a href="index.html" class="nex mize waves-effect">
<i class="material-icons nex" title="スーパーリロード(F5/⌘+R)" data-trans-title="reload">refresh</i>
<span class="side-label" data-trans="reload">再読込</span>
</a>
</div>
<div class="small-menu">
<a onclick="window.open('https://astarte.thedesk.top');" class="setting nex waves-effect" target="_blank" id="ranking-btn" style="display:none;">
<i class="material-icons nex" title="アスタルテランキング">timeline</i>
<span class="side-label">暇ラン</span>
</a>
</div>
<div class="small-menu">
<a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="最小のマストドン。TheDesk Nano" data-trans-title="nano_desp">remove_from_queue</i>
<span class="side-label" data-trans="nano">Nano</span>
</a>
</div>
<div id="side-dead">
</div>
<div class="small-menu">
<a onclick="xpand()" class="nex waves-effect">
<i class="material-icons" title="サイドバーの開閉" data-trans-title="sidebar_xpand" id="x-btn">keyboard_arrow_right</i>
<span class="side-label" data-trans="sidebar_xpand_short">たたむ</span>
</a>
</div>
</div>
<div id="sidebar-btm">
<!--最小化-->
<div id="menu-btn" class="big-menu" onclick="show()" style="display:none;">
<a class="waves-effect">
<i class="material-icons big-icon">mode_edit</i>
<br>
<span class="side-label" data-trans="post">投稿</span>
</a>
</div>
</div>
<button class="btn waves-effect" onclick="closedrop()" data-trans="close">{{close}}</button>
</div>
</div>
</div>
<div id="post-box" class="z-depth-3">
<!--トゥートボックス-->
<div class="row" style="margin-bottom:0;">
</span>
<div class="" style="float:left;">
<a onclick="profShow()" style="vertical-align:-2.5rem;" class="pointer mize">
<img src="./img/missing.svg" id="acct-sel-prof" title="選択中のプロフィール表示(Ctrl+Shift+P)" data-trans-title="post_box_prof" width="24px">
<img src="./img/missing.svg" id="acct-sel-prof" title="{{showSelectProf}}(Ctrl+Shift+P)" data-trans-title="post_box_prof" width="24px">
</a>
</div>
<div class="input-field mize" style="float:left; width:calc(100% - 24px)">
<select id="post-acct-sel" class="acct-sel" onchange="mdCheck()"></select>
</div>
<span class="cancel">
<i class="material-icons waves-effect" onclick="hide()" title="このボックスを閉じる(X)" data-trans-title="post_box_close">cancel</i>
<i class="material-icons waves-effect mini-btn" onclick="mini()" title="このボックスを最小化" data-trans-title="post_box_mini">expand_more</i>
<i class="material-icons waves-effect" onclick="hide()" title="{{closeThisBox}}(X)" data-trans-title="post_box_close">cancel</i>
</span>
<!--Markdown-->
<div class="row" style="margin-bottom:0">
@ -325,7 +106,7 @@ var tlid=0;
<div class="input-field col s12" id="toot-field" style="margin-top: 10px;">
<textarea id="textarea" class="materialize-textarea unmize" style="margin-bottom:0;" data-length="500"></textarea>
<label for="textarea" data-trans="toot">トゥート</label>
<label for="textarea" data-trans="toot">{{toot}}</label>
<br>
<span class="sml gray pointer markdown mize" id="preview-btn">
<a onclick="preview()">Preview</a>
@ -336,44 +117,44 @@ var tlid=0;
<span id="suggest"></span>
</div>
<div class="col s12 mize" style="margin-top: 0; display:flex; justify-content: space-between">
<i class="waves-effect gray material-icons" id="nsfw" title="画像に制限を付与" onclick="nsfw()">visibility_off</i>
<i class="waves-effect gray material-icons" id="nsfw" title="{{nsfwDes}}" onclick="nsfw()">visibility_off</i>
<i class="waves-effect gray material-icons purple-text dropdown-button" data-activates='dropdown1' id="vis-icon">public</i>
<a class="waves-effect gray" id="cw" onclick="cw()" title="コンテンツワーニング(トゥートを表示する前にメッセージで隠す)">CW</a>
<span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray" onclick="fileselect()" title="ファイルを選択">photo_library</i></span></span>
<i class="waves-effect gray material-icons" onclick="adobe()" title="Adobeフォトエディタ">format_shapes</i>
<i class="waves-effect gray material-icons" onclick="emoji()" title="絵文字を挿入">tag_faces</i>
<a class="pointer waves-effect gray" id="npbtn" title="NowPlaying[クリックでSpotify(アカウント連携が必要です)/control+クリックでiTunes(macOSが必要です)]"><i class="material-icons" style="font-size:24px;">music_note</i></a>
<i class="material-icons nex gray waves-effect" title="トゥートボックスのクリア(Ctrl+Shit+C)" data-trans-title="post_box_clear" id="clear">clear</i>
<a class="waves-effect gray" id="cw" onclick="cw()" title="{{cwDes}}">CW</a>
<span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray" onclick="fileselect()" title="{{selfile}}">photo_library</i></span></span>
<i class="waves-effect gray material-icons" onclick="adobe()" title="{{adobephoto}}">format_shapes</i>
<i class="waves-effect gray material-icons" onclick="emoji()" title="{{insertEmoji}}">tag_faces</i>
<a class="pointer waves-effect gray" id="npbtn" title="{{NowPlayingDes}}"><i class="material-icons" style="font-size:24px;">music_note</i></a>
<i class="material-icons nex gray waves-effect" title="{{clearToot}}(Ctrl+Shit+C)" data-trans-title="post_box_clear" id="clear">clear</i>
</div>
<div class="col s12 mize" style="margin-bottom:5px; padding:0;">
<div id="taglist"></div>
<span id="preview" class="mize"></span>
<span class=" sml mize"><span data-trans="reply">返信モード</span>:
<span id="rec">いいえ</span>/<span data-trans="file">添付</span>:
<span id="mec">なし</span>/<span data-trans="vis">公開範囲</span>:
<span class=" sml mize"><span data-trans="reply">{{replyMode}}</span>:
<span id="rec">{{no}}</span>/<span data-trans="file">{{temp}}</span>:
<span id="mec">{{nothing}}</span>/<span data-trans="vis">{{vis}}</span>:
<span id="vis">public</span>
</span>
<br>
<input type="text" id="cw-text" placeholder="警告文" class="mize">
<input type="text" id="cw-text" placeholder="{{cwtext}}" class="mize">
</div>
</div>
<!-- 公開範囲 Dropdown Structure -->
<ul id='dropdown1' class='dropdown-content'>
<li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">公開範囲指定</li>
<li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">{{selectVis}}</li>
<li>
<a onclick="vis('public')">公開(Public)</a>
<a onclick="vis('public')">{{publicJP}}(Public)</a>
</li>
<li>
<a onclick="vis('unlisted')">未収載(Unlisted)</a>
<a onclick="vis('unlisted')">{{unlistedJP}}(Unlisted)</a>
</li>
<li>
<a onclick="vis('private')" id="private-button">非公開(Private)</a>
<a onclick="vis('private')" id="private-button">{{privateJP}}(Private)</a>
</li>
<li id="limited-button" class="hide">
<a onclick="vis('limited')">限定公開(Limited)</a>
</li>
<li>
<a onclick="vis('direct')" class="disabled direct">ダイレクト(Direct)</a>
<a onclick="vis('direct')" class="disabled direct">{{directJP}}(Direct)</a>
</li>
</ul>
<!--hidden area-->
@ -382,17 +163,17 @@ var tlid=0;
<!--END hidden area-->
</div>
<div id="toot-btn-field">
<button class="btn waves-effect indigo unmize" style="width:calc(100% - 10px); padding:0; margin-top:10px;" onclick="post()" id="toot-post-btn">トゥート</button>
<button class="btn waves-effect indigo unmize" style="width:calc(100% - 10px); padding:0; margin-top:10px;" onclick="post()" id="toot-post-btn">{{toot}}</button>
</div>
</div>
<!--絵文字ピッカー-->
<div id="emoji" class="hide shared z-depth-4">
<span class="gray sml">インスタンスによって実装が異なります。
<a onclick="emojiGet('true')" class="pointer">絵文字更新</a>
<i class="material-icons waves-effect" onclick="emoji()" title="このボックスを閉じる" data-trans-title="post_box_close">cancel</i>
<span class="gray sml">{{emojiWarn}}
<a onclick="emojiGet('true')" class="pointer">{{refreshEmoji}}</a>
<i class="material-icons waves-effect" onclick="emoji()" title="{{closeThisBox}}" data-trans-title="post_box_close">cancel</i>
<br>
</span>
<input type="text" id="emoji-suggest" placeholder="カスタム絵文字検索">
<input type="text" id="emoji-suggest" placeholder="{{customEmoji}} {{search}}">
<div id="emoji-list" class="" style="">
</div>
<div class="emoji-control center">
@ -406,33 +187,33 @@ var tlid=0;
</button>
</div>
<div id="default-emoji">
<span id="now-emoji"></span>一覧を表示中<br><span class="gray sml">一部デフォルト絵文字は入力・描画できません。(国旗系など)</span>
<span id="now-emoji"></span>{{showThisEmoji}}<br><span class="gray sml">{{emojiInsertWarn}}</span>
<br>
<a onclick="customEmoji()" class="pointer waves-effect" title="カスタム絵文字">
<a onclick="customEmoji()" class="pointer waves-effect" title="{{customEmoji}}">
<i class="material-icons">add</i>
</a>
<a onclick="defaultEmoji('people')" class="pointer waves-effect" title="ひと">
<a onclick="defaultEmoji('people')" class="pointer waves-effect" title="{{peopleEmoji}}">
<i class="material-icons">people</i>
</a>
<a onclick="defaultEmoji('nature')" class="pointer waves-effect" title="自然">
<a onclick="defaultEmoji('nature')" class="pointer waves-effect" title="{{natureEmoji}}">
<i class="material-icons">local_florist</i>
</a>
<a onclick="defaultEmoji('food')" class="pointer waves-effect" title="食べ物">
<a onclick="defaultEmoji('food')" class="pointer waves-effect" title="{{foodEmoji}}">
<i class="material-icons">restaurant</i>
</a>
<a onclick="defaultEmoji('activity')" class="pointer waves-effect" title="活動">
<a onclick="defaultEmoji('activity')" class="pointer waves-effect" title="{{activityEmoji}}">
<i class="material-icons">directions_run</i>
</a>
<a onclick="defaultEmoji('place')" class="pointer waves-effect" title="場所">
<a onclick="defaultEmoji('place')" class="pointer waves-effect" title="{{placeEmoji}}">
<i class="material-icons">directions_car</i>
</a>
<a onclick="defaultEmoji('object')" class="pointer waves-effect" title="もの">
<a onclick="defaultEmoji('object')" class="pointer waves-effect" title="{{thingsEmoji}}">
<i class="material-icons">attach_file</i>
</a>
<a onclick="defaultEmoji('symbol')" class="pointer waves-effect" title="記号">
<a onclick="defaultEmoji('symbol')" class="pointer waves-effect" title="{{symbolEmoji}}">
<i class="material-icons">gesture</i>
</a>
<a onclick="defaultEmoji('flag')" class="pointer waves-effect" title="国旗">
<a onclick="defaultEmoji('flag')" class="pointer waves-effect" title="{{flagsEmoji}}">
<i class="material-icons">flag</i>
</a>
<a onclick="faicon()" class="pointer waves-effect" title="faicon" id="faicon-btn">
@ -446,67 +227,67 @@ var tlid=0;
<ul class="collapsible" data-collapsible="accordion" id="det-col">
<li>
<div class="collapsible-header">
<i class="material-icons">arrow_upward</i>これより前の会話
<i class="material-icons">arrow_upward</i>{{contextBefore}}
</div>
<div class="collapsible-body toot-reset" id="toot-reply">
</div>
</li>
<li>
<div class="collapsible-header" id="activator">
<i class="material-icons">more_horiz</i>対象のトゥート
<i class="material-icons">more_horiz</i>{{thisToot}}
</div>
<div class="collapsible-body toot-reset" id="toot-this">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">arrow_downward</i>これよりあとの会話
<i class="material-icons">arrow_downward</i>{{contextAfter}}
</div>
<div class="collapsible-body toot-reset" id="toot-after">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">people_outline</i>これより前のLocal TL(エアリプソース確認)
<i class="material-icons">people_outline</i>{{beforeLTL}}
</div>
<div class="collapsible-body toot-reset" id="toot-before">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">person_outline</i>これより前のユーザーTL(BTソース確認)
<i class="material-icons">person_outline</i>{{beforeUTL}}
</div>
<div class="collapsible-body toot-reset" id="user-before">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">star</i>このトゥートをお気に入りに登録した人
<i class="material-icons">star</i>{{favedPeople}}
</div>
<div class="collapsible-body toot-reset" id="toot-fav">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="text-darken-3 fa fa-retweet"></i>このトゥートをブーストした人
<i class="text-darken-3 fa fa-retweet"></i>{{btedPeople}}
</div>
<div class="collapsible-body toot-reset" id="toot-rt">
</div>
</li>
</ul>
他のアカウントを使用(<i class="fa fa-retweet"></i>/<i class="fa fa-star"></i>の解除はできません)<br>
{{useOtherAcct1}}(<i class="fa fa-retweet"></i>/<i class="fa fa-star"></i>{{useOtherAcct2}})<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>
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share left"></i>{{reply}}</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>
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i class="fa fa-retweet left"></i>{{bt}}</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>
<button class="dropdown-button btn waves-effect orange" style="width:100%;" onclick="staEx('fav')"><i class="fa fa-star left"></i>{{favRegist}}</button>
</div>
</div>
<div id="toot-tools">
@ -515,11 +296,11 @@ var tlid=0;
</div>
</div>
<div class="modal-footer">
<a href="#!" class="waves-effect waves-green btn-flat" onclick="brws()">ブラウザで開く</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="shot()">スクリーンショット</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy()">URLをコピー</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy('emb')">埋め込む</a>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="brws()">{{openBrowser}}</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="shot()">{{screenshot}}</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy()">{{copyURL}}</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy('emb')">{{embed}}</a>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">{{useOtherAcct}}</a>
</div>
</div>
<!-- Modal Structure Userdata -->
@ -534,12 +315,12 @@ var tlid=0;
<span class="gray" id="his-relation"></span>
<br>
<span class="cbadge">
<span id="his-sta"></span>トゥート
<span id="his-sta"></span>{{toots}}
</span>
<span class="cbadge">フォロー:
<span class="cbadge">{{follow}}:
<span id="his-follow"></span>
</span>
<span class="cbadge">フォロワー:
<span class="cbadge">{{follower}}:
<span id="his-follower"></span>
</span>
<span class="cbadge" style="max-width:150px; width:150px; ">Since:
@ -553,111 +334,111 @@ 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 column-first">
<a go="#his-tl">タイムライン</a>
<a go="#his-tl">{{timeline}}</a>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follow-list">フォロー</a>
<a go="#his-follow-list">{{follow}}</a>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follower-list">フォロワー</a>
<a go="#his-follower-list">{{follower}}</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-action">他アカウントで操作</a>
<a go="#his-action">{{operateOtherAcct}}</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-list">リスト</a>
<a go="#his-list">{{list}}</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-fav-list">お気に入り登録</a>
<a go="#his-fav-list">{{favRegist}}</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-blocking-list">ブロック</a>
<a go="#his-blocking-list">{{blocks}}</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-muting-list">ミュート</a>
<a go="#his-muting-list">{{mutes}}</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-domain-list">ドメインブロック</a>
<a go="#his-domain-list">{{domainBlock}}</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-prof-list">プロフィール編集</a>
<a go="#his-prof-list">{{editProf}}</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-request-list">フォローリクエスト</a>
<a go="#his-request-list">{{followReq}}</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-matching-list">似てる</a>
<a go="#his-matching-list">{{likeHimOrHer}}</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-follow-recom-list">おすすめ</a>
<a go="#his-follow-recom-list">{{frc}}</a>
</li>
</ul>
</div>
<div id="his-tl" class="col s12 tab-content">
<div id="his-tl-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="utl('--now','more')">もっと</button>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="utl('--now','more')">{{more}}</button>
</div>
<div id="his-follow-list" class="col s12 tab-content">
<div id="his-follow-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="flw('--now','more')">もっと</button>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="flw('--now','more')">{{more}}</button>
</div>
<div id="his-follower-list" class="col s12 tab-content">
<div id="his-follower-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="fer('--now','more')">もっと</button>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="fer('--now','more')">{{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><br>
または<br>
<a href="#!" class="waves-effect btn" onclick="udgEx('selector', 'selector')">プロフを開く</a><br>
{{useOtherAcct1}}{{revoverJP}}{{follow}}({{warnUseOtherAcct}})<br>
<div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div>{{revoverJPde}}
<a href="#!" class="waves-effect btn" onclick="follow('selector','true')">{{follow}}</a><br>
{{or}}<br>
<a href="#!" class="waves-effect btn" onclick="udgEx('selector', 'selector')">{{openProf}}</a><br>
</div>
<div id="his-list" class="col s12 tab-content">
<div id="his-lists-a">リストに追加するためにはフォローが必要です。</div>
<div id="his-lists-a">{{warnListRegist}}</div>
<div id="his-lists-b"></div>
</div>
<div id="his-fav-list" class="col s12 tab-content">
<div id="his-fav-list-contents" class="cont-series">
</div>
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="showFav('more')">もっと</button>
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="showFav('more')">{{more}}</button>
</div>
<div id="his-blocking-list" class="col s12 tab-content">
<div id="his-blocking-list-contents"class="cont-series" >
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showBlo('more')">もっと</button>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showBlo('more')">{{more}}</button>
</div>
<div id="his-muting-list" class="col s12 tab-content">
<div id="his-muting-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showMut('more')">もっと</button>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showMut('more')">{{more}}</button>
</div>
<div id="his-domain-list" class="col s12 tab-content">
<div id="his-domain-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showDom('more')">もっと</button>ブロックするドメイン
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showDom('more')">{{more}}</button>{{blockDomain}}
<br>
<input type="text" placeholder="example.com" id="domainblock">
<button class="btn waves-effect" onclick="addDomainblock()">ブロック</button>
<button class="btn waves-effect" onclick="addDomainblock()">{{block}}</button>
<br>
</div>
<div id="his-prof-list" class="col s12 tab-content">名前
<div id="his-prof-list" class="col s12 tab-content">{{name}}
<br>
<input type="text" placeholder="名前" id="his-name-val" style="max-width:250px;">
<br>自己紹介
<input type="text" placeholder="{{name}}" id="his-name-val" style="max-width:250px;">
<br>{{note}}
<br>
<div class="input-field col s12">
<textarea placeholder="自己紹介" id="his-des-val" class="materialize-textarea"></textarea>
<label for="his-des-val">自己紹介</label>
<textarea placeholder="{{note}}" id="his-des-val" class="materialize-textarea"></textarea>
<label for="his-des-val">{{note}}</label>
</div>
<br>プロフィール画像変更:
<br>{{editProfImg}}:
<span id="prof-change">
<input type="file" onchange="imgChange(this,'avatar')">
</span>
<br>ヘッダー画像変更:
<br>{{editHeader}}:
<span id="header-change">
<input type="file" onchange="imgChange(this,'header')">
</span>
@ -665,15 +446,15 @@ var tlid=0;
<div id="his-request-list" class="col s12 tab-content">
<div id="his-request-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showReq('more')">もっと</button>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showReq('more')">{{more}}</button>
</div>
<div id="his-matching-list" class="col s12 tab-content">
似ているユーザーを取得できます。<br>
{{likeUserDes}}<br>
Powered by <a href="https://vinayaka.distsn.org/" target="_blank">Mastodon User Matching</a><br>
<div id="his-matching-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " onclick="showMat()">取得</button>
<button class="btn waves-effect " onclick="showMat()">{{get}}</button>
</div>
<div id="his-follow-recom-list" class="col s12 tab-content">
<div id="his-follow-recom-contents" class="cont-series">
@ -683,12 +464,12 @@ var tlid=0;
</div>
</div>
<div class="modal-footer">
<button class="modal-action waves-effect waves-green btn-flat" id="his-history-btn" onclick="historyShow()">一つ前のユーザーデータ</button>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-follow-btn" onclick="follow()">フォロー</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-mute-btn" onclick="mute()">ミュート</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-block-btn" onclick="block()">ブロック</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-emp-btn" onclick="empUser()">ユーザー強調</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" onclick="hisclose()">Close</a>
<button class="modal-action waves-effect waves-green btn-flat" id="his-history-btn" onclick="historyShow()">{{historyBack}}</button>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-follow-btn" onclick="follow()">{{follow}}</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-mute-btn" onclick="mute()">{{mute}}</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-block-btn" onclick="block()">{{block}}</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-emp-btn" onclick="empUser()">{{empUser}}</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" onclick="hisclose()">{{close}}</a>
</div>
</div>
<!-- Modal Structure Image-->
@ -711,7 +492,7 @@ var tlid=0;
<button class="btn waves-effect purple" onclick="dlImg()">
<i class="material-icons">file_download</i>
</button>
<button class="btn waves-effect brown" onclick="detFromImg()">当該トゥート</button>
<button class="btn waves-effect brown" onclick="detFromImg()">{{thisToot}}</button>
<button class="btn waves-effect orange" onclick="imgCont('prev')" id="image-prev">
<i class="material-icons">keyboard_arrow_left</i>
</button>
@ -729,7 +510,7 @@ var tlid=0;
<video src="" id="video" style="max-width:100%; max-height:100%;" controls >
</div>
<div class="modal-footer">
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">{{close}}</a>
</div>
</div>
<!-- Modal Structure Release Note-->
@ -751,15 +532,14 @@ var tlid=0;
</div>
<br><br>
TheDeskはオープンソース・ソフトウェアです。<br>
皆様のあたたかいご支援のもとで製作されています。<br>
<a href="https://enty.jp/Cutls" target="_blank">Entyで支援</a><br>
<a href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">Amazonほしいものリスト</a><br>
<a href="mailto:mstdn@thedesk.top" target="_blank">mstdn@thedesk.top</a>にAmazonギフトカードを送る<br>
<a href="https://osushi.love/Cutls_P" target="_blank">Osushi.love</a>で寿司を贈る<br>
{{TheDeskDes}}<br>
<a href="https://enty.jp/Cutls" target="_blank">{{EntySupport}}</a><br>
<a href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">{{AWLSupport}}</a><br>
{{SendAmazonGift1}}<a href="mailto:mstdn@thedesk.top" target="_blank">mstdn@thedesk.top</a>{{SendAmazonGift2}}<br>
<a href="https://osushi.love/Cutls_P" target="_blank">Osushi.love</a>{{sendSushi}}<br>
</div>
<div class="modal-footer">
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">{{close}}</a>
</div>
</div>
<!--PiP-->
@ -769,7 +549,204 @@ var tlid=0;
<i class="material-icons pointer" onclick="endPip()">close</i>
<div id="pip-content">
</div>
</div>
<!--カラム追加-->
<div id="add-box" class="hide z-depth-4 notf-box">
<div class="input-field"><span data-trans="your_acct">{{selectAcct}}</span>
<br>
<select id="add-acct-sel" class="acct-sel" style="color:black" onchange="addselCk()"></select>
<label></label>
</div>
<div class="input-field">
<div id="auth">
<select id="type-sel" style="color:black">
<option value="local" data-trans="local">{{local}}</option>
<option value="local-media" data-trans="local-media">{{localMedia}}</option>
<option value="home" data-trans="home">{{home}}</option>
<option value="pub" data-trans="public">{{fed}}</option>
<option value="pub-media" data-trans="public-media">{{fedMedia}}</option>
<option value="dm" data-trans="dm">{{dm}}</option>
<option value="mix" data-trans="integrated">{{integratedTLDes}}</option>
<option value="plus" data-trans="plus">{{localPlusDes}}</option>
<option value="notf" data-trans="notification">{{notf}}</option>
</select>
<label data-trans="show_tl">{{showThisTL}}</label>
</div>
<div id="noauth" class="hide">{{showThisTL}}
<input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);" placeholder="e.g:mstdn.jp">
</div>
</div>
<button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()" data-trans-i="add">
<i class="material-icons left">add</i>{{add}}
</button>
<br>
<br>
</div>
<!--検索-->
<div id="src-box" class="hide notf-box z-depth-4" style="width:500px">
<div class="input-field">
<select id="src-acct-sel" class="acct-sel" onchange="trend()"></select>
</div><div class="input-field">
<i class="material-icons prefix">search</i>
<input id="src" type="text" class="validate" style="width:calc( 60% - 40px);">
<label for="src" data-trans="src">{{search}}</label>
<button class="btn waves-effect indigo" style="width:calc( 40% - 40px);" onclick="src()" data-trans-i="src">
<i class="material-icons left">search</i>{{search}}
</button>
<br>
<br>
</div>
<div id="search">
<div id="src-contents">
</div>
</div>
</div>
<!--並べ替え-->
<div id="sort-box" class="hide">
<ul id="sort"></ul>
<div>
<button onclick="sort()" class="btn waves-effect nex" style="width:100%; max-width:300px;" data-trans-i="sort">
<i class="material-icons left">sort</i>{{sortSet}}
</button>
<button onclick="sortToggle()" class="btn waves-effect nex" style="width:100%; max-width:300px;" data-trans-i="close">
<i class="material-icons left">close</i>{{close}}
</button>
</div>
</div>
<!--リスト-->
<div id="list-box" class="hide notf-box z-depth-4">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="list-acct-sel" class="acct-sel"></select>
<label>{{selectAcct}}</label>
</div>
<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">
{{listLocale}}
</button>
</div>
<br><br>
<div id="lists"></div>
<div id="lists-user"></div>
<input type="text" style="width:150px" id="list-add" placeholder="タイトル">
<button class="btn waves-effect" style="width:120px;" onclick="makeNewList()">{{makeNew}}</button>
</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>{{selectAcct}}</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">
{{listLocale}}
</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="{{filterWord}}"><br>
{{degree}}<br>
<input type="checkbox" class="filled-in" id="home_filter" value="home" />
<label for="home_filter">{{home}}</label>
<input type="checkbox" class="filled-in" id="local_filter" value="public" />
<label for="local_filter">{{local}}</label>
<input type="checkbox" class="filled-in" id="notf_filter" value="notifications" />
<label for="notf_filter">{{notf}}</label>
<input type="checkbox" class="filled-in" id="conv_filter" value="thread" />
<label for="conv_filter">{{conver}}</label><br>
{{option}}<br>
<input type="checkbox" class="filled-in" id="wholeword_filter" value="1" />
<label for="wholeword_filter">{{matchWord}}</label><br>
<span class="sml">{{warnMatchWord}}</span><br>
<input type="checkbox" class="filled-in" id="except_filter" value="1" />
<label for="except_filter">{{except}}</label><br>
<span class="sml">{{exceptWorn}}</span><br>
{{avalableBefore}}<span class="sml">{{warnAvBefore}}<b>{{warnAvBefore2}}</b></span><br><br>
<input type="text" style="width:50px" id="days_filter" placeholder="d" value="0">{{days}}
<input type="text" style="width:50px" id="hours_filter" placeholder="h" value="0">{{hours}}
<input type="text" style="width:50px" id="mins_filter" placeholder="m" value="0">{{mins}}
<button class="btn waves-effect" style="width:120px;" onclick="makeNewFilter()" id="add-filter-btn">{{add}}</button><br>
<span class="sml">{{warnOnIntegratedTL}}</span>
</div>
<div id="main">
<!--TLのTL-->
<div id="timeline-container">
{{helloTheDesk}}
</div>
</div>
</div>
<!--bottom-->
<div id="bottom">
<div class="leftside">
<div id="dambox">
<input type="text" id="posttgl" placeholder="{{toot}}" style="height:2rem">
</div>
<div class="leftside" id="group">
<div class="btnsgroup"><span class="grouptitle">Columns:</span>
<a onclick="addToggle()" class="nex waves-effect" data-trans-i="add" id="add-tgl">
<i class="material-icons nex" title="{{addColumn}}" data-trans-title="column_add">add</i>
</a>
<a onclick="sortToggle()" class="nex waves-effect">
<i class="material-icons nex big-icon" title="{{sortColumns}}" data-trans-title="sort">sort</i>
</a>
</div>
<div class="btnsgroup"><span class="grouptitle">Accounts:</span>
<a href="acct.html" class="nex waves-effect">
<i class="material-icons nex big-icon" title="{{acctMan}}(Ctrl+Shift+M)" data-trans-title="manager">account_circle</i>
</a>
<a onclick="srcToggle()" class="nex waves-effect" id="src-tgl">
<i class="material-icons" title="{{search}}" data-trans-title="src">search</i>
</a>
<a onclick="listToggle()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="{{list}}" data-trans-title="list">view_headline</i>
</a>
<a onclick="filterToggle()" class="nex waves-effect" id="filter-tgl">
<i class="material-icons" title="{{filter}}" data-trans-title="filter">filter_list</i>
</a>
</div>
<div class="btnsgroup"><span class="grouptitle">Preferances:</span>
<a href="setting.html" class="nex waves-effect">
<i class="material-icons nex" title="{{setting}}(Ctrl+Shift+S)" data-trans-title="setting">settings</i>
</a>
<a href="index.html" class="nex mize waves-effect">
<i class="material-icons nex" title="{{f5}}(F5/⌘+R)" data-trans-title="reload">refresh</i>
</a>
<a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="{{nanoDes}}TheDesk Nano" data-trans-title="nano_desp">remove_from_queue</i>
</a>
<a onclick="window.open('https://astarte.thedesk.top');" class="setting nex waves-effect" target="_blank" id="ranking-btn" style="display:none;">
<i class="material-icons nex" title="アスタルテランキング">timeline</i>
</a>
</div>
</div>
</div>
<div>
<div id="tips-menu">
<div class="btnsgroup" style="height:34px"><span class="grouptitle">Tips:</span>
<a onclick="tips('ver')" class="nex waves-effect">
<i class="material-icons nex" title="{{verTips}}" data-trans-title="ver">info</i>
</a>
<a onclick="tips('clock')" class="nex waves-effect">
<i class="material-icons nex" title="{{clockTips}}" data-trans-title="clock">access_time</i>
</a>
<a onclick="tips('memory')" class="nex waves-effect">
<i class="material-icons nex" title="{{ramTips}}" data-trans-title="memory">memory</i>
</a>
<a onclick="tips('trend')" class="nex waves-effect imasonly" style="display:none;">
<i class="material-icons nex" title="アイマストドントレンド" data-trans-title="trendtip">whatshot</i>
</a>
<a onclick="tips('spotify')" class="nex waves-effect">
<i class="fa fa-spotify nex" title="Spotify" data-trans-title="spotifytips"></i>
</a>
</div>
</div>
<div id="tips" class="hide">
<a onclick="tipsToggle()" class="nex waves-effect" style="float:left">
<i class="material-icons nex" title="{{changeTips}}" data-trans-title="tips">bubble_chart</i>
</a>
<div id="tips-text" style="float:left; width:300px;"></div>
</div>
</div>
</div>
<!--左下メッセージ-->
<div id="message">
</div>
@ -814,7 +791,4 @@ var tlid=0;
<script type="text/javascript" src="./js/userdata/prof-edit.js"></script>
<script type="text/javascript" src="./js/emoji/emojipack.js"></script>
<script type="text/javascript" src="./js/emoji/default-emoji.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>

View File

@ -298,6 +298,7 @@
<li>N:投稿パネルを開く</li>
<li>X:投稿パネルを開閉</li>
<li>Ctrl+Enter:投稿</li>
<li>Ctrl+E:全ての通知を既読にする</li>
<li>Esc:投稿パネルを消す</li>
<li>F5:スーパーリロード</li>
<li>E:投稿パネルの幅を切り替え</li>