TheDesk Akane (16.0.0) - phase:2[final]

This commit is contained in:
cutls 2018-07-30 02:35:29 +09:00
parent 7178c2d6c5
commit 96995066ac
30 changed files with 1444 additions and 1069 deletions

View File

@ -6,25 +6,37 @@ Latest Info(Markdown Toot)/最新情報(マークダウン形式のトゥート)
Contact me(bug report...):GitHub Issues, mention to [Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls) or toot with #Desk
バグレポートなど:GitHub Issuesや[Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls)へのリプ、または#Deskでトゥートして下さい。
バグレポートなど:GitHub Issuesや[Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls)へのリプ,または#Deskでトゥートして下さい.
## License
[TheDesk LICENSE v5](https://github.com/cutls/TheDesk/blob/master/LICENSE.md)
## Language/言語
- 日本語(Japanese)
- English(英語)
### Translation/翻訳
The Developer needs nice translation of TheDesk!
Pull Request to `language/*.json` and `js/lang/*.js`.
You cannot PR? You can also write Issues.
翻訳を募集しております.特に英語に関しては文法語法的に間違っている箇所が多いので,
`language/*.json``js/lang/*.js`にプルリクエストするか,
該当箇所がわからない場合はIssuesに書いてください.
他言語も大歓迎です!
## Component/構成
app:Raw files(you can download to modify or check)
app:そのままのファイル。ダウンロード→テスト用
app:そのままのファイル.ダウンロード→テスト用
desk.icns: If you build yourself on macOS, you can use this .icns file as icon.
desk.icns: macOS向けアイコン。セルフビルドにどうぞ。
desk.icns: macOS向けアイコン.セルフビルドにどうぞ.
## Language/言語
Japanese
日本語
## Requirement/環境
@ -37,7 +49,7 @@ Japanese
- Ability to read unformated files!
## Build/ビルド
electron-packager is required. electron-packagerが必要です
electron-packager is required. electron-packagerが必要です.
Windows
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --win32metadata.CompanyName="TheDesk&Cutls.com" --win32metadata.FileDescription="TheDesk" --win32metadata.OriginalFilename="TheDesk" --win32metadata.InternalName="TheDesk" --win32metadata.ProductName="TheDesk" --platform=win32 --arch=all --electron-version=2.0.5 --icon=.\app\thedesk.ico --overwrite`
Linux

View File

@ -1,5 +1,5 @@
<!doctype html>
<html lang="ja">
<html lang="en">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
@ -32,19 +32,19 @@ body,html{overflow-y: scroll;}
<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>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">戻る</a><br>
<h5>アカウント一覧</h5>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">Back</a><br>
<h5>List of accounts</h5>
<div id="acct-list"></div>
<div class="divider"></div>
<h5>アカウントを追加</h5><br>
<h5>Add an account</h5><br>
<div id="add">
<div class="row">
<div class="col s6">
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp">
<div id="ins-suggest"></div>
Windows以外でご使用の方やPleromaにログインされる方はチェックを入れて下さい。<br>
Check if TheDesk is not working on Windows, you want to login Pleroma instance.<br>
<input type="checkbox" class="filled-in" id="linux" />
<label for="linux">コードセットアップ</label><br>
<label for="linux">Code setup</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br>
</div>
<div class="col s6">
@ -52,27 +52,27 @@ body,html{overflow-y: scroll;}
<div id="support" class="collection transparent"></div>
</div>
</div>
<h5>メインアカウント</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">アカウント選択</span>
<h5>Main an account</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">Select an account</span>
<br>
<select id="main-acct-sel" class="acct-sel" style="color:black" onchange="mainacct()"></select>
<label></label>
</div>
</div>
<div id="auth" style="display:none">
指定されたコードを貼り付けてください。ログインウィンドウは閉じていただいて構いません。<br>
<input type="text" id="code" placeholder="コードを入力">
<button class="btn waves-effect" onclick="code()">認証</button><br>
Paste the code and close browser.<br>
<input type="text" id="code" placeholder="Code">
<button class="btn waves-effect" onclick="code()">Auth</button><br>
</div>
現在ログイン中のインスタンス情報 by <a href="https://instances.social" target="_blank">instances.social API</a><br>
Instance data by <a href="https://instances.social" target="_blank">instances.social API</a><br>
<img src="./img/loading.svg" id="ins-prof" width="200"><br>
<span id="ins-upd"></span>現在<br>
ドメイン名:<span id="ins-name"></span><br>
接続済みインスタンス:<span id="ins-connect"></span><br>
トゥート数:<span id="ins-toot"></span><br>
ユーザー数:<span id="ins-user"></span><br>
コネクション:<span id="ins-per"></span>%<br>
マストドンバージョン:<span id="ins-ver"></span><br>
@<span id="ins-upd"></span><br>
Domain:<span id="ins-name"></span><br>
Federated instances:<span id="ins-connect"></span><br>
Toots:<span id="ins-toot"></span><br>
Users:<span id="ins-user"></span>Users<br>
Connection:<span id="ins-per"></span>%<br>
Mastodon version:<span id="ins-ver"></span><br>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>
<script type="text/javascript" src="./js/login/instance.js"></script>

80
app/acct.sample.html Normal file
View File

@ -0,0 +1,80 @@
<!doctype html>
<html lang="{{lang}}">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
<link href="./css/themes.css" type="text/css" rel="stylesheet">
<link href="./css/master.css" type="text/css" rel="stylesheet">
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
<link href='./css/tl.css' rel='stylesheet' type='text/css'>
<link href='./css/userdata.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
<style>.acct{display:flex; justify-content:space-around;}
.card{width:400px; background-color: #9e9e9e; margin:10px; }
body,html{overflow-y: scroll;}
#acct-list{display:flex; flex-wrap:wrap; color:white; align-items: flex-start}
.lts{font-size:150%}
.colorsel{ display:flex; }
.card .colorsel div:not(.exc){width:20px;height:20px;}
.card .colorsel div.exc{width:40px;height:20px;}
</style>
<meta charset="utf-8">
</head>
<body id="mainView">
<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="{{lang}}";
</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>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">{{back}}</a><br>
<h5>{{list}}</h5>
<div id="acct-list"></div>
<div class="divider"></div>
<h5>{{add}}</h5><br>
<div id="add">
<div class="row">
<div class="col s6">
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp">
<div id="ins-suggest"></div>
{{codesetupwarn}}<br>
<input type="checkbox" class="filled-in" id="linux" />
<label for="linux">{{codesetup}}</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br>
</div>
<div class="col s6">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div>
<h5>{{mainacct}}</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">{{selacct}}</span>
<br>
<select id="main-acct-sel" class="acct-sel" style="color:black" onchange="mainacct()"></select>
<label></label>
</div>
</div>
<div id="auth" style="display:none">
{{codepastewarn}}<br>
<input type="text" id="code" placeholder="{{codepaste}}">
<button class="btn waves-effect" onclick="code()">Auth</button><br>
</div>
Instance data by <a href="https://instances.social" target="_blank">instances.social API</a><br>
<img src="./img/loading.svg" id="ins-prof" width="200"><br>
@<span id="ins-upd"></span><br>
{{domain}}:<span id="ins-name"></span><br>
{{connect}}:<span id="ins-connect"></span>{{ko}}<br>
{{toots}}:<span id="ins-toot"></span>{{ko}}<br>
{{users}}:<span id="ins-user"></span>{{users}}<br>
{{safety}}:<span id="ins-per"></span>%<br>
{{ver}}:<span id="ins-ver"></span><br>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>
<script type="text/javascript" src="./js/login/instance.js"></script>
<script type="text/javascript" src="./js/login/manager.js"></script>
<script type="text/javascript" src="./js/tl/date.js"></script>

View File

@ -1,798 +1,5 @@
<!doctype html>
<html lang="ja">
<html lang="en">
<head>
<title>TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
<link href="./css/themes.css" type="text/css" rel="stylesheet">
<link href='./css/tl.css' rel='stylesheet' type='text/css'>
<link href='./css/userdata.css' rel='stylesheet' type='text/css'>
<link href='./css/post.css' rel='stylesheet' type='text/css'>
<link href="./css/master.css" type="text/css" rel="stylesheet">
<link href='./css/sort.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0;URL='language.html?mode=redirect'" />
</head>
<body>
<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="Akane (16.0.0) beta";
//betaを入れるとバージョンチェックしない
//var ver="beta";
var lang="en";
var acct_id=0;
var tlid=0;
verck(ver);
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<div id="tl">
<!--TL-->
<!--ドラッグハンドラ-->
<div id="drag">
<div id="drag-content" data-trans="drag_here">ここにドラッグして添付(ドラッグと同時にアップロードされます)
<br>
<button class="btn waves-effect" onclick="closedrop()" data-trans="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">
</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>
</span>
<!--Markdown-->
<div class="row" style="margin-bottom:0">
<div class="markdown mize hide">
<div class="col s12">
<i class="material-icons pointer setting waves-effect" onclick="tagsel('b')" title="太字(Ctrl+B)テキストボックス内を選択してから押すと囲みます。">format_bold</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('i')" title="斜字(Ctrl+I)テキストボックス内を選択してから押すと囲みます。">format_italic</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('u')" title="下線(Ctrl+U)テキストボックス内を選択してから押すと囲みます。">format_underlined</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('s')" title="取り消し(Ctrl+S)テキストボックス内を選択してから押すと囲みます。">strikethrough_s</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('>','no','yes')" title="引用">format_quote</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('#','no','yes')" title="見出し">short_text</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('`','yes','no')" title="コード挿入 テキストボックス内を選択してから押すと囲みます。">code</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('- ','yes','yes')" title="箇条書きリスト">format_list_bulleted</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('1. ','yes','yes')" title="番号付きリスト">format_list_numbered</i>
<i class="pointer setting fa fa-subscript waves-effect" onclick="markdown('__','yes','no','before')" title="下付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
<i class="pointer setting fa fa-superscript waves-effect" onclick="markdown('_','yes','no','before')" title="上付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('spin')" title="回転 テキストボックス内を選択してから押すと囲みます。">autorenew</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('pulse')" title="点滅 テキストボックス内を選択してから押すと囲みます。">flare</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=vertical')" title="上下反転 テキストボックス内を選択してから押すと囲みます。">swap_vert</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=horizontal')" title="左右反転 テキストボックス内を選択してから押すと囲みます。">swap_horiz</i>
<span class="sml gray pointer waves-effect">
<a onclick="mdToggle()">Markdownエディタを隠す</a>
</span>
<br>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('size')" title="文字サイズ変更 テキストボックス内を選択してから押すと囲みます。">format_size</i>
<input id="size" style="width: calc(50% - 20px); margin: 0; height: 24px;" value="12">px
<i class="material-icons pointer setting waves-effect" onclick="tagsel('colorhex')" title="文字色変更 テキストボックス内を選択してから押すと囲みます。">color_lens</i>
<input id="colorhex" style="width: calc(50% - 50px); margin: 0; height: 24px;" type="color">
<br>
<i class="material-icons pointer setting waves-effect" onclick="markdownLink()" title="リンク挿入">link</i>
<input id="linkt" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクテキスト">&nbsp;
<input id="link2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクアドレス">
<br>
<i class="material-icons pointer setting waves-effect" onclick="markdownImage()" title="インライン画像挿入">image</i>
<input id="image" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="代替テキスト">&nbsp;
<input id="image2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="画像アドレス">
</div>
</div>
<div class="input-field col s12" id="preview-field" style="margin-top: 0;">
<div id="md-preview">
</div>
<span class="sml gray pointer">
<a onclick="previewEdit()">Edit</a>
</span>
</div>
<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>
<br>
<span class="sml gray pointer markdown mize" id="preview-btn">
<a onclick="preview()">Preview</a>
</span>
<span class="sml gray pointer anti-markdown mize">
<a onclick="mdToggle()">Markdownエディタを表示</a>
</span>
<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 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>
</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 id="vis">public</span>
</span>
<br>
<input type="text" id="cw-text" placeholder="警告文" 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>
<a onclick="vis('public')">公開(Public)</a>
</li>
<li>
<a onclick="vis('unlisted')">未収載(Unlisted)</a>
</li>
<li>
<a onclick="vis('private')" id="private-button">非公開(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>
</li>
</ul>
<!--hidden area-->
<input type="hidden" id="reply">
<input type="hidden" id="media">
<!--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>
</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>
<br>
</span>
<input type="text" id="emoji-suggest" placeholder="カスタム絵文字検索">
<div id="emoji-list" class="" style="">
</div>
<div class="emoji-control center">
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('before')" id="emoji-before">
<i class="material-icons">navigate_before</i>
</button>
<span id="emoji-count"></span>/
<span id="emoji-sum"></span>
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('next')" id="emoji-next">
<i class="material-icons">navigate_next</i>
</button>
</div>
<div id="default-emoji">
<span id="now-emoji"></span>一覧を表示中<br><span class="gray sml">一部デフォルト絵文字は入力・描画できません。(国旗系など)</span>
<br>
<a onclick="customEmoji()" class="pointer waves-effect" title="カスタム絵文字">
<i class="material-icons">add</i>
</a>
<a onclick="defaultEmoji('people')" class="pointer waves-effect" title="ひと">
<i class="material-icons">people</i>
</a>
<a onclick="defaultEmoji('nature')" class="pointer waves-effect" title="自然">
<i class="material-icons">local_florist</i>
</a>
<a onclick="defaultEmoji('food')" class="pointer waves-effect" title="食べ物">
<i class="material-icons">restaurant</i>
</a>
<a onclick="defaultEmoji('activity')" class="pointer waves-effect" title="活動">
<i class="material-icons">directions_run</i>
</a>
<a onclick="defaultEmoji('place')" class="pointer waves-effect" title="場所">
<i class="material-icons">directions_car</i>
</a>
<a onclick="defaultEmoji('object')" class="pointer waves-effect" title="もの">
<i class="material-icons">attach_file</i>
</a>
<a onclick="defaultEmoji('symbol')" class="pointer waves-effect" title="記号">
<i class="material-icons">gesture</i>
</a>
<a onclick="defaultEmoji('flag')" class="pointer waves-effect" title="国旗">
<i class="material-icons">flag</i>
</a>
<a onclick="faicon()" class="pointer waves-effect" title="faicon" id="faicon-btn">
<i class="fa fa-fort-awesome"></i>
</a>
</div>
</div>
<!-- Modal Structure Tootdata-->
<div id="tootmodal" class="modal modal-fixed-footer">
<div class="modal-content">
<ul class="collapsible" data-collapsible="accordion" id="det-col">
<li>
<div class="collapsible-header">
<i class="material-icons">arrow_upward</i>これより前の会話
</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>対象のトゥート
</div>
<div class="collapsible-body toot-reset" id="toot-this">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">arrow_downward</i>これよりあとの会話
</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(エアリプソース確認)
</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ソース確認)
</div>
<div class="collapsible-body toot-reset" id="user-before">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">star</i>このトゥートをお気に入りに登録した人
</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>このトゥートをブーストした人
</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>
<div class="row">
<div class="col s4">
<select id="status-acct-sel" class="acct-sel"></select>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share left"></i>返信</button>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i class="fa fa-retweet left"></i>ブースト</button>
</div>
<div class="col s3">
<button class="dropdown-button btn waves-effect orange" style="width:100%;" onclick="staEx('fav')"><i class="fa fa-star left"></i>お気に入り登録</button>
</div>
</div>
<div id="toot-tools">
</div>
<div id="toot-after">
</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>
</div>
</div>
<!-- Modal Structure Userdata -->
<div id="his-data" class="modal bottom-sheet modal-fixed-footer" style="max-height:750px; height:90%;">
<div id="his-data-content" class="modal-content" style="padding-bottom: 0;overflow-y:hidden;">
<div id="his-data-show">
<img src="./img/loading.svg" id="his-prof" style="">
<div class="his-float">
<span id="his-name" style="font-size:1.5rem">Loading...</span><span class="gray" id="his-bot"></span>
<br>@
<span id="his-acct"></span>
<span class="gray" id="his-relation"></span>
<br>
<span class="cbadge">
<span id="his-sta"></span>トゥート
</span>
<span class="cbadge">フォロー:
<span id="his-follow"></span>
</span>
<span class="cbadge">フォロワー:
<span id="his-follower"></span>
</span>
<span class="cbadge" style="max-width:150px; width:150px; ">Since:
<span id="his-since"></span>
</div>
<div class="his-float">
<span id="his-des"></span>
<br>
</div>
<div class="row">
<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>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follow-list">フォロー</a>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follower-list">フォロワー</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-action">他アカウントで操作</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-list">リスト</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-fav-list">お気に入り登録</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-blocking-list">ブロック</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-muting-list">ミュート</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-domain-list">ドメインブロック</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-prof-list">プロフィール編集</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-request-list">フォローリクエスト</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-matching-list">似てる</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-follow-recom-list">おすすめ</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>
</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>
</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>
</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>
</div>
<div id="his-list" class="col s12 tab-content">
<div id="his-lists-a">リストに追加するためにはフォローが必要です。</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>
</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>
</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>
</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>ブロックするドメイン
<br>
<input type="text" placeholder="example.com" id="domainblock">
<button class="btn waves-effect" onclick="addDomainblock()">ブロック</button>
<br>
</div>
<div id="his-prof-list" class="col s12 tab-content">名前
<br>
<input type="text" placeholder="名前" id="his-name-val" style="max-width:250px;">
<br>自己紹介
<br>
<div class="input-field col s12">
<textarea placeholder="自己紹介" id="his-des-val" class="materialize-textarea"></textarea>
<label for="his-des-val">自己紹介</label>
</div>
<br>プロフィール画像変更:
<span id="prof-change">
<input type="file" onchange="imgChange(this,'avatar')">
</span>
<br>ヘッダー画像変更:
<span id="header-change">
<input type="file" onchange="imgChange(this,'header')">
</span>
</div>
<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>
</div>
<div id="his-matching-list" class="col s12 tab-content">
似ているユーザーを取得できます。<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>
</div>
<div id="his-follow-recom-list" class="col s12 tab-content">
<div id="his-follow-recom-contents" class="cont-series">
</div>
</div>
</div>
</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>
</div>
</div>
<!-- Modal Structure Image-->
<div id="imagemodal" class="modal modal-fixed-footer" style="min-width:550px">
<div class="modal-content">
<div id="imagewrap">
<img src="" id="imgmodal">
</div>
<br>
</div>
<div class="modal-footer">
DL:<span id="imgprog"></span>%
<a class="waves-effect white-text" onclick="zoom(2)">
<i class="material-icons">zoom_in</i>
</a>
<a class="waves-effect white-text" onclick="zoom(0.5)">
<i class="material-icons">zoom_out</i>
</a>
<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 orange" onclick="imgCont('prev')" id="image-prev">
<i class="material-icons">keyboard_arrow_left</i>
</button>
<button class="btn waves-effect orange" onclick="imgCont('next')" id="image-next">
<i class="material-icons">keyboard_arrow_right</i>
</button>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">
<i class="material-icons">close</i>
</a>
</div>
</div>
<!-- Modal Structure Video-->
<div id="videomodal" class="modal modal-fixed-footer">
<div class="modal-content">
<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>
</div>
</div>
<!-- Modal Structure Release Note-->
<div id="releasenote" class="modal modal-fixed-footer">
<div class="modal-content">
<h3>TheDesk</h3>
<a href="https://thedesk.top" target="_blank">HP</a><br>
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br><br>
<div id="release-Mio_15-10-0" style="display:none">
<h5>Release Note Mio (15.10.0)</h5>
<ul>
<li>音声読み上げに対応</li>
<li>Twitterのツイートに対するリンクをリッチに表示</li>
<li>削除追跡取り下げ</li>
<li>アップデートスキップの有効期限を次バージョン時にする機能</li>
<li>CINDERELLA NowPlaying(imastodon.net)</li>
<li>ライセンス変更(v5)</li>
</ul>
</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>
</div>
<div class="modal-footer">
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
</div>
</div>
<!--PiP-->
<div id="pip" class="hide pip-bottom pip-left">
<i class="material-icons pip-horiz pointer" onclick="pipHoriz()">chevron_right</i> 
<i class="material-icons pip-vert pointer" onclick="pipVert()">expand_less</i> 
<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">アカウント選択</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>
</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>
</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>並べ替え設定
</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>閉じる
</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>アカウント選択</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>
</div>
<!--bottom-->
<div id="bottom">
<div class="leftside">
<div id="dambox">
<input type="text" id="posttgl" placeholder="トゥート" 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="カラム追加" data-trans-title="column_add">add</i>
</a>
<a onclick="sortToggle()" class="nex waves-effect">
<i class="material-icons nex big-icon" title="カラム一覧/並べ替え" 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="アカウントマネージャー(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="検索" data-trans-title="src">search</i>
</a>
<a onclick="listToggle()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="リスト" data-trans-title="list">view_headline</i>
</a>
<a onclick="filterToggle()" class="nex waves-effect" id="filter-tgl">
<i class="material-icons" title="フィルター" 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="設定(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/⌘+R)" data-trans-title="reload">refresh</i>
</a>
<a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="最小のマストドン。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="バージョン" data-trans-title="ver">info</i>
</a>
<a onclick="tips('clock')" class="nex waves-effect">
<i class="material-icons nex" title="時計" data-trans-title="clock">access_time</i>
</a>
<a onclick="tips('memory')" class="nex waves-effect">
<i class="material-icons nex" title="メモリ" 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="Tipsの変更" 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>
<!--Radio Happy(Yui) Taku Inoue-->
<audio src="" id="radio"></audio>
<!--JS-->
<script type="text/javascript" src="./js/ui/tips.js"></script>
<script src="https://twemoji.maxcdn.com/2/twemoji.min.js?2.7"></script>
<script type="text/javascript" src="./js/common/about.js"></script>
<script type="text/javascript" src="./js/tl/parse.js"></script>
<script type="text/javascript" src="./js/ui/scroll.js"></script>
<script type="text/javascript" src="./js/tl/tl.js"></script>
<script type="text/javascript" src="./js/tl/card.js"></script>
<script type="text/javascript" src="./js/tl/date.js"></script>
<script type="text/javascript" src="./js/tl/notification.js"></script>
<script type="text/javascript" src="./js/tl/datails.js"></script>
<script type="text/javascript" src="./js/tl/mix.js"></script>
<script type="text/javascript" src="./js/tl/src.js"></script>
<script type="text/javascript" src="./js/tl/filter.js"></script>
<script type="text/javascript" src="./js/tl/tag.js"></script>
<script type="text/javascript" src="./js/tl/list.js"></script>
<script type="text/javascript" src="./js/tl/speech.js"></script>
<script type="text/javascript" src="./js/ui/post-box.js"></script>
<script type="text/javascript" src="./js/ui/layout.js"></script>
<script type="text/javascript" src="./js/login/instance.js"></script>
<script type="text/javascript" src="./js/login/login.js"></script>
<script type="text/javascript" src="./js/ui/img.js"></script>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script type="text/javascript" src="./js/ui/pip.js"></script>
<script type="text/javascript" src="./js/ui/sort.js"></script>
<script type="text/javascript" src="./js/ui/spotify.js"></script>
<script type="text/javascript" src="./js/post/post.js"></script>
<script type="text/javascript" src="./js/post/use-txtbox.js"></script>
<script type="text/javascript" src="./js/post/secure.js"></script>
<script type="text/javascript" src="./js/post/img.js"></script>
<script type="text/javascript" src="./js/post/status.js"></script>
<script type="text/javascript" src="./js/post/emoji.js"></script>
<script type="text/javascript" src="./js/post/suggest.js"></script>
<script type="text/javascript" src="./js/post/bb-md.js"></script>
<script type="text/javascript" src="./js/userdata/showOnTL.js"></script>
<script type="text/javascript" src="./js/userdata/his-data.js"></script>
<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>

View File

@ -1,5 +1,5 @@
<!doctype html>
<html lang="ja">
<html lang="{{lang}}">
<head>
<title>TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
@ -28,9 +28,11 @@
<script>
var ver="Akane (16.0.0) beta";
//betaを入れるとバージョンチェックしない
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
//var ver="beta";
var acct_id=0;
var tlid=0;
var lang="{{lang}}";
verck(ver);
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
@ -300,7 +302,7 @@ var tlid=0;
<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>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">{{useOtherAcct1}}</a>
</div>
</div>
<!-- Modal Structure Userdata -->
@ -422,7 +424,7 @@ var tlid=0;
<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()">{{block}}</button>
<button class="btn waves-effect" onclick="addDomainblock()">{{add}}</button>
<br>
</div>
<div id="his-prof-list" class="col s12 tab-content">{{name}}

5
app/index.start.html Normal file
View File

@ -0,0 +1,5 @@
<!doctype html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL='language.html?mode=redirect'" />
</head>

View File

@ -39,6 +39,31 @@ var lang_fatalerroroccured={
"ja":"エラーが発生しました。しばらく待ってから再起動してください。",
"en":"Some errors are occured, please restart TheDesk."
}
var lang_speech={
"ja":"Google 日本語",
"en":"Google US English"
}
//language.html
var lang_lang={
"ja":"言語",
"en":"Language"
}
var lang_langlocale={
"ja":"日本語",
"en":"English"
}
var lang_back={
"ja":"戻る",
"en":"Back"
}
var lang_set={
"ja":"設定",
"en":"Set"
}
var lang_langadd={
"ja":"<a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHub</a>から翻訳に参加できます。英語の校正(緊急)や他言語に翻訳していただける方を募集しております。",
"en":"Translate TheDesk to other languages or proofread TheDesk on <a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHub</a>. TheDesk needs your help."
}
//common/version.js
var lang_version_usever={
"ja":"お使いのバージョン{{ver}}は最新です。",
@ -79,6 +104,14 @@ var lang_manager_mainAcct={
"ja":"メインアカウントを設定しました。",
"en":"Done:choose main account"
}
var lang_manager_def={
"ja":"既定",
"en":"Default"
}
var lang_manager_none={
"ja":"なし",
"en":"None"
}
//post/emoji.js
var lang_emoji_get={
"ja":"絵文字リストを取得",
@ -224,7 +257,7 @@ var lang_notf_new={
//tl/speech.js
var lang_speech_refresh={
"ja":"音声読み上げ設定を更新しました。",
"en":"Refresh setting of TTS"
"en":"Save valie about TTS config"
}
//tl/src.js
var lang_src_ts={
@ -272,7 +305,7 @@ var lang_layout_delthis={
}
var lang_layout_setthis={
"ja":"このカラムの設定",
"en":"Setting of this column"
"en":"Preferences of this column"
}
var lang_layout_mediafil={
"ja":"メディアフィルター",
@ -319,3 +352,45 @@ var lang_spotify_np={
"ja":"NowPlaying文書を更新しました。",
"en":"Done:templete of NowPlaying"
}
//userdata/his-data.js
var lang_hisdata_frcreq={
"ja":"Mastodon 2.4.3~が必要です",
"en":"Required Mastodon 2.4.3 and above"
}
var lang_hisdata_frcwarn={
"ja":"非フォローだけど絡みがある時に表示されます。",
"en":"Unfollow accounts will be shown."
}
var lang_hisdata_taketime={
"ja":"30秒から数分かかります",
"en":"It will take 30s ~ several minutes"
}
//userdata/showOnTL.js
var lang_showontl_movetxt={
"ja":"このアカウントは移行しています",
"en":"This account was moved"
}
var lang_showontl_movebtn={
"ja":"移行先を見る",
"en":"Continue on the new account"
}
var lang_showontl_botacct={
"ja":"botアカウント",
"en":"[bot]"
}
var lang_showontl_followed={
"ja":"フォローされています",
"en":"Following you"
}
var lang_showontl_notf={
"ja":"通知",
"en":"Notification "
}
var lang_showontl_domain={
"ja":"ドメイン",
"en":"Domain "
}
var lang_showontl_listwarn={
"ja":"リストに追加するためにはフォローが必要です。",
"en":"Follow to add this user to lists."
}

View File

@ -136,5 +136,5 @@ var lang_parse_clientmute={
}
var lang_parse_mute={
"ja":"ミュートします。設定から解除できます。",
"en":" will be muted. You can remove on a setting."
"en":" will be muted. You can remove on preferences."
}

100
app/js/lang/setting.lang.js Normal file
View File

@ -0,0 +1,100 @@
var lang_setting_time={
"ja":"時間設定を{{set}}に設定しました。",
"en":"Time format:{{set}}"
}
var lang_setting_theme={
"ja":"テーマ設定を{{set}}に設定しました。",
"en":"Theme:{{set}}"
}
var lang_setting_nsfw={
"ja":"画像表示設定を{{set}}に設定しました。",
"en":"NSFW:{{set}}"
}
var lang_setting_cw={
"ja":"テキスト表示設定を{{set}}に設定しました。",
"en":"CW:{{set}}"
}
var lang_setting_cwtext={
"ja":"デフォルトの警告文を「{{set}}」に設定しました。",
"en":"Default CW text:{{set}}"
}
var lang_setting_vis={
"ja":"デフォルトの公開設定を{{set}}に設定しました。",
"en":"Default visibility:{{set}}"
}
var lang_setting_popup={
"ja":"ポップアップお知らせを{{set}}に設定しました。",
"en":"Popup notification:{{set}}"
}
var lang_setting_off={
"ja":"オフ",
"en":"Off"
}
var lang_setting_s={
"ja":"秒",
"en":"s"
}
var lang_setting_box={
"ja":"デフォルトでのボックスの挙動を{{set}}に設定しました。",
"en":"Default toot box action:{{set}}"
}
var lang_setting_gif={
"ja":"アイコンアニメーション再生を{{set}}に設定しました。",
"en":"GIF:{{set}}"
}
var lang_setting_selt={
"ja":"{{set1}}行以上または{{set2}}文字以上でテキストを隠します。",
"en":"Auto fold:{{set1}} lines and above, {{set2}} letters and above"
}
var lang_setting_width={
"ja":"横幅最低を{{set}}pxに設定しました。",
"en":"Minimam width:{{set}}"
}
var lang_setting_img={
"ja":"画像投稿後の設定を「{{set}}」に設定しました。",
"en":"After posting an image:{{set}}"
}
var lang_setting_font={
"ja":"フォントを{{set}}に設定しました。",
"en":"Fonts:{{set}}"
}
var lang_setting_default={
"ja":"デフォルト",
"en":"default font"
}
var lang_setting_size={
"ja":"フォントサイズを{{set}}pxに設定しました。",
"en":"Font size:{{set}}px"
}
var lang_setting_imgheight={
"ja":"画像高さを{{set}}pxに設定しました。",
"en":"Image height:{{set}}px"
}
var lang_setting_tag={
"ja":"タグの取得範囲を「{{set}}」に設定しました。",
"en":"Tag TL:{{set}}"
}
var lang_setting_ul={
"ja":"独自ロケール設定を{{set}}に設定しました。",
"en":"Native locale:{{set}}"
}
var lang_setting_notf={
"ja":"ネイティブ通知を{{set}}に設定しました。",
"en":"Native notification:{{set}}"
}
var lang_setting_quote={
"ja":"引用形式を{{set}}に設定しました。",
"en":"Quote format:{{set}}"
}
var lang_setting_via={
"ja":"via表示を{{set}}に設定しました。",
"en":"Via:{{set}}"
}
var lang_setting_mov={
"ja":"マウスオーバー・ヒディングを{{set}}に設定しました。",
"en":"Mouseover:{{set}}"
}
var lang_setting_main={
"ja":"起動時・投稿時のアカウントを{{set}}に設定しました。",
"en":"Default account:{{set}}"
}

View File

@ -517,7 +517,7 @@ function multisel() {
var list = key * 1 + 1;
if (key == last) {
sel = "selected";
mainb="(既定)"
mainb='('+lang_manager_def[lang]+')'
var domain = localStorage.getItem("domain_" + key);
var profimg=localStorage.getItem("prof_"+key);
var domain=localStorage.getItem("domain_"+key);
@ -544,7 +544,7 @@ function mainacct(){
}
function colorpicker(key){
temp=
'<div onclick="coloradd('+key+',\'def\',\'def\')" class="pointer exc">なし</div>'+
'<div onclick="coloradd('+key+',\'def\',\'def\')" class="pointer exc">'+lang_manager_none[lang]+'</div>'+
'<div onclick="coloradd('+key+',\'f44336\',\'white\')" class="red white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'e91e63\',\'white\')" class="pink white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'9c27b0\',\'white\')" class="purple white-text pointer"></div>'+

View File

@ -363,7 +363,7 @@ function empUser(){
//URLコピー
function tootUriCopy(url){
execCopy(url);
Materialize.toast("トゥートURLをコピーしました", 1500);
Materialize.toast(lang_details_url[lang], 1500);
}
//他のアカウントで…

View File

@ -1,5 +1,5 @@
$voise = null;
$voiseName = 'Google 日本語';
$voiseName = lang_speech[lang];
$voices = speechSynthesis.getVoices();
$synthes = new SpeechSynthesisUtterance();
$voise = $.grep($voices, function(n, i){return n.name == $voiseName})[0];

View File

@ -4,14 +4,14 @@ function settings() {
var dd = $("[name=time]:checked").val();
var dt = $("[for="+dd+"]").text();
if (dd != localStorage.getItem("datetype")) {
Materialize.toast("時間設定を" + dt + "に設定しました。", 3000);
Materialize.toast(lang_setting_time[lang].replace("{{set}}" ,dt), 3000);
}
localStorage.setItem("datetype", dd);
var cd = $("[name=theme]:checked").val();
var ct = $("[for="+cd+"]").html();
if (cd != localStorage.getItem("theme")) {
Materialize.toast("テーマ設定を" + ct + "に設定しました。", 3000);
Materialize.toast(lang_setting_theme[lang].replace("{{set}}" ,ct), 3000);
}
//テーマはこの場で設定
themes(cd);
@ -20,84 +20,77 @@ function settings() {
var nd = $("[name=nsfw]:checked").val();
var nt = $("[for=n_"+nd+"]").text();
if (nd != localStorage.getItem("nsfw")) {
Materialize.toast("画像表示設定を" + nt + "に設定しました。", 3000);
Materialize.toast(lang_setting_nsfw[lang].replace("{{set}}" ,nt), 3000);
}
localStorage.setItem("nsfw", nd);
var cwd = $("[name=cw]:checked").val();
var cwt = $("[for=c_"+cwd+"]").text();
if (cwd != localStorage.getItem("cw")) {
Materialize.toast("テキスト表示設定を" + cwt + "に設定しました。", 3000);
Materialize.toast(lang_setting_cw[lang].replace("{{set}}" ,cwt), 3000);
}
localStorage.setItem("cw", cwd);
var cwtd = $("#cw-text").val();
if (cwtd != localStorage.getItem("cw-text")) {
Materialize.toast("デフォルトの警告文を「" + cwtd + "」に設定しました。", 3000);
Materialize.toast(lang_setting_cwtext[lang].replace("{{set}}" ,cwtd), 3000);
}
localStorage.setItem("cw-text", cwtd);
var visd = $("[name=vis]:checked").val();
var vist = $("[for="+visd+"]").text();
if (visd != localStorage.getItem("vis")) {
Materialize.toast("デフォルトの公開設定を" + vist + "に設定しました。", 3000);
Materialize.toast(lang_setting_vis[lang].replace("{{set}}" ,vist), 3000);
}
localStorage.setItem("vis", visd);
var popd = $("#popup").val();
if (popd > 0 && popd != localStorage.getItem("popup")) {
Materialize.toast("ポップアップお知らせを" + popd + "秒に設定しました。", 3000);
Materialize.toast(lang_setting_popup[lang].replace("{{set}}" ,popd+lang_setting_s[lang]), 3000);
} else if (popd != localStorage.getItem("popup")) {
Materialize.toast("ポップアップお知らせをオフに設定しました。", 3000);
Materialize.toast(lang_setting_popup[lang].replace("{{set}}" ,lang_setting_off[lang]), 3000);
}
localStorage.setItem("popup", popd);
var boxd = $("[name=box]:checked").val();
var boxt = $("[for=b_"+boxd+"]").text();
if (boxd != localStorage.getItem("box")) {
Materialize.toast("デフォルトでのボックスの挙動を" + boxt + "に設定しました。", 3000);
}
localStorage.setItem("box", boxd);
var gifd = $("[name=gif]:checked").val();
var gift = $("[for=g_"+gifd+"]").text();
if (gifd != localStorage.getItem("gif")) {
Materialize.toast("アイコンアニメーション再生を" + gift + "に設定しました。", 3000);
Materialize.toast(lang_setting_gif[lang].replace("{{set}}" ,gift), 3000);
}
localStorage.setItem("gif", gifd);
var sentd = $("#sentence").val();
var ltrd = $("#letters").val();
if (sentd != localStorage.getItem("sentence") || ltrd != localStorage.getItem("letters")) {
Materialize.toast(sentd + "行以上または"+ltrd+"文字以上でテキストを隠します。", 3000);
Materialize.toast(lang_setting_selt[lang].replace("{{set1}}" ,sentd).replace("{{set1}}" ,ltrd), 3000);
}
localStorage.setItem("sentence", sentd);
localStorage.setItem("letters", ltrd);
var widthd = $("#width").val();
if (widthd != localStorage.getItem("width")) {
Materialize.toast("横幅最低を" + widthd + "pxに設定しました。", 3000);
Materialize.toast(lang_setting_width[lang].replace("{{set}}" ,widthd), 3000);
}
localStorage.setItem("width", widthd);
var imgd = $("[name=img]:checked").val();
var imgt = $("[for=i_"+imgd+"]").text();
if (imgd != localStorage.getItem("img")) {
Materialize.toast("画像投稿後の設定を「" + imgt + "」に設定しました。", 3000);
Materialize.toast(lang_setting_img[lang].replace("{{set}}" ,imgt), 3000);
}
localStorage.setItem("img", imgd);
var fontd = $("#font").val();
if(fontd){
if (fontd != localStorage.getItem("font")) {
Materialize.toast("フォントを" + fontd + "に設定しました。", 3000);
Materialize.toast(lang_setting_font[lang].replace("{{set}}" ,fontd), 3000);
}
localStorage.setItem("font", fontd);
themes();
}else{
if(localStorage.getItem("font")){
localStorage.removeItem("font");
Materialize.toast("フォントをデフォルトに設定しました。", 3000);
Materialize.toast(lang_setting_font[lang].replace("{{set}}" ,lang_setting_default[lang]), 3000);
themes();
}
}
@ -105,62 +98,62 @@ function settings() {
var sized = $("#size").val();
if (sized != localStorage.getItem("size")) {
Materialize.toast("フォントサイズを" + sized + "pxに設定しました。", 3000);
Materialize.toast(lang_setting_size[lang].replace("{{set}}" ,sized), 3000);
}
localStorage.setItem("size", sized);
var heid = $("#img-height").val();
if (heid != localStorage.getItem("img-height")) {
Materialize.toast("画像高さを" + heid + "pxに設定しました。", 3000);
Materialize.toast(lang_setting_imgheight[lang].replace("{{set}}" ,heid), 3000);
}
localStorage.setItem("img-height", heid);
var tagd = $("[name=tag]:checked").val();
var tagt = $("[for=t_"+tagd+"]").text();
if (tagd != localStorage.getItem("tag-range")) {
Materialize.toast("タグの取得範囲を「" + tagt + "」に設定しました。", 3000);
Materialize.toast(lang_setting_tag[lang].replace("{{set}}" ,tagt), 3000);
}
localStorage.setItem("tag-range", tagd);
var uld = $("[name=ul]:checked").val();
var ult = $("[for=ul_"+uld+"]").text();
if (uld != localStorage.getItem("locale")) {
Materialize.toast("独自ロケール設定を" + ult + "に設定しました。", 3000);
Materialize.toast(lang_setting_ul[lang].replace("{{set}}" ,ult), 3000);
}
localStorage.setItem("locale", uld);
var ntd = $("[name=notf]:checked").val();
var ntt = $("[for=ntf_"+ntd+"]").text();
if (ntd != localStorage.getItem("nativenotf")) {
Materialize.toast("ネイティブ通知を" + ntt + "に設定しました。", 3000);
Materialize.toast(lang_setting_notf[lang].replace("{{set}}" ,ntt), 3000);
}
localStorage.setItem("nativenotf", ntd);
var qtd = $("[name=quote]:checked").val();
var qtt = $("[for=q_"+qtd+"]").text();
if (qtd != localStorage.getItem("quote")) {
Materialize.toast("引用形式を" + qtt + "に設定しました。", 3000);
Materialize.toast(lang_setting_quote[lang].replace("{{set}}" ,qtt), 3000);
}
localStorage.setItem("quote", qtd);
var viad = $("[name=via]:checked").val();
var viat = $("[for=via_"+viad+"]").text();
if (viad != localStorage.getItem("viashow")) {
Materialize.toast("via表示を" + viat + "に設定しました。", 3000);
Materialize.toast(lang_setting_via[lang].replace("{{set}}" ,viat), 3000);
}
localStorage.setItem("viashow", viad);
var movd = $("[name=mov]:checked").val();
var movt = $("[for=mov_"+movd+"]").text();
if (movd != localStorage.getItem("mouseover")) {
Materialize.toast("マウスオーバー・ヒディングを" + movt + "に設定しました。", 3000);
Materialize.toast(lang_setting_mov[lang].replace("{{set}}" ,movt), 3000);
}
localStorage.setItem("mouseover", movd);
var maind = $("[name=main]:checked").val();
var maint = $("[for=mn_"+maind+"]").text();
if (maind != localStorage.getItem("mainuse")) {
Materialize.toast("起動時・投稿時のアカウントを" + maint + "に設定しました。", 3000);
Materialize.toast(lang_setting_main[lang].replace("{{set}}" ,maint), 3000);
}
localStorage.setItem("mainuse", maind);
}
@ -170,6 +163,9 @@ function load() {
if(localStorage.getItem("imas")){
$(".imas").removeClass("hide");
}
if(localStorage.getItem("kirishima")){
$(".kirishima").removeClass("hide");
}
var prof = localStorage.getItem("prof");
$("#my-prof").attr("src", prof);
var datetype = localStorage.getItem("datetype");

View File

@ -31,7 +31,7 @@ function utl(user, more, acct_id) {
}).then(function(json) {
var templete = parse(json, '', acct_id);
if(!json[0]){
templete="データはありません<br>";
templete=lang_details_nodata[lang]+"<br>";
}
var height = $("#his-data-content").height() - 245;
$(".tab-content").css('height', height);
@ -111,7 +111,7 @@ function flw(user, more, acct_id) {
}).then(function(json) {
var templete = userparse(json,'',acct_id);
if(!json[0]){
templete="データはありません<br>";
templete=lang_details_nodata[lang]+"<br>";
}
if (more) {
$("#his-follow-list-contents").append(templete);
@ -155,7 +155,7 @@ function fer(user, more, acct_id) {
}).then(function(json) {
var templete = userparse(json,'',acct_id);
if(!json[0]){
templete="データはありません<br>";
templete=lang_details_nodata[lang]+"<br>";
}
if (more) {
$("#his-follower-list-contents").append(templete);
@ -195,7 +195,7 @@ function showFav(more, acct_id) {
}).then(function(json) {
var templete = parse(json, '', acct_id);
if(!json[0]){
templete="データはありません<br>";
templete=lang_details_nodata[lang]+"<br>";
}
if (more) {
$("#his-fav-list-contents").append(templete);
@ -233,7 +233,7 @@ function showMut(more, acct_id) {
console.error(error);
}).then(function(json) {
if(!json[0]){
templete="データはありません<br>";
templete=lang_details_nodata[lang]+"<br>";
}
var templete = userparse(json,'',acct_id);
if (more) {
@ -272,7 +272,7 @@ function showBlo(more, acct_id) {
console.error(error);
}).then(function(json) {
if(!json[0]){
templete="データはありません<br>";
templete=lang_details_nodata[lang]+"<br>";
}
var templete = userparse(json,'',acct_id);
if (more) {
@ -312,7 +312,7 @@ function showReq(more, acct_id) {
}).then(function(json) {
var templete = userparse(json, 'true',acct_id);
if(!json[0]){
templete="データはありません<br>";
templete=lang_details_nodata[lang]+"<br>";
}
if (more) {
$("#his-request-list-contents").append(templete);
@ -352,7 +352,7 @@ function showDom(more, acct_id) {
}).then(function(json) {
var templete = "";
if(!json[0]){
templete="データはありません<br>";
templete=lang_details_nodata[lang]+"<br>";
}
Object.keys(json).forEach(function(key) {
var domain = json[key];
@ -393,13 +393,13 @@ function showFrl(more, acct_id) {
}).then(function(response) {
return response.json();
}).catch(function(error) {
$("#his-follow-recom-contents").html("データはありません(Mastodon 2.4.3~が必要です)<br>");
$("#his-follow-recom-contents").html(lang_details_nodata[lang]+"("+lang_hisdata_frcreq[lang]+")<br>");
console.error(error);
}).then(function(json) {
console.log(json);
if(!json[0]){
console.log("No data");
templete="データはありません(非フォローだけど絡みがある時に表示されます。)<br>";
templete=lang_details_nodata[lang]+"("+lang_hisdata_frcwarn[lang]+")<br>";
}else{
var templete = userparse(json,'',acct_id);
}
@ -416,7 +416,7 @@ function showFrl(more, acct_id) {
//ユーザーマッチングリスト
function showMat() {
$("#his-matching-list-contents").html("30秒から数分かかります");
$("#his-matching-list-contents").html(lang_hisdata_taketime[lang]);
var full=$("#his-acct").attr("fullname");
var acct_id=$("#his-data").attr("use-acct");
full=full.split("@");

View File

@ -74,8 +74,8 @@ function udg(user, acct_id) {
//moved設定時
if (json.moved) {
Materialize.toast(
'このアカウントは移行しています<button class="btn-flat toast-action" onclick="udg(\"' +
json.moved + ','+acct_id+'\")">移行先を見る</button>', 4000)
lang_showontl_movetxt[lang]+'<button class="btn-flat toast-action" onclick="udg(\"' +
json.moved + ','+acct_id+'\")">'+lang_showontl_movebtn[lang]+'</button>', 4000)
} else {
$('#his-data').modal('open');
$('#his-data').attr("user-id", user);
@ -137,7 +137,7 @@ function udg(user, acct_id) {
$("#his-des").html(twemoji.parse(note));
}
if(json.bot){
$("#his-bot").html("botアカウント");
$("#his-bot").html(lang_showontl_botacct[lang]);
}
$('#his-data').css('background-size', 'cover');
localStorage.setItem("history" , user);
@ -214,38 +214,38 @@ function relations(user, acct_id) {
if (json.following) {
//自分がフォローしている
$("#his-data").addClass("following");
$("#his-follow-btn").text("フォロー解除");
$("#his-follow-btn").text(lang_status_unfollow[lang]);
hisList(user,acct_id);
}else{
$("#his-follow-btn").text("フォロー");
$("#his-follow-btn").text(lang_status_follow[lang]);
}
if (json.followed_by) {
//フォローされてる
$("#his-relation").text("フォローされています");
$("#his-relation").text(lang_showontl_followed[lang]);
}
if (json.blocking) {
$("#his-data").addClass("blocking");
$("#his-block-btn").text("ブロック解除");
$("#his-block-btn").text(lang_status_unblock[lang]);
}else{
$("#his-block-btn").text("ブロック");
$("#his-block-btn").text(lang_status_block[lang]);
}
if (json.muting) {
$("#his-data").addClass("muting");
$("#his-mute-btn").text("ミュート解除");
$("#his-mute-btn").text(lang_status_unmute[lang]);
}else{
$("#his-mute-btn").text("ミュート");
$("#his-mute-btn").text(lang_status_mute[lang]);
}
if (json.muting_notifications) {
$("#his-data").addClass("mutingNotf");
$("#his-notf-btn").text("通知ミュート解除");
$("#his-notf-btn").text(lang_showontl_notf[lang]+lang_status_unmute[lang]);
}else{
$("#his-notf-btn").text("通知ミュート");
$("#his-notf-btn").text(lang_showontl_notf[lang]+lang_status_mute[lang]);
}
if (json.domain_blocking) {
$("#his-data").addClass("blockingDom");
$("#his-domain-btn").text("ドメインブロック解除");
$("#his-domain-btn").text(lang_showontl_domain[lang]+lang_status_unblock[lang]);
}else{
$("#his-domain-btn").text("ドメインブロック");
$("#his-domain-btn").text(lang_showontl_domain[lang]+lang_status_block[lang]);
}
});
@ -285,15 +285,15 @@ function reset(){
$("#his-notf-btn").show();
$("#his-domain-btn").show();
$("#his-emp-btn").show();
$("#his-follow-btn").text("フォロー");
$("#his-mute-btn").text("ミュート");
$("#his-block-btn").text("ブロック");
$("#his-notf-btn").text("通知ミュート");
$("#his-domain-btn").text("ドメインブロック");
$("#his-follow-btn").text(lang_status_follow[lang]);
$("#his-mute-btn").text(lang_status_mute[lang]);
$("#his-block-btn").text(lang_status_block[lang]);
$("#his-notf-btn").text(lang_showontl_notf[lang]+lang_status_mute[lang]);
$("#his-domain-btn").text(lang_showontl_domain[lang]+lang_status_block[lang]);
$("#his-relation").text("");
$(".cont-series").html("");
$("#domainblock").val("");
$("#his-lists-a").html('リストに追加するためにはフォローが必要です。');
$("#his-lists-a").html(lang_showontl_listwarn[lang]);
$("#his-lists-b").html('');
$("#his-name-val").val("");
$("#his-des-val").val("");

75
app/language.html Normal file
View File

@ -0,0 +1,75 @@
<!doctype html>
<html lang="ja">
<head>
<title>Languages - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
<link href="./css/themes.css" type="text/css" rel="stylesheet">
<link href="./css/master.css" type="text/css" rel="stylesheet">
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans" rel="stylesheet">
<meta charset="utf-8">
</head>
<body style="max-width:100vw; width:500px; padding:10px;">
<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/ui/theme.js"></script>
<h3 id="language"></h3>
<select id="language-sel" style="color:black" onchange="btn();"></select>
<button class="btn waves-effect indigo nex" style="width:100%; max-width:200px;" onclick="sel()" id="sel"></button>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;" id="back"></a><br>
<br>
<span id="notice"></span>
<script>
//コード受信
if(location.search){
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)/);
var mode=m[1];
if(mode=="redirect"){
if(localStorage.getItem("lang")){
changelang(localStorage.getItem("lang"))
}
}
}
var fstlang="";
var langtxt="";
var addit="";
Object.keys(lang_lang).forEach(function(i) {
if(langtxt==""){
langtxt=lang_lang[i];
$("#sel").text(lang_set[i]);
$("#back").text(lang_back[i]);
}else{
langtxt=langtxt+"/"+lang_lang[i];
}
addit=addit+"<br>"+lang_langadd[i];
var loc=lang_langlocale[i];
$("#language-sel").append('<option value="'+i+'">'+loc+'</option>');
});
$("#language").text(langtxt)
$("#notice").html(addit)
$('select').material_select('update');
function sel(){
var val=$("#language-sel").val();
changelang(val);
}
function changelang(val){
var electron = require("electron");
var ipc = electron.ipcRenderer;
localStorage.setItem("lang",val);
ipc.send('lang', val);
ipc.on('langres', function (event, arg) {
location.href="index.html";
})
}
function btn(){
var val=$("#language-sel").val();
$("#sel").text(lang_set[val]);
$("#back").text(lang_back[val]);
}
</script>
<script type="text/javascript" src="./js/platform/end.js"></script>

19
app/language/acct.en.json Normal file
View File

@ -0,0 +1,19 @@
{
"list":"List of accounts",
"back":"Back",
"add":"Add an account",
"codesetupwarn":"Check if TheDesk is not working on Windows, you want to login Pleroma instance.",
"codesetup":"Code setup",
"mainacct":"Main an account",
"selacct":"Select an account",
"codepastewarn":"Paste the code and close browser.",
"codepaste":"Code",
"domain":"Domain",
"connect":"Federated instances",
"toots":"Toots",
"users":"Users",
"users2":"users",
"safety":"Connection",
"ver":"Mastodon version",
"ko":""
}

19
app/language/acct.ja.json Normal file
View File

@ -0,0 +1,19 @@
{
"list":"アカウント一覧",
"back":"戻る",
"add":"アカウントを追加",
"codesetupwarn":"Windows以外でご使用の方やPleromaにログインされる方はチェックを入れて下さい。",
"codesetup":"コードセットアップ",
"mainacct":"メインアカウント",
"selacct":"アカウントを選択",
"codepastewarn":"指定されたコードを貼り付けてください。ログインウィンドウは閉じていただいて構いません。",
"codepaste":"コードを入力",
"domain":"ドメイン名",
"connect":"接続インスタンス数",
"toots":"トゥート数",
"users":"ユーザー数",
"users2":"人",
"safety":"コネクション",
"ver":"Mastodonバージョン",
"ko":"個"
}

View File

@ -2,6 +2,7 @@
"draghere":"Drag here to upload",
"close":"Close",
"showSelectProf":"Show profile of the selecting account",
"closethisbox":"Close this box",
"toot":"Toot",
"nsfwDes":"Mark media as sensitive",
"cwDes":"Hide text behind warning",
@ -23,6 +24,7 @@
"privateJP":"",
"directJP":"",
"emojiWarn":"",
"emojiInsertWarn":"Some emojis are not able to be inserted.",
"refreshEmoji":"Refresh emojis list",
"closeThisBox":"Close this box",
"showThisEmoji":" are shown.",
@ -57,15 +59,19 @@
"timeline":"Timeline",
"operateOtherAcct":"Cross-account",
"list":"List",
"makeNew":"Make a list",
"blocks":"Blocks",
"mutes":"Mutes",
"block":"Block",
"mute":"Mute",
"domainBlock":"Domain block",
"editProf":"Edit profile",
"followReq":"Follow requests",
"likeHimOrHer":"Resembling",
"frc":"Suggest",
"more":"More",
"revoverJP":"",
"revoverJP":" to ",
"warnUseOtherAcct":"(Unable to unfollow)",
"revoverJPde":"",
"or":"or",
"openProf":"Show profile",
@ -100,6 +106,7 @@
"sortSet":"Sort",
"selectAcct":"Select an account",
"listLocale":"List",
"filterWord":"Filtering words",
"degree":"Filter contexts",
"conver":"Conversations",
"option":"Options",
@ -119,7 +126,7 @@
"sortColumns":"Sort",
"acctMan":"Account Manager",
"filter":"Filter",
"setting":"Settings",
"setting":"Preferences",
"f5":"Super Reload",
"nanoDes":"The smallest Mastodon,",
"verTips":"Version",

View File

@ -24,6 +24,7 @@
"privateJP":"非公開",
"directJP":"ダイレクト",
"emojiWarn":"インスタンスによって実装が異なります。",
"emojiInsertWarn":"一部絵文字は入力できません。",
"refreshEmoji":"絵文字更新",
"closeThisBox":"このボックスを閉じる",
"showThisEmoji":"一覧を表示中",
@ -58,8 +59,11 @@
"timeline":"タイムライン",
"operateOtherAcct":"他のアカウントで操作",
"list":"リスト",
"makeNew":"新規作成",
"blocks":"ブロック",
"mutes":"ミュート",
"block":"ブロック",
"mute":"ミュート",
"domainBlock":"ドメインブロック",
"editProf":"プロフィール編集",
"followReq":"フォローリクエスト",
@ -67,6 +71,7 @@
"frc":"おすすめ",
"more":"もっと",
"revoverJP":"する",
"warnUseOtherAcct":"(解除はできません。)",
"revoverJPde":"で",
"or":"または",
"openProf":"プロフィールを表示",
@ -100,6 +105,7 @@
"search":"検索",
"sortSet":"並べ替え設定",
"selectAcct":"アカウントを選択",
"filterWord":"フィルターワード",
"listLocale":"一覧",
"degree":"適応範囲",
"conver":"会話",

View File

@ -0,0 +1,128 @@
{
"setting":"Preferences",
"set":"Save",
"yes":"Yes",
"no":"No",
"change":"Change",
"env":"System Preferences",
"setlang":"Languages",
"theme":"Themes",
"popup":"Popup notification(on window)",
"popupwarn":"Hide to set \"0\"",
"s":"sec",
"nativenotf":"Native notification",
"nnwarn":"This does not work on Windows 10.",
"nntest":"Notification test",
"minwidth":"Minimam width of columns",
"minwidthwarn":"Scroll bar will be shown when your window size is more than ammounts of columns.",
"above":"above",
"font":"Font",
"fontwarn":"Set local font",
"fontsize":"Font size",
"absolute":"absolute value",
"timeline":"Timeline Preferences",
"timemode":"Time format",
"relativetime":"Relative format:\"1 minutes ago\",\"3 days ago\"",
"absolutetime":"Absolute format:\"23:25:21\",\"2017/12/30 23:59:00\"",
"mixtime":"Mixed format:toots posted today are relative-format, others are absolute-format.",
"relativesel":"Relative",
"absolutesel":"Absoltue",
"doublesel":"Both relative and absolute",
"mixsel":"Mixed",
"locale":"Instance unique locale",
"localewarn":"This value is available on some Japanese instances",
"nswf":"Hide NSFW pictures",
"nsfwwarn":"Strong blur effect",
"cw":"Hide CW contents",
"gif":"Animated GIF images animation",
"tag":"Tag TL Search",
"tagfed":"Use federated network",
"taglocal":"Use local network",
"via":"Show via",
"mouseover":"Hide aaction buttons without mouseover",
"mouseoverwarn":"You may feel unconfortable:(",
"autofold":"Auto folding",
"autofoldwarn":"TheDesk does not collapse totes of 5 characters or less. Also, when collapsing, newlines are not shown. TheDesk count only newlines as the number of lines.",
"lines":"lines",
"letters":"letters",
"or":"or",
"imgheight":"Height of images",
"post":"Posting Preferences",
"defaultcw":"Default warining text",
"defaultvis":"Default visibility",
"public":"Public",
"unlisted":"Unlisted",
"private":"Private",
"direct":"Direct",
"memory":"Memory(memorized as each instance)",
"useapi":"Default of your visibility(Set on preferences of Mastodon instance)",
"postimg":"Posting images preferences",
"showurl":"Insert media URL",
"nourl":"Insert nothig",
"disabled":"Disabled",
"quote":"Quote format",
"simple":"Only URL",
"mention":"URL and acct(mention to the user)",
"full":"URL, text and acct(mention to the user)",
"main":"Default accounts of actions",
"mainwarn":"Main account can be set on Account Manager.",
"lastacct":"Account you used recently",
"usemainacct":"Main account",
"keysc":"Keyboard shortcut Preferences",
"iks":"Easy inserter",
"okswarn":"You can insert any letters and emojis with only 3 keys",
"muteemp":"Mute & Emphasis Preferences",
"climute":"Client Mute",
"cliemp":"Client Emphasis",
"cliwarn":"Click client name on toots to toggle mute and emphasis.",
"enter":"Enter to set",
"wordmute":"Words Mute",
"wordemp":"Words Emphasis",
"useremp":"Users Emphasis",
"useerempwarn":"Set on users data modals.",
"empcolorwarn":"Use this color to emphasis",
"spotify":"Spotify and NowPlaying Preferences",
"spotifynote1":"Click ",
"spotifynote2":"icon to NowPlaying",
"link":"Account Connection",
"linkwarn":"TheDesk save your data on thedesk.top server.",
"connect":"Connect",
"disconnect":"Disconnect",
"templeteedit":"Edit a template",
"templeteeditwarn":"",
"templete1":"Refer:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify",
"templete2":"iTunes NowPlaying:{url} is disabled, but composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre} are available.",
"postartwork":"Attach an Artwork of Spotify",
"tts":"TTS(text to speech) Preferences",
"speed":"Speed",
"speedwarn":"1-100(default:10)",
"pitch":"Pitch",
"pitchwarn":"0-100(default:50)",
"vol":"Volume",
"volwarn":"0-100(default:100)",
"test":"Test",
"sample":"TheDesk is an open-source Mastodon client for PC.",
"playstop":"Play/Stop",
"back":"Back",
"keyscs":"Keyboard shortcuts",
"keyscr":"Jump to n(1-9)th column",
"keynew":"Open toot box",
"keytoggle":"Toggle toot box",
"keypost":"Post",
"keyunread":"Make all notifications read",
"keyesc":"Hide toot box",
"keyf5":"Super Reload",
"keyclear":"Clear toot box",
"keyacctman":"Account Manager",
"keyshowprof":"Show profile of selecting",
"keyrow":"Show next or previous image",
"keyzoom":"Mousewheel:Zoom a image",
"reset":"Reset(Danger)",
"about":"About TheDesk",
"hp":"Website",
"support":"Support",
"help":"Help",
"sushi":"Give me a sushi!",
"checkup":"Check update",
"ossJP":""
}

View File

@ -0,0 +1,128 @@
{
"setting":"設定",
"set":"設定",
"yes":"はい",
"no":"いいえ",
"change":"変更",
"env":"環境設定",
"setlang":"言語",
"theme":"テーマの設定",
"popup":"新規通知のポップアップお知らせの表示秒数",
"popupwarn":"0に設定すると表示されません",
"s":"秒",
"nativenotf":"ネイティブ通知設定",
"nnwarn":"Windows 10の最新バージョンでは通知が表示されません。これは既知のバグですが解決が難しいため保留しています。",
"nntest":"通知テスト",
"minwidth":"マルチカラムの最低横幅",
"minwidthwarn":"画面全体の横幅÷コラム数がこの値を超えた時、横スクロールとなります。",
"above":"以上",
"font":"フォント",
"fontwarn":"ローカルフォントを指定します。",
"fontsize":"フォントサイズ",
"absolute":"絶対指定",
"timeline":"タイムラインの設定",
"timemode":"時間表記設定",
"relativetime":"相対時間の例:\"1分前\",\"3日前\"",
"absolutetime":"絶対時間の例\"23:25:21\",\"2017年12月30日 23:59:00\"",
"mixtime":"混合表示は、当日のトゥートのみ相対、それ以外は絶対で表示 ",
"relativesel":"相対時間",
"absolutesel":"絶対時間",
"doublesel":"両方表示",
"mixsel":"混合表示",
"locale":"独自ロケールを使用",
"localewarn":"対応インスタンスではそのインスタンスにあわせた言語表示ができます。",
"nswf":"非表示設定の画像(NSFW)を隠す",
"nsfwwarn":"きつめのぼかしがかかります。",
"cw":"非表示設定のテキスト(CW)を隠す",
"gif":"アイコンのアニメーションを再生する",
"tag":"タグタイムラインの表示範囲",
"tagfed":"接続しているインスタンス",
"taglocal":"検索対象のインスタンスのみ",
"via":"viaを表示する",
"mouseover":"マウスオーバーするまでアクションメニューを非表示",
"mouseoverwarn":"1画面で得られる情報量が格段にアップしますが、すこし鬱陶しいと思うかもしれません。",
"autofold":"指定行数以上を折りたたむ",
"autofoldwarn":"5文字以下のトゥートは折りたたみません。また、折りたたみ時は改行が描画されません。改行のみを行数とカウントします。",
"lines":"行",
"letters":"文字",
"or":"または",
"imgheight":"画像の高さ",
"post":"投稿設定",
"defaultcw":"デフォルトの警告文",
"defaultvis":"デフォルトの公開設定",
"public":"公開(Public)",
"unlisted":"未収載(Unlisted)",
"private":"非公開(Private)",
"direct":"ダイレクト(Direct)",
"memory":"前回の投稿設定を記憶する(インスタンスごとに記憶されます)",
"useapi":"マストドンアカウント設定の既定値",
"postimg":"画像投稿設定",
"showurl":"画像を投稿し、画像のURLを最後に表示",
"nourl":"画像を投稿するがURLは表示しない",
"disabled":"現在利用できません。",
"quote":"引用形式",
"simple":"URLのみ",
"mention":"URLとアカウント名(相手に通知)",
"full":"本文・URL・アカウント名",
"main":"投稿後や起動時のアカウント",
"mainwarn":"メインアカウントはアカウント設定で指定できます。投稿以外のアカウント選択にも影響します。",
"lastacct":"最後に使用したアカウント",
"usemainacct":"メインアカウント",
"keysc":"キーボードショートカットの設定",
"iks":"簡単文字入力",
"okswarn":"絵文字やタグ、&gt;BTなどを登録しておくとすぐに入力できます。",
"muteemp":"ミュート・強調の設定",
"climute":"クライアントミュート",
"cliemp":"クライアント強調",
"cliwarn":"各トゥートのクライアントをクリックすると設定できます。",
"enter":"Enterで確定",
"wordmute":"ワードミュート",
"wordemp":"ワード強調",
"useremp":"ユーザー強調",
"useerempwarn":"各ユーザーのデータ表示画面で設定できます。",
"empcolorwarn":"強調色(テーマによって異なります。)",
"spotify":"SpotifyとNowPlayingの設定",
"spotifynote1":"",
"spotifynote2":"ボタンから簡単にNowPlayingができます。",
"link":"アカウントの連携",
"linkwarn":"APIの性質上thedesk.topへアクセスします。",
"connect":"接続",
"disconnect":"切断",
"templeteedit":"テンプレートの編集",
"templeteeditwarn":"以下を編集してテンプレートを変更できます。",
"templete1":"テンプレート:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名/{url}:各曲のSpotifyのURL",
"templete2":"iTunes NowPlayingでも{url}以外のテンプレートに従ってトゥートされます。また、作曲家{composer}/サンプルレート{hz}/ビットレート{bitRate}/ジャンル{genre}が有効です。",
"postartwork":"Spotifyでアルバムアートワークを添付する",
"tts":"読み上げの設定",
"speed":"読み上げの速さ",
"speedwarn":"1-100まで、デフォルトは10。",
"pitch":"読み上げの高さ",
"pitchwarn":"0-100まで、デフォルトは50。(大きくなるほど高い)",
"vol":"読み上げの音量",
"volwarn":"0-100まで、デフォルトは100。",
"test":"テスト",
"sample":"これはテスト音声です。TheDeskはオープンソースのPC向けマストドンクライアントです。マルチインスタンスやマルチカラムに対応しています。",
"playstop":"再生/停止",
"back":"戻る",
"keyscs":"キーボードショートカット一覧",
"keyscr":"1番目9番目のTLにスクロール",
"keynew":"投稿パネルを開く",
"keytoggle":"投稿パネルを開閉",
"keypost":"投稿",
"keyunread":"全ての通知を既読にする",
"keyesc":"投稿パネルを消す",
"keyf5":"スーパーリロード",
"keyclear":"入力内容を消す",
"keyacctman":"アカウントマネージャ",
"keyshowprof":"現在選択中のプロフィール",
"keyrow":"イメージビューワー起動時に画像切り替え",
"keyzoom":"マウスホイール:イメージビューワー時に拡大縮小",
"reset":"初期化",
"about":"このソフトについて",
"hp":"公式HP",
"support":"支援",
"help":"ヘルプ",
"sushi":"寿司を投げる",
"checkup":"アップデートを確認",
"ossJP":"(オープンソースライセンス)"
}

View File

@ -0,0 +1,17 @@
{
"updatehere":"Latest TheDesk",
"nowver":"Current version",
"afterdl":"TheDesk will be quit TheDesk after downloading.",
"download":"Download",
"cdn":"Delivered by Amazon Web Services(S3/CloudFront)",
"releasenote1":"Visit a releasenote of ",
"releasenote2":"",
"skipupd":"Skip this uodate",
"nexttl":"until next TL loading",
"nextver":"until next version",
"endthedesk":"Quit",
"about":"About TheDesk",
"problem1":"Some problems? Please download on ",
"problem2":"",
"dlnow":"Downloading"
}

View File

@ -0,0 +1,17 @@
{
"updatehere":"アップデートがあります",
"nowver":"現在のバージョン",
"afterdl":"ダウンロード後は選択したフォルダが開きソフトは閉じられます。",
"download":"ダウンロード",
"cdn":"アップデートはセキュアかつ高速なAmazon CloudFront CDNを通じて提供されます。",
"releasenote1":"アップデート内容の詳細は",
"releasenote2":"をご覧ください。",
"skipupd":"このアップデートを飛ばす",
"nexttl":"次回TL表示時まで",
"nextver":"次のバージョンが出るまで",
"endthedesk":"このソフトを終了",
"about":"このソフトについて",
"problem1":"アップデートに問題が生じる場合は",
"problem2":"からのダウンロードをおためしください。",
"dlnow":"ダウンロード中"
}

View File

@ -179,6 +179,54 @@ ipc.on('native-notf', function(e, args) {
});
}
});
//言語
ipc.on('lang', function(e, arg) {
//index.html
var indextemp=fs.readFileSync(__dirname + '/index.sample.html', 'utf8');
var indexjson=JSON.parse(fs.readFileSync(__dirname + '/language/index.'+arg+'.json', 'utf8'));
Object.keys(indexjson).forEach(function(indexkey) {
var regExp = new RegExp("{{" + indexkey + "}}", "g");
indextemp = indextemp.replace(regExp, indexjson[indexkey]);
});
var regExp = new RegExp("{{lang}}", "g");
indextemp = indextemp.replace(regExp, arg);
fs.writeFileSync(__dirname + '/index.html',indextemp);
//acct.html
var accttemp=fs.readFileSync(__dirname + '/acct.sample.html', 'utf8');
var acctjson=JSON.parse(fs.readFileSync(__dirname + '/language/acct.'+arg+'.json', 'utf8'));
Object.keys(acctjson).forEach(function(acctkey) {
var regExp = new RegExp("{{" + acctkey + "}}", "g");
accttemp = accttemp.replace(regExp, acctjson[acctkey]);
});
var regExp = new RegExp("{{lang}}", "g");
accttemp = accttemp.replace(regExp, arg);
fs.writeFileSync(__dirname + '/acct.html',accttemp);
//setting.html
var settingtemp=fs.readFileSync(__dirname + '/setting.sample.html', 'utf8');
var settingjson=JSON.parse(fs.readFileSync(__dirname + '/language/setting.'+arg+'.json', 'utf8'));
Object.keys(settingjson).forEach(function(settingkey) {
var regExp = new RegExp("{{" + settingkey + "}}", "g");
settingtemp = settingtemp.replace(regExp, settingjson[settingkey]);
});
var regExp = new RegExp("{{lang}}", "g");
settingtemp = settingtemp.replace(regExp, arg);
fs.writeFileSync(__dirname + '/setting.html',settingtemp);
//update.html
var updatetemp=fs.readFileSync(__dirname + '/update.sample.html', 'utf8');
var updatejson=JSON.parse(fs.readFileSync(__dirname + '/language/update.'+arg+'.json', 'utf8'));
Object.keys(updatejson).forEach(function(updatekey) {
var regExp = new RegExp("{{" + updatekey + "}}", "g");
updatetemp = updatetemp.replace(regExp, updatejson[updatekey]);
});
var regExp = new RegExp("{{lang}}", "g");
updatetemp = updatetemp.replace(regExp, arg);
fs.writeFileSync(__dirname + '/update.html',updatetemp);
console.log("done");
mainWindow.webContents.send('langres', "");
})
ipc.on('update', function(e, x, y) {
var platform=process.platform;

View File

@ -14,8 +14,9 @@
<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>
<a href="setting.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>戻る</a>
<a href="setting.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>戻る/Back</a>
TheDeskのライセンスについては<a href="https://github.com/cutls/TheDesk/blob/master/LICENSE.md">TheDesk LICENSE (Latest Ver.)</a>を参照。<br>
LICENSE of TheDesk:<a href="https://github.com/cutls/TheDesk/blob/master/LICENSE.md">TheDesk LICENSE (Latest Ver.)</a><br>
<article style="width:500px; max-width:100%; margin:15px; font-family:IBM Plex Mono">
<h5>Electron</h5>
<i class="fa fa-github"></i><a href="https://github.com/electron/electron" target="_blank">electron/electron</a><br>

View File

@ -1,5 +1,5 @@
<!doctype html>
<html lang="ja">
<html lang="en">
<head>
<title>Settings - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
@ -14,14 +14,18 @@
<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>
<h4>設定</h4>
<script type="text/javascript" src="./js/lang/setting.lang.js"></script>
<script>var lang="en";</script>
<h4>Preferences</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>環境設定
<i class="material-icons">desktop_windows</i>System Preferences
</div>
<div class="collapsible-body">
<h5>テーマの設定</h5>
<h5>Languages</h5>
<a href="language.html" class="btn waves-effect indigo nex" style="width:100%; max-width:200px;">Change</a>
<h5>Themes</h5>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="black" value="black" />
<label for="black">Black</label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="white" value="white" />
@ -33,282 +37,274 @@
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
<label for="green">Green<span class="imas hide">(ユースフルロマンス)</span></label>
<br>
<h5>新規通知のポップアップお知らせの表示秒数</h5>0に設定すると表示されません
<h5>Popup notification(on window)</h5>Hide to set "0"
<br>
<input type="text" style="width:50px" id="popup">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<input type="text" style="width:50px" id="popup">sec
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<h5>ネイティブ通知設定</h5>
Windows 10の最新バージョンでは通知が表示されません。これは既知のバグですが解決が難しいため保留しています。<br><a onclick="notftest()" class="pointer">通知テスト</a>
<h5>Native notification</h5>
This does not work on Windows 10.<br><a onclick="notftest()" class="pointer">Notification test</a>
<br>
<input class="with-gap" onchange="settings()" name="notf" type="radio" id="ntf_yes" value="yes" />
<label for="ntf_yes">はい</label>
<label for="ntf_yes">Yes</label>
<input class="with-gap" onchange="settings()" name="notf" type="radio" id="ntf_no" value="no" />
<label for="ntf_no">いいえ</label>
<label for="ntf_no">No</label>
<br>
<h5>マルチカラムの最低横幅</h5>画面全体の横幅÷コラム数がこの値を超えた時、横スクロールとなります。
<h5>Minimam width of columns</h5>Scroll bar will be shown when your window size is more than ammounts of columns.
<br>
<input type="text" style="width:50px" id="width">px以上
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<input type="text" style="width:50px" id="width">pxabove
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<h5>フォント</h5>
ローカルフォントを指定します。<br>
<h5>Font</h5>
Set local font<br>
<input type="text" style="width:150px" id="font">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<h5>フォントサイズ</h5>
<span style="font-size:15px">15px(絶対指定)</span>
<h5>Font size</h5>
<span style="font-size:15px">15px(absolute value)</span>
<br>
<input type="text" style="width:50px" id="size">px
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>タイムラインの設定
<i class="material-icons">reorder</i>Timeline Preferences
</div>
<div class="collapsible-body">
<h5>時間表記設定</h5>相対時間の例:"1分前","3日前"
<br>絶対時間の例"23:25:21","2017年12月30日 23:59:00"
<br>混合表示は、当日のトゥートのみ相対、それ以外は絶対で表示
<h5>Time format</h5>Relative format:"1 minutes ago","3 days ago"
<br>Absolute format:"23:25:21","2017/12/30 23:59:00"
<br>Mixed format:toots posted today are relative-format, others are absolute-format.
<br>
<input class="with-gap" onchange="settings()" onchange="settings()" name="time" type="radio" id="relative" value="relative" />
<label for="relative">相対時間</label>
<label for="relative">Relative</label>
<input class="with-gap" onchange="settings()" name="time" type="radio" id="absolute" value="absolute" />
<label for="absolute">絶対時間</label>
<label for="absolute">Absoltue</label>
<input class="with-gap" onchange="settings()" name="time" type="radio" id="double" value="double" />
<label for="double">両方表示</label>
<label for="double">Both relative and absolute</label>
<input class="with-gap" onchange="settings()" name="time" type="radio" id="medium" value="medium" />
<label for="medium">混合表示</label>
<h5>独自ロケールを使用</h5>対応インスタンスではそのインスタンスにあわせた言語表示ができます。
<label for="medium">Mixed</label>
<h5>Instance unique locale</h5>This value is available on some Japanese instances
<br>
<input class="with-gap" onchange="settings()" name="ul" type="radio" id="ul_yes" value="yes" />
<label for="ul_yes">はい</label>
<label for="ul_yes">Yes</label>
<input class="with-gap" onchange="settings()" name="ul" type="radio" id="ul_no" value="no" />
<label for="ul_no">いいえ</label>
<label for="ul_no">No</label>
<br>
<h5>非表示設定の画像(NSFW)を隠す</h5>きつめのぼかしがかかります。
<h5>Hide NSFW pictures</h5>Strong blur effect
<br>
<input class="with-gap" onchange="settings()" name="nsfw" type="radio" id="n_yes" value="yes" />
<label for="n_yes">はい</label>
<label for="n_yes">Yes</label>
<input class="with-gap" onchange="settings()" name="nsfw" type="radio" id="n_no" value="no" />
<label for="n_no">いいえ</label>
<label for="n_no">No</label>
<br>
<h5>非表示設定のテキスト(CW)を隠す</h5>
<h5>Hide CW contents</h5>
<input class="with-gap" onchange="settings()" name="cw" type="radio" id="c_yes" value="yes" />
<label for="c_yes">はい</label>
<label for="c_yes">Yes</label>
<input class="with-gap" onchange="settings()" name="cw" type="radio" id="c_no" value="no" />
<label for="c_no">いいえ</label>
<label for="c_no">No</label>
<br>
<h5>アイコンのアニメーションを再生する</h5>
<h5>Animated GIF images animation</h5>
<input class="with-gap" onchange="settings()" name="gif" type="radio" id="g_yes" value="yes" />
<label for="g_yes">はい</label>
<label for="g_yes">Yes</label>
<input class="with-gap" onchange="settings()" name="gif" type="radio" id="g_no" value="no" />
<label for="g_no">いいえ</label>
<label for="g_no">No</label>
<br>
<h5>タグタイムラインの表示範囲</h5>
<h5>Tag TL Search</h5>
<input class="with-gap" onchange="settings()" name="tag" type="radio" id="t_all" value="all" />
<label for="t_all">接続しているインスタンス</label>
<label for="t_all">Use federated network</label>
<input class="with-gap" onchange="settings()" name="tag" type="radio" id="t_local" value="local" />
<label for="t_local">検索対象のインスタンスのみ</label>
<label for="t_local">Use local network</label>
<br>
<h5>viaを表示する</h5>
<h5>Show via</h5>
<input class="with-gap" onchange="settings()" name="via" type="radio" id="via_yes" value="yes" />
<label for="via_yes">はい</label>
<label for="via_yes">Yes</label>
<input class="with-gap" onchange="settings()" name="via" type="radio" id="via_hide" value="hide" />
<label for="via_hide">いいえ</label>
<label for="via_hide">No</label>
<br>
<h5>マウスオーバーするまでアクションメニューを非表示</h5>
1画面で得られる情報量が格段にアップしますが、すこし鬱陶しいと思うかもしれません。<br>
<h5>Hide aaction buttons without mouseover</h5>
You may feel unconfortable:(<br>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_yes" value="yes" />
<label for="mov_yes">はい</label>
<label for="mov_yes">Yes</label>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_no" value="no" />
<label for="mov_no">いいえ</label>
<label for="mov_no">No</label>
<br>
<h5>指定行数以上を折りたたむ</h5>
5文字以下のトゥートは折りたたみません。また、折りたたみ時は改行が描画されません。改行のみを行数とカウントします。
<h5>Auto folding</h5>
TheDesk does not collapse totes of 5 characters or less. Also, when collapsing, newlines are not shown. TheDesk count only newlines as the number of lines.
<br>
<input type="text" style="width:50px" id="sentence">行以上または
<input type="text" style="width:50px" id="letters">文字以上
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<input type="text" style="width:50px" id="sentence">linesaboveor
<input type="text" style="width:50px" id="letters">lettersabove
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<h5>画像の高さ</h5>
<h5>Height of images
</h5>
<input type="text" style="width:50px" id="img-height">px
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>投稿設定
<i class="material-icons">send</i>Posting Preferences
</div>
<div class="collapsible-body">
<h5>デフォルトの警告文</h5>
<h5>Default warining text</h5>
<input type="text" style="width:150px" id="cw-text">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<h5>デフォルトの公開設定</h5>
<h5>Default visibility</h5>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="public" value="public" />
<label for="public">公開(Public)</label>
<label for="public">Public</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="unlisted" value="unlisted" />
<label for="unlisted">未収載(Unlisted)</label>
<label for="unlisted">Unlisted</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="private" value="private" />
<label for="private">非公開(Private)</label>
<label for="private">Private</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="direct" value="direct" />
<label for="direct">ダイレクト(Direct)</label>
<label for="direct">Direct</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="memory" value="memory" />
<label for="memory">前回の投稿設定を記憶する(インスタンスごとに記憶されます)</label>
<label for="memory">Memory(memorized as each instance)</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="server" value="server" />
<label for="server">マストドンアカウント設定の既定値</label>
<label for="server">Default of your visibility(Set on preferences of Mastodon instance)</label>
<br>
<h5>デフォルトでのボックスの挙動(起動時・トゥート後)</h5>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="b_yes" value="yes" />
<label for="b_yes">隠す</label>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="b_hide" value="hide" />
<label for="b_hide">最小化</label>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="b_no" value="no" />
<label for="b_no">何もしない</label>
<br>
<h5>画像投稿設定</h5>
<h5>Posting images preferences</h5>
<input class="with-gap" onchange="settings()" name="img" type="radio" id="i_url" value="url" />
<label for="i_url">画像を投稿し、画像のURLを最後に表示</label>
<label for="i_url">Insert media URL</label>
<input class="with-gap" onchange="settings()" name="img" type="radio" id="i_no-act" value="no-act" />
<label for="i_no-act">画像を投稿するがURLは表示しない</label>
<label for="i_no-act">Insert nothig</label>
<br>
<input class="with-gap" onchange="settings()" name="img" type="radio" id="i_inline" value="inline" disabled />
<label for="i_inline">現在利用できません。
<label for="i_inline">Disabled
<!--画像を投稿し、インラインで表示(Markdownに対応したインスタンスのみ。マルチアカウント環境では非推奨。)-->
</label>
<br>
<h5>引用形式</h5>
<h5>Quote format</h5>
<input class="with-gap" onchange="settings()" name="quote" type="radio" id="q_simple" value="simple" />
<label for="q_simple">URLのみ</label>
<label for="q_simple">Only URL</label>
<input class="with-gap" onchange="settings()" name="quote" type="radio" id="q_mention" value="mention" />
<label for="q_mention">URLとアカウント名(相手に通知)</label>
<label for="q_mention">URL and acct(mention to the user)</label>
<input class="with-gap" onchange="settings()" name="quote" type="radio" id="q_full" value="full" />
<label for="q_full">本文・URL・アカウント名
<label for="q_full">URL, text and acct(mention to the user)
</label>
<br>
<h5>投稿後や起動時のアカウント</h5>
メインアカウントはアカウント設定で指定できます。投稿以外のアカウント選択にも影響します。<br>
<h5>Default accounts of actions</h5>
Main account can be set on Account Manager.<br>
<input class="with-gap" onchange="settings()" name="main" type="radio" id="mn_remain" value="remain" />
<label for="mn_remain">最後に使用したアカウント</label>
<label for="mn_remain">Account you used recently</label>
<input class="with-gap" onchange="settings()" name="main" type="radio" id="mn_main" value="main" />
<label for="mn_main">メインアカウント</label>
<label for="mn_main">Main account</label>
</label>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">keyboard</i>キーボードショートカットの設定
<i class="material-icons">keyboard</i>Keyboard shortcut Preferences
</div>
<div class="collapsible-body">
<h5>簡単文字入力</h5>
絵文字やタグ、&gt;BTなどを登録しておくとすぐに入力できます。<br>
<h5>Easy inserter</h5>
You can insert any letters and emojis with only 3 keys<br>
Ctrl+Shift+1:<input type="text" style="width:150px" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
<button onclick="oks(1)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:150px" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:150px" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>ミュート・強調の設定
<i class="material-icons">bookmark</i>Mute & Emphasis Preferences
</div>
<div class="collapsible-body">
<h5>クライアントミュート</h5>
<h5>Client Mute</h5>
<div id="mute-cli"></div>
<h5>クライアント強調</h5>
各トゥートのクライアントをクリックすると設定できます。
<h5>ワードミュート</h5>
Enterで確定<br>
<h5>Client Emphasis</h5>
Click client name on toots to toggle mute and emphasis.
<h5>Words Mute</h5>
Enter to set<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>ワード強調</h5>
Enterで確定<br>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Words Emphasis</h5>
Enter to set<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>ユーザー強調</h5>
各ユーザーのデータ表示画面で設定できます。
<span class="emphasized"> 強調色(テーマによって異なります。) </span>
<button onclick="wordempSave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Users Emphasis</h5>
Set on users data modals.
<span class="emphasized"> Use this color to emphasis </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fa fa-spotify"></i>SpotifyとNowPlayingの設定
<i class="fa fa-spotify"></i>Spotify and NowPlaying Preferences
</div>
<div class="collapsible-body">
<i class="material-icons" style="font-size:24px;">music_note</i>ボタンから簡単にNowPlayingができます。<br>
<h5>アカウントの連携</h5>
APIの性質上thedesk.topへアクセスします。<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button onclick="spotifyAuth()" class="btn waves-effect" style="width:100px;">設定</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex" style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-enable"><i class="fa fa-spotify left"></i>接続</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled" style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i class="fa fa-spotify left"></i>切断</a>
<h5>テンプレートの編集</h5>
以下を編集してテンプレートを変更できます。<br>
Click <i class="material-icons" style="font-size:24px;">music_note</i>icon to NowPlaying<br>
<h5>Account Connection</h5>
TheDesk save your data on thedesk.top server.<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button onclick="spotifyAuth()" class="btn waves-effect" style="width:100px;">Save</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex" style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-enable"><i class="fa fa-spotify left"></i>Connect</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled" style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i class="fa fa-spotify left"></i>Disconnect</a>
<h5>Edit a template</h5>
<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
テンプレート:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名/{url}:各曲のSpotifyのURL<br>
iTunes NowPlayingでも{url}以外のテンプレートに従ってトゥートされます。また、作曲家{composer}/サンプルレート{hz}/ビットレート{bitRate}/ジャンル{genre}が有効です。<br>
CINDERELLA NowPlaying(imastodon.net限定)では作曲家{composer}/作詞家{lyricist}/BPM{bpm}が有効です。<br>
CINDERELLA NowPlayingはimastodon.netにログインしているとき、トゥート欄に「//」を入力し、その後に曲名を入れることで可能です。<br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>Spotifyでアルバムアートワークを添付する</h5>
この設定はCINDERELLA NowPlaying(imastodon.net限定)にも適用されます。<br>
Refer:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
iTunes NowPlaying:{url} is disabled, but composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre} are available.<br>
<span class="imas hide">CINDERELLA NowPlaying(imastodon.net限定)では作曲家{composer}/作詞家{lyricist}/BPM{bpm}が有効です。<br>
CINDERELLA NowPlayingはimastodon.netにログインしているとき、トゥート欄に「//」を入力し、その後に曲名を入れることで可能です。</span><br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Attach an Artwork of Spotify</h5>
<span class="imas hide">この設定はCINDERELLA NowPlaying(imastodon.net限定)にも適用されます。</span><br>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes" value="yes" />
<label for="awk_yes">はい</label>
<label for="awk_yes">Yes</label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no" value="no" />
<label for="awk_no">いいえ</label>
<label for="awk_no">No</label>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>読み上げの設定
<i class="material-icons">hearing</i>TTS(text to speech) Preferences
</div>
<div class="collapsible-body">
<h5>読み上げの速さ</h5>
1-100まで、デフォルトは10。<br>
<h5>Speed</h5>
1-100(default:10)<br>
<p class="range-field"><input type="range" id="voicespeed" min="1" max="100" value="10" style="width:500px; max-width:100%"/></p>
<h5>読み上げの高さ</h5>
0-100まで、デフォルトは50。(大きくなるほど高い)<br>
<h5>Pitch</h5>
0-100(default:50)<br>
<p class="range-field"><input type="range" id="voicepitch" min="0" max="100" value="50" style="width:500px; max-width:100%"/></p>
<h5>読み上げの音量</h5>
0-100まで、デフォルトは100。<br>
<h5>Volume</h5>
0-100(default:100)<br>
<p class="range-field"><input type="range" id="voicevol" min="0" max="100" value="100" style="width:500px; max-width:100%"/></p>
<h5>テスト</h5>
<input type="text" style="width:350px" id="voicetxt" value="これはテスト音声です。TheDeskはオープンソースのPC向けマストドンクライアントです。マルチインスタンスやマルチカラムに対応しています。">
<button class="btn waves-effect blue" style="width:150px;" onclick="voicePlay()" id="testplay">再生/停止</button><br>
<h5>Test</h5>
<input type="text" style="width:350px" id="voicetxt" value="TheDesk is an open-source Mastodon client for PC.">
<button class="btn waves-effect blue" style="width:150px;" onclick="voicePlay()" id="testplay">Play/Stop</button><br>
<br>
<button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">設定</button>
<button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">Save</button>
</div>
</li>
</ul>
<br>
<a href="new.html">Beta Index</a><br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>戻る</a>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>Back</a>
<br>
<br>キーボードショートカット一覧
<li>Ctrl+1-9:1番目9番目のTLにスクロール</li>
<li>N:投稿パネルを開く</li>
<li>X:投稿パネルを開閉</li>
<li>Ctrl+Enter:投稿</li>
<li>Ctrl+E:全ての通知を既読にする</li>
<li>Esc:投稿パネルを消す</li>
<li>F5:スーパーリロード</li>
<li>E:投稿パネルの幅を切り替え</li>
<li>Ctrl+Shift+C:入力内容を消す</li>
<li>Ctrl+Shift+S:設定</li>
<li>Ctrl+Shift+M:アカウントマネージャ</li>
<br>Keyboard shortcuts
<li>Ctrl+1-9:Jump to n(1-9)th column</li>
<li>N:Open toot box</li>
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Post</li>
<li>Ctrl+E:Make all notifications read</li>
<li>Esc:Hide toot box</li>
<li>F5:Super Reload</li>
<li>Ctrl+Shift+C:Clear toot box</li>
<li>Ctrl+Shift+S:Preferences</li>
<li>Ctrl+Shift+M:Account Manager</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:現在選択中のプロフィール</li>
<li>←/→:イメージビューワー起動時に画像切り替え</li>
<li>マウスホイール:イメージビューワー時に拡大縮小</li>
<li>Ctrl+Shift+P:Show profile of selecting</li>
<li>←/→:Show next or previous image</li>
<li>Mousewheel:Zoom a image</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
@ -319,17 +315,18 @@
<li>Ctrl+R:
<a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く
</li><br>
<button class="btn waves-effect red" style="width:100%; max-width:500px;" onclick="if(confirm('初期化します')){ localStorage.clear(); location.href='index.html'; }"><i class="material-icons left">delete</i>初期化</button><br><br>
<button class="btn waves-effect indigo" onclick="about()" style="width:100%; max-width:500px;"><i class="material-icons left">info</i>このソフトについて</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">web</i>公式HP</a>
<a href="https://enty.jp/Cutls" class="btn waves-effect purple lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>支援(Enty)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:500px;"><i class="material-icons left">list</i>ヘルプ/Docs(制作中)</a>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:500px;" onclick="if(confirm('初期化します')){ localStorage.clear(); location.href='index.html'; }"><i class="material-icons left">delete</i>Reset(Danger)</button><br><br>
<button class="btn waves-effect indigo" onclick="about()" style="width:100%; max-width:500px;"><i class="material-icons left">info</i>About TheDesk</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">web</i>Website</a>
<a href="https://enty.jp/Cutls" class="btn waves-effect purple lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>Support(Enty)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:500px;"><i class="material-icons left">list</i>Help/Docs(Constructing)</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2" style="width:100%; max-width:500px;"><i class="fa fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=Cutls@kirishima.cloud" class="btn waves-effect blue lighten-2" style="width:100%; max-width:500px;"><img src="./img/desk_full.svg" class="left" width="25" style="padding-top:5px;">Developer: Cutls@kirishima.cloud</a>
<a class="btn waves-effect red lighten-2" href="https://osushi.love/Cutls_P" target="_blank" style="width:100%; max-width:500px;"><img src="./img/sushi.svg" class="left" width="25" style="padding-top:5px;">寿司を投げる</a>
<a class="btn waves-effect red lighten-2" href="https://osushi.love/Cutls_P" target="_blank" style="width:100%; max-width:500px;"><img src="./img/sushi.svg" class="left" width="25" style="padding-top:5px;">Give me a sushi!</a>
<br>
<a onclick="localStorage.removeItem('new-ver-skip'); location.href='index.html';" class="pouinter">アップデートを確認</a><br>
<a href="oss.html">OSS License(オープンソースライセンス)</a><br>
<a onclick="localStorage.removeItem('new-ver-skip'); location.href='index.html';" class="pointer">Check update</a><br>
<a href="oss.html">OSS License</a><br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018 All Rights Reserved.
<a href="https://github.com/cutls/TheDesk/blob/master/LICENSE.md">TheDesk LICENSE (Latest Ver.)</a>
<br>Developer: Cutls P(

345
app/setting.sample.html Normal file
View File

@ -0,0 +1,345 @@
<!doctype html>
<html lang="{{lang}}">
<head>
<title>Settings - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
<link href="./css/themes.css" type="text/css" rel="stylesheet">
<link href="./css/master.css" type="text/css" rel="stylesheet">
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
<meta charset="utf-8">
</head>
<body id="mainView" style="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/setting.lang.js"></script>
<script>var lang="{{lang}}";</script>
<h4>{{setting}}</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>{{env}}
</div>
<div class="collapsible-body">
<h5>{{setlang}}</h5>
<a href="language.html" class="btn waves-effect indigo nex" style="width:100%; max-width:200px;">{{change}}</a>
<h5>{{theme}}</h5>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="black" value="black" />
<label for="black">Black</label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="white" value="white" />
<label for="white">White</label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="indigo" value="indigo" />
<label for="indigo">Indigo<span class="imas hide">(エンドレスナイト)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="brown" value="brown" />
<label for="brown">Brown<span class="imas hide">(ビタースイート・タイム)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
<label for="green">Green<span class="imas hide">(ユースフルロマンス)</span></label>
<br>
<h5>{{popup}}</h5>{{popupwarn}}
<br>
<input type="text" style="width:50px" id="popup">{{s}}
<button class="btn waves-effect" style="width:100px;" onclick="settings()">{{set}}</button>
<br>
<h5>{{nativenotf}}</h5>
{{nnwarn}}<br><a onclick="notftest()" class="pointer">{{nntest}}</a>
<br>
<input class="with-gap" onchange="settings()" name="notf" type="radio" id="ntf_yes" value="yes" />
<label for="ntf_yes">{{yes}}</label>
<input class="with-gap" onchange="settings()" name="notf" type="radio" id="ntf_no" value="no" />
<label for="ntf_no">{{no}}</label>
<br>
<h5>{{minwidth}}</h5>{{minwidthwarn}}
<br>
<input type="text" style="width:50px" id="width">px{{above}}
<button class="btn waves-effect" style="width:100px;" onclick="settings()">{{set}}</button>
<br>
<h5>{{font}}</h5>
{{fontwarn}}<br>
<input type="text" style="width:150px" id="font">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">{{set}}</button>
<br>
<h5>{{fontsize}}</h5>
<span style="font-size:15px">15px({{absolute}})</span>
<br>
<input type="text" style="width:50px" id="size">px
<button class="btn waves-effect" style="width:100px;" onclick="settings()">{{set}}</button>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>{{timeline}}
</div>
<div class="collapsible-body">
<h5>{{timemode}}</h5>{{relativetime}}
<br>{{absolutetime}}
<br>{{mixtime}}
<br>
<input class="with-gap" onchange="settings()" onchange="settings()" name="time" type="radio" id="relative" value="relative" />
<label for="relative">{{relativesel}}</label>
<input class="with-gap" onchange="settings()" name="time" type="radio" id="absolute" value="absolute" />
<label for="absolute">{{absolutesel}}</label>
<input class="with-gap" onchange="settings()" name="time" type="radio" id="double" value="double" />
<label for="double">{{doublesel}}</label>
<input class="with-gap" onchange="settings()" name="time" type="radio" id="medium" value="medium" />
<label for="medium">{{mixsel}}</label>
<h5>{{locale}}</h5>{{localewarn}}
<br>
<input class="with-gap" onchange="settings()" name="ul" type="radio" id="ul_yes" value="yes" />
<label for="ul_yes">{{yes}}</label>
<input class="with-gap" onchange="settings()" name="ul" type="radio" id="ul_no" value="no" />
<label for="ul_no">{{no}}</label>
<br>
<h5>{{nswf}}</h5>{{nsfwwarn}}
<br>
<input class="with-gap" onchange="settings()" name="nsfw" type="radio" id="n_yes" value="yes" />
<label for="n_yes">{{yes}}</label>
<input class="with-gap" onchange="settings()" name="nsfw" type="radio" id="n_no" value="no" />
<label for="n_no">{{no}}</label>
<br>
<h5>{{cw}}</h5>
<input class="with-gap" onchange="settings()" name="cw" type="radio" id="c_yes" value="yes" />
<label for="c_yes">{{yes}}</label>
<input class="with-gap" onchange="settings()" name="cw" type="radio" id="c_no" value="no" />
<label for="c_no">{{no}}</label>
<br>
<h5>{{gif}}</h5>
<input class="with-gap" onchange="settings()" name="gif" type="radio" id="g_yes" value="yes" />
<label for="g_yes">{{yes}}</label>
<input class="with-gap" onchange="settings()" name="gif" type="radio" id="g_no" value="no" />
<label for="g_no">{{no}}</label>
<br>
<h5>{{tag}}</h5>
<input class="with-gap" onchange="settings()" name="tag" type="radio" id="t_all" value="all" />
<label for="t_all">{{tagfed}}</label>
<input class="with-gap" onchange="settings()" name="tag" type="radio" id="t_local" value="local" />
<label for="t_local">{{taglocal}}</label>
<br>
<h5>{{via}}</h5>
<input class="with-gap" onchange="settings()" name="via" type="radio" id="via_yes" value="yes" />
<label for="via_yes">{{yes}}</label>
<input class="with-gap" onchange="settings()" name="via" type="radio" id="via_hide" value="hide" />
<label for="via_hide">{{no}}</label>
<br>
<h5>{{mouseover}}</h5>
{{mouseoverwarn}}<br>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_yes" value="yes" />
<label for="mov_yes">{{yes}}</label>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_no" value="no" />
<label for="mov_no">{{no}}</label>
<br>
<h5>{{autofold}}</h5>
{{autofoldwarn}}
<br>
<input type="text" style="width:50px" id="sentence">{{lines}}{{above}}{{or}}
<input type="text" style="width:50px" id="letters">{{letters}}{{above}}
<button class="btn waves-effect" style="width:100px;" onclick="settings()">{{set}}</button>
<br>
<h5>{{imgheight}}
</h5>
<input type="text" style="width:50px" id="img-height">px
<button class="btn waves-effect" style="width:100px;" onclick="settings()">{{set}}</button>
<br>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>{{post}}
</div>
<div class="collapsible-body">
<h5>{{defaultcw}}</h5>
<input type="text" style="width:150px" id="cw-text">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">{{set}}</button>
<br>
<h5>{{defaultvis}}</h5>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="public" value="public" />
<label for="public">{{public}}</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="unlisted" value="unlisted" />
<label for="unlisted">{{unlisted}}</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="private" value="private" />
<label for="private">{{private}}</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="direct" value="direct" />
<label for="direct">{{direct}}</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="memory" value="memory" />
<label for="memory">{{memory}}</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="server" value="server" />
<label for="server">{{useapi}}</label>
<br>
<h5>{{postimg}}</h5>
<input class="with-gap" onchange="settings()" name="img" type="radio" id="i_url" value="url" />
<label for="i_url">{{showurl}}</label>
<input class="with-gap" onchange="settings()" name="img" type="radio" id="i_no-act" value="no-act" />
<label for="i_no-act">{{nourl}}</label>
<br>
<input class="with-gap" onchange="settings()" name="img" type="radio" id="i_inline" value="inline" disabled />
<label for="i_inline">{{disabled}}
<!--画像を投稿し、インラインで表示(Markdownに対応したインスタンスのみ。マルチアカウント環境では非推奨。)-->
</label>
<br>
<h5>{{quote}}</h5>
<input class="with-gap" onchange="settings()" name="quote" type="radio" id="q_simple" value="simple" />
<label for="q_simple">{{simple}}</label>
<input class="with-gap" onchange="settings()" name="quote" type="radio" id="q_mention" value="mention" />
<label for="q_mention">{{mention}}</label>
<input class="with-gap" onchange="settings()" name="quote" type="radio" id="q_full" value="full" />
<label for="q_full">{{full}}
</label>
<br>
<h5>{{main}}</h5>
{{mainwarn}}<br>
<input class="with-gap" onchange="settings()" name="main" type="radio" id="mn_remain" value="remain" />
<label for="mn_remain">{{lastacct}}</label>
<input class="with-gap" onchange="settings()" name="main" type="radio" id="mn_main" value="main" />
<label for="mn_main">{{usemainacct}}</label>
</label>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">keyboard</i>{{keysc}}
</div>
<div class="collapsible-body">
<h5>{{iks}}</h5>
{{okswarn}}<br>
Ctrl+Shift+1:<input type="text" style="width:150px" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:100px;">{{set}}</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:150px" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">{{set}}</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:150px" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">{{set}}</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>{{muteemp}}
</div>
<div class="collapsible-body">
<h5>{{climute}}</h5>
<div id="mute-cli"></div>
<h5>{{cliemp}}</h5>
{{cliwarn}}
<h5>{{wordmute}}</h5>
{{enter}}<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:100px;">{{set}}</button>
<h5>{{wordemp}}</h5>
{{enter}}<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:100px;">{{set}}</button>
<h5>{{useremp}}</h5>
{{useerempwarn}}
<span class="emphasized"> {{empcolorwarn}} </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fa fa-spotify"></i>{{spotify}}
</div>
<div class="collapsible-body">
{{spotifynote1}}<i class="material-icons" style="font-size:24px;">music_note</i>{{spotifynote2}}<br>
<h5>{{link}}</h5>
{{linkwarn}}<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button onclick="spotifyAuth()" class="btn waves-effect" style="width:100px;">{{set}}</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex" style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-enable"><i class="fa fa-spotify left"></i>{{connect}}</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled" style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i class="fa fa-spotify left"></i>{{disconnect}}</a>
<h5>{{templeteedit}}</h5>
{{templeteeditwarn}}<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
{{templete1}}<br>
{{templete2}}<br>
<span class="imas hide">CINDERELLA NowPlaying(imastodon.net限定)では作曲家{composer}/作詞家{lyricist}/BPM{bpm}が有効です。<br>
CINDERELLA NowPlayingはimastodon.netにログインしているとき、トゥート欄に「//」を入力し、その後に曲名を入れることで可能です。</span><br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">{{set}}</button>
<h5>{{postartwork}}</h5>
<span class="imas hide">この設定はCINDERELLA NowPlaying(imastodon.net限定)にも適用されます。</span><br>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes" value="yes" />
<label for="awk_yes">{{yes}}</label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no" value="no" />
<label for="awk_no">{{no}}</label>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>{{tts}}
</div>
<div class="collapsible-body">
<h5>{{speed}}</h5>
{{speedwarn}}<br>
<p class="range-field"><input type="range" id="voicespeed" min="1" max="100" value="10" style="width:500px; max-width:100%"/></p>
<h5>{{pitch}}</h5>
{{pitchwarn}}<br>
<p class="range-field"><input type="range" id="voicepitch" min="0" max="100" value="50" style="width:500px; max-width:100%"/></p>
<h5>{{vol}}</h5>
{{volwarn}}<br>
<p class="range-field"><input type="range" id="voicevol" min="0" max="100" value="100" style="width:500px; max-width:100%"/></p>
<h5>{{test}}</h5>
<input type="text" style="width:350px" id="voicetxt" value="{{sample}}">
<button class="btn waves-effect blue" style="width:150px;" onclick="voicePlay()" id="testplay">{{playstop}}</button><br>
<br>
<button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">{{set}}</button>
</div>
</li>
</ul>
<br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>{{back}}</a>
<br>
<br>{{keyscs}}
<li>Ctrl+1-9:{{keyscr}}</li>
<li>N:{{keynew}}</li>
<li>X:{{keytoggle}}</li>
<li>Ctrl+Enter:{{keypost}}</li>
<li>Ctrl+E:{{keyunread}}</li>
<li>Esc:{{keyesc}}</li>
<li>F5:{{keyf5}}</li>
<li>Ctrl+Shift+C:{{keyclear}}</li>
<li>Ctrl+Shift+S:{{setting}}</li>
<li>Ctrl+Shift+M:{{keyacctman}}</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:{{keyshowprof}}</li>
<li>←/→:{{keyrow}}</li>
<li>{{keyzoom}}</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
<li>Shift+Enter:全角スペースを入れて改行</li>
<li>Shift+Space:ゼロ幅スペース</li>
以下アスタルテにログインしている場合のみ
<br>
<li>Ctrl+R:
<a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く
</li><br>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:500px;" onclick="if(confirm('初期化します')){ localStorage.clear(); location.href='index.html'; }"><i class="material-icons left">delete</i>{{reset}}</button><br><br>
<button class="btn waves-effect indigo" onclick="about()" style="width:100%; max-width:500px;"><i class="material-icons left">info</i>{{about}}</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">web</i>{{hp}}</a>
<a href="https://enty.jp/Cutls" class="btn waves-effect purple lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>{{support}}(Enty)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:500px;"><i class="material-icons left">list</i>{{help}}/Docs(Constructing)</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2" style="width:100%; max-width:500px;"><i class="fa fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=Cutls@kirishima.cloud" class="btn waves-effect blue lighten-2" style="width:100%; max-width:500px;"><img src="./img/desk_full.svg" class="left" width="25" style="padding-top:5px;">Developer: Cutls@kirishima.cloud</a>
<a class="btn waves-effect red lighten-2" href="https://osushi.love/Cutls_P" target="_blank" style="width:100%; max-width:500px;"><img src="./img/sushi.svg" class="left" width="25" style="padding-top:5px;">{{sushi}}</a>
<br>
<a onclick="localStorage.removeItem('new-ver-skip'); location.href='index.html';" class="pointer">{{checkup}}</a><br>
<a href="oss.html">OSS License{{ossJP}}</a><br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018 All Rights Reserved.
<a href="https://github.com/cutls/TheDesk/blob/master/LICENSE.md">TheDesk LICENSE (Latest Ver.)</a>
<br>Developer: Cutls P(
<a href="index.html?mode=user&code=Cutls@kirishima.cloud">@Cutls@kirishima.cloud</a>)
<br>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="./js/common/about.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>
<script type="text/javascript" src="./js/login/logout.js"></script>
<script type="text/javascript" src="./js/ui/spotify.js"></script>
<script type="text/javascript" src="./js/tl/speech.js"></script>
<script type="text/javascript" src="./js/ui/settings.js"></script>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script type="text/javascript" src="./js/tl/date.js"></script>

View File

@ -1,5 +1,5 @@
<!doctype html>
<html lang="ja">
<html lang="en">
<head>
<title>Update - TheDesk</title>
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
@ -21,21 +21,21 @@ a,button{
<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>
<h5>アップデートがあります[TheDesk <span id="ver"></span>]</h5>
<h5>Latest TheDesk[TheDesk <span id="ver"></span>]</h5>
<span id="det"></span><br>
現在のバージョン<span id="now"></span><br>
ダウンロード後は選択したフォルダが開きソフトは閉じられます。<br>
<button id="update" class="waves-effect btn" onclick="update('true')">ダウンロード</button>
Current version<span id="now"></span><br>
TheDesk will be quit TheDesk after downloading.<br>
<button id="update" class="waves-effect btn" onclick="update('true')">Download</button>
<p id="prog"></p>
<div class="progress">
<div class="determinate" style="width: 0%"></div>
</div><br>
アップデートはセキュアかつ高速なAmazon CloudFront CDNを通じて提供されます。<br>
アップデート内容の詳細は<a href="https://github.com/cutls/TheDesk/blob/master/LATEST.md">GitHub</a>をご覧ください。<br><br>
このアップデートを飛ばす(<a onclick="window.close();" class="pointer">次回TL表示時まで</a>/<a onclick="nextv();" class="pointer">次のバージョンが出るまで</a>)<br>
<a onclick="quit()" class="pointer">このソフトを終了</a><br>
<a onclick="about()" class="pointer">このソフトについて</a><br>
アップデートに問題が生じる場合は<a href="https://thedesk.top">TheDesk HP</a>からのダウンロードをおためしください。
Delivered by Amazon Web Services(S3/CloudFront)<br>
Visit a releasenote of <a href="https://github.com/cutls/TheDesk/blob/master/LATEST.md">GitHub</a><br><br>
Skip this uodate(<a onclick="window.close();" class="pointer">until next TL loading</a>/<a onclick="nextv();" class="pointer">until next version</a>)<br>
<a onclick="quit()" class="pointer">Quit</a><br>
<a onclick="about()" class="pointer">About TheDesk</a><br>
Some problems? Please download on <a href="https://thedesk.top">TheDesk HP</a>
<script type="text/javascript" src="./js/common/about.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>
<script>
@ -52,7 +52,7 @@ verck();
ipc.on('prog', function (event, arg) {
console.log(arg);
$(".determinate").css('width',arg*100+"%");
$("#prog").text("ダウンロード中:"+Math.floor(arg*100)+"%");
$("#prog").text("Downloading:"+Math.floor(arg*100)+"%");
})
ipc.on('mess', function (event, arg) {
console.log(arg);

91
app/update.sample.html Normal file
View File

@ -0,0 +1,91 @@
<!doctype html>
<html lang="{{lang}}">
<head>
<title>Update - TheDesk</title>
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
<link href="./css/master.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
<meta charset="utf-8">
</head>
<body>
<style>
body{
font-family:'Open Sans';
-webkit-app-region: drag;
cursor: move;
padding:10px;
}
a,button{
-webkit-app-region: no-drag;
}</style>
<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>
<h5>{{updatehere}}[TheDesk <span id="ver"></span>]</h5>
<span id="det"></span><br>
{{nowver}}<span id="now"></span><br>
{{afterdl}}<br>
<button id="update" class="waves-effect btn" onclick="update('true')">{{download}}</button>
<p id="prog"></p>
<div class="progress">
<div class="determinate" style="width: 0%"></div>
</div><br>
{{cdn}}<br>
{{releasenote1}}<a href="https://github.com/cutls/TheDesk/blob/master/LATEST.md">GitHub</a>{{releasenote2}}<br><br>
{{skipupd}}(<a onclick="window.close();" class="pointer">{{nexttl}}</a>/<a onclick="nextv();" class="pointer">{{nextver}}</a>)<br>
<a onclick="quit()" class="pointer">{{endthedesk}}</a><br>
<a onclick="about()" class="pointer">{{about}}</a><br>
{{problem1}}<a href="https://thedesk.top">TheDesk HP</a>{{problem2}}
<script type="text/javascript" src="./js/common/about.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>
<script>
var electron = require("electron");
var ipc = electron.ipcRenderer;
verck();
function update(sel){
$("#prog").text("");
ipc.send('download-btn', [sel,enc(localStorage.getItem("next-ver"))]);
}
function quit(){
ipc.send('quit', 'go');
}
ipc.on('prog', function (event, arg) {
console.log(arg);
$(".determinate").css('width',arg*100+"%");
$("#prog").text("{{dlnow}}:"+Math.floor(arg*100)+"%");
})
ipc.on('mess', function (event, arg) {
console.log(arg);
$("#prog").text(arg);
})
function verck(){
var start="https://thedesk.top/ver.json";
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);
$("#ver").text(json.desk);
localStorage.setItem("next-ver",json.desk);
$("#det").text(json.detail);
$("#now").text(localStorage.getItem("ver"));
});
}
function nextv(){
localStorage.setItem("new-ver-skip","true");
window.close();
}
function enc(ver){
var ver = ver.replace( /\s/g , "" );
var ver = ver.replace( /\(/g , "-" );
var ver = ver.replace( /\)/g , "" );
var ver = ver.replace( /\[/g , "_" );
var ver = ver.replace( /\]/g , "" );
return ver;
}
</script>