Compare commits

...

105 Commits

Author SHA1 Message Date
Cutls
9e982dca37 Merge pull request #46 from cutls/WIP-(before-CI)
TheDesk Usamin (18.1.2) Released
2019-04-03 13:14:40 +09:00
Cutls
6f25ece72d TheDesk Usamin (18.1.2) Released 2019-04-03 12:59:29 +09:00
Cutls
b28023bec2 Merge pull request #45 from cutls/WIP-(before-CI)
TheDesk Usamin (18.1.2)
2019-04-02 23:51:17 +09:00
Cutls
0df8baa7bf TheDesk Usamin (18.1.2) Plus 2019-04-02 23:42:25 +09:00
Cutls
14c647ca46 Merge pull request #43 from kPherox/patch-1
Fix TweetDeck height
2019-03-29 19:34:46 +09:00
kPherox
f2ff82c810 Fix TweetDeck height 2019-03-29 18:10:15 +09:00
Cutls
2ce9f55f28 edit margin 2019-03-29 02:37:20 +09:00
Cutls
4c3c1ac56e Merge branch 'WIP-(before-CI)' of https://github.com/cutls/TheDesk into WIP-(before-CI) 2019-03-29 02:12:37 +09:00
Cutls
4aa14a14a2 TheDesk Usain (18.1.2) 2019-03-29 02:12:25 +09:00
Cutls
a398fae023 Merge pull request #42 from kPherox/fix-paste-image
Change the method to chack clipboardData type
2019-03-23 17:32:23 +09:00
kPherox
100bd648a9 Fix paste image when image copied from web browser 2019-03-23 05:51:22 +09:00
Cutls
348c5c31c0 Merge pull request #41 from cutls/WIP-(before-CI)
TheDesk Usamin (18.1.1)
2019-03-22 23:11:18 +09:00
Cutls
7556e5560d TheDesk Usamin (18.1.1) 2019-03-22 23:10:23 +09:00
Cutls
931afc3dd2 Merge pull request #40 from kPherox/fix-duplicate-integrated-tl
Fix duplicate fetch in Integrated TL
2019-03-22 14:47:44 +09:00
kPherox
b25244aa9a Fix duplicate websocket connection 2019-03-22 02:59:04 +09:00
kPherox
abe3a2ccb6 Fix duplicate more loading 2019-03-22 02:58:26 +09:00
Cutls
f7a80da21b Uncrop setting 2019-03-21 23:38:15 +09:00
Cutls
e11f0293fe Merge pull request #39 from kPherox/ignore-update-for-brewcask
Homebrew Caskでインストールした時にアップデート通知を無視できるようにする
2019-03-21 22:14:07 +09:00
Cutls
5ec617a778 Merge pull request #38 from kPherox/dont-fire-itunes-event
'itunes-np' リスナが残っているときにnowplayingのイベントを無視する
2019-03-21 22:13:56 +09:00
kPherox
eb86966d33 Ignore update for homebrew cask 2019-03-21 17:01:55 +09:00
kPherox
e44014a1a9 Don't fire 'itunes' event when 'itunes-np' listener is present
Remove `uploadnow` variable as it is no longer needed
2019-03-21 16:01:36 +09:00
Cutls
c38cc6fd5a Merge pull request #37 from cutls/WIP-(before-CI)
package to travis
2019-03-21 14:59:54 +09:00
Cutls
cdc6840808 package to travis 2019-03-21 14:58:33 +09:00
Cutls
abba6fcaa9 Merge pull request #36 from cutls/WIP-(before-CI)
TheDesk Usamin (18.1.0)
2019-03-21 14:24:49 +09:00
Cutls
293a373632 electron some fix 2019-03-21 14:23:10 +09:00
Cutls
5b3dd86a5e Webview some fixed 2019-03-21 14:21:02 +09:00
cutls
d2719cec41 Toot when nowplaying without artworks 2019-03-20 21:45:34 -07:00
Cutls
153f1aacee check something 2019-03-21 13:39:30 +09:00
Cutls
5d0b5e9c94 Fix(lock when posting artwork) 2019-03-21 05:49:59 +09:00
Cutls
a6cb385375 THeDesk Usamin (18.1.0) 2019-03-21 04:43:01 +09:00
Cutls
ba074dd1b0 Column(Stack/Dock) 2019-03-21 04:42:47 +09:00
Cutls
22d54ab2ab Merge pull request #35 from kPherox/fix-itunes-np-template
Fix NowPlaying template for macOS
2019-03-21 02:36:07 +09:00
Cutls
0dfe864f12 Merge pull request #34 from kPherox/fix-duplicate-listener
Fix duplicate listener for iTunes NowPlaying
2019-03-21 02:35:52 +09:00
Cutls
32a16eb2a4 iTunes templete 2019-03-21 02:26:42 +09:00
kPherox
f35056a916 Fix duplicate "itunes-np" listener 2019-03-20 22:58:38 +09:00
kPherox
6e9b0b4d10 Fix template {hz} 2019-03-20 22:57:59 +09:00
Cutls
216191563e readme update 2019-03-20 20:11:03 +09:00
Cutls
cf827e7c25 some fix 2019-03-20 20:08:33 +09:00
cutls
e36379de44 Nowplaying on macOS with an album artwork 2019-03-20 04:02:59 -07:00
Cutls
25662e8736 prepare for itunes-nowplaying artworks 2019-03-20 15:29:13 +09:00
Cutls
e16c9fba43 compare for itunes-artworks 2019-03-20 13:50:00 +09:00
Cutls
7037f63b44 Merge pull request #33 from cutls/WIP-(before-CI)
TheDesk Usamin (18.0.3)
2019-03-19 00:26:46 +09:00
Cutls
f9e3b4129b vis bug/setting bug 2019-03-19 00:24:46 +09:00
Cutls
f0c89a291e Merge pull request #32 from cutls/WIP-(before-CI)
TheDesk Usamin (18.0.3)
2019-03-18 23:29:51 +09:00
Cutls
abee0bb901 TheDesk Usamin (18.0.3) 2019-03-18 23:14:30 +09:00
Cutls
ef5dbcf040 fix some bugs 2019-03-18 23:01:45 +09:00
Cutls
bacac4486b DM TL improved 2019-03-16 19:06:03 +09:00
Cutls
8d4670d8d9 PR 2019-03-16 14:08:38 +09:00
Cutls
b2e10feba8 Merge pull request #31 from cutls/WIP-(before-CI)
TheDesk Usamin (18.0.2)
2019-03-16 14:05:46 +09:00
Cutls
c245f2c5e6 TheDesk Usamin (18.0.2) 2019-03-16 14:05:04 +09:00
Cutls
63821f2c45 reverse some menu items 2019-03-16 03:13:42 +09:00
Cutls
a058659778 Fix reload 2019-03-16 03:10:46 +09:00
Cutls
8c27c43c13 Merge pull request #30 from cutls/WIP-(before-CI)
TheDesk Usamin (18.0.1)
2019-03-16 02:19:22 +09:00
Cutls
da5549d1f0 FIx 2019-03-16 02:17:30 +09:00
Cutls
487a8e7a1b Merge pull request #29 from cutls/WIP-(before-CI)
TheDesk Usamin (18.0.1)
2019-03-16 02:00:06 +09:00
Cutls
9e7788cd62 TheDesk Usamin (18.0.1) 2019-03-16 01:59:29 +09:00
Cutls
ccb652dcf0 Merge pull request #28 from cutls/WIP-(before-CI)
TheDesk Usamin (18.0.0)
2019-03-16 00:45:16 +09:00
Cutls
db673357f1 TheDesk Usamin (18.0.0) 2019-03-16 00:44:18 +09:00
Cutls
f84948b6c3 Add column btns 2019-03-16 00:40:20 +09:00
Cutls
fdc6ec906c 途中でプルリクを処理するためコミット 2019-03-16 00:29:54 +09:00
Cutls
fd83ceef92 Merge pull request #27 from Winding6636/patch-1
カスタムテーマバグ修正
2019-03-16 00:29:14 +09:00
Winding
deab6fd869 カスタムテーマバグ修正
カスタムテーマ適用時に、ユーザーページ(?)のスタイルが崩れているのを確認し修正しました。
2019-03-16 00:16:21 +09:00
Cutls
677f167c8e Vue dev-mode turn off 2019-03-15 20:13:51 +09:00
Cutls
21d8c52829 Vue introduces 2019-03-15 20:12:11 +09:00
Cutls
1c22572048 Merge pull request #26 from cutls/WIP-(before-CI)
TheDesk Miria (17.3.0)
2019-03-15 04:49:22 +09:00
Cutls
d6012ea128 Add "menu" and remove bottom-bar's 8 icons 2019-03-15 04:48:01 +09:00
Cutls
2856aec405 Titlebar(test) 2019-03-13 00:51:07 +09:00
Cutls
28e39cdd3d To fix hidden followers 2019-03-10 14:32:44 +09:00
Cutls
bc8958ac6a Filter languge construction 2019-03-10 13:37:27 +09:00
Cutls
083cb6e619 To fix position of toot box 2019-03-10 00:03:02 +09:00
Cutls
ba018b8568 To set disabled HardwareAcceleration #25 2019-03-09 21:17:54 +09:00
Cutls
1361958e8d Alt+Enter to secondary toot 2019-03-09 20:17:08 +09:00
Cutls
6c69954ec4 #23 Fix: Snap updator bug 2019-03-09 11:24:07 +09:00
Cutls
978d3964d2 Fix Snapcraft(snapd) update notice dialog bug #23 2019-03-09 11:21:21 +09:00
Cutls
dd55236e84 Merge pull request #24 from cutls/WIP-(before-CI)
TheDesk Miria (17.2.0)
2019-03-09 10:16:24 +09:00
Cutls
dd59de1172 Merge branch 'master' into WIP-(before-CI) 2019-03-09 10:16:04 +09:00
Cutls
9e21979839 package-lock.json rebuild 2019-03-09 09:51:26 +09:00
Cutls
8589577995 Improve Misskey login method 2019-03-08 17:14:47 +09:00
Cutls
2216777710 fix bug:themes 2019-03-08 05:18:49 +09:00
Cutls
7950042eb6 add theme and fix for macOS 2019-03-08 03:19:26 +09:00
Cutls
b4674c8b09 language 2019-03-07 12:21:27 +09:00
Cutls
91f9fa6591 final 2019-03-07 01:30:58 +09:00
Cutls
f0869f3086 Merge pull request #22 from cutls/WIP-(before-CI)
config, package to build
2019-03-07 01:15:09 +09:00
Cutls
ae2f30a342 fix: travis/package 2019-03-07 01:14:05 +09:00
Cutls
d8362add72 package.json WIP 2019-03-07 00:55:54 +09:00
Cutls
5b699c1775 TheDesk Miria (17.1.1) 2019-03-07 00:48:18 +09:00
Cutls
412791975c Merge pull request #21 from cutls/WIP-(before-CI)
THeDesk Miria (17.1.0) complete
2019-03-06 21:24:29 +09:00
Cutls
dd2a7b4228 to build 2019-03-06 21:01:36 +09:00
Cutls
30805a2263 Merge branch 'master' of https://github.com/cutls/TheDesk 2019-03-06 21:00:25 +09:00
Cutls
2dcf702d54 fix to master 2019-03-06 21:00:01 +09:00
Cutls
381e661484 THeDesk Miria (17.1.0) complete 2019-03-06 20:56:39 +09:00
Cutls
b6f2feb147 Merge pull request #20 from cutls/WIP-(before-CI)
travis CI and vote for 2.8
2019-03-06 17:18:55 +09:00
Cutls
f45fa97e95 travis CI 2019-03-06 17:17:25 +09:00
Cutls
86d99f40a5 vote(Mastodon 2.8) 2019-03-06 17:08:48 +09:00
Cutls
d5f3354e71 絵文字ボックスが閉じない不具合 #19 2019-03-04 14:49:25 +09:00
Cutls
5134dd274b TheDesk Miria (17.0.2) 2019-02-28 02:02:23 +09:00
Cutls
560494467b TheDesk Miria (17.0.1) 2019-02-27 10:58:29 +09:00
Cutls
75a397aafd TheDesk Miria (17.0.1) 2019-02-27 10:17:35 +09:00
Cutls
4d5916b595 TheDesk Miria (17.0.1) 2019-02-27 01:51:37 +09:00
cutls
3c00ff5695 TheDesk Miria (17.0.1) beta4 2019-02-05 11:33:32 +09:00
cutls
6513fc0e3e last mistake clear 2019-02-01 02:12:43 +09:00
cutls
b16ef4576f mistake clear 2019-02-01 01:53:40 +09:00
cutls
67a7b1e08e mistakes 2019-02-01 01:37:36 +09:00
cutls
092f3bd7d7 travis mac test 2019-02-01 01:33:46 +09:00
cutls
810a08c8e7 TheDesk Miria (17.0.1)-beta3 2019-02-01 01:30:25 +09:00
110 changed files with 11810 additions and 4770 deletions

1
.gitignore vendored
View File

@@ -6,6 +6,7 @@ TheDesk-*
app/build
build
make.js
make_js.js
app/.DS_Store
.DS_Store
.vs/*

View File

@@ -1,7 +1,7 @@
os: windows
language: node_js
node_js:
- '9.9.0'
- '10.15.2'
script: node -v
before_deploy:
- cd app
@@ -28,3 +28,6 @@ deploy:
- TheDesk-setup-ia32.exe
on:
repo: cutls/TheDesk
branches:
only:
- master

View File

@@ -1,6 +1,7 @@
# TheDesk
[![Build Status](https://travis-ci.org/cutls/TheDesk.svg?branch=master)](https://travis-ci.org/cutls/TheDesk)
[![Build Status](https://travis-ci.org/cutls/TheDesk.svg?branch=master)](https://travis-ci.org/cutls/TheDesk)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/thedesk/localized.svg)](https://translate.thedesk.top/project/thedesk)
Mastodon/Misskey client for PC(Windows/Linux/macOS)
オープンソースSNSマストドン/MisskeyのWindows/Linuxクライアント
Download:[TheDesk](https://thedesk.top)
@@ -9,6 +10,11 @@ Contact me(bug report...):GitHub Issues, mention to [Cutls@kirishima.cloud](http
バグレポートなど:GitHub Issuesや[Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls)へのリプ,または#Deskでトゥートして下さい.
### Contribute/コントリビュート
Please make a pull request to ***WIP(before CI)*** brunch
***WIP(before CI)*** ブランチにプルリクエストをお願いします。
## License/ライセンス
[GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)
@@ -50,7 +56,7 @@ Crowdinから翻訳に参加してみませんか: https://translate.thedesk.
* sumchecker(in package.json)
* Ability to read unformated files!(install yourself)
## Contributors/コントリビューター
## Contributors/主なコントリビューター
macOSビルダー
@@ -60,6 +66,10 @@ Linuxビルダー
* [ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja)
iTunes NowPlayingにアルバムアートワークを付けてくれた人
* [kPherox](https://www.kr-kp.com/)
## Build/ビルド
Misskey(misskey.xyz) application token is not in cutls/TheDesk
@@ -84,17 +94,25 @@ WindowsでPython 2.xやVisualC++を一発でインストールできるツール
### 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=3.0.10 --icon=.\app\thedesk.ico --overwrite`
`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=4.0.5 --icon=.\app\thedesk.ico --overwrite`
Linux
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=linux --arch=x64,ia32 --electron-version=3.0.10 --overwrite`
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=linux --arch=x64,ia32 --electron-version=4.0.5 --overwrite`
macOS
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=darwin --arch=all --electron-version=3.0.10 --icon=./app/icon.icns --overwrite`
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=darwin --arch=all --electron-version=4.0.5 --icon=./app/icon.icns --overwrite`
### electron-builder
Config is all on package.json
ビルド設定はすべてpackage.jsonに記載しています。
## Pleroma support
Did you find a bug with Pleroma accounts?
Pleroma **does not** follow Mastodon API rules completely although Pleroma developers say so.
Please write issues to improve TheDesk affinity with Pleroma.
Pleromaは、Mastodon APIとの互換性を謳っていますが、実際には様々な差異があり、TheDeskで不具合が発生することがあります。
Issuesに書いてある問題についてはなるべく対処しますので、ぜひお知らせください。
## See also/詳しく
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)

View File

@@ -9,6 +9,9 @@ html,body{
background-color: var(--bg);
color: var(--color);
}
body{
border: thin solid gray;
}
.btn {
margin: 5px;
text-transform: none;
@@ -41,21 +44,21 @@ option {
display: none;
max-width: 100vw;
max-height: 100vh;
top:0;
background-color: var(--modal);
position: fixed;
z-index: 9;
}
#imagemodal, #videomodal, #tootmodal {
#videomodal, #tootmodal {
background-color: var(--modal);
}
#imagemodal .modal-content {
overflow: hidden;
padding:0;
}
#imagemodal .modal-footer{
overflow-x:scroll;
overflow-y:hidden;
}
#imagewrap {
width: 100%;
height: 100%;
@@ -269,6 +272,18 @@ blockquote:before, .quote:before {
opacity: 1;
}
}
.hide-anime{
animation: hide 0.2s linear 0s;
display:none;
}
@keyframes hide{
from{
opacity: 1;
}
to{
opacity: 0;
}
}
.collapsible-header,.tabs{
background-color: var(--subcolor);
}
@@ -287,7 +302,93 @@ blockquote:before, .quote:before {
border-color:var(--color);
padding:5px;
}
#pickers{
display:flex;
flex-wrap: wrap;
}
#menu{
position:fixed;
z-index:9999;
background-color: var(--box);
width:540px;
top:calc(50% - 150px);
left:calc(50% - 250px);
padding: 5px;
border: thin solid gray;
border-radius:5px;
}
#menu-wrapper{
margin-left:-5px;
display:flex;
}
#left-menu{
width:170px;
}
#left-menu div{
padding-left:5px;
width:100%;
height:50px;
display:flex;
align-items:center;
cursor:pointer;
}
#left-menu div:hover {
background-color: var(--beforehover);
}
#left-menu span{
margin-left:5px;
}
#left-menu div.active{
background-color: var(--emphasized);
}
#right-menu{
width:380px;
max-height:375px;
overflow-y:scroll;
overflow-x:hidden;
padding:5px;
}
#tltype{
display:flex;
flex-wrap: wrap;
}
#tltype .type{
display:flex;
flex-wrap: wrap;
align-items:center;
width:170px;
height:40px;
cursor:pointer;
}
#tltype .type:hover {
background-color: var(--beforehover);
}
#tltype .active{
background-color: var(--emphasized);
}
#tltype i{
font-size:30px;
}
#tltype i.sub-icon{
font-size: 20px;
position: relative;
color: var(--beforehover);
left: -15px;
}
.drag-bar{
cursor:move;
text-align:center;
width:calc(100% + 10px);
border-radius: 5px;
background-color: var(--bg);
margin-left:-5px;
margin-right:-5px;
margin-top:-5px;
font-size:16px;
padding:4px;
}
/*スクロールバー*/
::-webkit-scrollbar {

1
app/css/pickr.css Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,23 +1,26 @@
/*トゥートボックス向けCSS*/
#post-box {
display:none;
position: fixed;
left: 78px;
bottom: -500px;
left: calc(50vw - 150px);
top: 50vh;
background-color: var(--postbox);
border: thin solid gray;
z-index: 501;
width: 300px;
min-width:300px;
max-width:100%;
padding: 5px;
border-radius:5px;
}
.cancel {
font-size: 0.5rem;
color: gray;
cursor: pointer;
position: absolute;
width: 60px;
right: 0px;
right: 2px;
top:4px;
}
.more-show {
display: none;
@@ -51,21 +54,29 @@
filter: blur(50px);
}
#emoji {
position: fixed;
bottom: 40px;
width: 300px;
height: 380px;
z-index: 502;
padding: 5px;
}
#suggest{
max-height:300px;
overflow-y: scroll;
}
#emoji-list {
width: 100%;
height: calc(100% - 130px);
height: 200px;
overflow-y: scroll;
}
#preview-field {
display: none;
}
.preview-img{
width:50px;
max-height:100px;
}
.pi-wrap{
display:inline-block;
width:50px;
max-height:100px;
}
#default-emoji a{
color:white;
margin-right:2px;
@@ -87,7 +98,25 @@
#toot-sec-btn{
width:30px; padding:0; margin-top:10px;
}
#left-side{
float:left;
width:300px;
}
#right-side{
display:none;
float:left;
width:300px;
padding:5px;
}
#poll{
}
.poll-provider{
position: absolute;
height: calc(100% - 90px);
overflow-y: scroll;
top: 90px;
}
/*mini*/
.mini-post .mize{

View File

@@ -1,7 +1,5 @@
.drag-content{
width:300px;
max-width:100%;
height:300px;
text-overflow: ellipsis;
cursor:move;
user-select: none;
@@ -10,32 +8,25 @@
border-radius:5px;
color:var(--color);
padding:3px;
font-family:Open Sans;
font-size:20px;
flex-grow:1;
text-align: center;
padding:10px;
display:grid;
grid-template-columns: 43px 1fr 60px;
grid-template-areas: 'sorticon sorttitle sorttitle' 'sorticon sortacct sortaction';
}
#sort{
display:flex;
flex-direction:row;
overflow-x:scroll;
display: flex;
width:100vw;
.sorticon {
grid-area:sorticon;
}
#sort-box{
position:absolute;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width:100vw;
height:calc(100vh - 40px);
background-color: rgba(0, 0, 0, 0.8);
z-index:10002;
.sorticon i{
font-size:43px;
}
#sort-box button{
background-color: var(--notfbox);
color:var(--color);
.sorttitle {
margin-left:5px;
grid-area:sorttitle;
}
.sortacct {
margin-left:5px;
grid-area:sortacct;
}
.sortaction {
margin-left:5px;
grid-area:sortaction;
}

View File

@@ -15,11 +15,14 @@
--postbox:white;
--modalfooter:#fafafa;
}
#imagemodal{
background: url("../img/pixel.white.svg");
}
.blacktheme {
--bg:#212121;
--drag:rgba(0, 0, 0, 0.8);
--color:white;
--beforehover:#e0e0e0;
--beforehover:#9e9e9e;
--modal:black;
--subcolor:#212121;
--box:#424242;
@@ -32,11 +35,14 @@
--postbox:#424242;
--modalfooter:#212121;
}
.blacktheme #imagemodal{
background: url("../img/pixel.svg");
}
.indigotheme {
--bg:#031833;
--drag:rgba(0, 0, 0, 0.8);
--color:white;
--beforehover:#e0e0e0;
--beforehover:#9e9e9e;
--modal:#0d1351;
--subcolor:#0d1351;
--shared:#004d40;
@@ -49,11 +55,14 @@
--postbox:#1a237e;
--modalfooter:#031833;
}
.indigotheme #imagemodal{
background: url("../img/pixel.svg");
}
.browntheme {
--bg:#261411;
--drag:rgba(0, 0, 0, 0.8);
--color:white;
--beforehover:#e0e0e0;
--beforehover:#9e9e9e;
--modal:#261411;
--subcolor:#4e342e;
--shared:#004d40;
@@ -66,6 +75,9 @@
--postbox:#4e342e;
--modalfooter:#261411;
}
.browntheme #imagemodal{
background: url("../img/pixel.svg");
}
.greentheme{
--bg:#c8e6c9;
--drag:rgba(255, 255, 255, 0.8);
@@ -82,4 +94,7 @@
--active:#e6ee9c;
--postbox:#a5d6a7;
--modalfooter:#81c784;
}
.greentheme #imagemodal{
background: url("../img/pixel.white.svg");
}

View File

@@ -86,7 +86,7 @@
font-family:Open Sans;
font-size:15px;
}
@media screen and (max-width: 1344px) {
@media screen and (max-width: 890px) {
.btnsgroup .grouptitle{ display: none; }
#tips,#tips-menu{ display: none; }
}
@@ -108,9 +108,22 @@ iframe {
.box {
overflow: hidden;
min-width: 300px;
height: 100vh;
flex: 1;
border-top:none;
display:flex;
flex-direction: column;
margin-bottom: -10px;
}
.img_FTL{
display:none;
}
.bbcode_FTL{
display:none;
}
.boxIn{
height:100%;
border: thin solid gray;
overflow: hidden;
}
.box .pin,#his-data .pin{
display:none;
@@ -130,7 +143,11 @@ iframe {
.faicon_FTL{
display:none;
}
.tl-box{ height:calc(100% - 40px); overflow-y:scroll; overflow-x:hidden }
.tl-box{
position:relative;
height:calc(100% - 40px);
overflow-y:scroll;
overflow-x:hidden }
.additional {
overflow-x: scroll;
width: 100%;
@@ -138,6 +155,12 @@ iframe {
.media-filter .nomedia{
display:none;
}
.bt-filter .shared{
display:none;
}
.except-bt-filter .unshared{
display:none;
}
.cvo {
user-select: text;
padding-left: 5px;
@@ -223,6 +246,9 @@ grid-area: toot;
margin:2px;
grid-area: side;
}
.btn-flat{
color:var(--color);
}
.area-side i{
margin-left:10px;
}
@@ -232,11 +258,16 @@ grid-area: toot;
.action i{
font-size:1.2rem;
margin-right:2px;
}
.action .fa-quote-right{
margin-top: 2px;
}
.actct{
color:var(--beforehover);
}
.action i:hover{
.actct:hover{
color:var(--color);
transition: 1s;
transition: 0.5s;
}
.gray {
@@ -251,6 +282,7 @@ grid-area: toot;
.toot-img {
object-fit: cover;
width: 100%;
margin-right:1px;
}
.toot img:not(.emoji-img) {
max-width: 100%;
@@ -404,10 +436,6 @@ p:not(:last-child){
max-height: 190px;
overflow-y: scroll;
}
.u-url {
color: var(--color);
cursor: text;
}
.type-b{
display:none;
}
@@ -420,9 +448,6 @@ p:not(:last-child){
bottom:0px;
right:0px;
}
.btn-flat{
color:var(--color);
}
.toot a span.ellipsis:after{
content:"...";
}
@@ -459,4 +484,57 @@ p:not(:last-child){
overflow-y: scroll;
overflow-x: hidden;
max-height: 200px;
}
}
.votebtn{
border: 1px solid;
color: var(--bg);
background-color: var(--beforehover);
cursor:pointer;
width: 50px;
padding: 2px;
display: inline-block;
text-align: center;
margin-top: 5px;
border-radius: 10px;
transition-duration: 0.5s;
}
.votebtn:hover{
background-color:var(--color);
}
@keyframes fadeInDown {
from {
opacity: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
}
to {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
@keyframes fadeInLeft {
from {
opacity: 0;
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
}
to {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
.box-anime {
animation-duration: 1s;
animation-name: fadeInLeft;
}
.cvo-anime {
animation-duration: 0.1s;
animation-name: fadeInDown;
}

View File

@@ -1,7 +1,7 @@
/*アイコンをクリックした時とかにでてくるユーザーデータ*/
#his-data {
background-repeat: no-repeat;
background-image: url('/img/loading.svg');
background-image: url('../../loading.svg');
overflow-y: hidden;
}
#his-name{

11
app/img/pixel.svg Normal file
View File

@@ -0,0 +1,11 @@
<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<pattern id="pp" x="0" y="0" width="30" height="30" patternUnits="userSpaceOnUse">
<rect x="0" y="0" width="15" height="15" fill="#616161" />
<rect x="0" y="15" width="15" height="15" fill="#000000" />
<rect x="15" y="15" width="15" height="15" fill="#616161" />
<rect x="15" y="0" width="15" height="15" fill="#000000" />
</pattern>
</defs>
<rect width="300" height="300" fill="url(#pp)" />
</svg>

After

Width:  |  Height:  |  Size: 503 B

11
app/img/pixel.white.svg Normal file
View File

@@ -0,0 +1,11 @@
<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<pattern id="pp" x="0" y="0" width="30" height="30" patternUnits="userSpaceOnUse">
<rect x="0" y="0" width="15" height="15" fill="#e0e0e0" />
<rect x="0" y="15" width="15" height="15" fill="#ffffff" />
<rect x="15" y="15" width="15" height="15" fill="#e0e0e0" />
<rect x="15" y="0" width="15" height="15" fill="#ffffff" />
</pattern>
</defs>
<rect width="300" height="300" fill="url(#pp)" />
</svg>

After

Width:  |  Height:  |  Size: 503 B

View File

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

View File

@@ -29,6 +29,13 @@ $(function($) {
return false;
}
}
//Alt+Enter:セカンダリー
if (event.metaKey || event.altKey && wv) {
if (e.keyCode === 13) {
sec();
return false;
}
}
//Shift+Space:Markdownゼロ幅スペース
if (event.shiftKey) {
@@ -85,6 +92,7 @@ $(function($) {
if (e.keyCode === 88) {
if (!$("#post-box").hasClass("appear")) {
show();
$('textarea').focus();
} else {
hide();
}

View File

@@ -1,5 +1,6 @@
//バージョンチェッカー
function verck(ver,winstore) {
function verck(ver) {
console.log("Welcome")
if(localStorage.getItem("ver")!=ver){
localStorage.setItem("ver", ver);
console.log("Thank you for your update");
@@ -13,10 +14,81 @@ function verck(ver,winstore) {
verp=verp.replace( ')', '');
verp=verp.replace( ' ', '_');
console.log(verp);
$("#release-"+verp).show();
if(lang.language=="ja"){
$("#release-"+verp).show();
}else{
$("#release-en").show();
}
});
}
var electron = require("electron");
var remote=electron.remote;
var dialog=remote.dialog;
var platform=remote.process.platform;
if(platform=="win32"){
const options = {
type: 'info',
title: "Select your platform",
message: lang.lang_version_platform,
buttons: [lang.lang_no,lang.lang_yesno]
}
if(!localStorage.getItem("winstore")){
dialog.showMessageBox(options, function(arg) {
if(arg==1){
localStorage.setItem("winstore","winstore")
}else{
localStorage.setItem("winstore","localinstall")
}
});
}
}else if(platform=="linux"){
if(localStorage.getItem("winstore")=="unix"){
localStorage.removeItem("winstore")
}
if(!localStorage.getItem("winstore")){
const options = {
type: 'info',
title: "Select your platform",
message: lang.lang_version_platform_linux,
buttons: [lang.lang_no,lang.lang_yesno]
}
dialog.showMessageBox(options, function(arg) {
if(arg==1){
localStorage.setItem("winstore","snapcraft")
}else{
localStorage.setItem("winstore","localinstall")
}
});
}
}else if(platform=="darwin"){
if(localStorage.getItem("winstore")=="unix"){
localStorage.removeItem("winstore")
}
if(!localStorage.getItem("winstore")){
const options = {
type: 'info',
title: "Select your platform",
message: lang.lang_version_platform_mac,
buttons: [lang.lang_no,lang.lang_yesno]
}
dialog.showMessageBox(options, function(arg) {
if(arg==1){
localStorage.setItem("winstore","brewcask")
}else{
localStorage.setItem("winstore","localinstall")
}
});
}
}else{
localStorage.setItem("winstore","unix")
}
if(localStorage.getItem("winstore")=="brewcask" || localStorage.getItem("winstore")=="snapcraft" || localStorage.getItem("winstore")=="winstore"){
var winstore=true;
}else{
var winstore=false;
}
var l = 5;
// 生成する文字列に含める文字セット
var c = "abcdefghijklmnopqrstuvwxyz0123456789";
@@ -46,7 +118,7 @@ function verck(ver,winstore) {
}
if (newest == ver) {
todo(lang.lang_version_usever.replace("{{ver}}" ,mess.desk));
//betaかWInstoreならアプデチェックしない
//betaかWinstoreならアプデチェックしない
} else if (ver.indexOf("beta")!=-1 || winstore) {
}else{
@@ -56,6 +128,7 @@ function verck(ver,winstore) {
var ipc = electron.ipcRenderer;
ipc.send('update', "true");
}else{
console.log(lang.lang_version_skipver);
todo(lang.lang_version_skipver);
}
}else{
@@ -124,10 +197,14 @@ function verck(ver,winstore) {
}
}
});
}
var infostreaming=false;
function infowebsocket(){
infows = new WebSocket("wss://thedesk.top/ws/");
infows.onopen = function(mess) {
console.log(tlid + ":Connect Streaming Info:");
console.log(mess);
infostreaming=true;
}
infows.onmessage = function(mess) {
console.log(":Receive Streaming:");
@@ -173,11 +250,19 @@ function verck(ver,winstore) {
}
}
infows.onerror = function(error) {
infostreaming=false;
console.error("Error closing:info");
console.error(error);
return false;
};
infows.onclose = function() {
infostreaming=false;
console.error("Closing:info");
};
}
}
setInterval(function(){
if(!infostreaming){
console.log("try to connect")
infowebsocket();
}
}, 10000);

View File

@@ -20,8 +20,7 @@ if(lang=="ja"){
place:"場所",
symbol:"記号"
};
var lang_defaultemojis_text="{{cat}}の絵文字";
}else if(lang=="en"){
}else{
var defaultemojiname={
activity:"Activities",
flag:"Flags",
@@ -32,7 +31,6 @@ if(lang=="ja"){
place:"Places",
symbol:"Symbols"
};
var lang_defaultemojis_text="Emojis of {{cat}}";
}
function defaultEmoji(target){
@@ -43,7 +41,8 @@ function defaultEmoji(target){
emojis = emojis + '<a onclick="defEmoji(\''+emoji["shortcode"]+'\')" class="pointer"><span style="width: 20px; height: 20px; display: inline-block; background-image: url(\'../../img/sheet.png\'); background-size: 4900%; background-position: '+emoji["css"]+';"></span></a>';
});
$("#emoji-list").html(emojis);
$("#now-emoji").text(lang_defaultemojis_text.replace("{{cat}}" ,defaultemojiname[target]));
$("#now-emoji").text(lang.lang_defaultemojis_text.replace("{{cat}}" ,defaultemojiname[target]));
console.log(target);
$(".emoji-control").addClass("hide");
}
function customEmoji(){
@@ -71,7 +70,7 @@ function defEmoji(target){
$("#textarea").focus();
var selin = $("#textarea").prop('selectionStart');
if(!selin){
selin=0;
selin=0;
}
localStorage.setItem("cursor", selin);
}

View File

@@ -21,6 +21,9 @@ var lang={
//common/version.js
"lang_version_usever":"No update is found({{ver}})",
"lang_version_skipver":"Update was ignored.",
"lang_version_platform":"Was this software installed at Microsoft Store? When select 'yes', any update was ignored.",
"lang_version_platform_linux":"Was this software installed at Snapcraft(snapd)? When select 'yes', any update was ignored.",
"lang_version_platform_mac":"Was this software installed at Homebrew Cask? When select 'yes', any update was ignored.",
//login
//login/login.js
"lang_login_noauth":"Show TL of unlogined accounts",
@@ -39,9 +42,11 @@ var lang={
//post/emoji.js
"lang_emoji_get":"Get emojis",
"lang_emoji_custom":"Custom emojis",
"lang_defaultemojis_text":"Emojis about {{cat}}",
//post/img.js
"lang_postimg_previewdis":"cannot preview",
"lang_postimg_aftupload":"You cannot change accounts after uploading.",
"lang_postimg_delete":"Delete this image.",
//post/post.js
"lang_post_tagTL":"This toot does not contain a default tag. This toot will not be shown on Local TL. Continue?",
"lang_post_tagVis":"This toot(not 'public' toot) is not shown on this tag's TL.",
@@ -98,7 +103,8 @@ var lang={
"lang_tags_always":"Always toots with ",
"lang_tags_realtime":"Tag-stream toot",
"lang_tags_tagunpin":"Unpin {{tag}}",
"lang_tags_tagwarn":"When you toot without {{tag}}, tag-streaming mode will be off.",
"lang_tags_unrealtime":"Disable TsT",
"lang_tags_tagwarn":"Auto complete {{tag}}, if toot without {{tag}}",
//tl/tl.js
"lang_tl_media":"Media",
"lang_tl_reconnect":"Reconnect to streaming API",
@@ -117,6 +123,12 @@ var lang={
"lang_layout_dm":"Direct Message",
"lang_layout_webviewmode":"Prefer WebView",
"lang_excluded":"Excluded type of notification",
"lang_layout_excludingbt":"Show BT mode(OFF/Exclude BT/Only BT)",
"lang_layout_leftFold":"Stack to the left",
"lang_layout_leftUnfold":"Dock on the right",
//ui/sort.js
"lang_sort_gothis":"Go to this column",
"lang_sort_remthis":"Delete this column",
//ui/spotify.js
"lang_spotify_img":"Attach an album artwork",
"lang_spotify_imgno":"Not attach an album artwork",
@@ -141,6 +153,7 @@ var lang={
"lang_parse_faved":" favourited your toot",
"lang_parse_bted":" boosted your toot",
"lang_parse_btedsimple":" boosted",
"lang_parse_polled":"'s poll",
"lang_parse_notftime":"Actioned at",
"lang_parse_cwshow":"Show",
"lang_parse_fulltext":"Full size text:",
@@ -172,6 +185,11 @@ var lang={
"lang_parse_clientemp":"emphasized(/not emphasized)",
"lang_parse_clientmute":"muted",
"lang_parse_mute":" will be muted. You can remove on preferences.",
"lang_parse_voted":"Voted",
"lang_parse_vote":"Voted",
"lang_parse_unvoted":"Show the result without voting",
"lang_parse_endedvote":"Expired",
"lang_parse_thread":"Show thread",
//misskey
"lang_misskeyparse_renote":"Repost",
"lang_misskeyparse_renoteqt":"Renote",
@@ -202,12 +220,14 @@ var lang={
"lang_setting_selt":"Auto fold:{{set1}} lines and above, {{set2}} letters and above",
"lang_setting_autocw":"Auto CW:{{set1}} lines and above, {{set2}} letters and above",
"lang_setting_width":"Minimam width:{{set}}",
"lang_setting_fixwidth":"TweetDeck fixed width:{{set}}px",
"lang_setting_img":"After posting an image:{{set}}",
"lang_setting_font":"Fonts:{{set}}",
"lang_setting_default":"default font",
"lang_setting_size":"Font size:{{set}}px",
"lang_setting_imgheight":"Image height:{{set}}px",
"lang_setting_ticker":"#InstanceTicker:{{set}}px",
"lang_setting_animation":"Animation: {{set}}",
"lang_setting_tag":"Tag TL:{{set}}",
"lang_setting_boxConfirm":"Post box:{{set}}",
"lang_setting_ul":"Native locale:{{set}}",

View File

@@ -1,7 +1,6 @@
//commonError
var lang={
"language":"ja",
//commonError
"lang_toot":"トゥート",
"lang_there":"あり",
"lang_nothing":"なし",
@@ -22,6 +21,9 @@ var lang={
//common/version.js
"lang_version_usever":"お使いのバージョン{{ver}}は最新です。",
"lang_version_skipver":"アップデートはスキップされました。",
"lang_version_platform":"このソフトウェアはMicrosoft Storeからダウンロードされましたか(「はい」を選択すると次回からアップデート通知を無視します。)",
"lang_version_platform_linux":"このソフトウェアはSnapcraft(snapd)からインストールしましたか?(「はい」を選択すると次回からアップデート通知を無視します。)",
"lang_version_platform_mac":"このソフトウェアはHomebrew Caskからインストールしましたか(「はい」を選択すると次回からアップデート通知を無視します。)",
//login
//login/login.js
"lang_login_noauth":"認証せずに見る",
@@ -40,9 +42,11 @@ var lang={
//post/emoji.js
"lang_emoji_get":"絵文字リストを取得",
"lang_emoji_custom":"カスタム絵文字",
"lang_defaultemojis_text":"{{cat}}の絵文字",
//post/img.js
"lang_postimg_previewdis":"プレビューできません。",
"lang_postimg_aftupload":"アップロード後はアカウントを切り替えられません。",
"lang_postimg_delete":"この画像を削除します",
//post/post.js
"lang_post_tagTL":"デフォルトタグが挿入されていません。このまま投稿するとローカルには表示されません。",
"lang_post_tagVis":"公開範囲が「公開」以外だと、タグTLに表示されません。(一部インスタンスを除く)",
@@ -99,10 +103,13 @@ var lang={
"lang_tags_always":"常に",
"lang_tags_realtime":"実況",
"lang_tags_tagunpin":"{{tag}}をよく使うタグから削除",
"lang_tags_tagwarn":"次に{{tag}}なしでトゥートするまで全てのトゥートに{{tag}}が付与されます。",
"lang_tags_unrealtime":"実況解除",
"lang_tags_tagwarn":"{{tag}}がない場合自動で補完されます。",
//tl/tl.js
"lang_tl_media":"メディア",
"lang_tl_reconnect":"Streamingに再接続しました",
//ui/img.js
"lang_img_DLDone":"ダウンロード先:",
//ui/layout.js
"lang_layout_gotop":"一番上へ。アイコンが赤のときはストリーミングに接続できていません。F5等で再読込をお試し下さい。",
"lang_layout_thisacct":"このアカウントの{{notf}}",
@@ -118,6 +125,12 @@ var lang={
"lang_layout_dm":"ダイレクトメッセージ",
"lang_layout_webviewmode":"WebView優先",
"lang_excluded":"除外する通知",
"lang_layout_excludingbt":"BT表示(OFF/BT除外/BTのみ)",
"lang_layout_leftFold":"左へ重ねる",
"lang_layout_leftUnfold":"右へ出す",
//ui/sort.js
"lang_sort_gothis":"このカラムへ",
"lang_sort_remthis":"このカラムを削除",
//ui/spotify.js
"lang_spotify_img":"アルバムアートワークを添付します。",
"lang_spotify_imgno":"アルバムアートワークを添付しません。",
@@ -142,6 +155,7 @@ var lang={
"lang_parse_faved":"がお気に入り登録しました",
"lang_parse_bted":"がブーストしました",
"lang_parse_btedsimple":"がブースト",
"lang_parse_polled":"のアンケート",
"lang_parse_notftime":"通知された時間",
"lang_parse_cwshow":"見る",
"lang_parse_fulltext":"以下全文",
@@ -173,6 +187,11 @@ var lang={
"lang_parse_clientemp":"強調表示/解除",
"lang_parse_clientmute":"ミュート",
"lang_parse_mute":"ミュートします。設定から解除できます。",
"lang_parse_voted":"投票済みです",
"lang_parse_vote":"投票",
"lang_parse_unvoted":"結果だけ見る",
"lang_parse_endedvote":"終了済み",
"lang_parse_thread":"会話を表示",
//misskey
"lang_misskeyparse_renote":"再投稿",
"lang_misskeyparse_renoteqt":"引用",
@@ -203,12 +222,14 @@ var lang={
"lang_setting_selt":"{{set1}}行以上または{{set2}}文字以上でテキストを隠します。",
"lang_setting_autocw":"{{set1}}行以上または{{set2}}文字以上で警告を表示します。",
"lang_setting_width":"横幅最低を{{set}}pxに設定しました。",
"lang_setting_fixwidth":"TweetDeckの横幅を{{set}}pxに設定しました。",
"lang_setting_img":"画像投稿後の設定を「{{set}}」に設定しました。",
"lang_setting_font":"フォントを{{set}}に設定しました。",
"lang_setting_default":"デフォルト",
"lang_setting_size":"フォントサイズを{{set}}pxに設定しました。",
"lang_setting_imgheight":"画像高さを{{set}}pxに設定しました。",
"lang_setting_ticker":"#InstanceTicker使用を{{set}}に設定しました。",
"lang_setting_animation":"アニメーションを{{set}}に設定しました。",
"lang_setting_tag":"タグの取得範囲を「{{set}}」に設定しました。",
"lang_setting_boxConfirm":"投稿ボックスを{{set}}",
"lang_setting_ul":"独自ロケール設定を{{set}}に設定しました。",

View File

206
app/js/lang/lang.ps.js Normal file
View File

@@ -0,0 +1,206 @@
var lang={
"language": "crwdns1960:0crwdne1960:0",
"lang_toot": "crwdns1962:0crwdne1962:0",
"lang_there": "crwdns1964:0crwdne1964:0",
"lang_nothing": "crwdns1966:0crwdne1966:0",
"lang_yesno": "crwdns1968:0crwdne1968:0",
"lang_no": "crwdns1970:0crwdne1970:0",
"lang_progress": "crwdns1972:0crwdne1972:0",
"lang_edit": "crwdns1974:0crwdne1974:0",
"lang_del": "crwdns1976:0crwdne1976:0",
"lang_add": "crwdns1978:0crwdne1978:0",
"lang_fatalerroroccured": "crwdns1980:0crwdne1980:0",
"lang_speech": "crwdns1982:0crwdne1982:0",
"lang_lang": "crwdns1984:0crwdne1984:0",
"lang_langlocale": "crwdns1986:0crwdne1986:0",
"lang_back": "crwdns1988:0crwdne1988:0",
"lang_set": "crwdns1990:0crwdne1990:0",
"lang_langadd": "crwdns2364:0crwdne2364:0",
"lang_version_usever": "crwdns1994:0{{ver}}crwdne1994:0",
"lang_version_skipver": "crwdns1996:0crwdne1996:0",
"lang_login_noauth": "crwdns1998:0crwdne1998:0",
"lang_manager_info": "crwdns2000:0crwdne2000:0",
"lang_manager_refresh": "crwdns2002:0crwdne2002:0",
"lang_manager_delete": "crwdns2004:0crwdne2004:0",
"lang_manager_color": "crwdns2006:0crwdne2006:0",
"lang_manager_confirm": "crwdns2008:0crwdne2008:0",
"lang_manager_mainAcct": "crwdns2010:0crwdne2010:0",
"lang_manager_def": "crwdns2012:0crwdne2012:0",
"lang_manager_none": "crwdns2014:0crwdne2014:0",
"lang_manager_godev": "crwdns2016:0crwdne2016:0",
"lang_bbmd_misskey": "crwdns2018:0crwdne2018:0",
"lang_emoji_get": "crwdns2020:0crwdne2020:0",
"lang_emoji_custom": "crwdns2022:0crwdne2022:0",
"lang_defaultemojis_text": "crwdns2388:0{{cat}}crwdne2388:0",
"lang_postimg_previewdis": "crwdns2024:0crwdne2024:0",
"lang_postimg_aftupload": "crwdns2026:0crwdne2026:0",
"lang_post_tagTL": "crwdns2028:0crwdne2028:0",
"lang_post_tagVis": "crwdns2030:0crwdne2030:0",
"lang_post_cwtitle": "crwdns2032:0crwdne2032:0",
"lang_post_cwtxt": "crwdns2034:0crwdne2034:0",
"lang_post_btn1": "crwdns2036:0crwdne2036:0",
"lang_post_btn2": "crwdns2038:0crwdne2038:0",
"lang_post_btn3": "crwdns2040:0crwdne2040:0",
"lang_status_favWarn": "crwdns2042:0crwdne2042:0",
"lang_status_btWarn": "crwdns2044:0crwdne2044:0",
"lang_status_follow": "crwdns2046:0crwdne2046:0",
"lang_status_unfollow": "crwdns2048:0crwdne2048:0",
"lang_status_block": "crwdns2050:0crwdne2050:0",
"lang_status_unblock": "crwdns2052:0crwdne2052:0",
"lang_status_mute": "crwdns2054:0crwdne2054:0",
"lang_status_unmute": "crwdns2056:0crwdne2056:0",
"lang_status_redraft": "crwdns2058:0crwdne2058:0",
"lang_status_emphas": "crwdns2060:0crwdne2060:0",
"lang_status_unemphas": "crwdns2062:0crwdne2062:0",
"lang_status_unendorse": "crwdns2064:0crwdne2064:0",
"lang_status_endorse": "crwdns2066:0crwdne2066:0",
"lang_suggest_nodata": "crwdns2068:0crwdne2068:0",
"lang_usetxtbox_reply": "crwdns2070:0crwdne2070:0",
"lang_cards_check": "crwdns2072:0crwdne2072:0",
"lang_cards_pip": "crwdns2074:0crwdne2074:0",
"lang_details_nodata": "crwdns2076:0crwdne2076:0",
"lang_details_filtered": "crwdns2078:0crwdne2078:0",
"lang_details_embed": "crwdns2080:0crwdne2080:0",
"lang_details_url": "crwdns2082:0crwdne2082:0",
"lang_details_txt": "crwdns2084:0crwdne2084:0",
"lang_filter_nodata": "crwdns2086:0crwdne2086:0",
"lang_filter_errordegree": "crwdns2088:0crwdne2088:0",
"lang_list_nodata": "crwdns2090:0crwdne2090:0",
"lang_list_show": "crwdns2092:0crwdne2092:0",
"lang_list_users": "crwdns2094:0crwdne2094:0",
"lang_list_nouser": "crwdns2096:0crwdne2096:0",
"lang_list_add": "crwdns2098:0crwdne2098:0",
"lang_list_remove": "crwdns2100:0crwdne2100:0",
"lang_notf_new": "crwdns2102:0crwdne2102:0",
"lang_speech_refresh": "crwdns2348:0crwdne2348:0",
"lang_src_ts": "crwdns2106:0crwdne2106:0",
"lang_src_people": "crwdns2108:0crwdne2108:0",
"lang_tags_always": "crwdns2110:0crwdne2110:0",
"lang_tags_realtime": "crwdns2112:0crwdne2112:0",
"lang_tags_tagunpin": "crwdns2114:0{{tag}}crwdne2114:0",
"lang_tags_tagwarn": "crwdns2116:0{{tag}}crwdne2116:0",
"lang_tl_media": "crwdns2118:0crwdne2118:0",
"lang_tl_reconnect": "crwdns2120:0crwdne2120:0",
"lang_layout_gotop": "crwdns2122:0crwdne2122:0",
"lang_layout_thisacct": "crwdns2124:0{{notf}}crwdne2124:0",
"lang_layout_delthis": "crwdns2126:0crwdne2126:0",
"lang_layout_setthis": "crwdns2128:0crwdne2128:0",
"lang_layout_mediafil": "crwdns2130:0crwdne2130:0",
"lang_layout_linkana": "crwdns2132:0crwdne2132:0",
"lang_layout_linkanades": "crwdns2134:0crwdne2134:0",
"lang_layout_tts": "crwdns2136:0crwdne2136:0",
"lang_layout_reconnect": "crwdns2138:0crwdne2138:0",
"lang_layout_headercolor": "crwdns2140:0crwdne2140:0",
"lang_layout_nodata": "crwdns2142:0crwdne2142:0",
"lang_layout_dm": "crwdns2144:0crwdne2144:0",
"lang_layout_webviewmode": "crwdns2146:0crwdne2146:0",
"lang_excluded": "crwdns2368:0crwdne2368:0",
"lang_layout_excludingbt": "crwdns2390:0crwdne2390:0",
"lang_spotify_img": "crwdns2148:0crwdne2148:0",
"lang_spotify_imgno": "crwdns2150:0crwdne2150:0",
"lang_spotify_acct": "crwdns2152:0crwdne2152:0",
"lang_spotify_np": "crwdns2154:0crwdne2154:0",
"lang_setting_npprovide": "crwdns2370:0{{set}}crwdne2370:0",
"lang_hisdata_frcreq": "crwdns2156:0crwdne2156:0",
"lang_hisdata_frcwarn": "crwdns2158:0crwdne2158:0",
"lang_hisdata_taketime": "crwdns2160:0crwdne2160:0",
"lang_hisdata_notonmisskey": "crwdns2162:0crwdne2162:0",
"lang_showontl_movetxt": "crwdns2164:0crwdne2164:0",
"lang_showontl_movebtn": "crwdns2166:0crwdne2166:0",
"lang_showontl_botacct": "crwdns2168:0[bot]crwdne2168:0",
"lang_showontl_followed": "crwdns2170:0crwdne2170:0",
"lang_showontl_notf": "crwdns2172:0crwdne2172:0",
"lang_showontl_domain": "crwdns2174:0crwdne2174:0",
"lang_showontl_listwarn": "crwdns2176:0crwdne2176:0",
"lang_parse_mentioned": "crwdns2178:0crwdne2178:0",
"lang_parse_faved": "crwdns2180:0crwdne2180:0",
"lang_parse_bted": "crwdns2182:0crwdne2182:0",
"lang_parse_btedsimple": "crwdns2184:0crwdne2184:0",
"lang_parse_notftime": "crwdns2186:0crwdne2186:0",
"lang_parse_cwshow": "crwdns2188:0crwdne2188:0",
"lang_parse_fulltext": "crwdns2190:0crwdne2190:0",
"lang_parse_autofold": "crwdns2192:0crwdne2192:0",
"lang_parse_more": "crwdns2194:0crwdne2194:0",
"lang_parse_url": "crwdns2196:0crwdne2196:0",
"lang_parse_tagTL": "crwdns2198:0{{tag}}crwdne2198:0",
"lang_parse_tagtoot": "crwdns2200:0{{tag}}crwdne2200:0",
"lang_parse_tagpin": "crwdns2202:0{{tag}}crwdne2202:0",
"lang_parse_public": "crwdns2204:0crwdne2204:0",
"lang_parse_unlisted": "crwdns2206:0crwdne2206:0",
"lang_parse_private": "crwdns2208:0crwdne2208:0",
"lang_parse_direct": "crwdns2210:0crwdne2210:0",
"lang_parse_clickcopy": "crwdns2212:0crwdne2212:0",
"lang_parse_clickcopyurl": "crwdns2214:0crwdne2214:0",
"lang_parse_trans": "crwdns2216:0crwdne2216:0",
"lang_parse_replyto": "crwdns2218:0crwdne2218:0",
"lang_parse_bt": "crwdns2220:0crwdne2220:0",
"lang_parse_fav": "crwdns2222:0crwdne2222:0",
"lang_parse_quote": "crwdns2224:0crwdne2224:0",
"lang_parse_del": "crwdns2226:0crwdne2226:0",
"lang_parse_pin": "crwdns2228:0crwdne2228:0",
"lang_parse_det": "crwdns2230:0crwdne2230:0",
"lang_parse_redraft": "crwdns2232:0crwdne2232:0",
"lang_parse_followed": "crwdns2234:0crwdne2234:0",
"lang_parse_clientop": "crwdns2236:0crwdne2236:0",
"lang_parse_clienttxt": "crwdns2238:0crwdne2238:0",
"lang_parse_clientno": "crwdns2240:0crwdne2240:0",
"lang_parse_clientemp": "crwdns2242:0crwdne2242:0",
"lang_parse_clientmute": "crwdns2244:0crwdne2244:0",
"lang_parse_mute": "crwdns2246:0crwdne2246:0",
"lang_parse_voted": "crwdns2392:0crwdne2392:0",
"lang_parse_vote": "crwdns2394:0crwdne2394:0",
"lang_parse_unvoted": "crwdns2396:0crwdne2396:0",
"lang_parse_endedvote": "crwdns2398:0crwdne2398:0",
"lang_misskeyparse_renote": "crwdns2248:0crwdne2248:0",
"lang_misskeyparse_renoteqt": "crwdns2250:0crwdne2250:0",
"lang_misskeyparse_reaction": "crwdns2252:0crwdne2252:0",
"lang_misskeyparse_tagnostr": "crwdns2254:0crwdne2254:0",
"lang_misskeyparse_listnostr": "crwdns2256:0crwdne2256:0",
"lang_misskeyparse_home": "crwdns2258:0crwdne2258:0",
"lang_misskeyparse_followers": "crwdns2260:0crwdne2260:0",
"lang_misskeyparse_specified": "crwdns2262:0crwdne2262:0",
"lang_misskeyparse_qt": "crwdns2264:0crwdne2264:0",
"lang_misskeyparse_renoted": "crwdns2266:0crwdne2266:0",
"lang_misskeyparse_quoted": "crwdns2268:0crwdne2268:0",
"lang_misskeyparse_reacted": "crwdns2372:0crwdne2372:0",
"lang_setting_time": "crwdns2272:0{{set}}crwdne2272:0",
"lang_setting_theme": "crwdns2274:0{{set}}crwdne2274:0",
"lang_setting_nsfw": "crwdns2276:0{{set}}crwdne2276:0",
"lang_setting_cw": "crwdns2278:0{{set}}crwdne2278:0",
"lang_setting_cwtext": "crwdns2280:0{{set}}crwdne2280:0",
"lang_setting_cws": "crwdns2282:0{{set}}crwdne2282:0",
"lang_setting_rp": "crwdns2284:0{{set}}crwdne2284:0",
"lang_setting_vis": "crwdns2286:0{{set}}crwdne2286:0",
"lang_setting_popup": "crwdns2288:0{{set}}crwdne2288:0",
"lang_setting_off": "crwdns2290:0crwdne2290:0",
"lang_setting_s": "crwdns2292:0crwdne2292:0",
"lang_setting_box": "crwdns2294:0{{set}}crwdne2294:0",
"lang_setting_gif": "crwdns2296:0{{set}}crwdne2296:0",
"lang_setting_selt": "crwdns2298:0{{set1}}crwdnd2298:0{{set2}}crwdne2298:0",
"lang_setting_autocw": "crwdns2300:0{{set1}}crwdnd2300:0{{set2}}crwdne2300:0",
"lang_setting_width": "crwdns2302:0{{set}}crwdne2302:0",
"lang_setting_fixwidth": "crwdns2386:0{{set}}crwdne2386:0",
"lang_setting_img": "crwdns2304:0{{set}}crwdne2304:0",
"lang_setting_font": "crwdns2306:0{{set}}crwdne2306:0",
"lang_setting_default": "crwdns2308:0crwdne2308:0",
"lang_setting_size": "crwdns2310:0{{set}}crwdne2310:0",
"lang_setting_imgheight": "crwdns2312:0{{set}}crwdne2312:0",
"lang_setting_ticker": "crwdns2314:0{{set}}crwdne2314:0",
"lang_setting_animation": "crwdns2400:0{{set}}crwdne2400:0",
"lang_setting_tag": "crwdns2316:0{{set}}crwdne2316:0",
"lang_setting_boxConfirm": "crwdns2318:0{{set}}crwdne2318:0",
"lang_setting_ul": "crwdns2320:0{{set}}crwdne2320:0",
"lang_setting_notf": "crwdns2322:0{{set}}crwdne2322:0",
"lang_setting_quote": "crwdns2324:0{{set}}crwdne2324:0",
"lang_setting_via": "crwdns2326:0{{set}}crwdne2326:0",
"lang_setting_mov": "crwdns2328:0{{set}}crwdne2328:0",
"lang_setting_setasread": "crwdns2330:0{{set}}crwdne2330:0",
"lang_setting_main": "crwdns2332:0{{set}}crwdne2332:0",
"lang_setting_sec": "crwdns2334:0{{set}}crwdne2334:0",
"lang_setting_ksref": "crwdns2336:0crwdne2336:0",
"lang_setting_nomuting": "crwdns2338:0crwdne2338:0",
"lang_setting_notftest": "crwdns2340:0crwdne2340:0",
"lang_setting_notftestprof": "crwdns2342:0crwdne2342:0",
"lang_setting_exportwarn": "crwdns2344:0crwdne2344:0",
"lang_setting_importwarn": "crwdns2346:0crwdne2346:0"
}

View File

@@ -1,189 +0,0 @@
var lang_parse_mentioned={
"ja":"が返信しました",
"en":" replied to you"
}
var lang_parse_faved={
"ja":"がお気に入り登録しました",
"en":" favourited your toot"
}
var lang_parse_bted={
"ja":"がブーストしました",
"en":" boosted your toot"
}
var lang_parse_btedsimple={
"ja":"がブースト",
"en":" boosted"
}
var lang_parse_notftime={
"ja":"通知された時間",
"en":"Actioned at"
}
var lang_parse_cwshow={
"ja":"見る",
"en":"Show"
}
var lang_parse_fulltext={
"ja":"以下全文",
"en":"Full size text:"
}
var lang_parse_autofold={
"ja":"自動折り畳み",
"en":"Auto folded"
}
var lang_parse_more={
"ja":"続き...",
"en":"More"
}
var lang_parse_url={
"ja":"URL解析",
"en":"URL Analyzer"
}
var lang_parse_tagTL={
"ja":"{{tag}}のタイムライン",
"en":"Timeline of {{tag}}"
}
var lang_parse_tagtoot={
"ja":"{{tag}}でトゥート",
"en":"Toot with {{tag}}"
}
var lang_parse_tagpin={
"ja":"{{tag}}をよく使うタグへ",
"en":"Pin {{tag}}"
}
var lang_parse_public={
"ja":"公開",
"en":"Public"
}
var lang_parse_unlisted={
"ja":"未収載",
"en":"Unlisted"
}
var lang_parse_private={
"ja":"非公開",
"en":"Private"
}
var lang_parse_direct={
"ja":"ダイレクト",
"en":"Direct"
}
var lang_parse_clickcopy={
"ja":"クリックして本文をコピー",
"en":"Click to copy text of this toot"
}
var lang_parse_clickcopyurl={
"ja":"クリックしてトゥートURLをコピー",
"en":"Click to copy URL of this toot"
}
var lang_parse_trans={
"ja":"このトゥートを日本語に翻訳",
"en":"Translate to Japanese"
}
var lang_parse_replyto={
"ja":"このトゥートに返信",
"en":"Reply to this toot"
}
var lang_parse_bt={
"ja":"このトゥートをブースト",
"en":"Boost this toot"
}
var lang_parse_fav={
"ja":"このトゥートをお気に入り登録",
"en":"Favourite this toot"
}
var lang_parse_quote={
"ja":"このトゥートを引用",
"en":"Quote this toot"
}
var lang_parse_del={
"ja":"このトゥートを削除",
"en":"Delete this toot"
}
var lang_parse_pin={
"ja":"このトゥートをピン留め",
"en":"Pin this toot"
}
var lang_parse_det={
"ja":"詳細(メインアカウント経由)",
"en":"Details via your main account."
}
var lang_parse_redraft={
"ja":"このトゥートを削除して再編集",
"en":"Delete & re-draft"
}
var lang_parse_followed={
"ja":"フォローされました。",
"en":"Followed you"
}
var lang_parse_clientop={
"ja":"クライアント処理",
"en":"Operation of this client"
}
var lang_parse_clienttxt={
"ja":"に対する処理を選択してください。",
"en":" will be"
}
var lang_parse_clientno={
"ja":"何もしない",
"en":"done nothing"
}
var lang_parse_clientemp={
"ja":"強調表示/解除",
"en":"emphasized(/not emphasized)"
}
var lang_parse_clientmute={
"ja":"ミュート",
"en":"muted"
}
var lang_parse_mute={
"ja":"ミュートします。設定から解除できます。",
"en":" will be muted. You can remove on preferences."
}
//misskey
var lang_misskeyparse_renote={
"ja":"再投稿",
"en":"Repost"
}
var lang_misskeyparse_renoteqt={
"ja":"引用",
"en":"Renote"
}
var lang_misskeyparse_reaction={
"ja":"リアクション",
"en":"Reaction"
}
var lang_misskeyparse_tagnostr={
"ja":"タグTLはストリーミング非対応です。",
"en":"No streaming API on Tag TLs"
}
var lang_misskeyparse_listnostr={
"ja":"リストTLはストリーミング非対応です。",
"en":"No streaming API on List TLs"
}
var lang_misskeyparse_home={
"ja":"ホーム",
"en":"Home"
}
var lang_misskeyparse_followers={
"ja":"フォロワー",
"en":"Follower"
}
var lang_misskeyparse_specified={
"ja":"ユーザー指定",
"en":"Specified User"
}
var lang_misskeyparse_qt={
"ja":"MisskeyのRenote(引用モード)中:Ctrl+Shift+Cでクリア",
"en":"Misskey renote(quote) mode:Ctrl+Shift+Enter to clear"
}
var lang_misskeyparse_renoted={
"ja":"がRepost",
"en":" renoted your following post."
}
var lang_misskeyparse_quoted={
"ja":"が引用",
"en":" quoted your following post."
}
var lang_misskeyparse_reaction={
"ja":"がリアクション",
"en":" reacted your following post."
}

View File

@@ -1,152 +0,0 @@
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_cws={
"ja":"標準でCW:{{set}}",
"en":"Always CW on:{{set}}"
}
var lang_setting_rp={
"ja":"リプライ数表示:{{set}}",
"en":"Reply counter:{{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_autocw={
"ja":"{{set1}}行以上または{{set2}}文字以上で警告を表示します。",
"en":"Auto CW:{{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_ticker={
"ja":"#InstanceTicker使用を{{set}}に設定しました。",
"en":"#InstanceTicker:{{set}}px"
}
var lang_setting_tag={
"ja":"タグの取得範囲を「{{set}}」に設定しました。",
"en":"Tag TL:{{set}}"
}
var lang_setting_box={
"ja":"投稿ボックスを{{set}}",
"en":"Post box:{{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":"Action buttons hiding:{{set}}"
}
var lang_setting_setasread={
"ja":"通知カラム存在時新着非表示を{{set}}に設定しました。",
"en":"Notification markers:{{set}}"
}
var lang_setting_main={
"ja":"起動時・投稿時のアカウントを{{set}}に設定しました。",
"en":"Default account:{{set}}"
}
var lang_setting_sec={
"ja":"セカンダリートゥートボタン:{{set}}",
"en":"Secondary toot button:{{set}}"
}
var lang_setting_ksref={
"ja":"キーボードショートカットが更新されました。",
"en":"Keyboard shortcuts are refreshed."
}
var lang_setting_nomuting={
"ja":"ミュートしているクライアントはありません。",
"en":"No client is muted."
}
var lang_setting_notftest={
"ja":"通知テスト",
"en":" Notification test "
}
var lang_setting_notftestprof={
"ja":"アイコンはあなたのアカウントのものです。",
"en":"Your icon is shown."
}
var lang_setting_exportwarn={
"ja":"重要なデータのみエクスポートされます。エクスポートされたデータは外部に公開しないでください。全ての認証データが含まれています。",
"en":"Only important data will be exported. You must keep this data secure."
}
var lang_setting_importwarn={
"ja":"全てのデータがリセットされます。",
"en":"All data will be deleted."
}

View File

@@ -5,15 +5,16 @@
localStorage.removeItem("kirishima")
localStorage.removeItem("imas")
localStorage.removeItem("image");
localStorage.removeItem("stable")
localStorage.setItem("mode_misskey.xyz","misskey")
function ck() {
var main = localStorage.getItem("main");
if(!main){
localStorage.setItem("main",0)
}
var domain = localStorage.getItem("domain_0");
var domainz = localStorage.getItem("domain_0");
var at = localStorage.getItem("acct_0_at");
var oldat = localStorage.getItem(domain + "_at");
var oldat = localStorage.getItem(domainz + "_at");
if(oldat){
console.log("Move to New Account Management System")
var multi = localStorage.getItem("multi");
@@ -40,15 +41,28 @@ function ck() {
}else{
}
}
if (at) {
var multi = localStorage.getItem("multi");
if (!multi) {
var obj = [];
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
} else {
var obj = JSON.parse(multi);
}
Object.keys(obj).forEach(function(key) {
var acct=obj[key];
if(acct.domain){
refresh(key,true)
}
});
console.log(obj);
if (obj[0].domain) {
$("#tl").show();
ticker();
parseColumn();
multiSelector();
} else {
$("#tl").show();
multiSelector();
$("#post-box").hide();
}
}
ck();
@@ -64,7 +78,7 @@ function login(url) {
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({
scopes: 'read write follow',
client_name: "TheDesk(PC)",
@@ -72,7 +86,7 @@ function login(url) {
website: "https://thedesk.top"
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
var auth = "https://" + url + "/oauth/authorize?client_id=" + json[
@@ -83,9 +97,7 @@ function login(url) {
localStorage.setItem("client_secret", json["client_secret"]);
$("#auth").show();
$("#masara").hide();
const {
shell
} = require('electron');
const { shell } = require('electron');
shell.openExternal(auth);
@@ -230,7 +242,7 @@ function getdataAdv(domain, at) {
var avatar=json["avatar"];
//missingがmissingなやつ
if(avatar=="/avatars/original/missing.png"){
avatar="./img/missing.svg";
avatar="../../img/missing.svg";
}
if(json["source"]["privacy"]){
var priv=json["source"]["privacy"];
@@ -261,7 +273,7 @@ function getdataAdv(domain, at) {
});
}
//ユーザーデータ更新
function refresh(target) {
function refresh(target,loadskip) {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
if(obj[target].mode=="misskey"){
@@ -313,8 +325,9 @@ function refresh(target) {
obj[target] = ref;
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
load();
if(!loadskip){
load();
}
});
}
//MarkdownやBBCodeの対応、文字数制限をチェック
@@ -330,7 +343,7 @@ function ckdb(acct_id) {
localStorage.removeItem("post_" + acct_id);
localStorage.removeItem("fav_" + acct_id);
localStorage.removeItem("bt_" + acct_id);
localStorage.removeItem("follow_" + acct_id);
localStorage.removeItem("followlocale_" + acct_id);
if(domain=="kirishima.cloud"){
localStorage.setItem("kirishima", "true");
$("#ranking-btn").show();
@@ -388,7 +401,7 @@ function ckdb(acct_id) {
localStorage.setItem("bt_" + acct_id, json[domain + "_bt"]);
}
if(json[domain + "_follow"]){
localStorage.setItem("follow_" + acct_id, json[domain + "_follow"]);
localStorage.setItem("followlocale_" + acct_id, json[domain + "_follow"]);
}
}
if(localStorage.getItem("mode_" + domain)!="misskey"){
@@ -451,7 +464,8 @@ function multiSelector() {
var list = key * 1 + 1;
if (key == last) {
sel = "selected";
var domain = localStorage.getItem("domain_" + key);
var domain = acct.domain;
localStorage.setItem("domain_" + key, domain);
if(idata[domain+"_letters"]){
$("#textarea").attr("data-length", idata[domain+"_letters"])
}else{
@@ -465,13 +479,20 @@ function multiSelector() {
if(idata[domain+"_glitch"]){
$("#local-button").removeClass("hide")
}
var profimg=localStorage.getItem("prof_"+key);
var profimg = acct.prof;
localStorage.setItem("prof_" + key, profimg);
console.log(profimg);
if(!profimg){
profimg="./img/missing.svg";
profimg="../../img/missing.svg";
}
$("#acct-sel-prof").attr("src",profimg);
$("#toot-post-btn").text(lang.lang_toot+"("+domain+")");
console.log(domain);
if(domain){
var cc="("+domain+")";
}else{
var cc="";
}
$("#toot-post-btn").text(lang.lang_toot+cc);
if(acct.background && acct.background!="def" && acct.text && acct.text!="def"){
$("#toot-post-btn").removeClass("indigo");
$("#toot-post-btn").css("background-color","#"+acct.background);
@@ -501,6 +522,7 @@ function multiSelector() {
$("#add-acct-sel").append('<option value="noauth">'+lang.lang_login_noauth+'</option><option value="webview">Twitter</option>');
}
$('select').material_select('update');
parseColumn();
}
//バージョンエンコ

View File

@@ -60,7 +60,7 @@ function load() {
var electron = require("electron");
var remote=electron.remote;
var platform=remote.process.platform;
if(platform=="win32"){
if(localStorage.getItem("winstore")!="localinstall"){
$("#linux").prop("checked", false);
}else{
$("#linux").prop("checked", true);
@@ -82,7 +82,7 @@ function data(domain) {
$("#ins-user").text("Loading...");
$("#ins-ver").text("Loading...");
$("#ins-name").text("Loading...");
$("#ins-prof").attr('src', "./img/loading.svg");
$("#ins-prof").attr('src', "../../img/loading.svg");
var start = "https://instances.social/api/1.0/instances/show?name=" + domain;
fetch(start, {
method: 'GET',
@@ -175,6 +175,7 @@ function multiDel(target) {
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
load();
//カラムデータコンフリクト
var col = localStorage.getItem("column");
var oldcols = JSON.parse(col);
@@ -199,7 +200,7 @@ function multiDel(target) {
});
var json = JSON.stringify(newcols);
localStorage.setItem("column", json);
load();
}
}
function multiDel2(target) {
@@ -285,7 +286,7 @@ function login(url) {
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({
scopes: 'read write follow',
client_name: "TheDesk(PC)",
@@ -293,7 +294,7 @@ function login(url) {
website: "https://thedesk.top"
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
localStorage.setItem("msky","false");
@@ -325,43 +326,63 @@ function misskeyLogin(url) {
if(!url){
var url=$("#misskey-url").val();
}
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
var start = "https://"+url+"/api/app/create";
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = "json";
localStorage.setItem("msky","true");
httpreq.send(JSON.stringify({
name: "TheDesk(PC)",
description: "Mastodon client for PC",
permission: [
"account-read",
"account-write",
"account/read",
"account/write",
"drive-read",
"drive-write",
"favorite-read",
"favorite-write",
"favorites-read",
"following-read",
"following-write",
"messaging-read",
"messaging-write",
"note-read",
"note-write",
"notification-read",
"notification-write",
"reaction-read",
"reaction-write",
"vote-read",
"vote-write"
]
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
misskeyAuth(url, json.secret)
}
}
}
function misskeyAuth(url, mkc){
var start = "https://"+url+"/api/auth/session/generate";
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
localStorage.setItem("msky","true");
if(url=="misskey.xyz" && misskeytoken){
var mkc=misskeytoken;
localStorage.setItem("mkc",mkc)
}else{
var mkc=$("#misskey-key").val();
localStorage.setItem("mkc",mkc)
if(!mkc){
$("#misskeylogin").show();
$("#misskey-url").val(url);
if(confirm(lang.lang_manager_godev)){
const {
shell
} = require('electron');
console.log("https://"+url+"/dev")
shell.openExternal("https://"+url+"/dev");
shell.openExternal("https://thedesk.top/how-to-login-misskey.html");
}
httpreq.responseType = "json";
return false;
}else{
$("#misskeylogin").hide();
$("#misskey-url").val("");
}
}
localStorage.setItem("mkc",mkc)
localStorage.setItem("msky","true");
httpreq.send(JSON.stringify({
appSecret: mkc
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
const {
@@ -374,11 +395,8 @@ function misskeyLogin(url) {
$("#misskey").prop("checked", false);
localStorage.setItem("domain_tmp",url);
shell.openExternal(json.url);
var electron = require("electron");
}
}
}
//テキストボックスにURL入れた
@@ -406,13 +424,13 @@ function code(code) {
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({
token:code,
appSecret:localStorage.getItem("mkc")
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
var i = sha256(json.accessToken + localStorage.getItem("mkc"));
console.log(json);
@@ -453,7 +471,7 @@ function code(code) {
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({
grant_type: "authorization_code",
redirect_uri: "https://thedesk.top/hello.html",
@@ -462,7 +480,7 @@ function code(code) {
code: code
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
if (json["access_token"]) {
@@ -500,7 +518,7 @@ function getdata(domain, at) {
var avatar=json["avatar"];
//missingがmissingなやつ
if(avatar=="/avatars/original/missing.png"){
avatar="./img/missing.svg";
avatar="../../img/missing.svg";
}
if(json["source"]){
var priv=json["source"]["privacy"];
@@ -594,13 +612,13 @@ function misskeyRefresh(obj,target,url){
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({
username:obj[target].user,
i:localStorage.getItem("at")
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
return;
@@ -659,7 +677,7 @@ function multisel() {
var profimg=localStorage.getItem("prof_"+key);
var domain=localStorage.getItem("domain_"+key);
if(!profimg){
profimg="./img/missing.svg";
profimg="../../img/missing.svg";
}
} else {
sel = "";

View File

@@ -58,9 +58,7 @@
//hrefがhttp/httpsならブラウザで
if(urls){
if (urls[0]) {
const {
shell
} = require('electron');
const {shell} = require('electron');
if(~url.indexOf("thedeks.top")){
//alert("If you recieve this alert, let the developer(Cutls@kirishima.cloud) know it with a screenshot.");
url="https://thedesk.top";
@@ -81,8 +79,7 @@
//よく使うライブラリ
/*マルチバイト用切り出し*/
$.isSurrogatePear = function(upper, lower) {
return 0xD800 <= upper && upper <= 0xDBFF && 0xDC00 <= lower && lower <=
0xDFFF;
return 0xD800 <= upper && upper <= 0xDBFF && 0xDC00 <= lower && lower <= 0xDFFF;
};
$.mb_strlen = function(str) {
var ret = 0;
@@ -172,4 +169,12 @@ function opendev(){
keyCode: '2'
});
*/
}
}
var webviewDom = document.getElementById('webview');
const {
shell
} = require('electron');
webviewDom.addEventListener('new-window', function(e) {
shell.openExternal(e.url);
});

View File

@@ -81,4 +81,80 @@ function formattimeutc(date){
str=str+date.getUTCMinutes()
}
return str;
}
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('custom-css-request', "");
ipc.on('custom-css-response', function (event, arg) {
if(arg==""){ return false; }
var styleNode = document.createElement("style");
styleNode.setAttribute("type","text/css")
var content = document.createTextNode(arg)
styleNode.append(content)
document.getElementsByTagName("head")[0].append(styleNode)
})
ipc.on('theme-css-response', function (event, arg) {
if(arg==""){ return false; }
var styleNode = document.createElement("style");
styleNode.setAttribute("type","text/css")
var content = document.createTextNode(arg)
styleNode.append(content)
document.getElementsByTagName("head")[0].append(styleNode)
})
function makeCID(){
return randomStr(8)+"-"+randomStr(4)+"-"+randomStr(4)+"-"+randomStr(4)+"-"+randomStr(12);
}
function randomStr(l){
// 生成する文字列に含める文字セット
var c = "abcdefghijklmnopqrstuvwxyz0123456789";
var cl = c.length;
var r = "";
for(var i=0; i<l; i++){
r += c[Math.floor(Math.random()*cl)];
}
return r;
}
function rgbToHex(color)
{
// HEXに変換したものを代入する変数
var hex = '';
// 第1引数がHEXのとき変換処理は必要ないのでそのままreturn
// IE8の場合はjQueryのcss()関数でHEXを返すので除外
if (color.match(/^#[a-f\d]{3}$|^#[a-f\d]{6}$/i))
{
return color;
}
// 正規表現
var regex = color.match(/^rgb\(([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\)$/);
// 正規表現でマッチしたとき
if (regex)
{
var rgb =
[
// RGBからHEXへ変換
parseInt(regex[1]).toString(16),
parseInt(regex[2]).toString(16),
parseInt(regex[3]).toString(16)
];
for (var i = 0; i < rgb.length; ++i)
{
// rgb(1,1,1)のようなときHEXに変換すると1桁になる
// 1桁のときは前に0を足す
if (rgb[i].length == 1)
{
rgb[i] = '0' + rgb[i];
}
hex += rgb[i];
}
return hex;
}
console.error(color+':第1引数はRGB形式で入力');
}

View File

@@ -29,16 +29,10 @@ function tl(data) {
var templete = parse([json[0]], '', acct_id, tlid);
$("#timeline_nano").html(templete);
jQuery("time.timeago").timeago();
reload(type, '', acct_id, data);
});
}
//Streaming接続
var websocket=[];
function reload(type, cc, acct_id, data) {
var tlid=0;
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if (type == "home") {
var start = "wss://" + domain +
"/api/v1/streaming/?stream=user&access_token=" + at;

2
app/js/platform/pickr.js Normal file

File diff suppressed because one or more lines are too long

View File

@@ -316,4 +316,4 @@ function tjDeckStart() {
if (document.querySelector(".js-app-columns")) tjDeckStart();
else var timer = setInterval(function () {
document.querySelector(".js-app-columns") ? (tjDeckStart(), clearInterval(timer)) : console.log("まだロード中")
}, 500);
}, 500);

View File

@@ -4,7 +4,7 @@ function mdCheck(){
var acct_id = $("#post-acct-sel").val();
var profimg=localStorage.getItem("prof_"+acct_id);
if(!profimg){
profimg="./img/missing.svg";
profimg="../../img/missing.svg";
}
$("#acct-sel-prof").attr("src",profimg);
if(localStorage.getItem("post_" + acct_id)){
@@ -290,10 +290,10 @@ function preview(){
for(let l = 0; l < li.length; l++) {
var u=li[l].match(/^1\. (.+)$/);
var listUl='<li>'+u[1]+'</li>';
if(l == 0){
if(l === 0){
listUl='<ol>'+listUl;
}
if(l==li.length-1){
if(l===li.length-1){
listUl=listUl+'</ol>';
}
var bb=bb.replace(new RegExp(li[l], ""),listUl);

View File

@@ -11,13 +11,11 @@ function emojiToggle() {
selin=0;
}
localStorage.setItem("cursor", selin);
if ($("#emoji").hasClass("hide")) {
if($("#bottom").hasClass("reverse")){
$('#emoji').css("left",$('#post-box').offset().left-295+"px");
}else{
$('#emoji').css("left",$('#post-box').offset().left+295+"px");
}
$("#emoji").removeClass("hide")
$("#right-side").show()
$("#suggest").html("");
if (!localStorage.getItem("emoji_" + acct_id)) {
var html =
'<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet(\'true\');">'+lang.lang_emoji_get+'</button>';
@@ -26,7 +24,10 @@ function emojiToggle() {
emojiList('home');
}
} else {
$("#poll").addClass("hide")
$("#emoji").addClass("hide")
$("#suggest").html("");
$("#right-side").hide()
}
@@ -91,7 +92,7 @@ function emojiList(target) {
var page = Math.ceil(num / 126);
$("#emoji-sum").text(page);
var ct = Math.ceil(start / 126);
if (ct == 0) {
if (ct === 0) {
var ct = 1;
$("#emoji-before").addClass("disabled");
} else {

View File

@@ -106,7 +106,7 @@ function media(b64, type, no) {
var start = "https://" + domain + "/api/drive/files/create";
httpreq.open('POST', start, true);
httpreq.upload.addEventListener("progress", progshow, false);
httpreq.responseType = 'json';
httpreq.responseType = "json";
if ($("#nsfw").hasClass("nsfw-avail")) {
var nsfw = true;
} else {
@@ -121,17 +121,17 @@ function media(b64, type, no) {
var start = "https://" + domain + "/api/v1/media";
httpreq.open('POST', start, true);
httpreq.upload.addEventListener("progress", progshow, false);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.send(fd);
}
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
var img = localStorage.getItem("img");
if (json.type.indexOf("image")!=-1) {
var html = '<img src="' + json[previewer] + '" style="width:50px; max-height:100px;">';
var html = '<img src="' + json[previewer] + '" class="preview-img pointer" data-media="'+json["id"]+'" onclick="deleteImage(\''+json["id"]+'\')" title="'+lang.lang_postimg_delete+'">';
$('#preview').append(html);
} else {
$('#preview').append(lang.lang_postimg_previewdis);
@@ -183,22 +183,20 @@ function toBlob(base64, type) {
var element = document.querySelector("#textarea");
element.addEventListener("paste", function(e){
console.log(e)
// 画像の場合
// e.clipboardData.types.length == 0
// かつ
// e.clipboardData.types[0] == "Files"
// となっているので、それ以外を弾く
if (!e.clipboardData
|| !e.clipboardData.types
|| (e.clipboardData.types.length != 1)
|| (e.clipboardData.types[0] != "Files")) {
console.log("not image")
return true;
if (!e.clipboardData || !e.clipboardData.items) {
return true;
}
// DataTransferItemList に画像が含まれいない場合は終了する
var imageItems = [...e.clipboardData.items].filter(i => i.type.startsWith('image'));
if (imageItems.length == 0) {
console.log("not image")
return true;
}
// ファイルとして得る
// (なぜかgetAsStringでは上手くいかなかった)
var imageFile = e.clipboardData.items[0].getAsFile();
// DataTransferItem の kind は file なので getAsString ではなく getAsFile を呼ぶ
var imageFile = imageItems[0].getAsFile();
var imageType = imageItems[0].type;
// FileReaderで読み込む
var fr = new FileReader();
@@ -209,7 +207,8 @@ element.addEventListener("paste", function(e){
if(mediav){
var i=mediav.split(",").length;
}
media(base64, "image/png", i)
// DataTransferItem の type に mime tipes があるのでそれを使う
media(base64, imageType, i)
};
fr.readAsDataURL(imageFile);
@@ -222,4 +221,20 @@ function adobe(){
}
ipc.on('adobeagree', function (event, arg) {
localStorage.setItem("adobeagree",arg);
});
});
function deleteImage(key){
console.log(key);
if(!confirm(lang.lang_postimg_delete)){
return false;
}
var media = $("#media").val();
var arr=media.split(",");
for(var i=0;i<media.length;i++){
if(arr[i]==key){
arr.splice(i, 1);
break;
}
}
$("#media").val(arr.join(","));
$('#preview [data-media='+key+']').remove();
}

View File

@@ -1,7 +1,7 @@
//Renpost
function renote(id, acct_id, remote) {
if ($("#pub_" + id).hasClass("rted")) {
return
return false;
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
@@ -12,10 +12,10 @@ function renote(id, acct_id, remote) {
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({i:at,renoteId:id}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
$("[toot-id=" + id + "]").addClass("rted");
@@ -58,10 +58,10 @@ function reactiontoggle(id,acct_id,tlid){
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({i:at,noteId:id}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
if(json.reactionCounts){
@@ -158,10 +158,10 @@ function reaction(mode,id,acct_id,tlid){
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({i:at,noteId:id,reaction:mode}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
$(".fav_"+id).toggleClass("yellow-text");
}
}
@@ -177,7 +177,7 @@ function vote(acct_id,id,to){
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({i:at,noteId:id,choice:to}));
httpreq.onreadystatechange = function() {
voterefresh(acct_id,id)

View File

@@ -1,4 +1,4 @@
/*投稿系*/
/*投稿系*/
//投稿
function sec(){
var mode=localStorage.getItem("sec");
@@ -11,7 +11,7 @@ function sec(){
}
function post(mode,postvis) {
if($("#toot-post-btn").prop("disabled")){
return
return false;
}
var str = $("#textarea").val();
var acct_id = $("#post-acct-sel").val();
@@ -45,6 +45,7 @@ function post(mode,postvis) {
}else{
var cw_ltres=localStorage.getItem("cw_letters");
}
if(domain!="kirishima.cloud"){
if(mode!="pass" && !$("#cw").hasClass("cw-avail") && (str.length>cw_sent || (str.split("\n").length - 1)>cw_ltres)){
var electron = require("electron");
var remote=electron.remote;
@@ -55,20 +56,21 @@ function post(mode,postvis) {
title: lang.lang_post_cwtitle,
message: lang.lang_post_cwtxt+plus,
buttons: [lang.lang_post_btn1,lang.lang_post_btn2, lang.lang_post_btn3]
}
dialog.showMessageBox(options, function(arg) {
if(arg==1){
}
dialog.showMessageBox(options, function(arg) {
if(arg===1){
$("#cw-text").show();
$("#cw").addClass("yellow-text");
$("#cw").addClass("cw-avail");
$("#cw-text").val(plus);
post("pass");
}else if(arg==2){
}else if(arg===2){
post("pass");
}
})
return false;
}
}
if(localStorage.getItem("mode_" + domain)=="misskey"){
misskeyPost();
return;
@@ -78,6 +80,9 @@ function post(mode,postvis) {
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/statuses";
var reply = $("#reply").val();
if(str.indexOf(localStorage.getItem("stable"))==-1){
str+" #"+localStorage.getItem("stable");
}
var toot={
status: str
}
@@ -106,6 +111,7 @@ function post(mode,postvis) {
toot.status=str+"👁️";
}
//ここに非公開・未収載タグについてwarn
if(domain!="kirishima.cloud" && domain!="imastodon.net"){
if(~str.indexOf("#")){
if(vis == "local" || vis=="unlisted" || vis=="direct" || vis=="private"){
if(!confirm(lang.lang_post_tagVis)){
@@ -113,6 +119,7 @@ function post(mode,postvis) {
}
}
}
}
if ($("#cw").hasClass("cw-avail")) {
var spo = $("#cw-text").val();
cw();
@@ -122,25 +129,51 @@ function post(mode,postvis) {
}
if ($("#sch-box").hasClass("sch-avail")) {
var scheduled=formattimeutc(new Date(Date.parse($("#sch-date").val())))
console.log(scheduled)
schedule();
toot.scheduled_at=scheduled;
} else {
var scheduled = "";
}
if ($("#poll-sel").val()=="mastodon-poll") {
var options=[];
$(".mastodon-choice").map(function() {
var choice=$(this).val();
if(choice!=""){
options.push(choice);
}
});
if($("#poll-multiple:checked").val()=="1"){
var mul=true;
}else{
var mul=false;
}
if($("#poll-until:checked").val()=="1"){
var htt=true;
}else{
var htt=false;
}
var exin=pollCalc();
if(!exin){
todc("Error: Poll expires_in param")
}
toot.poll={
options: options,
expires_in: exin,
multiple: mul,
hide_totals: htt
}
}
console.log(toot);
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify(toot));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if(str.indexOf(localStorage.getItem("stable"))==-1){
localStorage.removeItem("stable")
}
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
var box = localStorage.getItem("box");
if (box == "yes" || !box) {
$("#textarea").blur();
@@ -204,10 +237,10 @@ function misskeyPost(){
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify(toot));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
if(str.indexOf(localStorage.getItem("stable"))==-1){
localStorage.removeItem("stable")
}
@@ -231,7 +264,7 @@ function misskeyPost(){
function clear() {
$("#textarea").val("");
if(localStorage.getItem("stable")){
$("#textarea").val(localStorage.getItem("stable"));
$("#textarea").val("#"+localStorage.getItem("stable")+" ")
}
$("#textarea").attr("placeholder", lang.lang_toot);
$("#reply").val("");
@@ -263,6 +296,12 @@ function clear() {
$("#preview").html("");
$(".toot-btn-group").prop("disabled", false);
$("#post-acct-sel").prop("disabled", false);
$("#days_poll").val(0);
$("#hours_poll").val(0);
$("#mins_poll").val(0);
$(".mastodon-choice").map(function() {
$(this).val("");
});
localStorage.removeItem("image");
if(localStorage.getItem("mainuse")=="main"){
$("#post-acct-sel").val(localStorage.getItem("main"));

View File

@@ -60,7 +60,7 @@ function loadVis(){
memory = "public";
}
vis(memory);
} else if(vist == "server") {
} else if(vist == "useapi") {
var acct_id = $("#post-acct-sel").val();
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);

View File

@@ -13,10 +13,10 @@ function fav(id, acct_id, remote) {
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send();
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
if(remote!="remote"){
//APIのふぁぼカウントがおかしい
@@ -63,10 +63,10 @@ function rt(id, acct_id, remote) {
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send();
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
if (remote != "remote") {
@@ -133,10 +133,10 @@ function follow(acct_id,remote) {
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify(ent));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
if ($("#his-data").hasClass("following")) {
@@ -168,10 +168,10 @@ function block(acct_id) {
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send();
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
if ($("#his-data").hasClass("blocking")) {
$("#his-data").removeClass("blocking");
$("#his-block-btn").text(lang.lang_status_block);
@@ -210,10 +210,10 @@ function mute(acct_id) {
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(rq);
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
if ($("#his-data").hasClass("muting")) {
$("#his-data").removeClass("muting");
$("#his-mute-btn").text(lang.lang_status_mute);
@@ -234,7 +234,7 @@ function del(id, acct_id) {
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({i:at,noteId:id}));
}else{
var start = "https://" + domain + "/api/v1/statuses/" + id;
@@ -242,11 +242,11 @@ function del(id, acct_id) {
httpreq.open('DELETE', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send();
}
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
}
}
}
@@ -279,9 +279,11 @@ function redraft(id, acct_id){
show();
$("#textarea").val(html);
var cwtxt=$("[toot-id="+id+"] .cw_text").html();
cwtxt=$.strip_tags(cwtxt);
cw();
$("#cw-text").val(cwtxt);
if(cwtxt!=""){
cwtxt=$.strip_tags(cwtxt);
cw();
$("#cw-text").val(cwtxt);
}
}
}
//ピン留め
@@ -298,10 +300,10 @@ function pin(id, acct_id) {
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send();
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
if ($("[toot-id=" + id + "]").hasClass("pined")) {
@@ -324,10 +326,10 @@ function request(id, flag, acct_id) {
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send();
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
showReq();
@@ -347,10 +349,10 @@ function domainblock(add, flag, acct_id) {
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send();
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
showDom();
@@ -404,10 +406,10 @@ function pinUser(){
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send();
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
if ($("#his-end-btn").hasClass("endorsed")) {

View File

@@ -13,6 +13,13 @@ input.addEventListener("focus", function() {
window.clearInterval(timer);
timer = window.setInterval(function() {
var new_val = input.value;
if(new_val==""){
$("#suggest").html("");
if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
$("#right-side").hide()
}
return;
}
if (prev_val != new_val) {
var semoji = new_val.match(/:(\S{3,})/);
if(semoji){
@@ -32,7 +39,15 @@ input.addEventListener("focus", function() {
}
}
}
if(ehtml!=""){
$("#right-side").show()
$("#poll").addClass("hide")
$("#emoji").addClass("hide")
}else{
if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
$("#right-side").hide()
}
}
$("#suggest").html(ehtml);
}
@@ -52,7 +67,10 @@ input.addEventListener("focus", function() {
} else if (acct && acct[1]) {
var q = acct[1];
}else {
//$("#suggest").html("");
$("#suggest").html("");
if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
$("#right-side").hide()
}
return;
}
var domain = localStorage.getItem("domain_" + acct_id);
@@ -72,24 +90,38 @@ input.addEventListener("focus", function() {
todo(error);
console.error(error);
}).then(function(json) {
if (json.hashtags[0] && tag[1]) {
if (json.hashtags[0] && tag) {
if(tag[1]){
var tags = "";
Object.keys(json.hashtags).forEach(function(key4) {
var tag = json.hashtags[key4];
tags = tags + '<a onclick="tagInsert(\'#' + tag + '\',\'#' + q +
'\')" class="pointer">#' + tag + '</a> ';
if(tag!=q){
tags = tags + '<a onclick="tagInsert(\'#' + tag + '\',\'#' + q +
'\')" class="pointer">#' + tag + '</a><br>';
}
});
$("#suggest").html("Tags:" + tags);
$("#right-side").show()
$("#suggest").html("Tags:<br>" + tags);
$("#poll").addClass("hide")
$("#emoji").addClass("hide")
}
} else if (json.accounts[0] && acct[1]) {
var accts = "";
Object.keys(json.accounts).forEach(function(key3) {
var acct = json.accounts[key3];
accts = accts + '<a onclick="tagInsert(\'@' + acct.acct +
'\',\'@' + q + '\')" class="pointer">@' + acct.acct + '</a> ';
if(acct.acct!=q){
accts = accts + '<a onclick="tagInsert(\'@' + acct.acct +
'\',\'@' + q + '\')" class="pointer">@' + acct.acct + '</a><br>';
}
});
$("#suggest").html("@:" + accts);
$("#right-side").show()
$("#suggest").html(accts);
$("#poll").addClass("hide")
$("#emoji").addClass("hide")
} else {
$("#suggest").html("Not Found");
if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
$("#right-side").hide()
}
}
});
}
@@ -121,6 +153,9 @@ function tagInsert(code, del) {
}
$("#textarea").val(newt);
$("#textarea").focus();
if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
$("#right-side").hide()
}
$("#suggest").html("");
}
function cgNPs(q){

View File

@@ -1,10 +1,17 @@
/*リプライ*/
function re(id,at,acct_id,mode){
function re(id,ats_cm,acct_id,mode){
clear();
var ats=ats_cm.split(',');
localStorage.setItem("nohide",true);
show();
$("#reply").val(id);
var te=$("#textarea").val();
$("#textarea").val("@"+at+" "+te);
for(var i=0;i<ats.length;i++){
var at=ats[i];
var te=$("#textarea").val();
if(at!=localStorage.getItem("user_"+acct_id)){
$("#textarea").val("@"+at+" "+te);
}
}
$("#rec").text(lang.lang_yesno);
$("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true);
@@ -13,7 +20,7 @@ function re(id,at,acct_id,mode){
$("#textarea").focus();
var profimg=localStorage.getItem("prof_"+acct_id);
if(!profimg){
profimg="./img/missing.svg";
profimg="../../img/missing.svg";
}
$("#acct-sel-prof").attr("src",profimg);
vis(mode);
@@ -32,6 +39,9 @@ function qt(id,acct_id,at,url){
if(!qt){
var qt="simple";
}
if(qt=="nothing"){
return false;
}
if(qt=="simple"){
show();
$("#textarea").val("\n"+url);

View File

@@ -83,7 +83,7 @@ function additional(acct_id, tlid) {
var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.onreadystatechange = function()
{
if( this.readyState == 4 && this.status == 200 ) {
if( this.readyState === 4 && this.status === 200 ) {
if( this.response){
var json=this.response;
var emojis=json.emojis;

View File

@@ -1,6 +1,11 @@
//トゥートの詳細
function details(id, acct_id, tlid) {
$(".toot-reset").html(lang.lang_details_nodata);
function details(id, acct_id, tlid, mode) {
if(mode=="dm"){
$(".dm-hide").hide();
}else{
$(".dm-hide").show();
}
$(".toot-reset").html('<span class="no-data">'+lang.lang_details_nodata+'</span>');
var html = $("#timeline_"+tlid+" [toot-id=" + id + "]").html();
$("#toot-this").html(html);
$('#tootmodal').modal('open');
@@ -78,10 +83,11 @@ function details(id, acct_id, tlid) {
$("#tootmodal").attr("data-user",scn);
}
context(id, acct_id);
var dom=null;
if(!local){
var dom=scn.replace(/.+@/g,'');
dom=scn.replace(/.+@/g,'');
}else{
var dom=domain;
dom=domain;
}
beforeToot(id, acct_id, dom);
userToot(id, acct_id, uid);
@@ -148,6 +154,9 @@ function replyTL(id, acct_id) {
}
}else{
var templete = parse([json], '', acct_id,"","",mute);
if(templete!=""){
$("#toot-reply .no-data").hide();
}
$("#toot-reply").prepend(templete);
$("#toot-reply .hide").html(lang.lang_details_filtered);
$("#toot-reply .by_filter").css("display","block");
@@ -210,6 +219,9 @@ function context(id, acct_id) {
var mute=[];
}
var templete = parse(json.descendants, '', acct_id,"","",mute);
if(templete!=""){
$("#toot-after .no-data").hide();
}
$("#toot-after").html(templete);
$("#toot-after .hide").html(lang.lang_details_filtered);
$("#toot-after .by_filter").css("display","block");
@@ -261,6 +273,9 @@ function beforeToot(id, acct_id, domain) {
console.error(error);
}).then(function(json) {
var templete = parse(json, 'noauth', acct_id);
if(templete!=""){
$("#toot-before .no-data").hide();
}
$("#toot-before").html(templete);
jQuery("time.timeago").timeago();
});
@@ -308,6 +323,9 @@ function userToot(id, acct_id, user) {
console.error(error);
}).then(function(json) {
var templete = parse(json, '', acct_id);
if(templete!=""){
$("#user-before .no-data").hide();
}
$("#user-before").html(templete);
jQuery("time.timeago").timeago();
});
@@ -334,6 +352,9 @@ function faved(id, acct_id) {
console.error(error);
}).then(function(json) {
var templete = userparse(json, '', acct_id);
if(templete!=""){
$("#toot-fav .no-data").hide();
}
$("#toot-fav").html(templete);
});
}
@@ -391,64 +412,8 @@ function staCopy(id){
}
}
//魚拓
function shot(){
var title=$("#tootmodal").attr("data-id");
var off = $('#toot-this').offset();
var w=$("#toot-this").width()+50;
var h=$("#toot-this").height()+50;
var electron = require("electron");
const fs = require("fs");
const os = require('os')
const shell = electron.shell;
const path = require('path')
var ipc = electron.ipcRenderer;
let options = {
types: ['screen'],
thumbnailSize: {
width: window.parent.screen.width,
height: window.parent.screen.height
}
}
const desktopCapturer = electron.desktopCapturer;
desktopCapturer.getSources(options, function(error, sources) {
if (error) return console.log(error)
sources.forEach(function(source) {
if (source.name === 'Screen 1' || source.name === 'TheDesk') {
var durl=source.thumbnail.toDataURL();
var b64 = durl.match(
/data:image\/png;base64,(.+)/
);
const screenshotPath = path.join(os.tmpdir(), 'screenshot.png');
const savePath = path.join(os.tmpdir(), 'screenshot.png');
var ipc = electron.ipcRenderer;
if(localStorage.getItem("savefolder")){
var save=localStorage.getItem("savefolder");
}else{
var save="";
}
ipc.send('shot', ['file://' + screenshotPath,w,h,b64[1],title,off.top+50,off.left,save]);
if($("#toot-this .img-parsed").length>0){
for(i=0;i<$("#toot-this .img-parsed").length;i++){
var url=$("#toot-this .img-parsed").eq(i).attr("data-url");
if(localStorage.getItem("savefolder")){
var save=localStorage.getItem("savefolder");
}else{
var save="";
}
ipc.send('shot-img-dl', [url,title+"_img"+i+".png",save]);
}
}
return;
const message = `Saved screenshot to: ${screenshotPath}`
//screenshotMsg.textContent = message
}
})
})
}
//翻訳
function trans(tar){
function trans(tar,to){
var html=$("#toot-this .toot").html();
if(html.match(/^<p>(.+)<\/p>$/)){
html = html.match(/^<p>(.+)<\/p>$/)[1];
@@ -457,18 +422,21 @@ function trans(tar){
html = html.replace(/<p>/g, "\n");
html = html.replace(/<\/p>/g, "\n");
html=$.strip_tags(html);
if(~tar.indexOf("zh")){
tar="zh";
}
$("#toot-this .additional").text("Loading...(Powered by Google Translate)");
var exec='https://script.google.com/macros/s/AKfycbz0ETqcUxwNlw961GjErNb7vr_X18N2s1AS5Xu5nFTbYXcdcRM/exec?text='+encodeURIComponent(html)+'&source='+tar+'&target=ja'
var exec='https://script.google.com/macros/s/AKfycbxhwW5tjjop9Irg-y1zr_WsXlCKEzwWG6KuoOt_vVRDfEbRv0c/exec?format=json&text='+encodeURIComponent(html)+'&source='+tar+'&target='+to
console.log(exec);
fetch(exec, {
method: 'GET',
}).then(function(response) {
return response.text();
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(text) {
$("#toot-this .additional").html('<span class="gray">'+text+'</span>');
$("#toot-this .additional").html('<span class="gray">'+text.text+'</span>');
});
}
//ブラウザで開く

View File

@@ -15,10 +15,11 @@ function date(str, datetype) {
} else {
var min = date.getMinutes();
}
var sec=null;
if (date.getSeconds() < 10) {
var sec = "0" + date.getSeconds();
sec = "0" + date.getSeconds();
} else {
var sec = date.getSeconds();
sec = date.getSeconds();
}
if (datetype == "full") {
var ret = date.getFullYear() + "/" + month + "/" + date.getDate() + "/ " +
@@ -56,14 +57,39 @@ function date(str, datetype) {
//特殊フォーマット(インスタンス情報で利用)
function crat(str) {
var date = new Date(str);
var mnt=null;
if(date.getMonth()<9){
mnt="0"+(date.getMonth()+1);
}else{
mnt=date.getMonth()+1;
}
if(date.getDate()<10){
var dat="0"+date.getDate();
}else{
var dat=date.getDate();
}
if(date.getHours()<10){
var hrs="0"+date.getHours();
}else{
var hrs=date.getHours();
}
if(date.getMinutes()<10){
var mns="0"+date.getMinutes();
}else{
var mns=date.getMinutes();
}
if(date.getSeconds()<10){
var sec="0"+date.getSeconds();
}else{
var sec=date.getSeconds();
}
format_str = 'YYYY-MM-DD hh:mm:ss';
format_str = format_str.replace(/YYYY/g, date.getFullYear());
format_str = format_str.replace(/MM/g, date.getMonth()+1);
format_str = format_str.replace(/DD/g, date.getDate());
format_str = format_str.replace(/hh/g, date.getHours());
format_str = format_str.replace(/mm/g, date.getMinutes());
format_str = format_str.replace(/ss/g, date.getSeconds());
format_str = format_str.replace(/MM/g, mnt);
format_str = format_str.replace(/DD/g, dat);
format_str = format_str.replace(/hh/g, hrs);
format_str = format_str.replace(/mm/g, mns);
format_str = format_str.replace(/ss/g, sec);
return format_str;
}

523
app/js/tl/dm.js Normal file
View File

@@ -0,0 +1,523 @@
//DM(Conv) TL
function dm(acct_id, tlid, type,delc,voice) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/conversations";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = '<div id="convList'+tlid+'">'+dmListParse(json, type, acct_id, tlid, "", mute)+'</div>';
localStorage.setItem("lastobj_"+ tlid,json[0].id)
$("#timeline_" + tlid).html(templete);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
todc();
//reload(type, '', acct_id, tlid, data, mute, delc,voice);
$(window).scrollTop(0);
});
}
function dmmore(tlid){
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
var acct_id = obj[tlid].domain;
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var sid = $("#timeline_" + tlid + " .cvo").last().attr("unique-id");
var start = "https://" + domain + "/api/v1/conversations?max_id="+sid;
var type="dm";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = '<div id="convList'+tlid+'">'+dmListParse(json, type, acct_id, tlid, "", mute)+'</div>';
$("#timeline_" + tlid).append(templete);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
moreloading=false;
})
}
//DMオブジェクトパーサー(トゥート)
function dmListParse(obj, mix, acct_id, tlid, popup, mutefilter) {
console.log(obj);
var templete = '';
if(obj[0]){
localStorage.setItem("lastunix_"+ tlid,date(obj[0].created_at, 'unix'));
}
var actb = localStorage.getItem("action_btns");
var actb='re,rt,fav,qt,del,pin,red';
if(actb){
var actb = actb.split(',');
var disp={};
for(var k=0;k<actb.length;k++){
if(k<4){
var tp="type-a";
}else{
var tp="type-b";
}
disp[actb[k]]=tp;
}
}
var datetype = localStorage.getItem("datetype");
var nsfwtype = localStorage.getItem("nsfw");
var sent = localStorage.getItem("sentence");
var ltr = localStorage.getItem("letters");
var gif = localStorage.getItem("gif");
var imh = localStorage.getItem("img-height");
//独自ロケール
var locale = localStorage.getItem("locale");
if(locale=="yes"){
var locale=false;
}
//ネイティブ通知
var native=localStorage.getItem("nativenotf");
if(!native){
native="yes";
}
//クライアント強調
var emp = localStorage.getItem("client_emp");
if(emp){
var emp = JSON.parse(emp);
}
//クライアントミュート
var mute = localStorage.getItem("client_mute");
if(mute){
var mute = JSON.parse(mute);
}
//ユーザー強調
var useremp = localStorage.getItem("user_emp");
if(useremp){
var useremp = JSON.parse(useremp);
}
//ワード強調
var wordemp = localStorage.getItem("word_emp");
if(wordemp){
var wordemp = JSON.parse(wordemp);
}
//ワードミュート
var wordmute = localStorage.getItem("word_mute");
if(wordmute){
var wordmute = JSON.parse(wordmute);
wordmute = wordmute.concat(mutefilter);
}else{
wordmute = mutefilter;
}
//Ticker
var tickerck = localStorage.getItem("ticker_ok");
if(tickerck){
var ticker=true;
}else{
var ticker=false;
}
//Cards
var card = localStorage.getItem("card_" + tlid);
if (!sent) {
var sent = 500;
}
if (!ltr) {
var ltr = 500;
}
if (!nsfwtype || nsfwtype == "yes") {
var nsfw = "ok";
} else {
var nsfw;
}
var cwtype = localStorage.getItem("cw");
if (!cwtype || cwtype == "yes") {
var cw = "ok";
} else {
var cw;
}
if (!datetype) {
datetype = "absolute";
}
if (!gif) {
var gif = "yes";
}
if (!imh) {
var imh = "200";
}
if(!emp){
var emp=[];
}
if(!mute){
var mute=[];
}
if(!useremp){
var useremp=[];
}
if(!wordemp){
var wordemp=[];
}
if(!wordmute){
var wordmute=[];
}
//via通知
var viashow=localStorage.getItem("viashow");
if(!viashow){
viashow="via-hide";
}
if(viashow=="hide"){
viashow="via-hide";
}
//認証なしTL
if(mix=="noauth"){
var noauth="hide";
var antinoauth="";
}else{
var noauth="";
var antinoauth="hide";
}
//マウスオーバーのみ
var mouseover=localStorage.getItem("mouseover");
if(!mouseover){
mouseover="";
}else if(mouseover=="yes" || mouseover=="click"){
mouseover="hide";
}else if(mouseover=="no"){
mouseover="";
}
var local = [];
var times=[];
Object.keys(obj).forEach(function(key) {
var conv_id=obj[key].id;
var toot = obj[key].last_status;
var dis_name=escapeHTML(toot.account.display_name);
if(toot.account.emojis){
var actemojick = toot.account.emojis[0];
}else{
var actemojick=false;
}
//絵文字があれば
if (actemojick) {
Object.keys(toot.account.emojis).forEach(function(key5) {
var emoji = toot.account.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url);
});
}
var noticeavatar="";
var if_notf="";
var uniqueid=toot.id;
var notice = "";
var boostback = "";
//ユーザー強調
if(toot.account.username!=toot.account.acct){
var fullname=toot.account.acct;
}else{
var domain = localStorage.getItem("domain_" + acct_id);
var fullname=toot.account.acct+"@"+domain;
}
if(useremp){
Object.keys(useremp).forEach(function(key10) {
var user = useremp[key10];
if(user==fullname){
boostback = "emphasized";
}
});
}
var id = toot.id;
var home = "";
if (toot.account.locked) {
var locked = ' <i class="fa fa-lock red-text"></i>';
} else {
var locked = "";
}
if (!toot.application) {
var via = '';
viashow="hide";
} else {
var via = toot.application.name;
//強調チェック
Object.keys(emp).forEach(function(key6) {
var cli = emp[key6];
if(cli == via){
boostback = "emphasized";
}
});
//ミュートチェック
Object.keys(mute).forEach(function(key7) {
var cli = mute[key7];
if(cli == via){
boostback = "hide";
}
});
}
if(mix=="pinned"){
boostback = "emphasized";
}
if (toot.spoiler_text && cw) {
var content = toot.content;
var spoil = escapeHTML(toot.spoiler_text);
var spoiler = "cw cw_hide_" + toot.id;
var api_spoil = "gray";
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
'\')" class="nex parsed">'+lang.lang_parse_cwshow+'</a><br>';
} else {
var ct1 = toot.content.split('</p>').length + toot.content.split('<br />').length -2;
var ct2 = toot.content.split('</p>').length + toot.content.split('<br>').length -2;
if(ct1>ct2){ var ct= ct1; }else{ var ct= ct2; }
if ((sent < ct && $.mb_strlen($.strip_tags(toot.content)) > 5) || ($.strip_tags(toot.content).length > ltr && $.mb_strlen($.strip_tags(toot.content)) > 5)) {
var content = '<span class="gray">'+lang.lang_parse_fulltext+'</span><br>' + toot.content
var spoil = '<span class="cw-long-' + toot.id + '">' + $.mb_substr($.strip_tags(
toot.content), 0, 100) +
'</span><span class="gray">'+lang.lang_parse_autofold+'</span>';
var spoiler = "cw cw_hide_" + toot.id;
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
'\')" class="nex parsed">'+lang.lang_parse_more+'</a><br>';
} else {
var content = toot.content;
var spoil = escapeHTML(toot.spoiler_text);
var spoiler = "";
var spoiler_show = "";
}
}
var urls = $.strip_tags(content).replace(/\n/g, " ").match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/?(?!.*((media|tags)|mentions)).*([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?/
);
if (urls) {
var analyze = '<a onclick="additionalIndv(\'' + tlid + '\',' + acct_id +
',\'' + id + '\')" class="add-show pointer">'+lang.lang_parse_url+'</a><br>';
} else {
var analyze = '';
}
var viewer = "";
var hasmedia = "";
var youtube = "";
if(toot.emojis){
var emojick = toot.emojis[0];
}else{
var emojick=false;
}
//絵文字があれば
if (emojick) {
Object.keys(toot.emojis).forEach(function(key5) {
var emoji = toot.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
content = content.replace(regExp, emoji_url);
spoil = spoil.replace(regExp, emoji_url);
});
}
//ニコフレ絵文字
if(toot.profile_emojis){
var nicoemojick = toot.profile_emojis[0];
}else{
var nicoemojick=false;
}
//絵文字があれば
if (nicoemojick) {
Object.keys(toot.profile_emojis).forEach(function(keynico) {
var emoji = toot.profile_emojis[keynico];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
content = content.replace(regExp, emoji_url);
spoil = spoil.replace(regExp, emoji_url);
});
}
//デフォ絵文字
content=twemoji.parse(content);
if(dis_name){
dis_name=twemoji.parse(dis_name);
}
if(spoil){
spoil=twemoji.parse(spoil);
}
var mediack = toot.media_attachments[0];
//メディアがあれば
var media_ids="";
if (mediack) {
hasmedia = "hasmedia";
var cwdt = 100 / toot.media_attachments.length;
Object.keys(toot.media_attachments).forEach(function(key2) {
var media = toot.media_attachments[key2];
var purl = media.preview_url;
media_ids=media_ids+media.id+",";
var url = media.url;
if (toot.sensitive && nsfw) {
var sense = "sensitive"
} else {
var sense = ""
}
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',\'' +
acct_id + '\')" id="' + id + '-image-' + key2 + '" data-url="' + url +
'" data-type="' + media.type + '" class="img-parsed"><img src="' +
purl + '" class="' + sense +
' toot-img pointer" style="width:' + cwdt + '%; height:'+imh+'px;"></a></span>';
});
media_ids = media_ids.slice(0, -1) ;
} else {
viewer = "";
hasmedia = "nomedia";
}
var menck = toot.mentions[0];
var mentions = "";
//メンションであれば
if (menck) {
mentions = "";
Object.keys(toot.mentions).forEach(function(key3) {
var mention = toot.mentions[key3];
mentions = mentions + '<a onclick="udg(\'' + mention.id + '\',' +
acct_id + ')" class="pointer">@' + mention.acct + '</a> ';
});
mentions = '<div style="float:right">' + mentions + '</div>';
}
var tagck = toot.tags[0];
var tags = "";
//タグであれば
if (tagck) {
Object.keys(toot.tags).forEach(function(key4) {
var tag = toot.tags[key4];
tags = tags + '<span class="hide" data-tag="' + tag.name + '">#' + tag.name + ':<a onclick="tl(\'tag\',\'' + tag.name + '\',' + acct_id +
',\'add\')" class="pointer" title="' +lang.lang_parse_tagTL.replace("{{tag}}" ,'#'+tag.name)+ '">TL</a> <a onclick="brInsert(\'#' + tag.name + '\')" class="pointer" title="' + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag.name) + '">Toot</a> '+
'<a onclick="tagPin(\'' + tag.name + '\')" class="pointer" title="' +lang.lang_parse_tagpin.replace("{{tag}}" ,'#'+tag.name)+ '">Pin</a></span> ';
});
tags = '<div style="float:right">' + tags + '</div>';
}
//アニメ再生
if (gif == "yes") {
var avatar = toot.account.avatar;
} else {
var avatar = toot.account.avatar_static;
}
//ワードミュート
if(wordmute){
Object.keys(wordmute).forEach(function(key8) {
var worde = wordmute[key8];
if(worde){
if(worde.tag){
var word=worde.tag;
}else{
var word=worde
}
var regExp = new RegExp( word, "g" ) ;
if($.strip_tags(content).match(regExp)){
boostback = "hide by_filter";
}
}
});
}
//ワード強調
if(wordemp){
Object.keys(wordemp).forEach(function(key9) {
var word = wordemp[key9];
if(word){
var word=word.tag;
var regExp = new RegExp( word, "g" ) ;
content=content.replace(regExp,'<span class="emp">'+word+"</span>");
}
});
}
//日本語じゃない
if(toot.language!="ja"){
var trans='<div class="action pin"><a onclick="trans(\''+toot.language+'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_trans+'"><i class="material-icons">g_translate</i></a></div>';
}else{
var trans="";
}
if (toot.favourited) {
var if_fav = " yellow-text";
var fav_app = "faved";
} else {
var if_fav = "";
var fav_app = "";
}
//Cards
if (!card && toot.card) {
var cards=toot.card;
if (cards.provider_name=="Twitter"){
if(cards.image){
var twiImg='<br><img src="'+cards.image+'">';
}else{
var twiImg='';
}
analyze='<blockquote class="twitter-tweet"><b>'+escapeHTML(cards.author_name)+'</b><br>'+escapeHTML(cards.description)+twiImg+'</blockquote>';
}
if (cards.title) {
analyze="<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + escapeHTML(cards.title) + "<br>" +
escapeHTML(cards.description) + "</span>";
}
if (cards.html) {
analyze=cards.html+'<i class="material-icons" onclick="pip('+id+')" title="'+lang.lang_cards_pip+'">picture_in_picture_alt</i>';
}
}
//Ticker
var tickerdom="";
if(ticker){
var tickerdata=localStorage.getItem("ticker")
if(tickerdata){
var tickerdata=JSON.parse(tickerdata);
var thisdomain=toot.account.acct.split("@");
if(thisdomain.length>1){
thisdomain=thisdomain[1];
}
for( var i=0; i<tickerdata.length; i++) {
var value=tickerdata[i];
if(value.domain==thisdomain){
var tickerdom='<div style="background:linear-gradient(to left,transparent, '+value.bg+' 96%) !important; color:'+value.text+';width:100%; height:0.9rem; font-size:0.8rem;"><img src="'+value.image+'" style="height:100%;"><span style="position:relative; top:-0.2rem;"> '+value.name+'</span></div>';
break;
}
}
}
}
templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' +
boostback + ' ' + fav_app +
' ' + hasmedia + '" toot-id="' + id + '" unique-id="' + uniqueid + '" data-medias="'+media_ids+' " unixtime="' + date(obj[
key].created_at, 'unix') + '" '+if_notf+' onclick="dmStatus()">' +
'<div class="area-notice"><span class="gray sharesta">' + notice + home +
'</span></div>' +
'<div class="area-icon"><a onclick="udg(\'' + toot.account.id +
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
'<img src="' + avatar +
'" width="40" class="prof-img" user="' + toot.account.acct +
'"></a>'+noticeavatar+'</div>' +
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
dis_name +
'</span><span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis; cursor:text;"> @' +
toot.account.acct + locked + '</span></div>' +
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'' +
toot.url + '\');" title="' + date(toot.created_at, 'absolute') +
'('+lang.lang_parse_clickcopyurl+')"><i class="fa fa-clock-o"></i>' +
date(toot.created_at, datetype) + '</span>' +
'</div></div>' +
'<div class="area-toot">'+tickerdom+'<span class="' +
api_spoil + ' cw_text_' + toot.id + '"><span class="cw_text">' + spoil + "</span>" + spoiler_show +
'</span><span class="toot ' + spoiler + '">' + content +
'</span>' +
'' + viewer + '' +
'<br><a onclick="details(\'' + toot.id + '\',' + acct_id +
',\''+tlid+'\',\'dm\')" class="pointer waves-effect">'+lang.lang_parse_thread+'</a></div>'+
'<div class="area-vis"></div>'+
'</div></div>';
});
return templete;
}

View File

@@ -14,6 +14,29 @@ function mediaToggle(tlid) {
$("#timeline_"+tlid).addClass("media-filter")
}
}
//各TL上方のBT[BTOnly/BTExc/Off]
function ebtToggle(tlid) {
var ebt = localStorage.getItem("ebt_" + tlid);
if (ebt=="true") {
localStorage.setItem("ebt_" + tlid, "but");
$("#sta-bt-" + tlid).text("BT Only");
$("#sta-bt-" + tlid).css("color",'#ff9800');
$("#timeline_"+tlid).addClass("except-bt-filter")
$("#timeline_"+tlid).removeClass("bt-filter")
}else if (ebt=="but") {
localStorage.removeItem("ebt_" + tlid);
$("#sta-bt-" + tlid).text("Off");
$("#sta-bt-" + tlid).css("color",'red');
$("#timeline_"+tlid).removeClass("bt-filter")
$("#timeline_"+tlid).removeClass("except-bt-filter")
} else {
localStorage.setItem("ebt_" + tlid, "true");
$("#sta-bt-" + tlid).text("BT Ex");
$("#sta-bt-" + tlid).css("color",'#009688');
$("#timeline_"+tlid).addClass("bt-filter")
$("#timeline_"+tlid).removeClass("except-bt-filter")
}
}
//各TL上方のMedia[On/Off]をチェック
function mediaCheck(tlid) {
var media = localStorage.getItem("media_" + tlid);
@@ -27,6 +50,26 @@ function mediaCheck(tlid) {
$("#timeline_"+tlid).removeClass("media-filter")
}
}
//各TL上方のBT[On/Off]をチェック
function ebtCheck(tlid) {
var ebt = localStorage.getItem("ebt_" + tlid);
if (ebt=="true") {
$("#sta-bt-" + tlid).text("BT Ex");
$("#sta-bt-" + tlid).css("color",'#009688');
$("#timeline_"+tlid).addClass("bt-filter")
$("#timeline_"+tlid).removeClass("except-bt-filter")
} else if (ebt=="but") {
$("#sta-bt-" + tlid).text("BT Only");
$("#sta-bt-" + tlid).css("color",'#ff9800');
$("#timeline_"+tlid).addClass("except-bt-filter")
$("#timeline_"+tlid).removeClass("bt-filter")
} else{
$("#sta-bt-" + tlid).text("Off");
$("#sta-bt-" + tlid).css("color",'red');
$("#timeline_"+tlid).removeClass("bt-filter")
$("#timeline_"+tlid).removeClass("except-bt-filter")
}
}
/* 削除追跡*/
function catchToggle(tlid) {
var catchck = localStorage.getItem("catch_" + tlid);
@@ -58,17 +101,11 @@ function delreset(tlid){
}
/*ワードフィルター機能*/
function filterToggle(){
if ($("#filter-box").hasClass("hide")) {
$("#filter-box").removeClass("hide");
$("#filter-box").addClass("show");
$("#filter-box").css("bottom","40px");
$("#filter-box").css("left",$('#filter-tgl').offset().left-$('#filter-box').width()/2+"px");
//フィルターロード
} else {
$("#filter-box").removeClass("show");
$("#filter-box").addClass("hide")
}
function filterMenu(){
$("#left-menu div").removeClass("active");
$("#filterMenu").addClass("active");
$(".menu-content").addClass("hide");
$("#filter-box").removeClass("hide");
}
function filter(){
$("#filtered-words").html("");
@@ -97,15 +134,15 @@ function filter(){
var filterword = json[key];
var context = filterword.context.join(',');
filters = filters + escapeHTML(filterword.phrase)+'<span class="sml">(for '+context+')</span>:<a onclick="filterEdit(\'' + filterword.id + '\',\'' + acct_id +
'\')" class="pointer">'+lang_edit[lang]+'</a>/<a onclick="filterDel(' + filterword.id + ',' + acct_id +
')" class="pointer">'+lang_del[lang]+'</a><br> ';
'\')" class="pointer">'+lang.lang_edit+'</a>/<a onclick="filterDel(' + filterword.id + ',' + acct_id +
')" class="pointer">'+lang.lang_del+'</a><br> ';
});
if(filters==""){
filters=lang_filter_nodata[lang]+"<br>";
filters=lang.lang_filter_nodata+"<br>";
}
$("#filtered-words").html(filters);
}else{
$("#filtered-words").html(lang_filter_nodata[lang]);
$("#filtered-words").html(lang_filter_nodata);
}
});
}
@@ -127,7 +164,7 @@ function makeNewFilter(){
}
console.log(cont);
if(!cont.length){
$("#filtered-words").html('Error:'+lang_filter_errordegree[lang]);
$("#filtered-words").html('Error:'+lang.lang_filter_errordegree);
}
var exc=$("#except_filter:checked").val();
var who=$("#wholeword_filter:checked").val();
@@ -149,7 +186,7 @@ function makeNewFilter(){
httpreq.open(method, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({
phrase: phr,
context: cont,
@@ -158,7 +195,7 @@ function makeNewFilter(){
expires_in:time
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
filter();
filterUpdate(acct_id)
@@ -172,7 +209,7 @@ function makeNewFilter(){
$("#days_filter").val("0");
$("#hours_filter").val("0");
$("#mins_filter").val("0");
$("#add-filter-btn").text(lang_add[lang]);
$("#add-filter-btn").text(lang.lang_add);
$("#filter-edit-id").val("")
}
}
@@ -188,7 +225,7 @@ function filterEdit(id,acct_id){
$("#days_filter").val("0");
$("#hours_filter").val("0");
$("#mins_filter").val("0");
$("#add-filter-btn").text(lang_edit[lang]);
$("#add-filter-btn").text(lang.lang_edit);
$("#filter-edit-id").val(id);
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
@@ -240,10 +277,10 @@ function filterDel(id,acct_id){
httpreq.open("DELETE", start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send();
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
filter();
filterUpdate(acct_id)
@@ -384,6 +421,16 @@ function exclude(key){
}else{
excludetxt="?exclude_types[]=follow"
}
var follow=true;
}else{
var follow=false;
}
if($('#exc-poll-'+key+':checked').val()){
if(reply || bt || fav || follow){
excludetxt=excludetxt+"&exclude_types[]=poll"
}else{
excludetxt="?exclude_types[]=poll"
}
}else{
}
localStorage.setItem("exclude-"+key,excludetxt)
@@ -391,6 +438,9 @@ function exclude(key){
}
function excludeCk(key,target){
var exc=localStorage.getItem("exclude-"+key);
if(!exc){
return "";
}
if(~exc.indexOf(target)){
return "checked"
}else{

View File

@@ -1,14 +1,10 @@
function listToggle(){
if ($("#list-box").hasClass("hide")) {
$("#list-box").removeClass("hide");
$("#list-box").addClass("show");
$("#list-box").css("bottom","40px");
$("#list-box").css("left",$('#list-tgl').offset().left-$('#list-box').width()/2+"px");
//リストロード
} else {
$("#list-box").removeClass("show");
$("#list-box").addClass("hide")
}
function listMenu(){
$("#left-menu div").removeClass("active");
$("#listMenu").addClass("active");
$(".menu-content").addClass("hide");
$("#list-box").removeClass("hide");
$('ul.tabs').tabs('select_tab', 'src-sta');
$("#src-contents").html("");
}
@@ -56,12 +52,12 @@ function makeNewList(){
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({
title: text
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
list();
$("#list-add").val("")
@@ -166,12 +162,12 @@ function listAdd(id,user,acct_id){
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({
account_ids: [user]
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
hisList(user,acct_id)
}
@@ -186,12 +182,12 @@ function listRemove(id,user,acct_id){
httpreq.open('DELETE', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({
account_ids: [user]
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
hisList(user,acct_id)
}

View File

@@ -606,7 +606,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
});
poll='<div class="vote_'+toot.id+'">'+poll+'</div>';
}
//Reactions
//Reactions
if(toot.reactionCounts){
if(toot.reactionCounts.like){
var like=toot.reactionCounts.like;

View File

@@ -54,13 +54,12 @@ function mixtl(acct_id, tlid, type,delc,voice) {
var mute=[];
}
if(type=="integrated"){
templete = templete+parse([timeline[key]], '', acct_id, tlid, "", mute);
templete = templete+parse([timeline[key]], '', acct_id, tlid, "", mute, "mix");
}else if(type=="plus"){
if(timeline[key].account.acct==timeline[key].account.username){
templete = templete+parse([timeline[key]], '', acct_id, tlid, "", mute);
templete = templete+parse([timeline[key]], '', acct_id, tlid, "", mute, "plus");
}
}
}
}
@@ -124,7 +123,7 @@ function mixre(acct_id, tlid, TLtype, mute,delc,voice,mode) {
if(voice){
say(obj.content)
}
var templete = parse([obj], type, acct_id, tlid,"",mute);
var templete = parse([obj], type, acct_id, tlid,"",mute, "mix");
var pool = localStorage.getItem("pool_" + tlid);
if (pool) {
pool = templete + pool;
@@ -168,7 +167,7 @@ function mixre(acct_id, tlid, TLtype, mute,delc,voice,mode) {
var templete = parse([obj], '', acct_id, tlid);
}else if(TLtype=="plus"){
if(obj.account.acct==obj.account.username){
var templete = parse([obj], '', acct_id, tlid,"",mute);
var templete = parse([obj], '', acct_id, tlid,"",mute, "mix");
}else{
var templete="";
}
@@ -177,7 +176,7 @@ function mixre(acct_id, tlid, TLtype, mute,delc,voice,mode) {
if(voice){
say(obj.content)
}
var templete = parse([obj], type, acct_id, tlid,"",mute);
var templete = parse([obj], type, acct_id, tlid,"",mute,"mix");
var pool = localStorage.getItem("pool_" + tlid);
if (pool) {
pool = templete + pool;
@@ -240,6 +239,7 @@ function mixmore(tlid,type) {
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
var acct_id = obj[tlid].domain;
moreloading=true;
todo("Integrated TL MoreLoading...(Local)");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
@@ -291,10 +291,10 @@ function mixmore(tlid,type) {
var mute=[];
}
if(type=="integrated"){
templete = templete+parse([timeline[key]], '', acct_id, tlid,"",mute);
templete = templete+parse([timeline[key]], '', acct_id, tlid,"",mute,"mix");
}else if(type=="plus"){
if(timeline[key].account.acct==timeline[key].account.username){
templete = templete+parse([timeline[key]], '', acct_id, tlid,"",mute);
templete = templete+parse([timeline[key]], '', acct_id, tlid,"",mute,"mix");
}
}
}
@@ -303,9 +303,9 @@ function mixmore(tlid,type) {
});
$("#timeline_" + tlid).append(templete);
mixre(acct_id, tlid);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
moreloading=false;
todc();
});
});

View File

@@ -15,18 +15,16 @@ function notfColumn(acct_id, tlid, sys){
native="yes";
}
var domain = localStorage.getItem("domain_" + acct_id);
console.log(start)
var httpreq = new XMLHttpRequest();
if(localStorage.getItem("mode_" + domain)=="misskey"){
var misskey=true;
var start = "https://" + domain + "/api/i/notifications";
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify({
i:at
})
}
httpreq.open(POST, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
var body=JSON.stringify({
i:at
});
}else{
var misskey=false;
if(localStorage.getItem("exclude-"+tlid)){
@@ -35,73 +33,72 @@ function notfColumn(acct_id, tlid, sys){
var exc="";
}
var start = "https://" + domain + "/api/v1/notifications"+exc;
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
httpreq.open("GET", start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
var body="";
}
httpreq.responseType = "json";
httpreq.send(body);
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) {
var json = httpreq.response;
var max_id = httpreq.getResponseHeader("link").match(/[?&]{1}max_id=([0-9]+)/)[1];
if(json[0]){
var templete="";
var lastnotf=localStorage.getItem("lastnotf_" + acct_id);
localStorage.setItem("lastnotf_" + acct_id,json[0].id);
Object.keys(json).forEach(function(key) {
var obj = json[key];
if(lastnotf==obj.id && key>0 && native=="yes"){
var ct=key;
if(key>14){
ct="15+";
}
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: ct+lang_notf_new[lang],
icon: localStorage.getItem("prof_"+acct_id)
};
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]);
}
}
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"notif");
}else{
var mute=[];
}
if(obj.type!="follow"){
if(misskey){
templete = templete+misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1, mute);
}
}else{
if(misskey){
templete = templete+misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
}
}
});
templete=templete+'<div class="hide notif-marker" data-maxid="'+max_id+'"></div>';
$("#timeline_" + tlid).html(templete);
$("#landing_" + tlid).hide();
jQuery("time.timeago").timeago();
}
$("#notf-box").addClass("fetched");
todc();
}
}
fetch(start, i).then(function(response) {
console.log(response.headers.get('link'));
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if(json[0]){
var templete="";
var lastnotf=localStorage.getItem("lastnotf_" + acct_id);
localStorage.setItem("lastnotf_" + acct_id,json[0].id);
Object.keys(json).forEach(function(key) {
var obj = json[key];
if(lastnotf==obj.id && key>0 && native=="yes"){
var ct=key;
if(key>14){
ct="15+";
}
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: ct+lang_notf_new[lang],
icon: localStorage.getItem("prof_"+acct_id)
};
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]);
}
}
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"notif");
}else{
var mute=[];
}
if(obj.type!="follow"){
if(misskey){
templete = templete+misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1, mute);
}
}else{
if(misskey){
templete = templete+misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
}
}
});
$("#timeline_" + tlid).html(templete);
$("#landing_" + tlid).hide();
jQuery("time.timeago").timeago();
}
$("#notf-box").addClass("fetched");
todc();
});
if(!misskey){
if(localStorage.getItem("streaming_" + acct_id)){
var wss=localStorage.getItem("streaming_" + acct_id)
@@ -171,6 +168,7 @@ function notfColumn(acct_id, tlid, sys){
if(!$("div[data-notfIndv=" + acct_id +"_"+obj.id+"]").length){
$(".tl[data-notf=" + acct_id +"]").prepend(templete);
}
$(".notf-timeline[data-acct=" + acct_id +"]").prepend(templete);
jQuery("time.timeago").timeago();
} else if (type == "delete") {
$("[toot-id=" + obj + "]").hide();
@@ -354,6 +352,8 @@ function notfCommon(acct_id, tlid, sys) {
}
//一定のスクロールで発火
function notfmore(tlid) {
console.log(moreloading);
console.log("kicked");
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
var acct_id = obj[tlid].domain;
@@ -362,72 +362,79 @@ function notfmore(tlid) {
}else{
var data;
}
var sid = $("#timeline_" + tlid + " .cvo").last().attr("toot-id");
console.log(sid);
if (localStorage.getItem("morelock") != sid) {
localStorage.setItem("morelock", sid);
localStorage.setItem("now", type);
todo("Notfication TL MoreLoading");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var misskey=true;
var start = "https://" + domain + "/api/i/notifications";
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify({
i:at,
untilId:sid
})
}
}else{
var misskey=false;
var start = "https://" + domain + "/api/v1/notifications"+
"max_id=" + sid;
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}
}
fetch(start, i,
).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete="";
Object.keys(json).forEach(function(key) {
var obj = json[key];
if(obj.type!="follow"){
if(misskey){
templete = templete+misskeyParse([obj.note], '', acct_id, tlid, -1);
}else{
templete = templete+parse([obj], '', acct_id, tlid, -1);
}
}else{
if(misskey){
templete = templete+misskeyUserparse([obj], '', acct_id, tlid, -1);
}else{
templete = templete+userparse([obj.account], '', acct_id, tlid, -1);
}
}
});
$("#timeline_" + tlid).append(templete);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
localStorage.removeItem("morelock")
todc();
var sid = $("#timeline_" + tlid + " .notif-marker").last().attr("data-maxid");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var domain = localStorage.getItem("domain_" + acct_id);
if (sid && !moreloading) {
moreloading=true;
var httpreq = new XMLHttpRequest();
if(localStorage.getItem("mode_" + domain)=="misskey"){
var misskey=true;
var start = "https://" + domain + "/api/i/notifications";
httpreq.open(POST, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
var body=JSON.stringify({
i:at,
untilID:sid
});
}else{
var misskey=false;
if(localStorage.getItem("exclude-"+tlid)){
var exc=localStorage.getItem("exclude-"+tlid)+"&max_id="+sid;
}else{
var exc="?max_id="+sid;
}
var start = "https://" + domain + "/api/v1/notifications"+exc;
httpreq.open("GET", start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
var body="";
}
httpreq.responseType = "json";
httpreq.send(body);
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
var max_id = httpreq.getResponseHeader("link").match(/[?&]{1}max_id=([0-9]+)/)[1];
if(json[0]){
var templete="";
var lastnotf=localStorage.getItem("lastnotf_" + acct_id);
localStorage.setItem("lastnotf_" + acct_id,json[0].id);
Object.keys(json).forEach(function(key) {
var obj = json[key];
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"notif");
}else{
var mute=[];
}
if(obj.type!="follow"){
if(misskey){
templete = templete+misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1, mute);
}
}else{
if(misskey){
templete = templete+misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
}
}
});
moreloading=false;
templete=templete+'<div class="hide notif-marker" data-maxid="'+max_id+'"></div>';
$("#timeline_" + tlid).append(templete);
$("#landing_" + tlid).hide();
jQuery("time.timeago").timeago();
}
$("#notf-box").addClass("fetched");
todc();
}
}
}
}
//通知トグルボタン

View File

@@ -1,14 +1,13 @@
//オブジェクトパーサー(トゥート)
function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var templete = '';
if(obj[0]){
if(tlid==1){
if(tlid===1){
console.log("testalive:"+"lastunix_"+ tlid+":"+date(obj[0].created_at, 'unix'))
}
localStorage.setItem("lastunix_"+ tlid,date(obj[0].created_at, 'unix'));
}
var actb = localStorage.getItem("action_btns");
var actb='re,rt,fav,qt,del,pin,red';
if(actb){
var actb = actb.split(',');
@@ -22,12 +21,23 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
disp[actb[k]]=tp;
}
}
var qt = localStorage.getItem("quote");
if(qt=="nothing" || !qt){
var qtClass="hide";
}else{
var qtClass="";
}
var datetype = localStorage.getItem("datetype");
var nsfwtype = localStorage.getItem("nsfw");
var sent = localStorage.getItem("sentence");
var ltr = localStorage.getItem("letters");
var gif = localStorage.getItem("gif");
var imh = localStorage.getItem("img-height");
if(imh=="full"){
imh="auto";
}else{
imh=imh+"px";
}
//独自ロケール
var locale = localStorage.getItem("locale");
if(locale=="yes"){
@@ -73,12 +83,18 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}else{
var ticker=false;
}
//Animation
var anime = localStorage.getItem("animation");
if (anime=="yes" || !anime) {
var animecss="cvo-anime";
}else{
var animecss="";
}
//Cards
var card = localStorage.getItem("card_" + tlid);
if (!sent) {
var sent = 500;
sent = 500;
}
if (!ltr) {
var ltr = 500;
@@ -134,6 +150,16 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
var noauth="";
var antinoauth="hide";
}
//DMTL
if(type=="dm"){
var dmHide="hide";
var antidmHide="";
}else{
var dmHide="";
var antidmHide="hide";
}
//マウスオーバーのみ
var mouseover=localStorage.getItem("mouseover");
if(!mouseover){
@@ -152,6 +178,10 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
var times=[];
Object.keys(obj).forEach(function(key) {
var toot = obj[key];
if(type=="dm"){
var dmid=toot.id;
toot=toot.last_status;
}
var dis_name=escapeHTML(toot.account.display_name);
if(toot.account.emojis){
var actemojick = toot.account.emojis[0];
@@ -163,7 +193,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
Object.keys(toot.account.emojis).forEach(function(key5) {
var emoji = toot.account.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
var emoji_url = '<img draggable="false" src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url);
@@ -179,7 +209,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
noticeavatar='<a onclick="udg(\'' + toot.account.id +
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
'<img src="' + noticeavatar +
'<img draggable="false" src="' + noticeavatar +
'" width="20" class="notf-icon prof-img" user="' + toot.account.acct +
'"></a>';
if (toot.type == "mention") {
@@ -198,6 +228,9 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
if(!locale && localStorage.getItem("fav_" + acct_id)){
what = localStorage.getItem("fav_" + acct_id);
}
} else if (toot.type == "poll") {
var what = lang.lang_parse_polled;
var icon = "fa-tasks purple-text";
}
var noticetext = '<span class="cbadge cbadge-hover"title="' + date(toot.created_at,
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
@@ -288,7 +321,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
noticeavatar='<a onclick="udg(\'' + toot.account.id +
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
'<img src="' + noticeavatar +
'<img draggable="false" src="' + noticeavatar +
'" width="20" class="notf-icon prof-img" user="' + toot.account.acct +
'"></a>';
var rebtxt = lang.lang_parse_btedsimple;
@@ -315,7 +348,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
Object.keys(toot.account.emojis).forEach(function(key5) {
var emoji = toot.account.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
var emoji_url = '<img draggable="false" src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url);
@@ -324,7 +357,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
} else {
var uniqueid=toot.id;
var notice = "";
var boostback = "";
var boostback = "unshared";
//ユーザー強調
if(toot.account.username!=toot.account.acct){
var fullname=toot.account.acct;
@@ -357,6 +390,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
if (!toot.application) {
var via = '';
viashow="hide";
} else {
var via = toot.application.name;
//強調チェック
@@ -374,6 +408,9 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
});
}
if(mix=="pinned"){
boostback = "emphasized";
}
if (toot.spoiler_text && cw) {
var content = toot.content;
var spoil = escapeHTML(toot.spoiler_text);
@@ -422,7 +459,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
Object.keys(toot.emojis).forEach(function(key5) {
var emoji = toot.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
var emoji_url = '<img draggable="false" src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
content = content.replace(regExp, emoji_url);
@@ -440,7 +477,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
Object.keys(toot.profile_emojis).forEach(function(keynico) {
var emoji = toot.profile_emojis[keynico];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
var emoji_url = '<img draggable="false" src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
content = content.replace(regExp, emoji_url);
@@ -479,9 +516,9 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',\'' +
acct_id + '\')" id="' + id + '-image-' + key2 + '" data-url="' + url +
'" data-type="' + media.type + '" class="img-parsed"><img src="' +
'" data-type="' + media.type + '" class="img-parsed"><img draggable="false" src="' +
purl + '" class="' + sense +
' toot-img pointer" style="width:' + cwdt + '%; height:'+imh+'px;"></a></span>';
' toot-img pointer" style="width:calc(' + cwdt + '% - 1px); height:'+imh+';"></a></span>';
});
media_ids = media_ids.slice(0, -1) ;
} else {
@@ -493,12 +530,27 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
//メンションであれば
if (menck) {
mentions = "";
var to_mention=[];
Object.keys(toot.mentions).forEach(function(key3) {
var mention = toot.mentions[key3];
mentions = mentions + '<a onclick="udg(\'' + mention.id + '\',' +
acct_id + ')" class="pointer">@' + mention.acct + '</a> ';
//自分は除外
//自インスタンスかどうかを確認し、IDの一致
if(mention.acct==mention.username && mention.id==localStorage.getItem("user-id_" + acct_id)){
//自分
}else{
//そのトゥの人NG
if(toot.account.acct!=mention.acct){
to_mention.push(mention.acct);
}
}
});
to_mention.push(toot.account.acct);
mentions = '<div style="float:right">' + mentions + '</div>';
}else{
var to_mention=[toot.account.acct];
}
var tagck = toot.tags[0];
var tags = "";
@@ -604,34 +656,37 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
});
}
//日本語じゃない
if(toot.language!="ja"){
var trans='<div class="action pin"><a onclick="trans(\''+toot.language+'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_trans+'"><i class="material-icons">g_translate</i></a></div>';
if(toot.language!=lang.language && toot.language){
var trans='<div class="action pin"><a onclick="trans(\''+toot.language+'\',\''+lang.language+'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_trans+'"><i class="material-icons">g_translate</i></a></div>';
}else{
var trans="";
}
//Cards
if (!card && toot.card) {
var cards=toot.card;
if (cards.provider_name=="Twitter"){
if(cards.image){
var twiImg='<br><img src="'+cards.image+'">';
}else{
var twiImg='';
if (cards.provider_name=="Twitter"){
if(cards.image){
var twiImg='<br><img draggable="false" src="'+cards.image+'">';
}else{
var twiImg='';
}
analyze='<blockquote class="twitter-tweet"><b>'+escapeHTML(cards.author_name)+'</b><br>'+escapeHTML(cards.description)+twiImg+'</blockquote>';
}
analyze='<blockquote class="twitter-tweet"><b>'+escapeHTML(cards.author_name)+'</b><br>'+escapeHTML(cards.description)+twiImg+'</blockquote>';
}
if (cards.title) {
analyze="<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + escapeHTML(cards.title) + "<br>" +
escapeHTML(cards.description) + "</span>";
}
if (cards.html) {
analyze=cards.html+'<i class="material-icons" onclick="pip('+id+')" title="'+lang.lang_cards_pip+'">picture_in_picture_alt</i>';
}
if (cards.title) {
analyze="<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + escapeHTML(cards.title) + "<br>" +
escapeHTML(cards.description) + "</span>";
}
if (cards.html) {
analyze=cards.html+'<i class="material-icons" onclick="pip('+id+')" title="'+lang.lang_cards_pip+'">picture_in_picture_alt</i>';
}
}
//Ticker
var tickerdom="";
if(ticker){
var tickerdata=JSON.parse(localStorage.getItem("ticker"));
var tickerdata=localStorage.getItem("ticker")
if(tickerdata){
var tickerdata=JSON.parse(tickerdata);
var thisdomain=toot.account.acct.split("@");
if(thisdomain.length>1){
@@ -640,20 +695,55 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
for( var i=0; i<tickerdata.length; i++) {
var value=tickerdata[i];
if(value.domain==thisdomain){
var tickerdom='<div style="background:linear-gradient(to left,transparent, '+value.bg+' 96%) !important; color:'+value.text+';width:100%; height:0.9rem; font-size:0.8rem;"><img src="'+value.image+'" style="height:100%;"><span style="position:relative; top:-0.2rem;"> '+value.name+'</span></div>';
var tickerdom='<div style="background:linear-gradient(to left,transparent, '+value.bg+' 96%) !important; color:'+value.text+';width:100%; height:0.9rem; font-size:0.8rem;"><img draggable="false" src="'+value.image+'" style="height:100%;"><span style="position:relative; top:-0.2rem;"> '+value.name+'</span></div>';
break;
}
}
}
}
//Poll
var poll="";
if(toot.poll){
var choices=toot.poll.options;
if(toot.poll.voted){
var myvote=lang.lang_parse_voted;
var result_hide="";
}else{
myvote='<a onclick="voteMastodon(\''+acct_id+'\',\''+toot.poll.id+'\')" class="votebtn">'+lang.lang_parse_vote+'</a><br>';
if(choices[0].votes_count===0 || choices[0].votes_count>0){
myvote=myvote+'<a onclick="showResult(\''+acct_id+'\',\''+toot.poll.id+'\')" class="pointer">'+lang.lang_parse_unvoted+"</a>";
}
var result_hide="hide";
}
if(toot.poll.expired){
var ended=lang.lang_parse_endedvote;
}else{
var ended=date(toot.poll.expires_at, datetype);
}
Object.keys(choices).forEach(function(keyc) {
var choice = choices[keyc];
if(!toot.poll.voted && !toot.poll.expired){
var votesel='voteSelMastodon(\''+acct_id+'\',\''+toot.poll.id+'\','+keyc+','+toot.poll.multiple+')';
var voteclass="pointer waves-effect waves-light";
}else{
var votesel="";
var voteclass="";
}
poll=poll+'<div class="'+voteclass+' vote vote_'+acct_id+'_'+toot.poll.id+'_'+keyc+'" onclick="'+votesel+'">'+choice.title+'<span class="vote_'+acct_id+'_'+toot.poll.id+'_result '+result_hide+'">('+choice.votes_count+')</span></div>';
});
poll='<div class="vote_'+acct_id+'_'+toot.poll.id+'">'+poll+myvote+'<span class="cbadge cbadge-hover" title="' + date(toot.poll.expires_at, 'absolute') +
'"><i class="fa fa-calendar-times-o"></i>' +
ended+ '</span></div>';
}
templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' +
boostback + ' ' + fav_app + ' ' + rt_app + ' ' + pin_app +
' ' + hasmedia + '" toot-id="' + id + '" unique-id="' + uniqueid + '" data-medias="'+media_ids+' " unixtime="' + date(obj[
' ' + hasmedia + ' '+animecss+'" toot-id="' + id + '" unique-id="' + uniqueid + '" data-medias="'+media_ids+' " unixtime="' + date(obj[
key].created_at, 'unix') + '" '+if_notf+' onmouseover="mov(\'' + toot.id + '\',\''+tlid+'\',\'mv\')" onclick="mov(\'' + toot.id + '\',\''+tlid+'\',\'cl\')" onmouseout="resetmv(\'mv\')">' +
'<div class="area-notice"><span class="gray sharesta">' + notice + home +
'</span></div>' +
'<div class="area-icon"><a onclick="udg(\'' + toot.account.id +
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
'<img src="' + avatar +
'<img draggable="false" src="' + avatar +
'" width="40" class="prof-img" user="' + toot.account.acct +
'"></a>'+noticeavatar+'</div>' +
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
@@ -672,27 +762,28 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
'' + viewer + '' +
'</div><div class="area-additional"><span class="additional">' + analyze +
'</span>' +
'' + mentions + tags + '</div>' +
'' +poll+ mentions + tags + '</div>' +
'<div class="area-vis"></div>'+
'<div class="area-actions '+mouseover+'">' +
'<div class="action">'+vis+'</div>'+
'<div class="action '+antinoauth+'"><a onclick="detEx(\''+toot.url+'\',\'main\')" class="waves-effect waves-dark details" style="padding:0">'+lang.lang_parse_det+'</a></div>' +
'<div class="action '+antidmHide+'"><a onclick="details(\'' + toot.id + '\',' + acct_id +',\''+tlid+'\',\'normal\')" class="waves-effect waves-dark details" style="padding:0">'+lang.lang_parse_thread+'</a></div>' +
'<div class="action '+disp["re"]+' '+noauth+'"><a onclick="re(\'' + toot.id +
'\',\'' + toot.account.acct + '\',' +
'\',\'' + to_mention + '\',' +
acct_id + ',\''+visen+
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_replyto+'"><i class="fa fa-share"></i><span class="rep_ct">' + replyct +
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="'+lang.lang_parse_replyto+'"><i class="fa fa-share"></i><span class="rep_ct">' + replyct +
'</a></span></a></div>' +
'<div class="action '+can_rt+' '+disp["rt"]+' '+noauth+'"><a onclick="rt(\'' + toot.id + '\',' + acct_id +
',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_bt+'"><i class="text-darken-3 fa fa-retweet ' +
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="'+lang.lang_parse_bt+'"><i class="fa fa-retweet ' +
if_rt + ' rt_' + toot.id + '"></i><span class="rt_ct">' + toot.reblogs_count +
'</span></a></div>' +
'<div class="action '+can_rt+' '+disp["qt"]+' '+noauth+'"><a onclick="qt(\'' + toot.id + '\',' + acct_id +
'<div class="action '+can_rt+' '+disp["qt"]+' '+noauth+' '+qtClass+'"><a onclick="qt(\'' + toot.id + '\',' + acct_id +
',\'' + toot.account.acct +'\',\''+toot.url+
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_quote+'"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="'+lang.lang_parse_quote+'"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
'<div class="action '+disp["fav"]+' '+noauth+'"><a onclick="fav(\'' + toot.id + '\',' + acct_id +
',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_fav+'"><i class="fa text-darken-3 fa-star' +
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="'+lang.lang_parse_fav+'"><i class="fa text-darken-3 fa-star' +
if_fav + ' fav_' + toot.id + '"></i><span class="fav_ct">' + toot.favourites_count +
'</a></span></div>' +
'<div class="' + if_mine + ' action '+disp["del"]+' '+noauth+'"><a onclick="del(\'' + toot.id + '\',' +
@@ -709,7 +800,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
'</span>'+
'</div><div class="area-side '+mouseover+'"><div class="action ' + if_mine + ' '+noauth+'"><a onclick="toggleAction(\'' + toot.id + '\',\''+tlid+'\',\''+acct_id+'\')" class="waves-effect waves-dark btn-flat" style="padding:0"><i class="text-darken-3 material-icons act-icon">expand_more</i></a></div>' +
'<div class="action '+noauth+'"><a onclick="details(\'' + toot.id + '\',' + acct_id +
',\''+tlid+'\')" class="waves-effect waves-dark btn-flat details" style="padding:0"><i class="text-darken-3 material-icons">more_vert</i></a></div>' +
',\''+tlid+'\',\'normal\')" class="waves-effect waves-dark btn-flat details '+dmHide+'" style="padding:0"><i class="text-darken-3 material-icons">more_vert</i></a></div>' +
'</div></div>' +
'</div></div>';
});
@@ -750,8 +841,8 @@ function userparse(obj, auth, acct_id, tlid, popup) {
var auth = "";
}
var ftxt=lang.lang_parse_followed;
if(!locale && localStorage.getItem("follow_" + acct_id)){
ftxt = localStorage.getItem("follow_" + acct_id);
if(!locale && localStorage.getItem("followlocale_" + acct_id)){
ftxt = localStorage.getItem("followlocale_" + acct_id);
}
if(popup > 0 || popup==-1 || notf){
var notftext=ftxt+'<br>';
@@ -808,7 +899,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
Object.keys(toot.emojis).forEach(function(key5) {
var emoji = toot.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
var emoji_url = '<img draggable="false" src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url);
@@ -820,7 +911,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
if(toot.avatar){
var avatar=toot.avatar;
}else{
var avatar="./img/missing.svg";
var avatar="../../img/missing.svg";
}
templete = templete +
@@ -828,7 +919,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
notftext +
'</div><div class="area-icon"><a onclick="udg(\'' + toot.id + '\',' +
acct_id + ');" user="' + toot.acct + '" class="udg">' +
'<img src="' + avatar + '" width="40" class="prof-img" user="' + toot
'<img draggable="false" src="' + avatar + '" width="40" class="prof-img" user="' + toot
.acct + '"></a></div>' +
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
dis_name + '</span>' +
@@ -862,7 +953,7 @@ function client(name) {
buttons: [lang.lang_parse_clientno,lang.lang_parse_clientemp, lang.lang_parse_clientmute]
}
dialog.showMessageBox(options, function(arg) {
if(arg==1){
if(arg===1){
var cli = localStorage.getItem("client_emp");
var obj = JSON.parse(cli);
if(!obj){
@@ -890,7 +981,7 @@ function client(name) {
}
var json = JSON.stringify(obj);
localStorage.setItem("client_emp", json);
}else if(arg==2){
}else if(arg===2){
var cli = localStorage.getItem("client_mute");
var obj = JSON.parse(cli);
if(!obj){

119
app/js/tl/poll.js Normal file
View File

@@ -0,0 +1,119 @@
//アンケートのトグル
function pollToggle() {
if ($("#poll").hasClass("hide")) {
$("#right-side").show()
$("#poll").removeClass("hide")
} else {
$("#right-side").hide()
$("#emoji").addClass("hide")
$("#poll").addClass("hide")
}
}
function pollProviderCk(){
$(".poll-provider").addClass("hide");
$("#"+$("#poll-sel").val()).removeClass("hide");
}
/*
function pollAddtime(num){
var last=$("#expires_in").val();
last=last*1-(num*-1);
$("#expires_in").val(last);
pollCalc();
}
*/
function pollCalc(){
var days=$("#days_poll").val();
var hrs=$("#hours_poll").val();
var mins=$("#mins_poll").val();
console.log(days*86400+hrs*3600+mins*60)
return days*86400+hrs*3600+mins*60;
}
//Vote
function voteSelMastodon(acct_id,id,to,mul){
console.log('.vote_'+acct_id+'_'+id+'_'+to);
if($('.vote_'+acct_id+'_'+id+'_'+to).hasClass("sel")){
$('.vote_'+acct_id+'_'+id+'_'+to).css("background-color","transparent")
$('.vote_'+acct_id+'_'+id+'_'+to).removeClass("sel");
}else{
if(!mul){
$('.vote_'+acct_id+'_'+id+' div' ).each(function(i, elem) {
if(i==to){
$(this).css("background-color","var(--emphasized)");
$(this).addClass("sel");
}else{
$(this).css("background-color","transparent")
$(this).removeClass("sel");
}
});
}else{
$('.vote_'+acct_id+'_'+id+'_'+to).css("background-color","var(--emphasized)")
$('.vote_'+acct_id+'_'+id+'_'+to).addClass("sel");
}
}
}
function voteMastodon(acct_id,id){
var choice=[];
$('.vote_'+acct_id+'_'+id+' div' ).each(function(i, elem) {
if($(this).hasClass("sel")){
choice.push(i+"");
}
});
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/polls/"+id+"/votes";
if(localStorage.getItem("mode_" + domain)=="misskey"){
return false;
}
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = "json";
httpreq.send(JSON.stringify({choices:choice}));
httpreq.onreadystatechange = function() {
voteMastodonrefresh(acct_id,id)
}
}
function showResult(acct_id,id){
$('.vote_'+acct_id+'_'+id+'_result').toggleClass("hide")
}
function voteMastodonrefresh(acct_id,id){
var datetype = localStorage.getItem("datetype");
if (!datetype) {
datetype = "absolute";
}
var httpreqd = new XMLHttpRequest();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/polls/"+id;
httpreqd.open('GET', start, true);
httpreqd.setRequestHeader('Content-Type', 'application/json');
httpreqd.responseType = 'json';
httpreqd.send(JSON.stringify({i:at,noteId:id}));
httpreqd.onreadystatechange = function() {
if (httpreqd.readyState == 4) {
var json = httpreqd.response;
console.log(json);
if(!json){
return false;
}
var poll="";
var choices=json.options;
var myvote=lang.lang_parse_voted;
var result_hide="";
Object.keys(choices).forEach(function(keyc) {
var choice = choices[keyc];
if(!json.voted){
votesel='voteSelMastodon(\''+acct_id+'\',\''+json.id+'\','+keyc+','+json.multiple+')';
}
poll=poll+'<div class="pointer vote vote_'+acct_id+'_'+json.id+'_'+keyc+'" onclick="'+votesel+'">'+choice.title+'<span class="vote_'+acct_id+'_'+json.id+'_result '+result_hide+'">('+choice.votes_count+')</span></div>';
});
poll=poll+myvote+'<span class="cbadge cbadge-hover" title="' + date(json.expires_at, 'absolute') +
'"><i class="fa fa-calendar-times-o"></i>' +
date(json.expires_at, datetype) + '</span>';
$('.vote_'+acct_id+'_'+json.id).html(poll)
}
}
}

View File

@@ -1,10 +1,10 @@
//検索
//検索ボックストグル
function srcToggle() {
$("#src-box").toggleClass("hide");
$("#src-box").toggleClass("show");
$("#src-box").css("bottom","40px");
$("#src-box").css("left",$('#src-tgl').offset().left-$('#src-box').width()/2+"px");
function searchMenu() {
$("#left-menu div").removeClass("active");
$("#searchMenu").addClass("active");
$(".menu-content").addClass("hide");
$("#src-box").removeClass("hide");
$('ul.tabs').tabs('select_tab', 'src-sta');
$("#src-contents").html("");
}
@@ -116,7 +116,7 @@ function graphDraw(tag){
var two=50-(his[2].uses/max*50);
var one=50-(his[1].uses/max*50);
var zero=50-(his[0].uses/max*50);
if(max==0){
if(max===0){
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">'+
'</svg><span style="font-size:200%">'+his[0].uses+'</span>toots&nbsp;<a onclick="tl(\'tag\',\'' + tag.name + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+lang.lang_src_people;

View File

@@ -54,10 +54,19 @@ function favTag(){
var obj = JSON.parse(tagarr);
}
var tags="";
var nowPT=localStorage.getItem("stable")
Object.keys(obj).forEach(function(key) {
var tag = obj[key];
tags = tags + '<a onclick="tagShow(\'' + tag + '\')" class="pointer">#' + tag + '</a><span class="hide" data-tag="' + tag + '"> <a onclick="tagTL(\'tag\',\'' + tag + '\',false,\'add\')" class="pointer" title="' +lang.lang_parse_tagTL.replace("{{tag}}" ,'#'+tag)+ '">TL</a> <a onclick="brInsert(\'#' + tag + '\')" class="pointer" title="' + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag) + '">Toot</a> '+
'<a onclick="autoToot(\'#' + tag + ' \');brInsert(\'#' + tag + ' \')" class="pointer" title="'+lang.lang_tags_always + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag) + '">'+lang.lang_tags_realtime+'</a> <a onclick="tagRemove(\'' + key + '\')" class="pointer" title="' +lang.lang_tags_tagunpin.replace("{{tag}}" ,'#'+tag)+ '">'+lang.lang_del+'</a></span> ';
if(nowPT!=tag){
console.log(nowPT+"/"+tag);
var ptt=lang.lang_tags_realtime;
var nowon="";
}else{
var ptt=lang.lang_tags_unrealtime;
var nowon="("+lang.lang_tags_realtime+")";
}
tags = tags + '<a onclick="tagShow(\'' + tag + '\')" class="pointer">#' + tag + '</a>'+nowon+'<span class="hide" data-tag="' + tag + '"> <a onclick="tagTL(\'tag\',\'' + tag + '\',false,\'add\')" class="pointer" title="' +lang.lang_parse_tagTL.replace("{{tag}}" ,'#'+tag)+ '">TL</a> <a onclick="brInsert(\'#' + tag + '\')" class="pointer" title="' + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag) + '">Toot</a> '+
'<a onclick="autoToot(\'' + tag + '\');" class="pointer" title="'+lang.lang_tags_always + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag) + '">'+ptt+'</a> <a onclick="tagRemove(\'' + key + '\')" class="pointer" title="' +lang.lang_tags_tagunpin.replace("{{tag}}" ,'#'+tag)+ '">'+lang.lang_del+'</a></span> ';
});
if(obj.length>0){
$("#taglist").append("My Tags:" + tags);
@@ -106,6 +115,14 @@ function tagTL(a,b,c,d){
tl(a,b,acct_id,d);
}
function autoToot(tag){
localStorage.setItem("stable",tag);
Materialize.toast(lang.lang_tags_tagwarn +replace("{{tag}}" ,tag).replace("{{tag}}" ,tag),3000);
var nowPT=localStorage.getItem("stable")
if(nowPT==tag){
localStorage.removeItem("stable");
Materialize.toast(lang.lang_tags_unrealtime,3000);
}else{
localStorage.setItem("stable",tag);
Materialize.toast(lang.lang_tags_tagwarn.replace("{{tag}}" ,tag).replace("{{tag}}" ,tag),3000);
brInsert('#' + tag+" ")
}
favTag();
}

View File

@@ -1,4 +1,5 @@
//TL取得
moreloading=false;
function tl(type, data, acct_id, tlid, delc, voice, mode) {
scrollevent();
localStorage.removeItem("morelock");
@@ -52,7 +53,14 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
"user_" + acct_id) + "@" + domain + ")");
$("#notice_icon_" + tlid).text("notifications");
return;
}
}/*else if (type == "dm") {
//DMなら飛ばす
dm(acct_id, tlid, "plus",delc,voice);
$("#notice_" + tlid).text(cap(type, data, acct_id) + "(" + localStorage.getItem(
"user_" + acct_id) + "@" + domain + ")");
$("#notice_icon_" + tlid).text("mail_outline");
return;
}*/
localStorage.setItem("now", type);
todo(cap(type) + " TL Loading...");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
@@ -80,6 +88,7 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
if(type!="noauth"){
req.i=at;
}
if(type=="local-media"||type=="pub-media"){
req.mediaOnly=true;
}
@@ -104,7 +113,11 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
url=url+"local=true";
}
}
var start = "https://" + domain + "/api/v1/timelines/" + url;
if(type=="dm"){
var start = "https://" + domain + "/api/v1/conversations";
}else{
var start = "https://" + domain + "/api/v1/timelines/" + url;
}
var method="GET";
var i={
method: method,
@@ -129,7 +142,7 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
if(misskey){
var templete = misskeyParse(json, type, acct_id, tlid, "", mute);
}else{
var templete = parse(json, type, acct_id, tlid, "", mute);
var templete = parse(json, type, acct_id, tlid, "", mute, type);
localStorage.setItem("lastobj_"+ tlid,json[0].id)
}
$("#timeline_" + tlid).html(templete);
@@ -279,8 +292,8 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
if(voice){
say(obj.content)
}
var templete = parse([obj], type, acct_id, tlid,"",mute);
if ($("timeline_box_"+tlid+"_box .tl-box").scrollTop() == 0) {
var templete = parse([obj], type, acct_id, tlid,"",mute, type);
if ($("timeline_box_"+tlid+"_box .tl-box").scrollTop() === 0) {
$("#timeline_" + tlid).prepend(templete);
}else{
var pool = localStorage.getItem("pool_" + tlid);
@@ -359,8 +372,7 @@ function moreload(type, tlid) {
var data=obj[tlid].data;
}
var sid = $("#timeline_" + tlid + " .cvo").last().attr("unique-id");
if (sid && localStorage.getItem("morelock") != sid) {
localStorage.setItem("morelock", sid);
if (sid && !moreloading) {
if (type == "mix" && localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))!="misskey") {
mixmore(tlid,"integrated");
return;
@@ -371,6 +383,7 @@ function moreload(type, tlid) {
notfmore(tlid);
return;
}
moreloading=true;
localStorage.setItem("now", type);
todo(cap(type) + " TL MoreLoading");
if(type!="noauth"){
@@ -418,6 +431,10 @@ function moreload(type, tlid) {
var misskey=false;
var start = "https://" + domain + "/api/v1/timelines/" + com(type,data) +
"max_id=" + sid;
if(type=="dm"){
var start = "https://" + domain + "/api/v1/conversations?" +
"max_id=" + sid;
}
var method="GET";
var i={
method: method,
@@ -432,15 +449,16 @@ function moreload(type, tlid) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
if(misskey){
var templete = misskeyParse(json, '', acct_id, tlid,"",mute);
}else{
var templete = parse(json, '', acct_id, tlid,"",mute);
var templete = parse(json, '', acct_id, tlid,"",mute, type);
}
$("#timeline_" + tlid).append(templete);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
localStorage.removeItem("morelock")
moreloading=false;
todc();
});
}
@@ -569,7 +587,7 @@ function com(type, data) {
return "tag/" + data + "?"
}else if (type == "list") {
return "list/" + data + "?"
}else if (type="dm") {
}else if (type=="dm") {
return "direct?"
}
}
@@ -596,22 +614,33 @@ function misskeycom(type, data) {
//TLのアイコン
function icon(type) {
if (type == "home") {
return "home"
} else if (type == "local" || type == "noauth" || type == "local-media") {
return "people_outline"
} else if (type == "pub" || type == "pub-media") {
return "language"
var response="home";
} else if (type == "local") {
var response="people_outline";
} else if (type == "local-media") {
var response="people_outline";
} else if (type == "pub") {
var response="language";
} else if (type == "pub-media") {
var response="language";
} else if (type == "tag") {
return "search"
var response="search";
} else if (type == "list") {
return "view_headline"
}else if (type == "list") {
return "subject"
}else if (type == "dm") {
return "mail"
}else if (type == "mix") {
return "share"
var response="view_headline";
} else if (type == "notf") {
var response="notifications";
} else if (type == "noauth") {
var response="people_outline";
} else if (type == "dm") {
var response="mail_outline";
} else if (type == "mix") {
var response="merge_type";
} else if (type == "plus") {
var response="merge_type";
}else if (type == "webview") {
var response="language";
}
return response;
}
function strAlive(){
var date = new Date() ;
@@ -672,5 +701,4 @@ function reconnector(tlid,type,acct_id,data,mode){
}
Materialize.toast(lang.lang_tl_reconnect, 2000);
}
strAliveInt()

View File

@@ -3,13 +3,14 @@
function imgv(id, key, acct_id) {
$("#imgprog").text(0);
$('#imgmodal').hide();
$('#imgmodal').attr('src', './img/loading.svg');
$('#imgmodal').attr('src', '../../img/loading.svg');
var murl = $("#" + id + "-image-" + key).attr("data-url");
var type = $("#" + id + "-image-" + key).attr("data-type");
$("#imagemodal").attr("data-id",id);
$("#imagemodal").attr("data-acct",acct_id);
$(document).ready(function() {
if (type == "image") {
$('#imagemodal').modal('open');
xhr = new XMLHttpRequest;
xhr.open('GET', murl, true);
xhr.addEventListener('progress', function (event) {
@@ -29,7 +30,6 @@ function imgv(id, key, acct_id) {
xhr.send();
$('#imgmodal').attr('src', murl);
$('#imagewrap').dragScroll(); // ドラッグスクロール設定
$('#imagemodal').modal('open');
$('#imgmodal').show();
$('#imagemodal').attr('data-key', key);
$('#imagemodal').attr('data-id', id);
@@ -45,61 +45,31 @@ function imgv(id, key, acct_id) {
var height = element.naturalHeight;
var windowH = $(window).height();
var windowW = $(window).width();
//小さい画像
if(width<(windowW - 50) && height<(windowH-1000)){
$("#imgmodal").css('height',height+"px");
$("#imgmodal").css('width',width+"px");
$("#imagewrap").css('height',height+"px");
$("#imagemodal").css('height',height+100+"px");
$("#imagewrap").css('width',width+"px");
$("#imagemodal").css('width',width+"px");
$("#imagemodal").css('margin-top',(windowH /2) - (height / 2) +"px");
}else{
$("#imagemodal").css('margin-top',0);
var aspect = width/height;
if (aspect < 2.8 && aspect > 0.3){
//moderate
if(windowW > windowH){
//画面が横長(縦幅基準)
$("#imgmodal").css('height',windowH/1.2-70+"px");
var imgW = (windowH/1.2-70)/height*width;
$("#imgmodal").css('width',imgW+"px");
$("#imagewrap").css('height',windowH/1.2-60+"px");
$("#imagemodal").css('height',windowH/1.2+"px");
$("#imagewrap").css('width',imgW+50+"px");
$("#imagemodal").css('width',imgW+50+"px");
}else{
//画面が縦長・正方形(横幅基準)
$("#imgmodal").css('width',windowW/1.2-30+"px");
var imgH = (windowW/1.2-30)/width*height;
$("#imgmodal").css('height',imgH+"px");
$("#imagewrap").css('width',windowW/1.2+"px");
$("#imagemodal").css('width',windowW/1.2+"px");
$("#imagewrap").css('height',imgH+60+"px");
$("#imagemodal").css('height',imgH+120+"px");
}
$("#imagemodal").css("bottom","0")
$("#imagemodal img").css("width","auto")
if(height<windowH){
$("#imagemodal").css("height",height+60+"px")
$("#imagemodal img").css("height","100%")
if(width>windowW*0.8){
$("#imagemodal").css("width","80vw")
$("#imagemodal img").css("width","100%")
var heightS=windowW*0.8/width*height;
$("#imagemodal").css("height",heightS+60+"px")
}else{
//極端な画像
if(height > width){
//縦長
$("#imgmodal").css('height',windowH-60+"px");
var imgW = (windowH-50)/height*width;
$("#imgmodal").css('width',imgW+"px");
$("#imagewrap").css('height',windowH-50+"px");
$("#imagemodal").css('height',windowH+"px");
$("#imagewrap").css('width',imgW+50+"px");
$("#imagemodal").css('width',imgW+50+"px");
}else{
//横長・正方形
$("#imgmodal").css('width',windowW-30+"px");
var imgH = (windowW-50)/width*height;
$("#imgmodal").css('height',imgH+"px");
$("#imagewrap").css('width',windowW+"px");
$("#imagemodal").css('width',windowW+"px");
$("#imagewrap").css('height',imgH+60+"px");
$("#imagemodal").css('height',imgH+120+"px");
}
$("#imagemodal").css("width",width+"px")
}
}else{
console.log("long")
$("#imagemodal img").css("width","auto")
var widthS=windowH/height*width;
if(widthS<windowW){
$("#imagemodal").css("width",widthS+"px")
}else{
$("#imagemodal").css("width","100vw")
}
$("#imagemodal").css("height","100vh")
$("#imagemodal img").css("height","calc(100vh - 60px)")
}
}
@@ -128,7 +98,7 @@ function imgCont(type) {
}
var murl = $("#" + id + "-image-" + key).attr("data-url");
if(murl){
$('#imgmodal').attr('src', './img/loading.svg');
$('#imgmodal').attr('src', '../../img/loading.svg');
var type = $("#" + id + "-image-" + key).attr("data-type");
$(document).ready(function() {
if (type == "image") {
@@ -165,70 +135,40 @@ function imgCont(type) {
var height = element.naturalHeight;
var windowH = $(window).height();
var windowW = $(window).width();
//小さい画像
if(width<(windowW - 50) && height<(windowH-1000)){
$("#imgmodal").css('height',height+"px");
$("#imgmodal").css('width',width+"px");
$("#imagewrap").css('height',height+"px");
$("#imagemodal").css('height',height+100+"px");
$("#imagewrap").css('width',width+"px");
$("#imagemodal").css('width',width+"px");
$("#imagemodal").css('margin-top',(windowH /2) - (height / 2) +"px");
}else{
$("#imagemodal").css('margin-top',0);
var aspect = width/height;
if (aspect < 2.8 && aspect > 0.3){
//moderate
if(windowW > windowH){
//画面が横長(縦幅基準)
$("#imgmodal").css('height',windowH/1.2-70+"px");
var imgW = (windowH/1.2-70)/height*width;
$("#imgmodal").css('width',imgW+"px");
$("#imagewrap").css('height',windowH/1.2-60+"px");
$("#imagemodal").css('height',windowH/1.2+"px");
$("#imagewrap").css('width',imgW+50+"px");
$("#imagemodal").css('width',imgW+50+"px");
}else{
//画面が縦長・正方形(横幅基準)
$("#imgmodal").css('width',windowW/1.2-30+"px");
var imgH = (windowW/1.2-30)/width*height;
$("#imgmodal").css('height',imgH+"px");
$("#imagewrap").css('width',windowW/1.2+"px");
$("#imagemodal").css('width',windowW/1.2+"px");
$("#imagewrap").css('height',imgH+60+"px");
$("#imagemodal").css('height',imgH+120+"px");
}
$("#imagemodal").css("bottom","0")
$("#imagemodal img").css("width","auto")
if(height<windowH){
$("#imagemodal").css("height",height+60+"px")
$("#imagemodal img").css("height","100%")
if(width>windowW*0.8){
$("#imagemodal").css("width","80vw")
$("#imagemodal img").css("width","100%")
var heightS=windowW*0.8/width*height;
$("#imagemodal").css("height",heightS+60+"px")
}else{
//極端な画像
if(height > width){
//縦長
$("#imgmodal").css('height',windowH-60+"px");
var imgW = (windowH-50)/height*width;
$("#imgmodal").css('width',imgW+"px");
$("#imagewrap").css('height',windowH-50+"px");
$("#imagemodal").css('height',windowH+"px");
$("#imagewrap").css('width',imgW+50+"px");
$("#imagemodal").css('width',imgW+50+"px");
}else{
//横長・正方形
$("#imgmodal").css('width',windowW-30+"px");
var imgH = (windowW-50)/width*height;
$("#imgmodal").css('height',imgH+"px");
$("#imagewrap").css('width',windowW+"px");
$("#imagemodal").css('width',windowW+"px");
$("#imagewrap").css('height',imgH+60+"px");
$("#imagemodal").css('height',imgH+120+"px");
}
$("#imagemodal").css("width",width+"px")
}
}else{
console.log("long")
$("#imagemodal img").css("width","auto")
var widthS=windowH/height*width;
if(widthS<windowW){
$("#imagemodal").css("width",widthS+"px")
}else{
$("#imagemodal").css("width","100vw")
}
$("#imagemodal").css("height","100vh")
$("#imagemodal img").css("height","calc(100vh - 60px)")
}
}
if ($("#" + id + "-image-" + (key * 1 + 1)).length == 0) {
if ($("#" + id + "-image-" + (key * 1 + 1)).length === 0) {
$("#image-next").prop("disabled", true);
} else {
$("#image-next").prop("disabled", false);
}
console.log("#" + id + "-image-" + (key * 1 - 1));
if ($("#" + id + "-image-" + (key * 1 - 1)).length == 0) {
if ($("#" + id + "-image-" + (key * 1 - 1)).length === 0) {
$("#image-prev").prop("disabled", true);
} else {
$("#image-prev").prop("disabled", false);
@@ -289,7 +229,7 @@ function zoom(z) {
'cursor': 'move'
}); //指が触れたか検知
$(this).on('touchmove', function(event) {
if ($(target).data('down') == true) {
if ($(target).data('down') === true) {
// スクロール
console.log($(target).data('x'));
target.scrollLeft($(target).data('scrollLeft') + $(target).data('x') -
@@ -347,6 +287,10 @@ function dlImg(){
console.log(arg);
})
ipc.on('general-dl-message', function (event, arg) {
console.log(arg);
var argC=arg.replace(/\\/g,"\\\\")+"\\\\.";
Materialize.toast(lang.lang_img_DLDone+arg+'<button class="btn-flat toast-action" onclick="openFinder(\''+argC+'\')">Show</button>', 5000);
})
}
function openFinder(dir){
ipc.send('open-finder', dir);
}

View File

@@ -7,13 +7,18 @@ var websocketLocal = [];
var websocketNotf = [];
//カラム追加ボックストグル
function addToggle() {
$("#add-box").toggleClass("hide");
function addColumnMenu() {
$("#left-menu div").removeClass("active");
$("#addColumnMenu").addClass("active");
$(".menu-content").addClass("hide");
$("#add-box").removeClass("hide");
addselCk()
$("#add-box").css("bottom","40px");
$("#add-box").css("left",$('#add-tgl').offset().left-$('#add-box').width()/2+"px");
$("#add-box").toggleClass("show");
}
$('.type').click(function() {
$(".type").removeClass("active");
$(this).addClass("active");
$("#type-sel").val($(this).attr("data-type"))
})
//最初、カラム変更時に発火
function parseColumn() {
console.log("parse");
@@ -49,17 +54,16 @@ function parseColumn() {
}
var acctlist=obj;
console.log(obj);
var xed=localStorage.getItem("xed");
/*var xed=localStorage.getItem("xed");
if(xed){
xpand();
}
}*/
var col = localStorage.getItem("column");
if (!col) {
var obj = [{
domain: 0,
type: 'local'
}];
localStorage.setItem("card_0","true");
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
} else {
@@ -68,7 +72,9 @@ function parseColumn() {
if ($("#timeline-container").length) {
$("#timeline-container").html("");
}
Object.keys(obj).forEach(function(key) {
var basekey=0;
for(var key=0;key<obj.length;key++){
var next=key+1;
var acct = obj[key];
if(acct.type=="notf"){
var notf_attr=' data-notf='+acct.domain;
@@ -104,10 +110,10 @@ function parseColumn() {
icnsert=' style="color: #'+ichex+'" ';
}
}
console.log(acct.domain);
console.log(acct);
if(acctlist[acct.domain]){
if(acctlist[acct.domain].background!="def"){
insert=insert+" border-bottom:medium solid #"+acctlist[acct.domain].background;
insert=insert+" border-bottom:medium solid #"+acctlist[acct.domain].background+";";
}
}
if(acct.type=="notf" && localStorage.getItem("setasread")=="no"){
@@ -116,20 +122,52 @@ function parseColumn() {
localStorage.removeItem("hasNotfC_" + acct.domain);
}
if(acct.type=="webview"){
var html =webview("https://tweetdeck.twitter.com",key,insert,icnsert);
if(localStorage.getItem("fixwidth")){
var fixwidth=localStorage.getItem("fixwidth");
var css=" min-width:"+fixwidth+"px;"
}else{
var css="";
}
var html =webviewParse("https://tweetdeck.twitter.com",key,insert,icnsert,css);
$("#timeline-container").append(html);
}else{
var width = localStorage.getItem("width");
if (width) {
var css=" min-width:"+width+"px;"
}
var anime = localStorage.getItem("animation");
if (anime=="yes" || !anime) {
var animecss="box-anime";
}else{
var animecss="";
}
if(acct.type=="notf"){
var exclude=lang.lang_excluded+':<br><input type="checkbox" class="filled-in" id="exc-reply-'+key+'" '+excludeCk(key,"mention")+' /><label for="exc-reply-'+key+'" class="exc-chb"><i class="fa fa-share exc-icons"></i></label> '+
'<input type="checkbox" class="filled-in" id="exc-fav-'+key+'" '+excludeCk(key,"favourite")+' /><label for="exc-fav-'+key+'" class="exc-chb"><i class="fa fa-star exc-icons"></i></label> '+
'<input type="checkbox" class="filled-in" id="exc-bt-'+key+'" '+excludeCk(key,"reblog")+' /><label for="exc-bt-'+key+'" class="exc-chb" ><i class="fa fa-retweet exc-icons"></i></label> '+
'<input type="checkbox" class="filled-in" id="exc-follow-'+key+'" '+excludeCk(key,"follow")+' /><label for="exc-follow-'+key+'" class="exc-chb" ><i class="fa fa-users exc-icons"></i></label> '+
'<input type="checkbox" class="filled-in" id="exc-follow-'+key+'" '+excludeCk(key,"poll")+' /><label for="exc-poll-'+key+'" class="exc-chb" ><i class="fa fa-tasks exc-icons"></i></label> '+
'<button class="btn waves-effect" style="width:60px; padding:0;" onclick="exclude('+key+')">Filter</button><br>';
}else if(acct.type=="home"){
var exclude='<a onclick="ebtToggle(' + key +
')" class="setting nex"><i class="fa fa-retweet waves-effect nex" title="'+lang.lang_layout_excludingbt +'" style="font-size:24px"></i><span id="sta-bt-' +
key + '">Off</span></a>'+lang.lang_layout_excludingbt+'<br>';
}else{
var exclude="";
}
var html = '<div class="box" id="timeline_box_' + key + '_box" tlid="' + key +
'" data-acct="'+acct.domain+'"><div class="notice-box z-depth-2" id="menu_'+key+'" style="'+insert+'">'+
if(!acct.left_fold){
basekey=key;
var basehtml = '<div style="'+css+'" class="box '+animecss+'" id="timeline_box_' + basekey + '_parentBox"></div>';
$("#timeline-container").append(basehtml);
var left_hold='<a onclick="leftFoldSet(' + key +')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_leftFold+'">view_agenda</i></a>'+lang.lang_layout_leftFold+'</span><br>';
}else{
var left_hold='<a onclick="leftFoldRemove(' + key +')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_leftUnfold+'">view_column</i></a>'+lang.lang_layout_leftUnfold+'</span><br>';
}
if(key===0){
left_hold='';
}
var html='<div class="boxIn" id="timeline_box_' + key + '_box" tlid="' + key +
'" data-acct="'+acct.domain+'"><div class="notice-box z-depth-2" id="menu_'+key+'" style="'+insert+' ">'+
'<div class="area-notice"><i class="material-icons waves-effect red-text" id="notice_icon_' + key + '"'+notf_attr+' style="font-size:40px; padding-top:25%;" onclick="goTop(' + key + ')" title="'+lang.lang_layout_gotop +'"></i></div>'+
'<div class="area-notice_name"><span id="notice_' + key + '" class="tl-title"></span></div>'+
'<div class="area-a1"><a onclick="notfToggle(' + acct.domain + ',' + key +
@@ -142,16 +180,16 @@ function parseColumn() {
'<div class="column-hide notf-indv-box z-depth-4" id="notf-box_' + key +
'"><div id="notifications_' + key +
'" data-notf="' + acct.domain + '" data-type="notf"></div></div><div class="column-hide notf-indv-box" id="util-box_' + key +
'" style="padding:5px;">'+exclude+'<a onclick="mediaToggle(' + key +
'" style="padding:5px;">'+exclude+left_hold+'<a onclick="mediaToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_mediafil +'">perm_media</i><span id="sta-media-' +
key + '">On</span></a>'+lang.lang_layout_mediafil +'<br><a onclick="cardToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_linkanades +'">link</i><span id="sta-card-' +
key + '">On</span></a>'+lang.lang_layout_linkana +'<br><a onclick="voiceToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_tts +'">hearing</i><span id="sta-voice-' +
key + '">On</span></a>'+lang.lang_layout_tts +'TL<br><a onclick="reconnector(' + key +
',\''+acct.type+'\',\''+acct.domain+'\',\''+acct.data+'\')" class="setting nex '+if_notf+'"><i class="material-icons waves-effect nex '+if_notf+'" title="'+lang.lang_layout_reconnect+'">low_priority</i></a><span class="'+if_notf+'">'+lang.lang_layout_reconnect[lang]+'</span><br>'+lang.lang_layout_headercolor +'<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
'" class="tl" tlid="' + key + '" data-type="' + acct.type + '"><div id="landing_'+key+'" style="text-align:center">'+lang.lang_layout_nodata +'</div></div></div></div>';
$("#timeline-container").append(html);
',\''+acct.type+'\',\''+acct.domain+'\',\''+acct.data+'\')" class="setting nex '+if_notf+'"><i class="material-icons waves-effect nex '+if_notf+'" title="'+lang.lang_layout_reconnect+'">low_priority</i></a><span class="'+if_notf+'">'+lang.lang_layout_reconnect+'</span><br>'+lang.lang_layout_headercolor +'<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
'" class="tl '+acct.type+'-timeline " tlid="' + key + '" data-type="' + acct.type + '" data-acct="'+acct.domain+'"><div id="landing_'+key+'" style="text-align:center">'+lang.lang_layout_nodata +'</div></div></div>'
$('#timeline_box_' + basekey + '_parentBox').append(html);
localStorage.removeItem("pool_" + key);
if (acct.data) {
var data = acct.data;
@@ -171,14 +209,11 @@ function parseColumn() {
}
tl(acct.type, data, acct.domain, key, delc,voice,"");
cardCheck(key);
ebtCheck(key);
mediaCheck(key);
catchCheck(key);
voiceCheck(key);
}
});
var width = localStorage.getItem("width");
if (width) {
$(".box").css("min-width", width + "px");
}
var box = localStorage.getItem("box");
if (box == "absolute") {
@@ -277,10 +312,8 @@ function addselCk(){
}
if(domain=="knzk.me" || domain=="mstdn.y-zu.org"){
$("#type-sel").append('<option value="dm" data-trans="dm" id="direct-add">'+lang.layout_dm +'</option>');
$('#type-sel').material_select('update');
}else{
$("#direct-add").remove();
$('#type-sel').material_select('update');
}
}
//カラム削除
@@ -295,7 +328,7 @@ function removeColumn(tlid) {
ipc.send('column-del', "");
ipc.on('column-del-reply', function (event, arg) {
console.log(arg);
if(arg==1){
if(arg===1){
localStorage.removeItem("card_" + tlid);
obj.splice(tlid, 1);
for(var i=0;i<obj.length;i++){
@@ -389,9 +422,9 @@ function coloradd(key,bg,txt){
}
}
//禁断のTwitter
function webview(url,key,insert,icnsert){
function webviewParse(url,key,insert,icnsert,css){
var html = '<div class="box" id="timeline_box_' + key + '_box" tlid="' + key +
'"><div class="notice-box z-depth-2" id="menu_'+key+'" style="'+insert+'">'+
'" style="'+css+'"><div class="notice-box z-depth-2" id="menu_'+key+'" style="'+insert+'">'+
'<div class="area-notice"><i class="fa fa-twitter waves-effect" id="notice_icon_' + key + '" style="font-size:40px; padding-top:25%;"></i></div>'+
'<div class="area-notice_name tl-title">WebView('+url+')</div>'+
'<div class="area-sta"><input type="checkbox" id="webviewsel" value="true" class="filled-in"><label for="webviewsel">'+lang.lang_layout_webviewmode +'</label></div>'+
@@ -401,8 +434,24 @@ function webview(url,key,insert,icnsert){
')" class="setting nex" title="'+lang.lang_layout_setthis +'"'+icnsert+'><i class="material-icons waves-effect nex">settings</i></a></div></div>'+
'<div class="column-hide notf-indv-box z-depth-4" id="notf-box_' + key +
'"></div><div class="column-hide notf-indv-box" id="util-box_' + key +
'" style="padding:5px;">'+lang.lang_layout_headercolor +'<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '" style="width:100%;height:calc(100% - 110px);"><div id="timeline_' + key +
'" style="padding:5px;">'+lang.lang_layout_headercolor +'<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '" style="width:100%;height:100%;"><div id="timeline_' + key +
'" class="tl" tlid="' + key + '" data-type="webview" style="width:100%;height:100%;"><webview src="'+url+'" style="width:100%;height:100%;" id="webview" preload="./js/platform/twitter.js"></webview></div></div></div>';
return html;
}
}
function leftFoldSet(key){
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
obj[key].left_fold=true;
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
parseColumn();
}
function leftFoldRemove(key){
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
obj[key].left_fold=false;
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
parseColumn();
}

51
app/js/ui/menu.js Normal file
View File

@@ -0,0 +1,51 @@
function menu(){
if(!$("#menu").hasClass("appear")){
$("#menu").addClass("appear")
var left=localStorage.getItem("menu-left");
if(left>$('body').width()-$('#menu').width()){
left=$('body').width()-$('#menu').width();
}else if(left<0){
left=0;
}
var top=localStorage.getItem("menu-top");
if(top>$('body').height()-$('#menu').height()){
top=$('body').height()-$('#menu').height();
}else if(top<0){
top=0;
}
$('#menu').css("left",left+"px")
$('#menu').css("top",top+"px")
$('#menu').fadeIn();
$("#menu-bar").html("TheDesk "+localStorage.getItem("ver"));
$(".menu-content").addClass("hide");
$("#add-box").removeClass("hide");
}else{
$('#menu').fadeOut()
$("#menu").removeClass("appear")
}
}
$(function() {
$( "#menu" ).draggable({handle: "#menu-bar",
stop: function() {
var left=$('#menu').offset().left;
if(left>$('body').width()-$('#menu').width()){
left=$('body').width()-$('#menu').width();
}else if(left<0){
left=0;
}
var top=$('#menu').offset().top;
if(top>$('body').height()-$('#menu').height()){
top=$('body').height()-$('#menu').height();
}else if(top<0){
top=0;
}
localStorage.setItem("menu-left",left);
localStorage.setItem("menu-top",top);
}
});
});
function help(){
const {shell} = require('electron');
shell.openExternal("https://docs.thedesk.top");
}

View File

@@ -1,10 +1,9 @@
/*ささやきボックス(Cr民並感)*/
//✕隠す
function hide() {
$('#post-box').removeClass("appear")
$('#post-box').animate({
'bottom': "-500px"
});
$("#right-side").hide()
$('#post-box').fadeOut()
$("#post-box").removeClass("appear")
$("#emoji").addClass("hide")
}
//最小化
@@ -18,16 +17,46 @@ function mini() {
}
//最小化時に展開
function show() {
$("#post-box").addClass("appear")
$("#textarea").focus();
$('#post-box').addClass("appear")
console.log($('#posttgl').offset());
$('#post-box').css("left",$('#posttgl').offset().left+"px");
$('#post-box').animate({
'bottom': 0
});
console.log("show"+localStorage.getItem("postbox-left"));
var left=localStorage.getItem("postbox-left");
if(left>$('body').width()-$('#post-box').width()){
left=$('body').width()-$('#post-box').width();
}else if(left<0){
left=0;
}
var top=localStorage.getItem("postbox-top");
if(top>$('body').height()-$('#post-box').height()){
top=$('body').height()-$('#post-box').height();
}else if(top<0){
top=0;
}
$('#post-box').css("left",left+"px")
$('#post-box').css("top",top+"px")
$('#post-box').fadeIn();
}
$(function() {
$( "#post-box" ).draggable({handle: "#post-bar",
stop: function() {
var left=$('#post-box').offset().left;
if(left>$('body').width()-$('#post-box').width()){
left=$('body').width()-$('#post-box').width();
}else if(left<0){
left=0;
}
var top=$('#post-box').offset().top;
if(top>$('body').height()-$('#post-box').height()){
top=$('body').height()-$('#post-box').height();
}else if(top<0){
top=0;
}
localStorage.setItem("postbox-left",left);
localStorage.setItem("postbox-top",top);
}
});
});
//コード受信
if(location.search){
@@ -43,9 +72,11 @@ if(location.search){
$(".mini-btn").text("expand_less");
}
}
$('#posttgl').focusin(function(e) {
$('#posttgl').click(function(e) {
if(!$('#post-box').hasClass("appear")){
show();
}else{
hide();
}
});
@@ -64,23 +95,4 @@ $('#textarea,#cw-text').focusout(function(e) {
localStorage.removeItem("nohide")
}
//setTimeout(remove, 100);
});
$("#timeline-container").click(function(e) {
if(!$('#list-box').hasClass("hide")){
$("#list-box").removeClass("show");
$("#list-box").addClass("hide")
}
if(!$('#src-box').hasClass("hide")){
$("#src-box").removeClass("show");
$("#src-box").addClass("hide")
}
if(!$('#filter-box').hasClass("hide")){
$("#filter-box").removeClass("show");
$("#filter-box").addClass("hide")
}
if(!$('#add-box').hasClass("hide")){
$("#add-box").removeClass("show");
$("#add-box").addClass("hide")
}
});
});

View File

@@ -10,7 +10,7 @@ function scrollck() {
$(".tl-box").each(function(i, elem) {
var tlid = $(this).attr('tlid');
//一番上ならためていた新しいトゥートを表示
if ($(this).scrollTop() == 0) {
if ($(this).scrollTop() === 0) {
var pool = localStorage.getItem("pool_" + tlid);
if (pool) {
$("#timeline_" + tlid).prepend(pool);
@@ -28,6 +28,7 @@ function scrollck() {
var scrt = $(this).find(".tl").height() - $(window).height();
var scr = $(this).scrollTop();
if (scr > scrt) {
console.log("kicked");
moreload('', tlid);
}
});

View File

@@ -1,107 +1,73 @@
//設定(setting.html)で読む
var envView = new Vue({
el: '#envView',
data: {config:envConstruction},
methods: {
complete: function (i,val) {
var ls=envView.config[i].storage;
Materialize.toast("Complete", 3000);
if(!val){
var id=envView.config[i].id;
var val=$("#"+id).val()
}
localStorage.setItem(ls,val)
if(ls=="ha"){
hardwareAcceleration(val)
}
return true
}
}
});
var tlView = new Vue({
el: '#tlView',
data: {config:tlConstruction},
methods: {
complete: function (i,val) {
var ls=tlView.config[i].storage;
if(!val){
var id=tlView.config[i].id;
var val=$("#"+id).val()
}
Materialize.toast("Complete", 3000);
localStorage.setItem(ls,val)
return true
}
}
});
var postView = new Vue({
el: '#postView',
data: {config:postConstruction,kirishima:localStorage.getItem('kirishima')},
methods: {
complete: function (i,val) {
var ls=postView.config[i].storage;
Materialize.toast("Complete", 3000);
if(!val){
var id=postView.config[i].id;
var val=$("#"+id).val()
}
localStorage.setItem(ls,val)
return true
}
}
});
//設定ボタン押した。
function settings() {
var dd = $("[name=time]:checked").val();
var dt = $("[for="+dd+"]").text();
if (dd != localStorage.getItem("datetype")) {
Materialize.toast(lang.lang_setting_time.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(lang.lang_setting_theme.replace("{{set}}" ,ct), 3000);
if(cd=="custom" && !$("#custom-sel-sel").val()){
var theme = localStorage.getItem("theme");
if (!theme) {
var theme = "white";
}
$("#" + theme).prop("checked", true);
}else{
if (cd != localStorage.getItem("theme")) {
Materialize.toast(lang.lang_setting_theme.replace("{{set}}" ,ct), 3000);
}
//テーマはこの場で設定
themes(cd);
localStorage.setItem("theme", cd);
}
//テーマはこの場で設定
themes(cd);
localStorage.setItem("theme", cd);
var nd = $("[name=nsfw]:checked").val();
var nt = $("[for=n_"+nd+"]").text();
if (nd != localStorage.getItem("nsfw")) {
Materialize.toast(lang.lang_setting_nsfw.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(lang.lang_setting_cw.replace("{{set}}" ,cwt), 3000);
}
localStorage.setItem("cw", cwd);
var cwtd = $("#cw-text").val();
if (cwtd != localStorage.getItem("cw-text")) {
Materialize.toast(lang.lang_setting_cwtext.replace("{{set}}" ,cwtd), 3000);
}
localStorage.setItem("cw-text", cwtd);
var cwsd = $("[name=cws]:checked").val();
var cwst = $("[for=cws_"+cwsd+"]").text();
if (cwsd != localStorage.getItem("always-cw")) {
Materialize.toast(lang.lang_setting_cws.replace("{{set}}" ,cwst), 3000);
}
localStorage.setItem("always-cw", cwsd);
var rpd = $("[name=rp]:checked").val();
var rpt = $("[for=c_"+cwd+"]").text();
if (rpd != localStorage.getItem("replyct")) {
Materialize.toast(lang.lang_setting_rp.replace("{{set}}" ,rpt), 3000);
}
localStorage.setItem("replyct", rpd);
var visd = $("[name=vis]:checked").val();
var vist = $("[for="+visd+"]").text();
if (visd != localStorage.getItem("vis")) {
Materialize.toast(lang.lang_setting_vis.replace("{{set}}" ,vist), 3000);
}
localStorage.setItem("vis", visd);
var popd = $("#popup").val();
if (popd > 0 && popd != localStorage.getItem("popup")) {
Materialize.toast(lang.lang_setting_popup.replace("{{set}}" ,popd+lang.lang_setting_s), 3000);
} else if (popd != localStorage.getItem("popup")) {
Materialize.toast(lang.lang_setting_popup.replace("{{set}}" ,lang.lang_setting_off), 3000);
}
localStorage.setItem("popup", popd);
var gifd = $("[name=gif]:checked").val();
var gift = $("[for=g_"+gifd+"]").text();
if (gifd != localStorage.getItem("gif")) {
Materialize.toast(lang.lang_setting_gif.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(lang.lang_setting_selt.replace("{{set1}}" ,sentd).replace("{{set2}}" ,ltrd), 3000);
}
localStorage.setItem("sentence", sentd);
localStorage.setItem("letters", ltrd);
var csentd = $("#cw_sentence").val();
var cltrd = $("#cw_letters").val();
if (csentd != localStorage.getItem("cw_sentence") || cltrd != localStorage.getItem("cw_letters")) {
Materialize.toast(lang.lang_setting_autocw.replace("{{set1}}" ,csentd).replace("{{set2}}" ,cltrd), 3000);
}
localStorage.setItem("cw_sentence", csentd);
localStorage.setItem("cw_letters", cltrd);
var widthd = $("#width").val();
if (widthd != localStorage.getItem("width")) {
Materialize.toast(lang.lang_setting_width.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(lang.lang_setting_img.replace("{{set}}" ,imgt), 3000);
}
localStorage.setItem("img", imgd);
var fontd = $("#font").val();
if(fontd){
if (fontd != localStorage.getItem("font")) {
@@ -116,310 +82,49 @@ function settings() {
themes();
}
}
var sized = $("#size").val();
if (sized != localStorage.getItem("size")) {
Materialize.toast(lang.lang_setting_size.replace("{{set}}" ,sized), 3000);
}
localStorage.setItem("size", sized);
var heid = $("#img-height").val();
if (heid != localStorage.getItem("img-height")) {
Materialize.toast(lang.lang_setting_imgheight.replace("{{set}}" ,heid), 3000);
}
localStorage.setItem("img-height", heid);
var tckrd = $("[name=ticker]:checked").val();
var tckrt = $("[for=ticker_"+tckrd+"]").text();
if (tckrd != localStorage.getItem("ticker_ok")) {
Materialize.toast(lang.lang_setting_ticker.replace("{{set}}" ,tckrt), 3000);
}
localStorage.setItem("ticker_ok", tckrd);
var boxd = $("[name=box]:checked").val();
var boxt = $("[for=bx_"+boxd+"]").text();
if (boxd != localStorage.getItem("box")) {
Materialize.toast(lang.lang_setting_boxConfirm.replace("{{set}}" ,boxt), 3000);
}
localStorage.setItem("box", boxd);
var tagd = $("[name=tag]:checked").val();
var tagt = $("[for=t_"+tagd+"]").text();
if (tagd != localStorage.getItem("tag-range")) {
Materialize.toast(lang.lang_setting_tag.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(lang.lang_setting_ul.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(lang.lang_setting_notf.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(lang.lang_setting_quote.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(lang.lang_setting_via.replace("{{set}}" ,viat), 3000);
}
localStorage.setItem("viashow", viad);
var notfmd = $("[name=notfm]:checked").val();
var notfmt = $("[for=notfm_"+notfmd+"]").text();
if (notfmd != localStorage.getItem("setasread")) {
Materialize.toast(lang.lang_setting_setasread.replace("{{set}}" ,notfmt), 3000);
}
localStorage.setItem("setasread", notfmd);
var movd = $("[name=mov]:checked").val();
var movt = $("[for=mov_"+movd+"]").text();
if (movd != localStorage.getItem("mouseover")) {
Materialize.toast(lang.lang_setting_mov.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(lang.lang_setting_main.replace("{{set}}" ,maint), 3000);
}
localStorage.setItem("mainuse", maind);
var secd = $("[name=sec]:checked").val();
var sect = $("[for=sec-"+secd+"]").text();
if (secd != localStorage.getItem("sec")) {
Materialize.toast(lang.lang_setting_sec.replace("{{set}}" ,sect), 3000);
}
localStorage.setItem("sec", secd);
}
//読み込み時の設定ロード
function load() {
var max=envView.config.length;
for(var i=0;i<max;i++){
var ls=envView.config[i].storage;
if(localStorage.getItem(ls)){
envView.config[i].setValue=localStorage.getItem(ls)
}
}
var max=tlView.config.length;
for(var i=0;i<max;i++){
var ls=tlView.config[i].storage;
if(localStorage.getItem(ls)){
tlView.config[i].setValue=localStorage.getItem(ls)
}
}
var max=postView.config.length;
for(var i=0;i<max;i++){
var ls=postView.config[i].storage;
if(localStorage.getItem(ls)){
postView.config[i].setValue=localStorage.getItem(ls)
}
}
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");
if (!datetype) {
var datetype = "absolute";
}
$("#" + datetype).prop("checked", true);
var theme = localStorage.getItem("theme");
if (!theme) {
var theme = "white";
}
$("#" + theme).prop("checked", true);
var nsfw = localStorage.getItem("nsfw");
if (!nsfw) {
var nsfw = "yes";
}
$("#n_" + nsfw).prop("checked", true);
var cw = localStorage.getItem("cw");
if (!cw) {
var cw = "yes";
}
$("#c_" + cw).prop("checked", true);
var cws = localStorage.getItem("always-cw");
if (!cws) {
var cws = "no";
}
$("#cws_" + cws).prop("checked", true);
var popup = localStorage.getItem("popup");
if (!popup) {
var popup = "0";
}
$("#popup").val(popup);
var box = localStorage.getItem("box");
if (!box) {
var box = "no";
}
if(box=="absolute"){
var box = "abs";
}
$("#bx_" + box).prop("checked", true);
var gif = localStorage.getItem("gif");
if (!gif) {
var gif = "yes";
}
$("#g_" + gif).prop("checked", true);
var sent = localStorage.getItem("sentence");
if (!sent) {
var sent = "500";
}
$("#sentence").val(sent);
var ltrs = localStorage.getItem("letters");
if (!ltrs) {
var ltrs = "500";
}
$("#letters").val(ltrs);
var csent = localStorage.getItem("cw_sentence");
if (!csent) {
var csent = "500";
}
$("#cw_sentence").val(csent);
var cltrs = localStorage.getItem("cw_letters");
if (!cltrs) {
var cltrs = "500";
}
$("#cw_letters").val(cltrs);
var width = localStorage.getItem("width");
if (!width) {
var width = "300";
}
$("#width").val(width);
var cwt = localStorage.getItem("cw-text");
if (!cwt) {
var cwt = "";
}
$("#cw-text").val(cwt);
var cws = localStorage.getItem("always-cw");
if (!cws) {
var cws = "no";
}
$("#cws_" + cws).prop("checked", true);
var rps = localStorage.getItem("replyct");
if (!rps) {
var rps = "hidden";
}
$("#rp_" + rps).prop("checked", true);
var vis = localStorage.getItem("vis");
if (!vis) {
var vis = "public";
}
$("#" + vis).prop("checked", true);
var img = localStorage.getItem("img");
if (!img) {
var img = "no-act";
}
$("#i_" + img).prop("checked", true);
var font = localStorage.getItem("font");
if (!font) {
var font = "";
}
$("#font").val(font);
var size = localStorage.getItem("size");
if (!size) {
var size = "13";
}
$("#size").val(size);
var imh = localStorage.getItem("img-height");
if (!imh) {
var imh = "200";
}
$("#img-height").val(imh);
var ticker = localStorage.getItem("ticker-ok");
if (!ticker) {
var ticker = "no";
}
$("#ticker_" + ticker).prop("checked", true);
var tag = localStorage.getItem("tag-range");
if (!tag) {
var tag = "all";
}
$("#t_" + tag).prop("checked", true);
var box = localStorage.getItem("box");
if (!box) {
var box = "yes";
}
$("#bx_" + box).prop("checked", true);
var uld = localStorage.getItem("locale");
if (!uld) {
var uld = "yes";
}
$("#ul_" + uld).prop("checked", true);
var nnd = localStorage.getItem("nativenotf");
if (!nnd) {
var nnd = "yes";
}
$("#ntf_" + nnd).prop("checked", true);
var qt = localStorage.getItem("quote");
if (!qt) {
var qt = "simple";
}
$("#q_" + qt).prop("checked", true);
var viat = localStorage.getItem("viashow");
if (!viat) {
var viat = "hide";
}
$("#via_" + viat).prop("checked", true);
var movt = localStorage.getItem("mouseover");
if (!movt) {
var movt = "no";
}
$("#mov_" + movt).prop("checked", true);
var notfmt = localStorage.getItem("setasread");
if (!notfmt) {
var notfmt = "yes";
}
$("#notfm_" + notfmt).prop("checked", true);
var maint = localStorage.getItem("mainuse");
if (!maint) {
var maint = "remain";
}
$("#mn_" + maint).prop("checked", true);
var sect = localStorage.getItem("sec");
if (!sect) {
var sect = "nothing";
}
$("#sec-" + sect).prop("checked", true);
}
//最初に読む
load();
climute();
wordmute();
wordemp();
checkSpotify();
voiceSettingLoad();
oksload();
npprovider();
function climute(){
//クライアントミュート
var cli = localStorage.getItem("client_mute");
@@ -521,7 +226,7 @@ function exportSettings(){
dialog.showSaveDialog(null, {
title: 'Export',
properties: ['openFile', 'createDirectory'],
defaultPath: "export.thedeskconfig"
defaultPath: "export.thedeskconfigv2"
}, (savedFiles) => {
console.log(savedFiles);
if(!savedFiles){
@@ -537,20 +242,27 @@ function exportSettings(){
var column = JSON.parse(multi);
exp.columns=column;
//Themes
exp.theme=localStorage.getItem("theme");
//Min width
exp.minwidth=localStorage.getItem("width");
var config={};
config.theme=localStorage.getItem("theme");
//Other configs
var max=envView.config.length;
for(var i=0;i<max;i++){
var ls=envView.config[i].storage;
config[ls]=localStorage.getItem(ls)
}
var max=tlView.config.length;
for(var i=0;i<max;i++){
var ls=tlView.config[i].storage;
config[ls]=localStorage.getItem(ls)
}
var max=postView.config.length;
for(var i=0;i<max;i++){
var ls=postView.config[i].storage;
config[ls]=localStorage.getItem(ls)
}
//Font
exp.font=localStorage.getItem("font");
exp.size=localStorage.getItem("size");
//Img height
exp.imgheight=localStorage.getItem("img-height");
//Main
exp.mainuse=localStorage.getItem("mainuse");
//CW text
exp.cw=localStorage.getItem("cw-text");
//vis
exp.vis=localStorage.getItem("vis");
config.font=localStorage.getItem("font");
exp.config=config;
//keysc
exp.ksc=[
localStorage.getItem("oks-1"),
@@ -596,7 +308,7 @@ function importSettings(){
title: 'Import',
properties: ['openFile'],
filters: [
{name: 'TheDesk Config', extensions: ['thedeskconfig']},
{name: 'TheDesk Config', extensions: ['thedeskconfig','thedeskconfigv2']},
]
}, (fileNames) => {
console.log(fileNames);
@@ -619,26 +331,53 @@ function importSettings(){
localStorage.setItem("acct_"+ key + "_at", acct.at);
}
localStorage.setItem("column",JSON.stringify(obj.columns));
localStorage.setItem("theme",obj.theme);
if(obj.width){
console.log(obj.width)
localStorage.setItem("width",obj.width);
if(obj.config){
//Version 2
var max=envView.config.length;
for(var i=0;i<max;i++){
var ls=envView.config[i].storage;
if(obj.config[ls]){
localStorage.setItem(ls,obj.config[ls])
}
}
var max=tlView.config.length;
for(var i=0;i<max;i++){
var ls=tlView.config[i].storage;
if(obj.config[ls]){
localStorage.setItem(ls,obj.config[ls])
}
}
var max=postView.config.length;
for(var i=0;i<max;i++){
var ls=postView.config[i].storage;
if(obj.config[ls]){
localStorage.setItem(ls,obj.config[ls])
}
}
}else{
//Version 1
localStorage.setItem("theme",obj.theme);
if(obj.width){
console.log(obj.width)
localStorage.setItem("width",obj.width);
}
if(obj.font){
localStorage.setItem("font",obj.font);
}
if(obj.size){
localStorage.setItem("size",obj.size);
}
themes(obj.theme);
if(obj.imgheight){
localStorage.setItem("img-height",obj.imgheight);
}
localStorage.setItem("mainuse",obj.mainuse);
if(obj.cw){
localStorage.setItem("cwtext",obj.cw);
}
localStorage.setItem("vis",obj.vis);
//End
}
if(obj.font){
localStorage.setItem("font",obj.font);
}
if(obj.size){
localStorage.setItem("size",obj.size);
}
themes(obj.theme);
if(obj.imgheight){
localStorage.setItem("img-height",obj.imgheight);
}
localStorage.setItem("mainuse",obj.mainuse);
if(obj.cw){
localStorage.setItem("cwtext",obj.cw);
}
localStorage.setItem("vis",obj.vis);
if(obj.ksc[0]){
localStorage.setItem("oks-1",obj.ksc[0]);
}
@@ -663,7 +402,7 @@ function importSettings(){
localStorage.setItem("card_" + i,"true");
localStorage.removeItem("catch_" + i);
}
location.href="language.html";
location.href="index.html";
}else{
alert("Error.")
}
@@ -698,4 +437,214 @@ function font(){
}
function insertFont(name){
$("#font").val(name);
}
}
$(".color-picker").each(function(i, elem) {
pickerDefine(i,"fff");
});
function pickerDefine(i,color){
var pickr = new Pickr({
el: '#color-picker'+i,
default: color,
showAlways: true,
appendToBody: true,
closeWithKey: 'Escape',
comparison: false,
components: {
preview: true, // Left side color comparison
opacity: false, // Opacity slider
hue: true, // Hue slider
interaction: {
rgba: false, // rgba option (red green blue and alpha)
input: true, // input / output element
}
},
strings: {
save: 'Save', // Default for save button
clear: 'Clear' // Default for clear button
}
});
pickr.on('change', (...args) => {
var rgb='rgb('+args[0].toRGBA()[0]+','+args[0].toRGBA()[1]+','+args[0].toRGBA()[2]+')';
$("#color-picker"+i+"_value").val(rgb)
});
}
function customComp(){
var nameC=$("#custom_name").val();
if(!nameC){return false;}
var descC=$("#custom_desc").val();
var primaryC=$("#color-picker0_value").val();
if(!primaryC){primaryC="rgb(255,255,255)"}
var secondaryC=$("#color-picker1_value").val();
if(!secondaryC){secondaryC="rgb(255,255,255)"}
var textC=$("#color-picker2_value").val();
if(!textC){textC="rgb(255,255,255)"}
var accentC=$("#color-picker3_value").val();
if(!accentC){accentC="rgb(255,255,255)"}
var multi = localStorage.getItem("multi");
var my=JSON.parse(multi)[0].name;
var id=$("#custom-edit-sel").val();
if(id=="add_new"){
id=makeCID();
}
var json={
"name": nameC,
"author": my,
"desc": descC,
"base": $("[name=direction]:checked").val(),
"vars": {
"primary": primaryC,
"secondary": secondaryC,
"text": textC
},
"props": {
"TheDeskAccent": accentC
},
"id": id
}
$("#custom_json").val(JSON.stringify(json));
themes();
$("#custom_name").val("");
$("#custom_desc").val("");
$("#dark").prop("checked", true);
$("#custom_json").val("");
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
$("#color-picker0_value").val("");
$("#color-picker1_value").val("");
$("#color-picker2_value").val("");
$("#color-picker3_value").val("");
pickerDefine(0,"fff");
pickerDefine(1,"fff");
pickerDefine(2,"fff");
pickerDefine(3,"fff");
ipc.send('theme-json-create', JSON.stringify(json));
}
function deleteIt(){
var id=$("#custom-sel-sel").val();
$("#custom_name").val("");
$("#custom_desc").val("");
$("#dark").prop("checked", true);
$("#custom_json").val("");
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
$("#color-picker0_value").val("");
$("#color-picker1_value").val("");
$("#color-picker2_value").val("");
$("#color-picker3_value").val("");
pickerDefine(0,"fff");
pickerDefine(1,"fff");
pickerDefine(2,"fff");
pickerDefine(3,"fff");
ipc.on('theme-json-delete-complete', function (event, args) {
ctLoad()
});
ipc.send('theme-json-delete', id);
}
function ctLoad(){
ipc.send('theme-json-list', "");
ipc.on('theme-json-list-response', function (event, args) {
console.log(args);
var templete="";
Object.keys(args).forEach(function(key) {
var theme = args[key];
var themeid=theme.id
templete = templete+'<option value="'+themeid+'">' + theme.name +'</option>';
});
if(args[0]){
localStorage.setItem("customtheme-id",args[0].id)
}
$("#custom-sel-sel").html(templete);
templete='<option value="add_new">'+$("#edit-selector").attr("data-add")+'</option>'+templete;
$("#custom-edit-sel").html(templete);
$('select').material_select('update');
});
}
function customSel(){
var id=$("#custom-sel-sel").val();
localStorage.setItem("customtheme-id",id)
}
function custom(){
var id=$("#custom-edit-sel").val();
if(id=="add_new"){
$("#custom_name").val("");
$("#custom_desc").val("");
$("#dark").prop("checked", true);
$("#custom_json").val("");
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
$("#color-picker0_value").val("");
$("#color-picker1_value").val("");
$("#color-picker2_value").val("");
$("#color-picker3_value").val("");
pickerDefine(0,"fff");
pickerDefine(1,"fff");
pickerDefine(2,"fff");
pickerDefine(3,"fff");
$("#delTheme").addClass("disabled")
}else{
$("#delTheme").removeClass("disabled")
ipc.send('theme-json-request', id);
ipc.on('theme-json-response', function (event, args) {
console.log(args);
$("#custom_name").val(args.name);
$("#custom_desc").val(args.desc);
$("#"+args.base).prop("checked", true);
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
pickerDefine(0,rgbToHex(args.vars.primary))
$("#color-picker0_value").val(args.vars.primary);
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
pickerDefine(1,rgbToHex(args.vars.secondary))
$("#color-picker1_value").val(args.vars.secondary);
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
$("#color-picker2_value").val(args.vars.text);
pickerDefine(2,rgbToHex(args.vars.text))
if(args.props){
if(args.props.TheDeskAccent){
var accent=args.props.TheDeskAccent;
}else{
var accent=args.vars.secondary;
}
}else{
var accent=args.vars.secondary;
}
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
pickerDefine(3,rgbToHex(accent))
$("#custom_json").val(JSON.stringify(args));
});
}
}
function customImp(){
var json=$("#custom_import").val();
if(JSON5.parse(json)){
ipc.send('theme-json-create', json);
}else{
alert("Error")
}
}
function hardwareAcceleration(had){
console.log("ha");
ipc.send('ha', had);
}
ipc.on('theme-json-create-complete', function (event, args) {
$("#custom_import").val("");
ctLoad()
});
window.onload = function() {
//最初に読む
load();
climute();
wordmute();
wordemp();
checkSpotify();
voiceSettingLoad();
oksload();
npprovider();
ctLoad()
};

953
app/js/ui/settings.old.js Normal file
View File

@@ -0,0 +1,953 @@
//設定(setting.html)で読む
var envView = new Vue({
el: '#env-view',
data: {config:envConstruction,value:envValue},
method: {
settings: function (index) {
return true
}
}
});
//設定ボタン押した。
function settings() {
var dd = $("[name=time]:checked").val();
var dt = $("[for="+dd+"]").text();
if (dd != localStorage.getItem("datetype")) {
Materialize.toast(lang.lang_setting_time.replace("{{set}}" ,dt), 3000);
}
localStorage.setItem("datetype", dd);
var cd = $("[name=theme]:checked").val();
var ct = $("[for="+cd+"]").html();
if(cd=="custom" && !$("#custom-sel-sel").val()){
var theme = localStorage.getItem("theme");
if (!theme) {
var theme = "white";
}
$("#" + theme).prop("checked", true);
}else{
if (cd != localStorage.getItem("theme")) {
Materialize.toast(lang.lang_setting_theme.replace("{{set}}" ,ct), 3000);
}
//テーマはこの場で設定
themes(cd);
localStorage.setItem("theme", cd);
}
var nd = $("[name=nsfw]:checked").val();
var nt = $("[for=n_"+nd+"]").text();
if (nd != localStorage.getItem("nsfw")) {
Materialize.toast(lang.lang_setting_nsfw.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(lang.lang_setting_cw.replace("{{set}}" ,cwt), 3000);
}
localStorage.setItem("cw", cwd);
var cwtd = $("#cw-text").val();
if (cwtd != localStorage.getItem("cw-text")) {
Materialize.toast(lang.lang_setting_cwtext.replace("{{set}}" ,cwtd), 3000);
}
localStorage.setItem("cw-text", cwtd);
var cwsd = $("[name=cws]:checked").val();
var cwst = $("[for=cws_"+cwsd+"]").text();
if (cwsd != localStorage.getItem("always-cw")) {
Materialize.toast(lang.lang_setting_cws.replace("{{set}}" ,cwst), 3000);
}
localStorage.setItem("always-cw", cwsd);
var rpd = $("[name=rp]:checked").val();
var rpt = $("[for=c_"+cwd+"]").text();
if (rpd != localStorage.getItem("replyct")) {
Materialize.toast(lang.lang_setting_rp.replace("{{set}}" ,rpt), 3000);
}
localStorage.setItem("replyct", rpd);
var visd = $("[name=vis]:checked").val();
var vist = $("[for="+visd+"]").text();
if (visd != localStorage.getItem("vis")) {
Materialize.toast(lang.lang_setting_vis.replace("{{set}}" ,vist), 3000);
}
localStorage.setItem("vis", visd);
var popd = $("#popup").val();
if (popd > 0 && popd != localStorage.getItem("popup")) {
Materialize.toast(lang.lang_setting_popup.replace("{{set}}" ,popd+lang.lang_setting_s), 3000);
} else if (popd != localStorage.getItem("popup")) {
Materialize.toast(lang.lang_setting_popup.replace("{{set}}" ,lang.lang_setting_off), 3000);
}
localStorage.setItem("popup", popd);
var gifd = $("[name=gif]:checked").val();
var gift = $("[for=g_"+gifd+"]").text();
if (gifd != localStorage.getItem("gif")) {
Materialize.toast(lang.lang_setting_gif.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(lang.lang_setting_selt.replace("{{set1}}" ,sentd).replace("{{set2}}" ,ltrd), 3000);
}
localStorage.setItem("sentence", sentd);
localStorage.setItem("letters", ltrd);
var csentd = $("#cw_sentence").val();
var cltrd = $("#cw_letters").val();
if (csentd != localStorage.getItem("cw_sentence") || cltrd != localStorage.getItem("cw_letters")) {
Materialize.toast(lang.lang_setting_autocw.replace("{{set1}}" ,csentd).replace("{{set2}}" ,cltrd), 3000);
}
localStorage.setItem("cw_sentence", csentd);
localStorage.setItem("cw_letters", cltrd);
var widthd = $("#width").val();
if (widthd != localStorage.getItem("width")) {
Materialize.toast(lang.lang_setting_width.replace("{{set}}" ,widthd), 3000);
}
localStorage.setItem("width", widthd);
var fwidthd = $("#fixwidth").val();
if (fwidthd != localStorage.getItem("fixwidth")) {
Materialize.toast(lang.lang_setting_fixwidth.replace("{{set}}" ,fwidthd), 3000);
}
localStorage.setItem("fixwidth", fwidthd);
var imgd = $("[name=img]:checked").val();
var imgt = $("[for=i_"+imgd+"]").text();
if (imgd != localStorage.getItem("img")) {
Materialize.toast(lang.lang_setting_img.replace("{{set}}" ,imgt), 3000);
}
localStorage.setItem("img", imgd);
var fontd = $("#font").val();
if(fontd){
if (fontd != localStorage.getItem("font")) {
Materialize.toast(lang.lang_setting_font.replace("{{set}}" ,fontd), 3000);
}
localStorage.setItem("font", fontd);
themes();
}else{
if(localStorage.getItem("font")){
localStorage.removeItem("font");
Materialize.toast(lang.lang_setting_font.replace("{{set}}" ,lang.lang_setting_default), 3000);
themes();
}
}
var sized = $("#size").val();
if (sized != localStorage.getItem("size")) {
Materialize.toast(lang.lang_setting_size.replace("{{set}}" ,sized), 3000);
}
localStorage.setItem("size", sized);
var heid = $("#img-height").val();
if (heid != localStorage.getItem("img-height")) {
Materialize.toast(lang.lang_setting_imgheight.replace("{{set}}" ,heid), 3000);
}
localStorage.setItem("img-height", heid);
var tckrd = $("[name=ticker]:checked").val();
var tckrt = $("[for=ticker_"+tckrd+"]").text();
if (tckrd != localStorage.getItem("ticker_ok")) {
Materialize.toast(lang.lang_setting_ticker.replace("{{set}}" ,tckrt), 3000);
}
localStorage.setItem("ticker_ok", tckrd);
var animed = $("[name=anime]:checked").val();
var animet = $("[for=anime_"+animed+"]").text();
if (animed != localStorage.getItem("animation")) {
Materialize.toast(lang.lang_setting_animation.replace("{{set}}" ,animet), 3000);
}
localStorage.setItem("animation", animed);
var boxd = $("[name=box]:checked").val();
var boxt = $("[for=bx_"+boxd+"]").text();
if (boxd != localStorage.getItem("box")) {
Materialize.toast(lang.lang_setting_boxConfirm.replace("{{set}}" ,boxt), 3000);
}
localStorage.setItem("box", boxd);
var tagd = $("[name=tag]:checked").val();
var tagt = $("[for=t_"+tagd+"]").text();
if (tagd != localStorage.getItem("tag-range")) {
Materialize.toast(lang.lang_setting_tag.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(lang.lang_setting_ul.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(lang.lang_setting_notf.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(lang.lang_setting_quote.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(lang.lang_setting_via.replace("{{set}}" ,viat), 3000);
}
localStorage.setItem("viashow", viad);
var notfmd = $("[name=notfm]:checked").val();
var notfmt = $("[for=notfm_"+notfmd+"]").text();
if (notfmd != localStorage.getItem("setasread")) {
Materialize.toast(lang.lang_setting_setasread.replace("{{set}}" ,notfmt), 3000);
}
localStorage.setItem("setasread", notfmd);
var movd = $("[name=mov]:checked").val();
var movt = $("[for=mov_"+movd+"]").text();
if (movd != localStorage.getItem("mouseover")) {
Materialize.toast(lang.lang_setting_mov.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(lang.lang_setting_main.replace("{{set}}" ,maint), 3000);
}
localStorage.setItem("mainuse", maind);
var secd = $("[name=sec]:checked").val();
var sect = $("[for=sec-"+secd+"]").text();
if (secd != localStorage.getItem("sec")) {
Materialize.toast(lang.lang_setting_sec.replace("{{set}}" ,sect), 3000);
}
localStorage.setItem("sec", secd);
}
//読み込み時の設定ロード
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");
if (!datetype) {
var datetype = "absolute";
}
$("#" + datetype).prop("checked", true);
var theme = localStorage.getItem("theme");
if (!theme) {
var theme = "white";
}
$("#" + theme).prop("checked", true);
var ha = localStorage.getItem("ha");
if (!ha) {
var ha = "false";
}
$("#ha_" + ha).prop("checked", true);
var nsfw = localStorage.getItem("nsfw");
if (!nsfw) {
var nsfw = "yes";
}
$("#n_" + nsfw).prop("checked", true);
var cw = localStorage.getItem("cw");
if (!cw) {
var cw = "yes";
}
$("#c_" + cw).prop("checked", true);
var cws = localStorage.getItem("always-cw");
if (!cws) {
var cws = "no";
}
$("#cws_" + cws).prop("checked", true);
var popup = localStorage.getItem("popup");
if (!popup) {
var popup = "0";
}
$("#popup").val(popup);
var box = localStorage.getItem("box");
if (!box) {
var box = "no";
}
if(box=="absolute"){
var box = "abs";
}
$("#bx_" + box).prop("checked", true);
var gif = localStorage.getItem("gif");
if (!gif) {
var gif = "yes";
}
$("#g_" + gif).prop("checked", true);
var sent = localStorage.getItem("sentence");
if (!sent) {
var sent = "500";
}
$("#sentence").val(sent);
var ltrs = localStorage.getItem("letters");
if (!ltrs) {
var ltrs = "500";
}
$("#letters").val(ltrs);
var csent = localStorage.getItem("cw_sentence");
if (!csent) {
var csent = "500";
}
$("#cw_sentence").val(csent);
var cltrs = localStorage.getItem("cw_letters");
if (!cltrs) {
var cltrs = "500";
}
$("#cw_letters").val(cltrs);
var width = localStorage.getItem("width");
if (!width) {
var width = "300";
}
$("#width").val(width);
var fwidth = localStorage.getItem("fixwidth");
if (!fwidth) {
var fwidth = "300";
}
$("#fixwidth").val(fwidth);
var cwt = localStorage.getItem("cw-text");
if (!cwt) {
var cwt = "";
}
$("#cw-text").val(cwt);
var cws = localStorage.getItem("always-cw");
if (!cws) {
var cws = "no";
}
$("#cws_" + cws).prop("checked", true);
var rps = localStorage.getItem("replyct");
if (!rps) {
var rps = "hidden";
}
$("#rp_" + rps).prop("checked", true);
var vis = localStorage.getItem("vis");
if (!vis) {
var vis = "public";
}
$("#" + vis).prop("checked", true);
var img = localStorage.getItem("img");
if (!img) {
var img = "no-act";
}
$("#i_" + img).prop("checked", true);
var font = localStorage.getItem("font");
if (!font) {
var font = "";
}
$("#font").val(font);
var size = localStorage.getItem("size");
if (!size) {
var size = "13";
}
$("#size").val(size);
var imh = localStorage.getItem("img-height");
if (!imh) {
var imh = "200";
}
$("#img-height").val(imh);
var ticker = localStorage.getItem("ticker_ok");
if (!ticker) {
var ticker = "no";
}
$("#ticker_" + ticker).prop("checked", true);
var animation = localStorage.getItem("animation");
if (!animation) {
var animation = "yes";
}
$("#anime_" + animation).prop("checked", true);
var tag = localStorage.getItem("tag-range");
if (!tag) {
var tag = "all";
}
$("#t_" + tag).prop("checked", true);
var box = localStorage.getItem("box");
if (!box) {
var box = "yes";
}
$("#bx_" + box).prop("checked", true);
var uld = localStorage.getItem("locale");
if (!uld) {
var uld = "yes";
}
$("#ul_" + uld).prop("checked", true);
var nnd = localStorage.getItem("nativenotf");
if (!nnd) {
var nnd = "yes";
}
$("#ntf_" + nnd).prop("checked", true);
var qt = localStorage.getItem("quote");
if (!qt) {
var qt = "simple";
}
$("#q_" + qt).prop("checked", true);
var viat = localStorage.getItem("viashow");
if (!viat) {
var viat = "hide";
}
$("#via_" + viat).prop("checked", true);
var movt = localStorage.getItem("mouseover");
if (!movt) {
var movt = "no";
}
$("#mov_" + movt).prop("checked", true);
var notfmt = localStorage.getItem("setasread");
if (!notfmt) {
var notfmt = "yes";
}
$("#notfm_" + notfmt).prop("checked", true);
var maint = localStorage.getItem("mainuse");
if (!maint) {
var maint = "remain";
}
$("#mn_" + maint).prop("checked", true);
var sect = localStorage.getItem("sec");
if (!sect) {
var sect = "nothing";
}
$("#sec-" + sect).prop("checked", true);
}
function climute(){
//クライアントミュート
var cli = localStorage.getItem("client_mute");
var obj = JSON.parse(cli);
if(!obj){
$("#mute-cli").html(lang.lang_setting_nomuting);
}else{
if(!obj[0]){
$("#mute-cli").html(lang.lang_setting_nomuting);
return;
}
var templete;
Object.keys(obj).forEach(function(key) {
var cli = obj[key];
var list = key * 1 + 1;
templete = '<div class="acct" id="acct_' + key + '">' + list +
'.' +
cli + '<button class="btn waves-effect red disTar" onclick="cliMuteDel(' +
key + ')">'+lang.lang_del+'</button><br></div>';
$("#mute-cli").append(templete);
});
}
}
function cliMuteDel(key){
var cli = localStorage.getItem("client_mute");
var obj = JSON.parse(cli);
obj.splice(key, 1);
var json = JSON.stringify(obj);
localStorage.setItem("client_mute", json);
mute();
}
function wordmute(){
var word = localStorage.getItem("word_mute");
var obj = JSON.parse(word);
$('#wordmute').material_chip({
data: obj,
});
}
function wordmuteSave(){
var word=$('#wordmute').material_chip('data');
var json = JSON.stringify(word);
localStorage.setItem("word_mute", json);
}
function wordemp(){
var word = localStorage.getItem("word_emp");
var obj = JSON.parse(word);
$('#wordemp').material_chip({
data: obj,
});
}
function wordempSave(){
var word=$('#wordemp').material_chip('data');
var json = JSON.stringify(word);
localStorage.setItem("word_emp", json);
}
function notftest(){
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: lang.lang_setting_notftest+'('+lang.lang_setting_notftestprof+')',
icon: localStorage.getItem("prof_0")
};
if(os=="darwin"){
var n = new Notification('TheDesk'+lang.lang_setting_notftest, options);
}else{
ipc.send('native-notf', ['TheDesk'+lang.lang_setting_notftest,lang.lang_setting_notftest+'('+lang.lang_setting_notftestprof+')',localStorage.getItem('prof_0'),"",""]);
}
}
function oks(no){
var txt=$("#oks-"+no).val();
localStorage.setItem("oks-"+no, txt);
Materialize.toast(lang.lang_setting_ksref, 3000);
}
function oksload(){
if(localStorage.getItem("oks-1")){$("#oks-1").val(localStorage.getItem("oks-1"))}
if(localStorage.getItem("oks-2")){$("#oks-2").val(localStorage.getItem("oks-2"))}
if(localStorage.getItem("oks-3")){$("#oks-3").val(localStorage.getItem("oks-3"))}
}
function changelang(lang){
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('lang',lang);
ipc.on('langres', function (event, arg) {
location.href="../"+lang+"/setting.html"
});
}
function exportSettings(){
if(!confirm(lang.lang_setting_exportwarn)){
return false;
}
var electron = require("electron");
var remote=electron.remote;
var dialog=remote.dialog;
var ipc = electron.ipcRenderer;
dialog.showSaveDialog(null, {
title: 'Export',
properties: ['openFile', 'createDirectory'],
defaultPath: "export.thedeskconfig"
}, (savedFiles) => {
console.log(savedFiles);
if(!savedFiles){
return false;
}
var exp={};
//Accounts
var multi = localStorage.getItem("multi");
var acct = JSON.parse(multi);
exp.accts=acct;
//Columns
var multi = localStorage.getItem("column");
var column = JSON.parse(multi);
exp.columns=column;
//Themes
exp.theme=localStorage.getItem("theme");
//Min width
exp.minwidth=localStorage.getItem("width");
//Font
exp.font=localStorage.getItem("font");
exp.size=localStorage.getItem("size");
//Img height
exp.imgheight=localStorage.getItem("img-height");
//Main
exp.mainuse=localStorage.getItem("mainuse");
//CW text
exp.cw=localStorage.getItem("cw-text");
//vis
exp.vis=localStorage.getItem("vis");
//keysc
exp.ksc=[
localStorage.getItem("oks-1"),
localStorage.getItem("oks-2"),
localStorage.getItem("oks-3")
];
//climu
var cli = localStorage.getItem("client_mute");
var climu = JSON.parse(cli);
exp.clientMute=climu;
//wordmu
var wdm = localStorage.getItem("word_mute");
var wordmu = JSON.parse(wdm);
exp.wordMute=wordmu;
//spotify
exp.spotifyArtwork=localStorage.getItem("artwork")
var content=localStorage.getItem("np-temp");
if(content || content=="" || content=="null"){
exp.spotifyTemplete=content;
}else{
exp.spotifyTemplete=null;
}
//tags
var tagarr = localStorage.getItem("tag");
var favtag = JSON.parse(tagarr);
exp.favoriteTags=favtag;
console.log(exp);
ipc.send('export', [savedFiles,JSON.stringify(exp)]);
alert("Done.")
//cards
//lang
});
}
function importSettings(){
if(!confirm(lang.lang_setting_importwarn)){
return false;
}
var electron = require("electron");
var remote=electron.remote;
var dialog=remote.dialog;
var ipc = electron.ipcRenderer;
dialog.showOpenDialog(null, {
title: 'Import',
properties: ['openFile'],
filters: [
{name: 'TheDesk Config', extensions: ['thedeskconfig']},
]
}, (fileNames) => {
console.log(fileNames);
if(!fileNames){
return false;
}
ipc.send('import', fileNames[0]);
ipc.on('config', function (event, arg) {
var obj = JSON.parse(arg);
if(obj){
localStorage.clear();
localStorage.setItem("multi",JSON.stringify(obj.accts));
for(var key=0;key<obj.accts.length;key++){
var acct=obj.accts[key];
localStorage.setItem("name_" + key, acct.name);
localStorage.setItem("user_" + key, acct.user);
localStorage.setItem("user-id_" + key, acct.id);
localStorage.setItem("prof_" + key, acct.prof);
localStorage.setItem("domain_" + key, acct.domain);
localStorage.setItem("acct_"+ key + "_at", acct.at);
}
localStorage.setItem("column",JSON.stringify(obj.columns));
localStorage.setItem("theme",obj.theme);
if(obj.width){
console.log(obj.width)
localStorage.setItem("width",obj.width);
}
if(obj.font){
localStorage.setItem("font",obj.font);
}
if(obj.size){
localStorage.setItem("size",obj.size);
}
themes(obj.theme);
if(obj.imgheight){
localStorage.setItem("img-height",obj.imgheight);
}
localStorage.setItem("mainuse",obj.mainuse);
if(obj.cw){
localStorage.setItem("cwtext",obj.cw);
}
localStorage.setItem("vis",obj.vis);
if(obj.ksc[0]){
localStorage.setItem("oks-1",obj.ksc[0]);
}
if(obj.ksc[1]){
localStorage.setItem("oks-2",obj.ksc[1]);
}
if(obj.ksc[2]){
localStorage.setItem("oks-3",obj.ksc[2]);
}
if(obj.clientMute){
localStorage.setItem("client_mute",JSON.stringify(obj.clientMute));
}
if(obj.wordMute){
localStorage.setItem("word_mute",JSON.stringify(obj.wordMute));
}
if(obj.favoriteTags){
localStorage.setItem("tag",JSON.stringify(obj.favoriteTags));
}
localStorage.setItem("np-temp",obj.spotifyTemplete);
for(var i=0;i<obj.columns.length;i++){
localStorage.setItem("card_" + i,"true");
localStorage.removeItem("catch_" + i);
}
location.href="language.html";
}else{
alert("Error.")
}
})
//cards
//lang
});
}
function savefolder(){
var electron = require("electron");
var remote=electron.remote;
var dialog=remote.dialog;
dialog.showOpenDialog(null, {
title: 'Save folder',
properties: ['openDirectory'],
}, (fileNames) => {
localStorage.setItem("savefolder",fileNames[0]);
});
}
function font(){
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('fonts', []);
ipc.on('font-list', function (event, arg) {
$("#fonts").removeClass("hide");
for( var i=0; i<arg.length; i++) {
var font=arg[i];
$("#fonts").append('<div class="font pointer" style="font-family:'+font.family+'" onclick="insertFont(\''+font.family+'\')">'+font.family+"</div>")
}
});
}
function insertFont(name){
$("#font").val(name);
}
$(".color-picker").each(function(i, elem) {
pickerDefine(i,"fff");
});
function pickerDefine(i,color){
var pickr = new Pickr({
el: '#color-picker'+i,
default: color,
showAlways: true,
appendToBody: true,
closeWithKey: 'Escape',
comparison: false,
components: {
preview: true, // Left side color comparison
opacity: false, // Opacity slider
hue: true, // Hue slider
interaction: {
rgba: false, // rgba option (red green blue and alpha)
input: true, // input / output element
}
},
strings: {
save: 'Save', // Default for save button
clear: 'Clear' // Default for clear button
}
});
pickr.on('change', (...args) => {
var rgb='rgb('+args[0].toRGBA()[0]+','+args[0].toRGBA()[1]+','+args[0].toRGBA()[2]+')';
$("#color-picker"+i+"_value").val(rgb)
});
}
function customComp(){
var nameC=$("#custom_name").val();
if(!nameC){return false;}
var descC=$("#custom_desc").val();
var primaryC=$("#color-picker0_value").val();
if(!primaryC){primaryC="rgb(255,255,255)"}
var secondaryC=$("#color-picker1_value").val();
if(!secondaryC){secondaryC="rgb(255,255,255)"}
var textC=$("#color-picker2_value").val();
if(!textC){textC="rgb(255,255,255)"}
var accentC=$("#color-picker3_value").val();
if(!accentC){accentC="rgb(255,255,255)"}
var multi = localStorage.getItem("multi");
var my=JSON.parse(multi)[0].name;
var id=$("#custom-edit-sel").val();
if(id=="add_new"){
id=makeCID();
}
var json={
"name": nameC,
"author": my,
"desc": descC,
"base": $("[name=direction]:checked").val(),
"vars": {
"primary": primaryC,
"secondary": secondaryC,
"text": textC
},
"props": {
"TheDeskAccent": accentC
},
"id": id
}
$("#custom_json").val(JSON.stringify(json));
themes();
$("#custom_name").val("");
$("#custom_desc").val("");
$("#dark").prop("checked", true);
$("#custom_json").val("");
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
$("#color-picker0_value").val("");
$("#color-picker1_value").val("");
$("#color-picker2_value").val("");
$("#color-picker3_value").val("");
pickerDefine(0,"fff");
pickerDefine(1,"fff");
pickerDefine(2,"fff");
pickerDefine(3,"fff");
ipc.send('theme-json-create', JSON.stringify(json));
}
function deleteIt(){
var id=$("#custom-sel-sel").val();
$("#custom_name").val("");
$("#custom_desc").val("");
$("#dark").prop("checked", true);
$("#custom_json").val("");
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
$("#color-picker0_value").val("");
$("#color-picker1_value").val("");
$("#color-picker2_value").val("");
$("#color-picker3_value").val("");
pickerDefine(0,"fff");
pickerDefine(1,"fff");
pickerDefine(2,"fff");
pickerDefine(3,"fff");
ipc.on('theme-json-delete-complete', function (event, args) {
ctLoad()
});
ipc.send('theme-json-delete', id);
}
function ctLoad(){
ipc.send('theme-json-list', "");
ipc.on('theme-json-list-response', function (event, args) {
console.log(args);
var templete="";
Object.keys(args).forEach(function(key) {
var theme = args[key];
var themeid=theme.id
templete = templete+'<option value="'+themeid+'">' + theme.name +'</option>';
});
if(args[0]){
localStorage.setItem("customtheme-id",args[0].id)
}
$("#custom-sel-sel").html(templete);
templete='<option value="add_new">'+$("#edit-selector").attr("data-add")+'</option>'+templete;
$("#custom-edit-sel").html(templete);
$('select').material_select('update');
});
}
function customSel(){
var id=$("#custom-sel-sel").val();
localStorage.setItem("customtheme-id",id)
}
function custom(){
var id=$("#custom-edit-sel").val();
if(id=="add_new"){
$("#custom_name").val("");
$("#custom_desc").val("");
$("#dark").prop("checked", true);
$("#custom_json").val("");
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
$("#color-picker0_value").val("");
$("#color-picker1_value").val("");
$("#color-picker2_value").val("");
$("#color-picker3_value").val("");
pickerDefine(0,"fff");
pickerDefine(1,"fff");
pickerDefine(2,"fff");
pickerDefine(3,"fff");
$("#delTheme").addClass("disabled")
}else{
$("#delTheme").removeClass("disabled")
ipc.send('theme-json-request', id);
ipc.on('theme-json-response', function (event, args) {
console.log(args);
$("#custom_name").val(args.name);
$("#custom_desc").val(args.desc);
$("#"+args.base).prop("checked", true);
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
pickerDefine(0,rgbToHex(args.vars.primary))
$("#color-picker0_value").val(args.vars.primary);
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
pickerDefine(1,rgbToHex(args.vars.secondary))
$("#color-picker1_value").val(args.vars.secondary);
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
$("#color-picker2_value").val(args.vars.text);
pickerDefine(2,rgbToHex(args.vars.text))
if(args.props){
if(args.props.TheDeskAccent){
var accent=args.props.TheDeskAccent;
}else{
var accent=args.vars.secondary;
}
}else{
var accent=args.vars.secondary;
}
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
pickerDefine(3,rgbToHex(accent))
$("#custom_json").val(JSON.stringify(args));
});
}
}
function customImp(){
var json=$("#custom_import").val();
if(JSON5.parse(json)){
ipc.send('theme-json-create', json);
}else{
alert("Error")
}
}
function hardwareAcceleration(){
var had = $("[name=ha]:checked").val();
localStorage.setItem("ha", had);
console.log("ha");
ipc.send('ha', had);
}
ipc.on('theme-json-create-complete', function (event, args) {
$("#custom_import").val("");
ctLoad()
});
//最初に読む
load();
climute();
wordmute();
wordemp();
checkSpotify();
voiceSettingLoad();
oksload();
npprovider();
ctLoad()

View File

@@ -32,9 +32,9 @@ function sortload(){
var acctdata=user+"@"+domain;
}
var html='<li class="drag-content" data-id="'+key+'" data-flag="'+flag+'"'+insert+'><a onclick="goColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムへ">forward</i></a> <a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">cancel</i></a><br>'+acctdata+" "+cap(acct.type, acct.data,acct.domain)+'</li>';
var html='<li class="drag-content" data-id="'+key+'" data-flag="'+flag+'"'+insert+'><div class="sorticon"><i class="material-icons">'+icon(acct.type)+'</i></div><div class="sorttitle">'+cap(acct.type, acct.data,acct.domain)+'</div><div class="sortaction"><a onclick="goColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_sort_gothis+'">forward</i></a> <a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">cancel</i></a></div><div class="sortacct">'+acctdata+'</div></li>';
$("#sort").append(html);
});
drag();
@@ -104,18 +104,14 @@ function sort(){
Materialize.toast("並べ替え完了。", 3000);
sortload();
parseColumn();
sortToggle()
sortMenu()
}
//ソートボタントグル
function sortToggle(){
function sortMenu(){
$("#left-menu div").removeClass("active");
$("#sortMenu").addClass("active");
$(".menu-content").addClass("hide");
$("#sort-box").removeClass("hide");
$("#sort").html("");
if ($("#sort-box").hasClass("hide")) {
$("#sort-box").removeClass("hide");
$("#sort-box").addClass("show");
//並べ替え
sortload();
} else {
$("#sort-box").addClass("hide");
$("#sort-box").removeClass("show");
}
sortload();
}

View File

@@ -123,16 +123,28 @@ function nowplaying(mode){
}else if(mode=="itunes"){
var electron = require("electron");
var ipc = electron.ipcRenderer;
if (ipc.listenerCount('itunes-np') > 0) {
return false;
}
ipc.send('itunes', "");
ipc.on('itunes-np', function (event, arg) {
ipc.once('itunes-np', function (event, arg) {
console.log(arg);
var content=localStorage.getItem("np-temp");
if(!content || content=="" || content=="null"){
var content="#NowPlaying {song} / {album} / {artist}\n{url}";
}
var flag=localStorage.getItem("artwork");
if(flag && arg.path){
media(arg.path,"image/png","new");
var remote=electron.remote;
var platform=remote.process.platform;
if(platform=="win32"){
if(flag && arg.path){
media(arg.path,"image/png","new");
}
}else if(platform=="darwin"){
if(flag && arg.artworks[0]){
ipc.send('bmp-image', [arg.artworks[0].path,0]);
}
}
var regExp = new RegExp("{song}", "g");
content = content.replace(regExp, arg.name);
@@ -145,11 +157,11 @@ function nowplaying(mode){
var regExp = new RegExp("{composer}", "g");
content = content.replace(regExp, arg.composer);
var regExp = new RegExp("{hz}", "g");
content = content.replace(regExp, arg.sampleRate/1000+"kHz");
var regExp = new RegExp("{lyricist}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{bpm}", "g");
content = content.replace(regExp, "");
content = content.replace(regExp, arg.sampleRate/1000+"kHz");
var regExp = new RegExp("{bitRate}", "g");
content = content.replace(regExp, arg.bitRate+"kbps");
var regExp = new RegExp("{genre}", "g");

View File

@@ -11,6 +11,7 @@ function themes(theme) {
$("html").removeClass("greentheme");
$("html").removeClass("browntheme");
$("html").removeClass("blacktheme");
$("html").removeClass("customtheme");
$("html").addClass(theme+"theme");
var font = localStorage.getItem("font");
if(font){
@@ -18,5 +19,10 @@ function themes(theme) {
}else{
$("html").css("font-family","");
}
if(theme=="custom"){
if(localStorage.getItem("customtheme-id")){
ipc.send('theme-css-request', localStorage.getItem("customtheme-id"));
}
}
}
themes();

View File

@@ -92,7 +92,7 @@ function pinutl(before,user, acct_id) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse(json, '', acct_id,'user');
var templete = parse(json, 'pinned', acct_id,'user');
if(!json[0]){
templete="";
}

View File

@@ -12,13 +12,13 @@ function profedit() {
httpreq.open('PATCH', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(JSON.stringify({
display_name: name,
note: des,
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
$('#his-data').modal('close');
todc();
}
@@ -47,10 +47,10 @@ function imgChange(imgfile, target) {
httpreq.open('PATCH', start, true);
httpreq.upload.addEventListener("progress", progshow, false);
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send(fd);
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
$('#his-data').modal('close');

View File

@@ -46,7 +46,7 @@ function udgEx(user,acct_id){
shell.openExternal(url);
}
});
return;
return true;
}
function udg(user, acct_id) {
reset();
@@ -130,7 +130,11 @@ function udg(user, acct_id) {
$('#his-data').css('background-image', 'url(' + json.header + ')');
$("#his-sta").text(json.statuses_count);
$("#his-follow").text(json.following_count);
$("#his-follower").text(json.followers_count);
var flerc=json.followers_count;
if(flerc<0){
flerc="-";
}
$("#his-follower").text(flerc);
$("#his-since").text(crat(json.created_at));
$("#his-openin").attr("data-href", json.url);
if(json.fields){
@@ -410,8 +414,8 @@ function reset(){
$(".column-first").addClass("active-back");
$("#his-name").text("Loading");
$("#his-acct").text("");
$("#his-prof").attr("src", "./img/loading.svg");
$('#his-data').css('background-image', 'url(./img/loading.svg)');
$("#his-prof").attr("src", "../../img/loading.svg");
$('#his-data').css('background-image', 'url(../../img/loading.svg)');
$("#his-sta").text("");
$("#his-follow").text("");
$("#his-follower").text("");

View File

@@ -1,75 +0,0 @@
<!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>

View File

@@ -1,34 +1,34 @@
'use strict';
var dir='file://' + __dirname;
var base=dir + '/view/';
// Electronのモジュール
const electron = require("electron");
const fs = require("fs");
const dialog = require('electron').dialog;
var Jimp = require("jimp");
const shell = electron.shell;
const os = require('os')
const path = require('path')
const fm = require('font-manager');
const language = require('./main/language.js');
const css = require('./main/css.js');
const dl = require('./main/dl.js');
const img = require('./main/img.js');
const np = require('./main/np.js');
const systemFunc = require('./main/system.js');
const Menu=electron.Menu
var updatewin=null;
const join = require('path').join;
// linuxの時は定義しない
if (process.platform!='linux') {
const {NowPlaying,PlayerName} = require("nowplaying-node");
}
// アプリケーションをコントロールするモジュール
const app = electron.app;
// ウィンドウを作成するモジュール
const BrowserWindow = electron.BrowserWindow;
const {
download
} = require('electron-dl');
// メインウィンドウはGCされないようにグローバル宣言
let mainWindow;
var info_path = join(app.getPath("userData"), "window-size.json");
var max_info_path = join(app.getPath("userData"), "max-window-size.json");
var lang_path=join(app.getPath("userData"), "language");
var tmp_img = join(app.getPath("userData"), "tmp.png");
var ha_path=join(app.getPath("userData"), "hardwareAcceleration");
try{
fs.readFileSync(ha_path, 'utf8');
app.disableHardwareAcceleration()
console.log("disabled: HA");
}catch{
console.log("enabled: HA");
}
var window_size;
try {
window_size = JSON.parse(fs.readFileSync(info_path, 'utf8'));
@@ -47,9 +47,22 @@ try {
height: "string",
x: "string",
y: "string"
}; // デフォルトバリュー
}
try {
var lang = fs.readFileSync(lang_path, 'utf8');
} catch (e) {
var langs=app.getLocale();
if(~langs.indexOf("ja")){
lang="ja";
}else{
lang="en";
}
fs.writeFileSync(lang_path,lang);
}
console.log(app.getLocale());
console.log("launch:"+lang);
// 全てのウィンドウが閉じたら終了
app.on('window-all-closed', function() {
if (process.platform != 'darwin') {
@@ -64,21 +77,12 @@ function createWindow() {
var bit=process.arch;
if(platform=="linux"){
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,icon: __dirname + '/desk.png'}
}else{
}else if(platform=="win32"){
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,simpleFullscreen:true}
}else if(platform=="darwin"){
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,simpleFullscreen:true}
}
mainWindow = new BrowserWindow(arg);
try {
var lang = fs.readFileSync(lang_path, 'utf8');
} catch (e) {
var lang=app.getLocale();
if(~lang.indexOf("ja")){
lang="ja";
}else{
lang="en";
}
fs.writeFileSync(lang_path,lang);
}
electron.session.defaultSession.clearCache(() => {})
if(process.argv){
if(process.argv[1]){
@@ -96,7 +100,7 @@ function createWindow() {
}else{
var plus="";
}
mainWindow.loadURL('file://' + __dirname + '/view/'+lang+'/index.html'+plus);
mainWindow.loadURL(base+lang+'/index.html'+plus);
if(!window_size.x && !window_size.y){
mainWindow.center();
}
@@ -123,61 +127,22 @@ function createWindow() {
mainWindow.on('maximize', function() {
fs.writeFileSync(max_info_path, JSON.stringify(mainWindow.getBounds()));
});
// Create the Application's main menu
var template = [{
label: "アプリケーション",
submenu: [
{ label: "TheDeskについて", click: function() { about(); } },
{ type: "separator" },
{ label: "終了", accelerator: "Command+Q", click: function() { app.quit(); }}
]}, {
label: "編集",
submenu: [
{ label: "元に戻す", accelerator: "CmdOrCtrl+Z", selector: "undo:" },
{ label: "やり直し", accelerator: "Shift+CmdOrCtrl+Z", selector: "redo:" },
{ type: "separator" },
{ label: "切り取り", accelerator: "CmdOrCtrl+X", selector: "cut:" },
{ label: "コピー", accelerator: "CmdOrCtrl+C", selector: "copy:" },
{ label: "貼り付け", accelerator: "CmdOrCtrl+V", selector: "paste:" },
{ label: "すべて選択", accelerator: "CmdOrCtrl+A", selector: "selectAll:" }
]},{
label: "表示",
submenu: [
{
label: 'Toggle Developer Tools',
accelerator: 'Alt+Command+I',
click: function() { mainWindow.toggleDevTools(); }
},
{
label: '再読み込み',
accelerator: 'CmdOrCtrl+R',
click: function() { mainWindow.webContents.send('reload', " "); }
}
]
},
{
label: 'ウィンドウ',
role: 'window',
submenu: [
{
label: '最小化',
accelerator: 'CmdOrCtrl+M',
role: 'minimize'
},
{
label: '閉じる',
accelerator: 'CmdOrCtrl+W',
role: 'close'
},
]
}
];
var platform=process.platform;
var bit=process.arch;
if(platform=="darwin"){
Menu.setApplicationMenu(Menu.buildFromTemplate(template));
Menu.setApplicationMenu(Menu.buildFromTemplate(language.template(lang,mainWindow,false)));
}
//CSS
css.css(mainWindow);
//アップデータとダウンロード
dl.dl(mainWindow,lang_path,base);
//画像選択と画像処理
img.img(mainWindow,dir);
//NowPlaying
np.TheDeskNowPlaying(mainWindow);
//その他system
systemFunc.system(mainWindow,dir,lang);
}
// Electronの初期化完了後に実行
app.on('ready', createWindow);
@@ -185,510 +150,4 @@ var onError = function(err,response){
console.error(err,response);
};
var ipc = electron.ipcMain;
ipc.on('native-notf', function(e, args) {
var platform=process.platform;
var bit=process.arch;
if(platform=="win32"){
const notifier = require('node-notifier')
var tmp_imge=tmp_img;
Jimp.read(args[2], function (err, lenna) {
if(!err && lenna){
lenna.write(tmp_img);
var tmp_imge=tmp_img;
}else{
var tmp_imge="";
}
notifier.notify({
appID: "top.thedesk",
message: args[1],
title: args[0],
icon : tmp_imge,
sound: false,
wait: true,
},
function(err, response) {
console.log(err, response)
});
});
}
});
//言語
ipc.on('lang', function(e, arg) {
fs.writeFileSync(lang_path,arg);
mainWindow.webContents.send('langres', "");
})
ipc.on('update', function(e, x, y) {
var platform=process.platform;
var bit=process.arch;
if(platform!="others"){
updatewin = new BrowserWindow({
width: 600,
height: 400,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false
});
var lang = fs.readFileSync(lang_path, 'utf8');
updatewin.loadURL('file://' + __dirname + '/view/'+lang+'/update.html');
return "true"
}else{
return false;
}
})
//Web魚拓
ipc.on('shot', function(e, args) {
console.log("link:"+args[0]+" width:"+args[1]+" height:"+args[2]+" title:"+args[4]+" top:"+args[5]+" left:"+args[6]);
var platform=process.platform;
var bit=process.arch;
if(args[7]==""){
if(platform=="win32"){
var dir=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\"+args[4]+"-toot.png";
var folder=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\";
}else if(platform=="linux" || platform=="darwin" ){
var dir=app.getPath('home')+"/Pictures/TheDesk/Screenshots/"+args[4]+"-toot.png";
var folder=app.getPath('home')+"/Pictures/TheDesk/Screenshots/";
}
}else{
var folder=args[7];
var dir=folder+args[4]+"-toot.png";
}
Jimp.read(Buffer.from( args[3],'base64'), function (err, lenna) {
if (err) throw err;
lenna.crop( args[6], args[5], args[1], args[2] ).write(dir);
});
shell.showItemInFolder(folder);
})
ipc.on('shot-img-dl', (e, args) => {
Jimp.read(args[0], function (err, lenna) {
if (err) throw err;
if(args[1]==""){
if(process.platform=="win32"){
var folder=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\";
}else if(process.platform=="linux" || process.platform=="darwin" ){
var folder=app.getPath('home')+"/Pictures/TheDesk/Screenshots/";
}
}else{
var folder=args[2];
}
lenna.write(folder+args[1]);
});
})
//アプデDL
ipc.on('download-btn', (e, args) => {
var platform=process.platform;
var bit=process.arch;
var versioning=args[3];
var portable=args[2];
if(platform=="win32" || platform=="linux" || platform=="darwin" ){
var exe=false;
if(platform=="win32" && bit=="x64"){
if(portable){
var zip="TheDesk.exe";
}else{
var zip="TheDesk-setup.exe";
}
exe=true;
}else if(platform=="win32" && bit=="ia32"){
if(portable){
var zip="TheDesk-ia32.exe";
}else{
var zip="TheDesk-setup-ia32.exe";
}
exe=true;
}else if(platform=="linux" && bit=="x64"){
var zip="TheDesk-linux-x64.zip";
}else if(platform=="linux" && bit=="ia32"){
var zip="TheDesk-linux-ia32.zip";
}else if(platform=="darwin"){
var zip="TheDesk-darwin-x64.zip";
}else{
return;
}
if(versioning && !exe){
zip=zip.replace(".zip","."+args[1]+".zip");
}else if(versioning){
zip=zip.replace(".exe","."+args[1]+".exe");
}
}else{
const options = {
type: 'info',
title: 'Other OS Supporting System',
message: "thedesk.topをブラウザで開きます。",
buttons: ['OK']
}
dialog.showMessageBox(options, function(index) {
shell.openExternal("https://thedesk.top");
})
return;
if(bit=="x64"){
var zip="TheDesk-linux-x64.zip";
}else if(bit=="ia32"){
var zip="TheDesk-linux-ia32.zip";
}
}
var ver=args[1];
console.log(zip);
if(args[0]=="true"){
dialog.showSaveDialog(null, {
title: '保存',
properties: ['openFile', 'createDirectory'],
defaultPath: zip
}, (savedFiles) => {
console.log(savedFiles);
if(!savedFiles){
return false;
}
if(platform=="win32"){
var m = savedFiles.match(/(.+)\\(.+)$/);
}else{
var m = savedFiles.match(/(.+)\/(.+)$/);
}
if(isExistFile(savedFiles)){
fs.statSync(savedFiles);
fs.unlink(savedFiles);
}
console.log(m[1]+":"+savedFiles)
dl(portable,ver,m[1],savedFiles);
});
}else{
dl(portable,ver);
}
});
function isExistFile(file) {
try {
fs.statSync(file);
return true
} catch(err) {
if(err.code === 'ENOENT') return false
}
}
function dl(portable,ver,files,fullname){
console.log(files);
var platform=process.platform;
var bit=process.arch;
if(platform=="win32"){
if(bit=="x64"){
if(portable){
var zip="TheDesk.exe";
}else{
var zip="TheDesk-setup.exe";
}
}else if(bit=="ia32"){
if(portable){
var zip="TheDesk-ia32.exe";
}else{
var zip="TheDesk-setup-ia32.exe";
}
}
}else if(platform=="linux"){
if(bit=="x64"){
var zip="TheDesk-linux-x64.zip";
}else if(bit=="ia32"){
var zip="TheDesk-linux-ia32.zip";
}
}else if(platform=="darwin"){
var zip="TheDesk-darwin-x64.zip";
}
//zip=zip+"?"+ver;
var l = 8;
// 生成する文字列に含める文字セット
var c = "abcdefghijklmnopqrstuvwxyz0123456789";
var cl = c.length;
var r = "";
for(var i=0; i<l; i++){
r += c[Math.floor(Math.random()*cl)];
}
updatewin.webContents.send('mess', "ダウンロードを開始します。");
const opts = {
directory:fullname,
openFolderWhenDone: true,
onProgress: function(e) {
updatewin.webContents.send('prog', e);
},
saveAs: false
};
download(BrowserWindow.getFocusedWindow(),
'https://dl.thedesk.top/'+zip, opts)
.then(dl => {
updatewin.webContents.send('mess', "ダウンロードが完了しました。");
app.quit();
})
.catch(console.error);
}
ipc.on('general-dl', (e, args) => {
var name="";
var platform=process.platform;
var bit=process.arch;
if(args[1]==""){
if(platform=="win32"){
var dir=app.getPath('home')+"\\Pictures\\TheDesk";
}else if(platform=="linux" || platform=="darwin" ){
var dir=app.getPath('home')+"/Pictures/TheDesk";
}
}else{
var dir=args[1];
}
mainWindow.webContents.send('general-dl-message', "ダウンロードを開始します。");
const opts = {
directory: dir,
filename:name,
openFolderWhenDone: true,
onProgress: function(e) {
mainWindow.webContents.send('general-dl-prog', e);
},
saveAs: false
};
download(BrowserWindow.getFocusedWindow(),
args[0], opts)
.then(dl => {
mainWindow.webContents.send('general-dl-message', "ダウンロードが完了しました。");
})
.catch(console.error);
});
ipc.on('quit', (e, args) => {
app.quit();
});
ipc.on('about', (e, args) => {
about();
});
function about(){
var ver=app.getVersion()
var window = new BrowserWindow({width: 300, height: 460,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false });
window.loadURL('file://' + __dirname + '/about.html?ver='+ver);
return "true"
}
ipc.on('itunes', (e, args) => {
if(args[0]=="set"){
var nppath=join(app.getPath("userData"), "nowplaying");
var npProvider;
try {
npProvider = args[1];
} catch (e) {
npProvider="AIMP";
}
var myAIMP = new NowPlaying({
fetchCover: true,
player: PlayerName[npProvider],
});
fs.writeFileSync(nppath, npProvider);
}else{
var platform=process.platform;
var bit=process.arch;
if(platform=="darwin"){
const nowplaying = require("itunes-nowplaying-mac")
nowplaying.getRawData().then(function (value) {
mainWindow.webContents.send('itunes-np', value);
}).catch(function (error) {
// 非同期処理失敗。呼ばれない
console.log(error);
});
}else{
var nppath=join(app.getPath("userData"), "nowplaying");
var npProvider;
try {
npProvider = fs.readFileSync(nppath, 'utf8');
} catch (e) {
npProvider="AIMP";
}
var myAIMP = new NowPlaying({
fetchCover: true,
player: PlayerName[npProvider],
});
myAIMP.update();
var path=myAIMP.getCoverPath();
if(path){
var bin = fs.readFileSync(path, 'base64');
}else{
var bin=false;
}
var value={
name:myAIMP.getTitle(),
artist:myAIMP.getArtist(),
album:myAIMP.getAlbum(),
path:bin
}
mainWindow.webContents.send('itunes-np', value);
}
}
});
ipc.on('file-select', (e, args) => {
dialog.showOpenDialog(null, {
properties: ['openFile', 'multiSelections'],
title: '添付ファイルを選択',
defaultPath: '.',
filters: [
{name: 'メディアファイル', extensions: ['jpg', 'png', 'gif', 'bmp', 'jpeg','mp4','webm']},
{name: '画像', extensions: ['jpg', 'png', 'gif', 'bmp', 'jpeg']},
{name: '動画', extensions: ['mp4','webm']},
{name: '全てのファイル', extensions: ['*']}
]
}, (fileNames) => {
if(!fileNames){
return false;
}
for(var i=0;i<fileNames.length;i++){
var path=fileNames[i];
var bin = fs.readFileSync(path, 'base64');
mainWindow.webContents.send('bmp-img-comp', [bin,'new']);
}
});
});
ipc.on('column-del', (e, args) => {
const options = {
type: 'info',
title: 'カラム削除',
message: "カラムを削除しますか?(すべてのカラムのリンク解析がOFFになります。)",
buttons: ['いいえ', 'はい']
}
dialog.showMessageBox(options, function(index) {
mainWindow.webContents.send('column-del-reply', index);
})
});
ipc.on('bmp-image', (e, args) => {
var m = args[0].match(/(.+)\\(.+)\.(.+)$/);
Jimp.read(args[0], function (err, lenna) {
if (err) throw err;
lenna.getBase64(Jimp.MIME_PNG, function (err, src) {
mainWindow.webContents.send('bmp-img-comp', [src,args[1]]);
});
});
});
ipc.on('nano', function (e, x, y) {
var nano_info_path = join(app.getPath("userData"), "nano-window-position.json");
var window_pos;
try {
window_pos = JSON.parse(fs.readFileSync(nano_info_path, 'utf8'));
} catch (e) {
window_pos = [0,0]; // デフォルトバリュー
}
var nanowindow = new BrowserWindow({width: 300, height: 200,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false });
nanowindow.loadURL('file://' + __dirname + '/nano.html');
nanowindow.setAlwaysOnTop(true);
nanowindow.setPosition(window_pos[0], window_pos[1]);
nanowindow.on('close', function() {
fs.writeFileSync(nano_info_path, JSON.stringify(nanowindow.getPosition()));
});
return true;
})
ipc.on('adobe', (e, arg) => {
if(!arg){
const options = {
type: 'info',
title: 'Adobeフォトエディタ',
message: "「許可」または「永続的に許可」をクリックするとTheDeskとAdobeで情報を共有します。\n次のウィンドウを開いている時以外は一切提供しません。",
buttons: ['拒否', '許可','永続的に許可']
}
dialog.showMessageBox(options, function(index) {
if(index==2){
mainWindow.webContents.send('adobeagree', "true");
}
if(index>0){
adobeWindow();
}
})
}else{
adobeWindow();
}
});
function adobeWindow(){
var window = new BrowserWindow({
width: 1000,
height: 750
});
window.loadURL('file://' + __dirname + '/adobe.html');
}
var cbTimer1;
ipc.on('startmem', (e, arg) => {
cbTimer1 = setInterval(mems, 1000);
});
ipc.on('endmem', (e, arg) => {
if(cbTimer1){
clearInterval(cbTimer1);
}
});
function mems(){
var mem=os.totalmem()-os.freemem();
if(mainWindow){
mainWindow.webContents.send('memory', [mem,os.cpus()[0].model,os.totalmem()]);
}
}
ipc.on('mkc', (e, arg) => {
var platform=process.platform;
if(platform=="linux" || platform=="win32" ){
var mkc = fs.readFileSync(__dirname + '/.tkn', 'utf8');
}else{
var mkc = "";
}
mainWindow.webContents.send('mkcr', mkc);
});
ipc.on('export', (e, args) => {
fs.writeFileSync(args[0], args[1]);
});
ipc.on('import', (e, arg) => {
mainWindow.webContents.send('config', fs.readFileSync(arg, 'utf8'));
});
//フォント
function object_array_sort(data,key,order,fn){
//デフォは降順(DESC)
var num_a = -1;
var num_b = 1;
if(order === 'asc'){//指定があれば昇順(ASC)
num_a = 1;
num_b = -1;
}
data = data.sort(function(a, b){
var x = a[key];
var y = b[key];
if (x > y) return num_a;
if (x < y) return num_b;
return 0;
});
//重複排除
var arrObj = {};
for (var i = 0; i < data.length; i++) {
arrObj[data[i]['family']] = data[i];
}
data = [];
for (var key in arrObj) {
data.push(arrObj[key]);
}
fn(data); // ソート後の配列を返す
}
ipc.on('fonts', (e, arg) => {
var fonts = fm.getAvailableFontsSync();
object_array_sort(fonts, 'family', 'asc', function(fonts_sorted){
mainWindow.webContents.send('font-list', fonts_sorted);
});
});
app.setAsDefaultProtocolClient('thedesk')

105
app/main/css.js Normal file
View File

@@ -0,0 +1,105 @@
function css(mainWindow) {
const electron = require("electron");
const fs = require("fs");
const path = require('path')
var ipc = electron.ipcMain;
var JSON5 = require('json5');
const app = electron.app;
const join = require('path').join;
var customcss = join(app.getPath("userData"), "custom.css");
ipc.on('custom-css-create', function(e, arg) {
fs.writeFileSync(customcss, arg);
mainWindow.webContents.send('custom-css-create-complete', "");
})
ipc.on('custom-css-request', function(e, arg) {
try {
var css = fs.readFileSync(customcss, 'utf8');
} catch (e) {
var css = "";
}
mainWindow.webContents.send('custom-css-response', css);
})
ipc.on('theme-json-create', function(e, arg) {
var themecss = join(app.getPath("userData"), JSON5.parse(arg)["id"] +
".thedesktheme");
fs.writeFileSync(themecss, JSON.stringify(JSON5.parse(arg)));
if (JSON5.parse(arg)["id"]) {
mainWindow.webContents.send('theme-json-create-complete', "");
} else {
mainWindow.webContents.send('theme-json-create-complete', "error");
}
})
ipc.on('theme-json-delete', function(e, arg) {
var themecss = join(app.getPath("userData"), arg + ".thedesktheme");
console.log(themecss);
fs.unlink(themecss, function(err) {
mainWindow.webContents.send('theme-json-delete-complete', "");
});
})
ipc.on('theme-json-request', function(e, arg) {
var themecss = join(app.getPath("userData"), arg + ".thedesktheme");
var json = JSON.parse(fs.readFileSync(themecss, 'utf8'));
mainWindow.webContents.send('theme-json-response', json);
})
ipc.on('theme-css-request', function(e, arg) {
var themecss = join(app.getPath("userData"), arg + ".thedesktheme");
try {
var json = JSON.parse(fs.readFileSync(themecss, 'utf8'));
var primary = json.vars.primary;
var secondary = json.vars.secondary;
var text = json.vars.text;
if (json.base == "light") {
var drag = "rgba(255, 255, 255, 0.8)";
var beforehover = "#757575";
} else {
var drag = "rgba(0, 0, 0, 0.8)";
var beforehover = "#9e9e9e";
}
if (json.props) {
if (json.props.TheDeskAccent) {
var emphasized = json.props.TheDeskAccent
} else {
var emphasized = secondary;
}
} else {
var emphasized = primary;
}
var css = ".customtheme {--bg:" + secondary + ";--drag:" + drag + ";" +
"--color:" + text + ";--beforehover:" + beforehover + ";--modal:" +
secondary + ";--subcolor:" + primary + ";--box:" + primary +
";--sidebar:" + primary + ";--shared:" + emphasized + ";" +
"--notfbox:" + secondary + ";--emphasized:" + primary + ";--his-data:" +
secondary +
";--active:" + primary + ";--postbox:" + primary + ";--modalfooter:" +
primary +
";}.blacktheme #imagemodal{background: url(\"../img/pixel.svg\");}";
mainWindow.webContents.send('theme-css-response', css);
} catch (e) {
var css = "";
}
})
ipc.on('theme-json-list', function(e, arg) {
fs.readdir(app.getPath("userData"), function(err, files) {
if (err) throw err;
var fileList = files.filter(function(file) {
var tfile = join(app.getPath("userData"), file);
return fs.statSync(tfile).isFile() && /.*\.thedesktheme$/.test(tfile); //絞り込み
})
var themes = [];
for (var i = 0; i < fileList.length; i++) {
var themecss = join(app.getPath("userData"), fileList[i]);
var json = JSON.parse(fs.readFileSync(themecss, 'utf8'));
themes.push({
name: json.name,
id: json.id
})
}
mainWindow.webContents.send('theme-json-list-response', themes);
});
})
}
exports.css = css;

123
app/main/dl.js Normal file
View File

@@ -0,0 +1,123 @@
function dl(mainWindow,lang_path,base) {
const electron = require("electron");
const shell=electron.shell;
const fs = require("fs");
const {download} = require('electron-dl');
const BrowserWindow = electron.BrowserWindow;
const dialog = electron.dialog;
var updatewin = null;
var ipc = electron.ipcMain;
const app = electron.app;
const join = require('path').join;
ipc.on('update', function(e, x, y) {
var platform = process.platform;
var bit = process.arch;
if (platform != "others") {
updatewin = new BrowserWindow({
width: 600,
height: 400,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false,
"modal": true
});
var lang = fs.readFileSync(lang_path, 'utf8');
updatewin.loadURL(base + lang + '/update.html');
return "true"
} else {
return false;
}
})
//アプデDL
ipc.on('download-btn', (e, args) => {
var platform = process.platform;
var bit = process.arch;
dialog.showSaveDialog(null, {
title: 'Save',
defaultPath: app.getPath('home') + "/" + args[1]
}, (savedFiles) => {
console.log(savedFiles);
if (!savedFiles) {
return false;
}
if (platform == "win32") {
var m = savedFiles.match(/(.+)\\(.+)$/);
} else {
var m = savedFiles.match(/(.+)\/(.+)$/);
}
//console.log(m);
if (isExistFile(savedFiles)) {
fs.unlinkSync(savedFiles);
}
dl(args[0], args[1], m[1]);
});
});
function isExistFile(file) {
try {
fs.statSync(file);
return true
} catch (err) {
if (err.code === 'ENOENT') return false
}
}
function dl(url, file, dir) {
updatewin.webContents.send('mess', "ダウンロードを開始します。");
const opts = {
directory: dir,
openFolderWhenDone: true,
onProgress: function(e) {
updatewin.webContents.send('prog', e);
},
saveAs: false
};
download(BrowserWindow.getFocusedWindow(),
url, opts)
.then(dl => {
updatewin.webContents.send('mess', "ダウンロードが完了しました。");
app.quit();
})
.catch(console.error);
}
ipc.on('general-dl', (e, args) => {
var name = "";
var platform = process.platform;
var bit = process.arch;
if (args[1] == "") {
if (platform == "win32") {
var dir = app.getPath('home') + "\\Pictures\\TheDesk";
} else if (platform == "linux" || platform == "darwin") {
var dir = app.getPath('home') + "/Pictures/TheDesk";
}
} else {
var dir = args[1];
}
const opts = {
directory: dir,
filename: name,
openFolderWhenDone: false,
onProgress: function(e) {
mainWindow.webContents.send('general-dl-prog', e);
},
saveAs: false
};
download(BrowserWindow.getFocusedWindow(),
args[0], opts)
.then(dl => {
mainWindow.webContents.send('general-dl-message', dir);
})
.catch(console.error);
});
ipc.on('open-finder', (e, folder) => {
shell.showItemInFolder(folder)
});
}
exports.dl = dl;

71
app/main/img.js Normal file
View File

@@ -0,0 +1,71 @@
function img(mainWindow,dir){
const electron = require("electron");
const dialog = electron.dialog;
const fs = require("fs");
var Jimp = require("jimp");
var ipc = electron.ipcMain;
const BrowserWindow = electron.BrowserWindow;
ipc.on('file-select', (e, args) => {
dialog.showOpenDialog(null, {
properties: ['openFile', 'multiSelections'],
title: '添付ファイルを選択',
defaultPath: '.',
filters: [
{name: 'メディアファイル', extensions: ['jpg', 'png', 'gif', 'bmp', 'jpeg','mp4','webm']},
{name: '画像', extensions: ['jpg', 'png', 'gif', 'bmp', 'jpeg']},
{name: '動画', extensions: ['mp4','webm']},
{name: '全てのファイル', extensions: ['*']}
]
}, (fileNames) => {
if(!fileNames){
return false;
}
for(var i=0;i<fileNames.length;i++){
var path=fileNames[i];
var bin = fs.readFileSync(path, 'base64');
mainWindow.webContents.send('bmp-img-comp', [bin,'new']);
}
});
});
ipc.on('adobe', (e, arg) => {
if(!arg){
const options = {
type: 'info',
title: 'Adobeフォトエディタ',
message: "「許可」または「永続的に許可」をクリックするとTheDeskとAdobeで情報を共有します。\n次のウィンドウを開いている時以外は一切提供しません。",
buttons: ['拒否', '許可','永続的に許可']
}
dialog.showMessageBox(options, function(index) {
if(index===2){
mainWindow.webContents.send('adobeagree', "true");
}
if(index>0){
adobeWindow();
}
})
}else{
adobeWindow();
}
});
function adobeWindow(){
var window = new BrowserWindow({
width: 1000,
height: 750
});
window.loadURL(dir + '/adobe.html');
}
ipc.on('bmp-image', (e, args) => {
var m = args[0].match(/(.+)\\(.+)\.(.+)$/);
Jimp.read(args[0], function (err, lenna) {
if (err) throw err;
lenna.getBase64(Jimp.MIME_PNG, function (err, src) {
mainWindow.webContents.send('bmp-img-comp', [src,args[1]]);
});
});
});
}
exports.img = img;

155
app/main/language.js Normal file
View File

@@ -0,0 +1,155 @@
// Create the Application's main menu
function templete(lang,mainWindow,packaged){
const electron = require("electron");
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const dict={
"application":{
"ja":"アプリケーション",
"en":"Application"
},
"about":{
"ja":"TheDeskについて",
"en":"About TheDesk"
},
"quit":{
"ja":"終了",
"en":"Quit"
},
"edit":{
"ja":"編集",
"en":"Edit"
},
"undo":{
"ja":"元に戻す",
"en":"Undo"
},
"redo":{
"ja":"やり直す",
"en":"Redo"
},
"cut":{
"ja":"切り取り",
"en":"Cut"
},
"copy":{
"ja":"コピー",
"en":"Copy"
},
"paste":{
"ja":"貼り付け",
"en":"Paste"
},
"selall":{
"ja":"すべて選択",
"en":"Select All"
},
"view":{
"ja":"表示",
"en":"View"
},
"reload":{
"ja":"再読み込み",
"en":"Reload"
},
"window":{
"ja":"ウィンドウ",
"en":"Window"
},
"minimun":{
"ja":"最小化",
"en":"Minimarize"
},
"close":{
"ja":"閉じる",
"en":"Close"
}
}
const menu = [{
label: dict.application[lang],
submenu: [
{ label: dict.about[lang], click: function() {
var ver=app.getVersion()
var window = new BrowserWindow({width: 300, height: 460,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false });
window.loadURL('file://' + __dirname + '/about.html?ver='+ver);
} },
{ type: "separator" },
{ label: dict.quit[lang], accelerator: "Command+Q", click: function() { app.quit(); }}
]}, {
label: dict.edit[lang],
submenu: [
{ label: dict.undo[lang], accelerator: "CmdOrCtrl+Z", selector: "undo:" },
{ label: dict.redo[lang], accelerator: "Shift+CmdOrCtrl+Z", selector: "redo:" },
{ type: "separator" },
{ label: dict.cut[lang], accelerator: "CmdOrCtrl+X", selector: "cut:" },
{ label: dict.copy[lang], accelerator: "CmdOrCtrl+C", selector: "copy:" },
{ label: dict.paste[lang], accelerator: "CmdOrCtrl+V", selector: "paste:" },
{ label: dict.selall[lang], accelerator: "CmdOrCtrl+A", selector: "selectAll:" }
]},{
label: dict.view[lang],
submenu: [
{
label: 'Toggle Developer Tools',
accelerator: 'Alt+Command+I',
click: function() { if(!packaged){mainWindow.toggleDevTools();} }
},
{
label: dict.reload[lang],
accelerator: 'CmdOrCtrl+R',
click: function() { mainWindow.webContents.send('reload', " "); }
}
]
},
{
label: dict.window[lang],
role: 'window',
submenu: [
{
label: dict.minimun[lang],
accelerator: 'CmdOrCtrl+M',
role: 'minimize'
},
{
label: dict.close[lang],
accelerator: 'CmdOrCtrl+W',
role: 'close'
},
]
}
];
return menu;
}
function delsel(lang){
const dict={
"delete":{
"ja":"カラム削除",
"en":"Delete this column"
},
"mess":{
"ja":"カラムを削除しますか?(すべてのカラムのリンク解析がOFFになります。)",
"en":"Delete this column(URL analyzes of all windows will be disabled.)"
},
"yes":{
"ja":"はい",
"en":"Yes"
},
"no":{
"ja":"いいえ",
"en":"No"
}
}
const options = {
type: 'info',
title: dict.delete[lang],
message: dict.mess[lang],
buttons: [dict.no[lang], dict.yes[lang]]
}
return options;
}
exports.template = templete;
exports.delsel = delsel;

69
app/main/np.js Normal file
View File

@@ -0,0 +1,69 @@
function np(mainWindow){
const electron = require("electron");
const join = require('path').join;
const app = electron.app;
const fs = require("fs");
var ipc = electron.ipcMain;
ipc.on('itunes', (e, args) => {
//Verified on Windows
console.log("Access");
if(args[0]=="set"){
var {NowPlaying,PlayerName} = require("nowplaying-node");
var nppath=join(app.getPath("userData"), "nowplaying");
var npProvider;
try {
npProvider = args[1];
} catch (e) {
npProvider="AIMP";
}
var myAIMP = new NowPlaying({
fetchCover: true,
player: PlayerName[npProvider],
});
fs.writeFileSync(nppath, npProvider);
}else{
var platform=process.platform;
var bit=process.arch;
if(platform=="darwin"){
const nowplaying = require("itunes-nowplaying-mac")
nowplaying.getRawData().then(function (value) {
mainWindow.webContents.send('itunes-np', value);
}).catch(function (error) {
// 非同期処理失敗。呼ばれない
console.log(error);
});
}else{
var {NowPlaying,PlayerName} = require("nowplaying-node");
var nppath=join(app.getPath("userData"), "nowplaying");
var npProvider;
try {
npProvider = fs.readFileSync(nppath, 'utf8');
} catch (e) {
npProvider="AIMP";
}
var myAIMP = new NowPlaying({
fetchCover: true,
player: PlayerName[npProvider],
});
myAIMP.update();
var path=myAIMP.getCoverPath();
if(path){
var bin = fs.readFileSync(path, 'base64');
}else{
var bin=false;
}
var value={
win:true,
name:myAIMP.getTitle(),
artist:myAIMP.getArtist(),
album:myAIMP.getAlbum(),
path:bin
}
mainWindow.webContents.send('itunes-np', value);
}
}
});
}
exports.TheDeskNowPlaying = np;

181
app/main/system.js Normal file
View File

@@ -0,0 +1,181 @@
function system(mainWindow, dir, lang) {
const electron = require("electron");
const app = electron.app;
const join = require('path').join;
var Jimp = require("jimp");
const fs = require("fs");
var ipc = electron.ipcMain;
var tmp_img = join(app.getPath("userData"), "tmp.png");
var ha_path = join(app.getPath("userData"), "hardwareAcceleration");
var lang_path = join(app.getPath("userData"), "language");
const BrowserWindow = electron.BrowserWindow;
const dialog = electron.dialog;
const os = require('os')
const fm = require('font-manager');
const language=require("../main/language.js");
ipc.on('native-notf', function(e, args) {
var platform = process.platform;
var bit = process.arch;
if (platform == "win32") {
const notifier = require('node-notifier')
var tmp_imge = tmp_img;
Jimp.read(args[2], function(err, lenna) {
if (!err && lenna) {
lenna.write(tmp_img);
var tmp_imge = tmp_img;
} else {
var tmp_imge = "";
}
notifier.notify({
appID: "top.thedesk",
message: args[1],
title: args[0],
icon: tmp_imge,
sound: false,
wait: true,
},
function(err, response) {
console.log(err, response)
});
});
}
});
//言語
ipc.on('lang', function(e, arg) {
console.log("set:" + arg);
fs.writeFileSync(lang_path, arg);
mainWindow.webContents.send('langres', "");
})
//ハードウェアアクセラレーションの無効化
ipc.on('ha', function(e, arg) {
if (arg == "true") {
fs.writeFileSync(ha_path, arg);
} else {
fs.unlink(ha_path, function(err) {});
}
app.relaunch()
app.exit()
})
ipc.on('quit', (e, args) => {
app.quit();
});
ipc.on('about', (e, args) => {
about();
});
function about() {
var ver = app.getVersion()
var window = new BrowserWindow({
width: 300,
height: 460,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false
});
window.loadURL(dir + '/about.html?ver=' + ver);
return "true"
}
ipc.on('column-del', (e, args) => {
console.log(lang);
var options = language.delsel(lang)
dialog.showMessageBox(options, function(index) {
mainWindow.webContents.send('column-del-reply', index);
})
});
ipc.on('nano', function(e, x, y) {
var nano_info_path = join(app.getPath("userData"),
"nano-window-position.json");
var window_pos;
try {
window_pos = JSON.parse(fs.readFileSync(nano_info_path, 'utf8'));
} catch (e) {
window_pos = [0, 0]; // デフォルトバリュー
}
var nanowindow = new BrowserWindow({
width: 350,
height: 200,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false
});
nanowindow.loadURL(dir + '/nano.html');
nanowindow.setAlwaysOnTop(true);
nanowindow.setPosition(window_pos[0], window_pos[1]);
nanowindow.on('close', function() {
fs.writeFileSync(nano_info_path, JSON.stringify(nanowindow.getPosition()));
});
return true;
})
var cbTimer1;
ipc.on('startmem', (e, arg) => {
cbTimer1 = setInterval(mems, 1000);
});
ipc.on('endmem', (e, arg) => {
if (cbTimer1) {
clearInterval(cbTimer1);
}
});
function mems() {
var mem = os.totalmem() - os.freemem();
if (mainWindow) {
mainWindow.webContents.send('memory', [mem, os.cpus()[0].model, os.totalmem()]);
}
}
ipc.on('export', (e, args) => {
fs.writeFileSync(args[0], args[1]);
});
ipc.on('import', (e, arg) => {
mainWindow.webContents.send('config', fs.readFileSync(arg, 'utf8'));
});
//フォント
function object_array_sort(data, key, order, fn) {
//デフォは降順(DESC)
var num_a = -1;
var num_b = 1;
if (order === 'asc') { //指定があれば昇順(ASC)
num_a = 1;
num_b = -1;
}
data = data.sort(function(a, b) {
var x = a[key];
var y = b[key];
if (x > y) return num_a;
if (x < y) return num_b;
return 0;
});
//重複排除
var arrObj = {};
for (var i = 0; i < data.length; i++) {
arrObj[data[i]['family']] = data[i];
}
data = [];
for (var key in arrObj) {
data.push(arrObj[key]);
}
fn(data); // ソート後の配列を返す
}
ipc.on('fonts', (e, arg) => {
var fonts = fm.getAvailableFontsSync();
object_array_sort(fonts, 'family', 'asc', function(fonts_sorted) {
mainWindow.webContents.send('font-list', fonts_sorted);
});
});
}
exports.system = system;

View File

@@ -13,6 +13,7 @@ html{
width:100vw;
height:100vh;
overflow:hidden;
font-family:sans-serif;
}
body {
background-color: rgba(0, 0, 0, 0.1);
@@ -45,6 +46,7 @@ textarea {
}
.area-actions{display:none !important;}
.area-date_via{display:none !important;}
.area-side{display:none !important;}
/* Handle */
::-webkit-scrollbar-thumb {
-webkit-border-radius: 5px;
@@ -108,8 +110,6 @@ $.strip_tags = function(str, allowed) {
</div>
<br>
<textarea id="textarea" style="width:80%; background-color:transparent"></textarea>
<input type="hidden" id="reply">
<input type="hidden" id="media">
<button class="btn" onclick="post()">Post</button>
<script>
if(localStorage.getItem("lang")){
@@ -118,9 +118,6 @@ $.strip_tags = function(str, allowed) {
var lang="ja";
}
</script>
<script type="text/javascript" src="./js/lang/lang.js"></script>
<script type="text/javascript" src="./js/lang/parse.lang.js"></script>
<script src="https://twemoji.maxcdn.com/2/twemoji.min.js?2.7"></script>
<script type="text/javascript" src="./js/post/post.js"></script>
<script type="text/javascript" src="./js/post/use-txtbox.js"></script>
@@ -166,4 +163,52 @@ function mov(){
function resetmv(){
return false;
}
function post(){
var acct_id=$("#post-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/statuses";
var str=$("#textarea").val();
var toot={
status: str
}
var vis = loadVis(acct_id)
toot.visibility=vis;
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = "json";
httpreq.send(JSON.stringify(toot));
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) {
$("#textarea").val("");
}
}
}
function loadVis(acct_id){
var vist = localStorage.getItem("vis");
console.log(vist);
if (!vist) {
return "public";
} else {
if (vist == "memory") {
var memory = localStorage.getItem("vis-memory-"+acct_id);
if (!memory) {
memory = "public";
}
return memory;
} else if(vist == "server") {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
var memory = obj[acct_id]["vis"];
if (!memory) {
memory = "public";
}
return memory;
} else {
return vist;
}
}
}
</script>

1950
app/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "thedesk",
"version": "17.0.1",
"version": "18.1.0",
"description": "TheDesk is a Mastodon client for PC.",
"main": "main.js",
"scripts": {
@@ -16,7 +16,7 @@
},
"homepage": "https://thedesk.top",
"author": {
"name": "Cutls P",
"name": "Cutls",
"url": "https://kirishima.clooud/@Cutls",
"email": "web-pro@cutls.com"
},
@@ -30,6 +30,11 @@
"name": "ぽぷんじゃ",
"url": "https://popon.pptdn.jp/@popn_ja",
"email": "popn.ja@gmail.com"
},
{
"name": "kPherox",
"url": "https://www.kr-kp.com/",
"email": "admin@mail.kr-kp.com"
}
],
"license": "GPL-3.0",
@@ -37,12 +42,14 @@
"electron-dl": "^1.11.0",
"font-manager": "^0.3.0",
"jimp": "^0.2.28",
"json5": "^2.1.0",
"node-notifier": "^5.2.1",
"sumchecker": "^2.0.2"
"sumchecker": "^2.0.2",
"vue": "^2.6.9"
},
"optionalDependencies": {
"nowplaying-node": "^0.1.3",
"itunes-nowplaying-mac": "^0.2.3"
"itunes-nowplaying-mac": "git+https://github.com/rinsuki/itunes-nowplaying-mac#pull/1/head"
},
"build": {
"productName": "TheDesk",
@@ -51,10 +58,21 @@
"output": "../build"
},
"win": {
"icon": "thedesk.ico",
"icon": "build/thedesk.ico",
"target": [
"nsis",
"portable"
"portable",
"appx"
]
},
"appx": {
"identityName": "53491Cutls.TheDesk",
"applicationId": "Cutls.TheDesk",
"publisherDisplayName": "Cutls",
"publisher": "CN=629757F5-A5EE-474F-9562-B304A89A9FD1",
"languages": [
"JA-JP",
"EN-US"
]
},
"nsis": {
@@ -73,14 +91,13 @@
"target": "dmg"
},
"electronDownload": {
"version": "3.0.10"
"version": "4.0.6"
},
"electronVersion": "3.0.10"
"electronVersion": "4.0.6"
},
"devDependencies": {
"electron": "^3.0.10",
"electron-packager": "^13.0.1",
"electron-prebuilt": "^1.4.13",
"electron-rebuild": "^1.8.2"
"electron": "^4.0.6",
"electron-packager": "^13.1.1",
"electron-rebuild": "^1.8.4"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -20,6 +20,13 @@ body,html{overflow-y: scroll;}
.card .colorsel div.exc{width:40px;height:20px;}
</style>
<meta charset="utf-8">
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
</head>
<body id="mainView">
<script type="text/javascript" src="../../js/common/jquery.js"></script>
@@ -76,7 +83,7 @@ Some instance data by <a href="https://instances.social" target="_blank">instanc
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br>
<span id="ins-desc"></span><br>
<img src="./img/loading.svg" id="ins-prof" width="200"><br>
<img src="../../img/loading.svg" id="ins-prof" width="200"><br>
<br>
Domain:<span id="ins-name"></span><br>
Federated servers:<span id="ins-connect"></span><br>

View File

@@ -13,6 +13,13 @@
<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">
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
</head>
<body>
<script type="text/javascript" src="../../js/common/jquery.js"></script>
@@ -25,15 +32,14 @@
<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="Miria (17.0.1)-beta2";
var ver="Usamin (18.1.2)";
//betaを入れるとバージョンチェックしない
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
//var ver="beta";
//WinstoreではバージョンCK・言語・Misskeyトークンの機能が排除
var winstore=false;
var acct_id=0;
var tlid=0;
verck(ver,winstore);
verck(ver);
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<div id="tl">
@@ -46,8 +52,10 @@ var tlid=0;
</div>
</div>
</div>
<div id="post-box" class="z-depth-3">
<div id="post-box" class="z-depth-5">
<div id="post-bar" class="drag-bar">Post new</div>
<!--トゥートボックス-->
<div id="left-side">
<div class="row" style="margin-bottom:0;">
</span>
<div class="" style="float:left;">
@@ -116,7 +124,6 @@ var tlid=0;
<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="Mark media as sensitive" onclick="nsfw()">visibility_off</i>
@@ -129,7 +136,7 @@ var tlid=0;
</div>
<div class="col s12 mize" style="margin-bottom:5px; padding:0;">
<div id="taglist"></div>
<span id="preview" class="mize"></span>
<div id="preview" class="mize"></div>
<span class=" sml mize"><span data-trans="reply">Reply</span>:
<span id="rec">No</span>/<span data-trans="file">Attaching files</span>:
<span id="mec">None</span>/<span data-trans="vis">Adjust status privacy</span>:
@@ -178,6 +185,9 @@ var tlid=0;
<li>
<a onclick="schedule();">Scheduled toot</a>
</li>
<li>
<a onclick="pollToggle();">Poll</a>
</li>
</ul>
<!--hidden area-->
<input type="hidden" id="reply">
@@ -189,59 +199,87 @@ var tlid=0;
<button class="btn waves-effect indigo darken-3 unmize hide toot-btn-group" onclick="sec()" id="toot-sec-btn"><i class="material-icons" id="toot-sec-icon" title="Secondary Toot">lock_open</i></button>
</div>
</div>
<div id="right-side">
<div id="suggest"></div>
<!--絵文字ピッカー-->
<div id="emoji" class="hide shared z-depth-4">
<span class="gray sml">
<a onclick="emojiGet('true')" class="pointer">Refresh emojis list</a>
<i class="material-icons waves-effect" onclick="emoji()" title="Close this box" data-trans-title="post_box_close">cancel</i>
<br>
</span>
<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> are shown.<br><span class="gray sml">Some emojis are not able to be inserted.</span>
<div id="emoji" class="hide">
<span class="gray sml">
<a onclick="emojiGet('true')" class="pointer">Refresh emojis list</a>
<i class="material-icons waves-effect" onclick="emojiToggle()" title="Close this box" data-trans-title="post_box_close">cancel</i>
<br>
<a onclick="customEmoji()" class="pointer waves-effect" title="Custom emojis">
<i class="material-icons">add</i>
</a>
<a onclick="defaultEmoji('people')" class="pointer waves-effect" title="Emojis of people">
<i class="material-icons">people</i>
</a>
<a onclick="defaultEmoji('nature')" class="pointer waves-effect" title="Emojis of nature">
<i class="material-icons">local_florist</i>
</a>
<a onclick="defaultEmoji('food')" class="pointer waves-effect" title="Emojis of foods">
<i class="material-icons">restaurant</i>
</a>
<a onclick="defaultEmoji('activity')" class="pointer waves-effect" title="Emojis of activities">
<i class="material-icons">directions_run</i>
</a>
<a onclick="defaultEmoji('place')" class="pointer waves-effect" title="Emojis of places">
<i class="material-icons">directions_car</i>
</a>
<a onclick="defaultEmoji('object')" class="pointer waves-effect" title="Emojis of tools">
<i class="material-icons">attach_file</i>
</a>
<a onclick="defaultEmoji('symbol')" class="pointer waves-effect" title="Emojis of symbols">
<i class="material-icons">gesture</i>
</a>
<a onclick="defaultEmoji('flag')" class="pointer waves-effect" title="Emojis of flags">
<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>
</span>
<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> are shown.<br><span class="gray sml">Some emojis are not able to be inserted.</span>
<br>
<a onclick="customEmoji()" class="pointer waves-effect" title="Custom emojis">
<i class="material-icons">add</i>
</a>
<a onclick="defaultEmoji('people')" class="pointer waves-effect" title="Emojis of people">
<i class="material-icons">people</i>
</a>
<a onclick="defaultEmoji('nature')" class="pointer waves-effect" title="Emojis of nature">
<i class="material-icons">local_florist</i>
</a>
<a onclick="defaultEmoji('food')" class="pointer waves-effect" title="Emojis of foods">
<i class="material-icons">restaurant</i>
</a>
<a onclick="defaultEmoji('activity')" class="pointer waves-effect" title="Emojis of activities">
<i class="material-icons">directions_run</i>
</a>
<a onclick="defaultEmoji('place')" class="pointer waves-effect" title="Emojis of places">
<i class="material-icons">directions_car</i>
</a>
<a onclick="defaultEmoji('object')" class="pointer waves-effect" title="Emojis of tools">
<i class="material-icons">attach_file</i>
</a>
<a onclick="defaultEmoji('symbol')" class="pointer waves-effect" title="Emojis of symbols">
<i class="material-icons">gesture</i>
</a>
<a onclick="defaultEmoji('flag')" class="pointer waves-effect" title="Emojis of flags">
<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>
<!--Poll UI-->
<div id="poll" class="hide">
<select id="poll-sel" onchange="pollProviderCk()">
<option value="nothing">Polls: Disabled</option>
<option value="votedon">votedon.</option>
<option value="mastodon-poll">Mastodon(2.8~)</option>
</select>
<div id="votedon" class="poll-provider hide">
WIP
</div>
<div id="mastodon-poll" class="poll-provider hide">
<input type="text" class="mastodon-choice" placeholder="Choice1">
<input type="text" class="mastodon-choice" placeholder="Choice2">
<input type="text" class="mastodon-choice" placeholder="Choice3">
<input type="text" class="mastodon-choice" placeholder="Choice4">
<input type="checkbox" class="filled-in" id="poll-multiple" value="1" />
<label for="poll-multiple">Multiple select</label><br>
<input type="checkbox" class="filled-in" id="poll-until" value="1" />
<label for="poll-until">Hide 'votes' count until people vote it.</label><br>
<input type="number" style="width:50px" id="days_poll" placeholder="d" value="0">days
<input type="number" style="width:50px" id="hours_poll" placeholder="h" value="0">hours
<input type="number" style="width:50px" id="mins_poll" placeholder="m" value="0">minutes
</div>
</div>
</div>
</div>
<!-- Modal Structure Tootdata-->
<div id="tootmodal" class="modal modal-fixed-footer">
@@ -269,14 +307,14 @@ var tlid=0;
<div class="collapsible-body toot-reset" id="toot-after">
</div>
</li>
<li>
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">people_outline</i>Local TL before this toot
</div>
<div class="collapsible-body toot-reset" id="toot-before">
</div>
</li>
<li>
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">person_outline</i>User TL before this toot
</div>
@@ -290,7 +328,7 @@ var tlid=0;
<div class="collapsible-body toot-reset" id="toot-fav">
</div>
</li>
<li>
<li class="dm-hide">
<div class="collapsible-header">
<i class="text-darken-3 fa fa-retweet"></i>People who boosted it
</div>
@@ -298,19 +336,20 @@ var tlid=0;
</div>
</li>
</ul>
<div class="dm-hide">
Use other account(<i class="fa fa-retweet"></i>/<i class="fa fa-star"></i>:unfav and unBT are disabled.)<br>
<div class="row">
<div class="col s4">
<div class="col s6">
<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>Reply</button>
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share"></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>Boost</button>
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i class="fa fa-retweet"></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>Favourite</button>
<div class="col s2">
<button class="dropdown-button btn waves-effect orange" style="width:100%;" onclick="staEx('fav')"><i class="fa fa-star"></i></button>
</div>
</div>
<div id="toot-tools">
@@ -318,11 +357,12 @@ var tlid=0;
<div id="toot-after">
</div>
</div>
</div>
<div class="modal-footer">
<a href="#!" class="waves-effect waves-green btn-flat" onclick="brws()">Open in browser</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="shot()">Take a screenshot</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy()">Copy URL of this toot</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy('emb')">Embed</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="brws()">Open in browser</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="shot()">Take a screenshot</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="cbCopy()">Copy URL of this toot</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="cbCopy('emb')">Embed</a>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
</div>
</div>
@@ -332,7 +372,7 @@ var tlid=0;
<div id="his-data-show">
<div class="his-float" id="his-float-data">
<div id="his-basic-prof">
<img src="./img/loading.svg" id="his-prof">
<img src="../../img/loading.svg" id="his-prof">
<span id="his-name">Loading...</span><span class="gray" id="his-bot"></span>
<br>@
<span id="his-acct"></span><br>
@@ -543,16 +583,24 @@ var tlid=0;
<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-Miria_17-0-1" class="release-do" style="display:none; ">
<div id="release-Usamin_18-1-1" class="release-do" style="display:none; ">
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
Entyでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。<br>
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
<h5>Release Note Miria (17.0.1)</h5>
バグ修正<br>
(Mastodon 2.7)<b>時間指定投稿が利用できます。</b><br>
(Mastodon 2.7)<b>「インスタンス」を「サーバー」に変更</b><br>
<h5>Release Note Usamin (18.1.1)</h5>
・お知らせ機能改善<br>
・Integrated TLで一部挙動改善(Thanks to <a href="https://www.kr-kp.com/">kPherox</a>)<br>
--以下18.1.0--<br>
・iTunes NowPlaying(macOS)にアルバムアートワークを付ける(Thanks to <a href="https://www.kr-kp.com/">kPherox</a>)<br>
・カラムを<b>縦に並べられる</b>ように(2つ目以降のカラム毎の設定の「左に重ねる」「右に出す」を押す)<br>
・画像を個別に削除する(画像をクリックして)<br>
・何個もアルバムアートワークが投稿されるバグを修正<br>
・Misskeyでログインしたまま何もできないバグを修正(権限回り)
</div>
<div id="release-en">
<h5>Let's make it native!</h5>
<a href="https://translate.thedesk.top">Crowdin translation project</a>
</div>
<br><br>
<h3>Support TheDesk!</h3>
@@ -560,9 +608,9 @@ var tlid=0;
<a class="btn-share btn waves-effect waves-light purple lighten-2" href="https://enty.jp/Cutls" target="_blank">
Support on Enty
</a>
<a class="btn-share btn waves-effect waves-light red lighten-2" href="https://osushi.love/Cutls_P" target="_blank">
Osushi.love: give me sushi
</a>
<a class="btn-share btn waves-effect waves-light red lighten-2" href="https://www.pixiv.net/fanbox/creator/28105985" target="_blank">
Support on Pixiv FANBOX
</a>
<a class="btn-share btn waves-effect waves-light blue" href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">
Amazon Wish List
</a>
@@ -582,130 +630,154 @@ var tlid=0;
<i class="material-icons pointer" onclick="endPip()">close</i>
<div id="pip-content">
</div>
</div>
<!--カラム追加-->
<div id="add-box" class="hide z-depth-4 notf-box">
<div class="input-field"><span data-trans="your_acct">Select an account</span>
<br>
<select id="add-acct-sel" class="acct-sel" style="color:black" onchange="addselCk()"></select>
<label></label>
</div>
<div class="input-field">
<div id="auth">
<select id="type-sel" style="color:black">
<option value="local" data-trans="local">Local</option>
<option value="local-media" data-trans="local-media">Local(Media)</option>
<option value="home" data-trans="home">Home</option>
<option value="pub" data-trans="public">Federated</option>
<option value="pub-media" data-trans="public-media">Federated(Media)</option>
<option value="dm" data-trans="dm">Direct Message</option>
<option value="mix" data-trans="integrated">Integrated(Local and Home)</option>
<option value="plus" data-trans="plus">Integrated(Local and replies and BT on Home)</option>
<option value="notf" data-trans="notification">Notifications</option>
</select>
<label data-trans="show_tl">Show this TL:</label>
</div>
<div id="noauth" class="hide">Show this TL:
<input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);" placeholder="e.g:mstdn.jp">
</div>
<div id="webview-add" class="hide">TweetDeck with customed TJDeck(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>). Keyboard shortcuts will irritate you. When you feel so, you check 'Prefer WebView' on top of the column.
</div>
</div>
<button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()" data-trans-i="add">
<i class="material-icons left">add</i>Add
</button>
<br>
<br>
</div>
<!--検索-->
<div id="src-box" class="hide notf-box z-depth-4" style="width:500px">
<div class="input-field">
<select id="src-acct-sel" class="acct-sel" onchange="trend()"></select>
</div><div class="input-field">
<i class="material-icons prefix">search</i>
<input id="src" type="text" class="validate" style="width:calc( 60% - 40px);">
<label for="src" data-trans="src">Search</label>
<button class="btn waves-effect indigo" style="width:calc( 40% - 40px);" onclick="src()" data-trans-i="src">
<i class="material-icons left">search</i>Search
</button>
<br>
<br>
</div>
<div id="search">
<div id="src-contents">
</div>
</div>
</div>
<!--並べ替え-->
<div id="sort-box" class="hide">
<ul id="sort"></ul>
<div>
<button onclick="sort()" class="btn waves-effect nex" style="width:100%; max-width:300px;" data-trans-i="sort">
<i class="material-icons left">sort</i>Sort
</button>
<button onclick="sortToggle()" class="btn waves-effect nex" style="width:100%; max-width:300px;" data-trans-i="close">
<i class="material-icons left">close</i>Close
</button>
</div>
</div>
<!--リスト-->
<div id="list-box" class="hide notf-box z-depth-4">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="list-acct-sel" class="acct-sel"></select>
<label>Select an account</label>
</div>
<!--menu-->
<div id="menu" class="z-depth-5" style="display:none">
<div id="menu-bar" class="drag-bar"></div>
<span class="cancel">
<i class="material-icons waves-effect" onclick="menu()" title="Close this box(X)">cancel</i>
</span>
<div id="menu-wrapper">
<div id="left-menu">
<div class="waves-effect active" onclick="addColumnMenu()" id="addColumnMenu"><i class="material-icons">add</i><span>Add a column</span></div>
<div class="waves-effect" onclick="sortMenu()" id="sortMenu"><i class="material-icons">sort</i><span>Sort</span></div>
<div class="waves-effect" onclick="searchMenu()" id="searchMenu"><i class="material-icons">search</i><span>Search</span></div>
<div class="waves-effect" onclick="listMenu()" id="listMenu"><i class="material-icons">view_headline</i><span>List</span></div>
<div class="waves-effect" onclick="filterMenu()" id="filterMenu"><i class="material-icons">filter_list</i><span>Filter</span></div>
<div class="waves-effect" onclick="help()"><i class="material-icons">help_outline</i><span>Help</span></div>
<div class="waves-effect" onclick="location.href='index.html'"><i class="material-icons">refresh</i><span>Reload TL</span></div>
</div>
<div id="right-menu">
<!--カラム追加-->
<div id="add-box" class="hide menu-content">
<div class="input-field"><span data-trans="your_acct">Account(Scroll to show all)</span>
<br>
<select id="add-acct-sel" class="acct-sel" style="color:black" onchange="addselCk()"></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">
List
</button>
<div class="input-field">
<div id="auth">
<input type="hidden" value="local" id="type-sel">
Show this TL:
<div id="tltype">
<div class="type waves-effect active" data-type="local"><div><i class="material-icons">people_outline</i></div><span>Local</span></div>
<div class="type waves-effect" data-type="local-media"><div><i class="material-icons">people_outline</i><i class="material-icons sub-icon">perm_media</i></div><span>Local(Media)</span></div>
<div class="type waves-effect" data-type="home"><div><i class="material-icons">home</i></div><span>Home</span></div>
<div class="type waves-effect" data-type="pub"><div><i class="material-icons">language</i></div><span>Federated</span></div>
<div class="type waves-effect" data-type="pub-media"><div><i class="material-icons">language</i><i class="material-icons sub-icon">perm_media</i></div><span>Federated(Media)</span></div>
<div class="type waves-effect" data-type="dm"><div><i class="material-icons">mail_outline</i></div><span>Direct Message</span></div>
<div class="type waves-effect" data-type="mix"><div><i class="material-icons">merge_type</i></div><span>Integrated(Local/Home)</span></div>
<div class="type waves-effect" data-type="plus"><div><i class="material-icons">merge_type</i><i class="material-icons sub-icon">reply</i></div><span>LTL+Reply+BT</span></div>
<div class="type waves-effect" data-type="notf"><div><i class="material-icons">notifications</i></div><span>Notifications</span></div>
</div>
</div>
<div id="noauth" class="hide">Show this TL:
<input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);" placeholder="e.g:mstdn.jp">
</div>
<div id="webview-add" class="hide">TweetDeck with customed TJDeck(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>). Keyboard shortcuts will irritate you. When you feel so, you check 'Prefer WebView' on top of the column.
</div>
</div>
<button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()" data-trans-i="add">
<i class="material-icons left">add</i>Add
</button>
<br>
<br>
</div>
<!--検索-->
<div id="src-box" class="hide menu-content">
<div class="input-field">
<select id="src-acct-sel" class="acct-sel" onchange="trend()"></select>
</div><div class="input-field">
<i class="material-icons prefix">search</i>
<input id="src" type="text" class="validate" style="width:calc( 60% - 40px);">
<label for="src" data-trans="src">Search</label>
<button class="btn waves-effect indigo" style="width:calc( 40% - 40px);" onclick="src()" data-trans-i="src">
<i class="material-icons left">search</i>Search
</button>
<br>
<br>
</div>
<div id="search">
<div id="src-contents">
</div>
</div>
</div>
<!--並べ替え-->
<div id="sort-box" class="hide menu-content">
<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>Sort
</button>
</div>
</div>
<!--リスト-->
<div id="list-box" class="hide menu-content">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="list-acct-sel" class="acct-sel"></select>
<label>Account(Scroll to show all)</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">
List
</button>
</div>
<br><br>
<div id="lists"></div>
<div id="lists-user"></div>
<input type="text" style="width:150px" id="list-add" placeholder="Display name">
<button class="btn waves-effect" style="width:120px;" onclick="makeNewList()">Save</button>
</div>
<!--フィルター-->
<div id="filter-box" class="hide menu-content">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="filter-acct-sel" class="acct-sel"></select>
<label>Account(Scroll to show all)</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">
List
</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="Filtering words"><br>
Filter contexts<br>
<input type="checkbox" class="filled-in" id="home_filter" value="home" />
<label for="home_filter">Home</label>
<input type="checkbox" class="filled-in" id="local_filter" value="public" />
<label for="local_filter">Local</label>
<input type="checkbox" class="filled-in" id="notf_filter" value="notifications" />
<label for="notf_filter">Notifications</label>
<input type="checkbox" class="filled-in" id="conv_filter" value="thread" />
<label for="conv_filter">Conversations</label><br>
Options<br>
<input type="checkbox" class="filled-in" id="wholeword_filter" value="1" />
<label for="wholeword_filter">Whole word</label><br>
<span class="sml">Nice for Latin language</span><br>
<input type="checkbox" class="filled-in" id="except_filter" value="1" />
<label for="except_filter">Drop instead of hide</label><br>
<span class="sml">Filtered toots will disappear irreversibly, even if filter is later removed</span><br>
Expire after<span class="sml">Unset or "0" means "Never"<b>This value may contain some error</b></span><br><br>
<input type="number" style="width:50px" id="days_filter" placeholder="d" value="0">days
<input type="number" style="width:50px" id="hours_filter" placeholder="h" value="0">hours
<input type="number" style="width:50px" id="mins_filter" placeholder="m" value="0">minutes
<button class="btn waves-effect" style="width:120px;" onclick="makeNewFilter()" id="add-filter-btn">Add</button><br>
<span class="sml">Integrated TL/Plus TL will hide both Home-filtering words and Local-filtering words.</span>
</div>
<br><br>
<div id="lists"></div>
<div id="lists-user"></div>
<input type="text" style="width:150px" id="list-add" placeholder="Display name">
<button class="btn waves-effect" style="width:120px;" onclick="makeNewList()">Save</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>Select an account</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">
List
</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="Filtering words"><br>
Filter contexts<br>
<input type="checkbox" class="filled-in" id="home_filter" value="home" />
<label for="home_filter">Home</label>
<input type="checkbox" class="filled-in" id="local_filter" value="public" />
<label for="local_filter">Local</label>
<input type="checkbox" class="filled-in" id="notf_filter" value="notifications" />
<label for="notf_filter">Notifications</label>
<input type="checkbox" class="filled-in" id="conv_filter" value="thread" />
<label for="conv_filter">Conversations</label><br>
Options<br>
<input type="checkbox" class="filled-in" id="wholeword_filter" value="1" />
<label for="wholeword_filter">Whole word</label><br>
<span class="sml">Nice for Latin language</span><br>
<input type="checkbox" class="filled-in" id="except_filter" value="1" />
<label for="except_filter">Drop instead of hide</label><br>
<span class="sml">Filtered toots will disappear irreversibly, even if filter is later removed</span><br>
Expire after<span class="sml">Unset or "0" means "Never"<b>This value may contain some error</b></span><br><br>
<input type="text" style="width:50px" id="days_filter" placeholder="d" value="0">days
<input type="text" style="width:50px" id="hours_filter" placeholder="h" value="0">hours
<input type="text" style="width:50px" id="mins_filter" placeholder="m" value="0">minutes
<button class="btn waves-effect" style="width:120px;" onclick="makeNewFilter()" id="add-filter-btn">Add</button><br>
<span class="sml">Integrated TL/Plus TL will hide both Home-filtering words and Local-filtering words.</span>
</div>
<a onclick="about()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">info</i>About TheDesk
</a>&nbsp;|&nbsp;
<a onclick="bottomReverse()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">swap_horiz</i>Toot button layout reverse
</a>
</div>
<div id="main">
<!--TLのTL-->
<div id="timeline-container">
<h3>Welcome to TheDesk</h3><br><a href="acct.html">Add an account</a> or click <i class="material-icons">add</i> to add a column.
<h3>Welcome to TheDesk</h3><br><a href="acct.html">Add an account</a> or click <i class="material-icons">apps</i> to add a column.
</div>
</div>
</div>
@@ -713,53 +785,26 @@ var tlid=0;
<div id="bottom" class="reverse">
<div class="leftside reverse">
<div id="dambox">
<input type="text" id="posttgl" placeholder="Toot" style="height:2rem">
</div>
<button id="posttgl" class="btn waves-effect indigo" style="width: 100%;height: 2.5rem;line-height: 0;margin: 0;">
<i class="material-icons" style="position: relative; top: 5px; font-size: 1.5rem; text-align: center; margin-right: 10px;">edit</i>Toot
</button>
</div>
<div class="leftside reverse" 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="Add a column" data-trans-title="column_add">add</i>
</a>
<a onclick="sortToggle()" class="nex waves-effect">
<i class="material-icons nex big-icon" title="Sort" 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="Account Manager(Ctrl+Shift+M)" data-trans-title="manager">account_circle</i>
</a>
<a onclick="srcToggle()" class="nex waves-effect" id="src-tgl">
<i class="material-icons" title="Search" data-trans-title="src">search</i>
</a>
<a onclick="listToggle()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="List" data-trans-title="list">view_headline</i>
</a>
<a onclick="filterToggle()" class="nex waves-effect" id="filter-tgl">
<i class="material-icons" title="Filter" data-trans-title="filter">filter_list</i>
</a>
</div>
<div class="btnsgroup"><span class="grouptitle">Preferences:</span>
<a onclick="bottomReverse()" class="nex waves-effect">
<i class="material-icons nex" title="Toot box reverse" data-trans-title="reverse">swap_horiz</i>
</a>
<a href="setting.html" class="nex waves-effect">
<i class="material-icons nex" title="Preferences(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="Super Reload(F5/⌘+R)" data-trans-title="reload">refresh</i>
</a>
<a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="The smallest Mastodon,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>
<a href="https://docs.thedesk.top" class="setting nex waves-effect" target="_blank">
<i class="material-icons nex" title="Help">help_outline</i>
</a>
</div>
</div>
</div>
<div class="btnsgroup">
<a href="acct.html" class="nex waves-effect">
<i class="material-icons nex big-icon" title="Account Manager(Ctrl+Shift+M)">account_circle</i>
</a>
<a href="setting.html" class="nex waves-effect">
<i class="material-icons nex" title="Preferences(Ctrl+Shift+S)">settings</i>
</a>
<a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="The smallest Mastodon,TheDesk Nano" data-trans-title="nano_desp">remove_from_queue</i>
</a>
<a onclick="menu()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="List">apps</i>
</a>
</div>
</div></div>
<div>
<div id="tips-menu">
<div class="btnsgroup" style="height:34px"><span class="grouptitle">Tips:</span>
@@ -799,9 +844,11 @@ var tlid=0;
<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/tl/misskeyparse.js"></script>
<script type="text/javascript" src="../../js/tl/dm.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/poll.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>
@@ -834,4 +881,5 @@ var tlid=0;
<script type="text/javascript" src="../../js/userdata/prof-edit.js"></script>
<script type="text/javascript" src="../../js/emoji/emojipack.js"></script>
<script type="text/javascript" src="../../js/emoji/default-emoji.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/ui/menu.js"></script>

View File

@@ -2,19 +2,32 @@
<html lang="en">
<head>
<title>Settings - TheDesk</title>
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<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/pickr.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">
<style>input{max-height:50px!important} .pcr-result{height:1rem !important;}</style>
</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/lang.en.js"></script>
<script src="https://unpkg.com/json5@^2.0.0/dist/index.min.js"></script>
<script src="../../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="setting.vue.js"></script>
<h4>Preferences</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
@@ -23,11 +36,55 @@
</div>
<div class="collapsible-body">
<h5>Languages</h5>
<a onclick="changelang('ja')" class="pointer">日本語</a>/<a onclick="changelang('en')" class="pointer">English</a>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br>
<a href="../ja/setting.html" onclick="changelang('ja')">日本語(Japanese)</a>/<a href="../en/setting.html" onclick="changelang('en')">English</a>/<a href="../ps/setting.html" onclick="changelang('ps')">Crowdin web translate</a>/
<h5>Import and export of preferences</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3" style="width:100%; max-width:200px;">Export</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3" style="width:100%; max-width:200px;">Import</button>
<h5>Themes</h5>
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<templete v-html=item.text.desc></templete><br>
<template v-if="item.id=='notf'"><a onclick="notftest()" class="pointer">Notification test</a><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id" v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">Change</button>
</template>
</template>
</div>
<h5>Font</h5>
Select your favorite font to 'Select'<br>
<button class="btn waves-effect" style="width:100px;" onclick="font()">Select</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:300px; height:500px;"></div>
<br>
<input type="text" style="width:150px" id="font">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<h5>Folder to save</h5>
TheDesk uses this value when it try to save pictures or take screenshots.<br>
<button class="btn waves-effect" style="width:100px;" onclick="savefolder()">Change</button>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">color_lens</i>Themes
</div>
<div class="collapsible-body">
<h4>Select theme</h4>
<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" />
@@ -38,141 +95,84 @@
<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 notification(on Windows)</h5>Hide to set "0"
<br>
<input type="text" style="width:50px" id="popup">sec
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<h5>Native notification</h5>
This does not work on Windows Portable ver.<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">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>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">pxabove
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<h5>Font</h5>
Select your favorite font to 'Select'<br>
<button class="btn waves-effect" style="width:100px;" onclick="font()">Select</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:300px; height:500px;">
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom" value="custom" />
<label for="custom">Custom</label>
<div style="width:300px" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
<br>
<input type="text" style="width:150px" id="font">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<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()">Save</button><br>
<h5>Folder to save</h5>
TheDesk uses this value when it try to save pictures or take screenshots.<br>
<button class="btn waves-effect" style="width:100px;" onclick="savefolder()">Change</button>
<br>
</div>
<h4>Edit and add custom themes</h4>
<div style="width:300px" id="edit-selector" data-add="Add new">
<select id="custom-edit-sel" class="custom-sel" onchange="custom()">
<option value="add_new">Add new</option>
</select>
</div>
<h5>Name</h5>
<input type="text" style="width:300px" id="custom_name" placeholder="Name...">
<h5>About this theme</h5>
<div class="input-field"><textarea style="width:300px" id="custom_desc" class="materialize-textarea" placeholder="About this theme..."></textarea></div>
<h5>Color scheme</h5>
<input class="with-gap" name="derection" type="radio" id="dark" value="dark" checked="true" />
<label for="dark">Dark</label>
<input class="with-gap" name="derection" type="radio" id="light" value="light" />
<label for="light">Light</label>
<div id="pickers">
<div>
<h5>Primary</h5>Background of components
<div id="color-picker0-wrap"><div class="color-picker" id="color-picker0"></div></div>
<input type="hidden" id="color-picker0_value">
</div>
<div>
<h5>Secondary</h5>Background color
<div id="color-picker1-wrap"><div class="color-picker" id="color-picker1"></div></div>
<input type="hidden" id="color-picker1_value">
</div>
<div>
<h5>Texts</h5>Text color
<div id="color-picker2-wrap"><div class="color-picker" id="color-picker2"></div></div>
<input type="hidden" id="color-picker2_value">
</div>
<div>
<h5>Accent</h5>Background of boosts
<div id="color-picker3-wrap"><div class="color-picker" id="color-picker3"></div></div>
<input type="hidden" id="color-picker3_value">
</div>
</div>
<button class="btn-large waves-effect" onclick="customComp()">Change</button>&nbsp;<button class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">Delete</button><br><br>
<input type="text" style="width:300px" id="custom_json" class="materialize-textarea" placeholder="JSON style" readonly><br>
Share this code with other TheDesk. Do not share this code with MiAS.
<h4>Import of custom themes</h4>
Get more themes on <a href="https://assets.msky.cafe/" target="_blank">MiAS</a><br>
<input type="text" style="width:300px" id="custom_import" class="materialize-textarea" placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">Import</button><br>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>Timeline Preferences
</div>
<div class="collapsible-body">
<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">Relative</label>
<input class="with-gap" onchange="settings()" name="time" type="radio" id="absolute" value="absolute" />
<label for="absolute">Absolute</label>
<input class="with-gap" onchange="settings()" name="time" type="radio" id="double" value="double" />
<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">Mixed</label>
<h5>Server's unique locale</h5>This value is available on some Japanese servers
<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>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">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>Hide CW contents</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>Reply counter style</h5>
<input class="with-gap" onchange="settings()" name="rp" type="radio" id="rp_hidden" value="hidden" />
<label for="rp_hidden">Show 1+ if the replies are more than 1.</label>
<input class="with-gap" onchange="settings()" name="rp" type="radio" id="rp_all" value="all" />
<label for="rp_all">Show full count(1,2...)</label>
<br>
<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">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 TL Search</h5>
<input class="with-gap" onchange="settings()" name="tag" type="radio" id="t_all" value="all" />
<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">Use local network</label>
<br>
<h5>Show 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>Hide action buttons without mouseover</h5>
You may feel 'mouseover' is unconfortable:(<br>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_yes" value="yes" />
<label for="mov_yes">Mouseover to show</label>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_click" value="click" />
<label for="mov_click">Click to show</label>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_no" value="no" />
<label for="mov_no">No</label>
<br>
<h5>Show Notification marker, red colored bell and counter(if you show a notification column.)</h5>
<input class="with-gap" onchange="settings()" name="notfm" type="radio" id="notfm_yes" value="yes" />
<label for="notfm_yes">Yes</label>
<input class="with-gap" onchange="settings()" name="notfm" type="radio" id="notfm_no" value="no" />
<label for="notfm_no">No</label>
<br>
<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">lines above or
<input type="text" style="width:50px" id="letters">letters above
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<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()">Save</button>
<br>
<h5>Enable #InstanceTicker</h5>
Show colorful stickers about tooters' server. <a href="https://cdn.weep.me/mastodon/">About #InstanceTicker</a> Copyright 2018 weepjp, kyori19.<br>
<input class="with-gap" onchange="settings()" name="ticker" type="radio" id="ticker_yes" value="yes" />
<label for="ticker_yes">Yes</label>
<input class="with-gap" onchange="settings()" name="ticker" type="radio" id="ticker_no" value="no" />
<label for="ticker_no">No</label>
<br>
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id" v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">Change</button>
</template>
</template>
</div>
</div>
</li>
<li>
@@ -180,89 +180,32 @@
<i class="material-icons">send</i>Posting Preferences
</div>
<div class="collapsible-body">
<h5>Default warining text</h5>
<input type="text" style="width:150px" id="cw-text">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<h5>Alert before posting a long toot.</h5>
Show dialog whether you make too-long text hidden.
<br>
<input type="text" style="width:50px" id="cw_sentence">lines above or
<input type="text" style="width:50px" id="cw_letters">letters above
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<h5>Always CW set</h5>
<input class="with-gap" onchange="settings()" name="cws" type="radio" id="cws_yes" value="yes" />
<label for="cws_yes">Yes</label>
<input class="with-gap" onchange="settings()" name="cws" type="radio" id="cws_no" value="no" />
<label for="cws_no">No
</label>
<br>
<h5>Default visibility</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(memorized as each server)</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="server" value="server" />
<label for="server">Default of your visibility(Set on preferences of Mastodon server)</label>
<br>
<h5>Posting images preferences</h5>
<input class="with-gap" onchange="settings()" name="img" type="radio" id="i_url" value="url" />
<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">Insert nothig</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>Action of posting-box</h5>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="bx_yes" value="yes" />
<label for="bx_yes">Folding</label>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="bx_no" value="no" />
<label for="bx_no">Open after posting
</label>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="bx_abs" value="absolute" />
<label for="bx_abs">Absolutely open</label>
<br>
<h5>Quote format</h5>
<input class="with-gap" onchange="settings()" name="quote" type="radio" id="q_simple" value="simple" />
<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 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, text and acct(mention to the user)
</label>
<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">Account you used recently</label>
<input class="with-gap" onchange="settings()" name="main" type="radio" id="mn_main" value="main" />
<label for="mn_main">Main account</label>
</label>
<h5>Secondary Toot Button</h5>
Toot with other visibility setting<br>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-nothing" value="nothing" />
<label for="sec-nothing">Hidden</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-public" value="public" />
<label for="sec-public">Public</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-unlisted" value="unlisted" />
<label for="sec-unlisted">Unlisted</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-private" value="private" />
<label for="sec-private">Private</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-direct" value="direct" />
<label for="sec-direct">Direct</label>
<input class="with-gap hide kirishima" onchange="settings()" name="sec" type="radio" id="sec-local" value="local" />
<label for="sec-local">Local Only</label><span class="hide kirishima">非対応インスタンスでは「未収載」になります。</span>
<br>
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template v-if="!check.kirishima || (check.kirishima && kirishima)">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id" v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">Change</button>
</template>
</template>
</div>
</div>
</li>
<li>
@@ -309,7 +252,7 @@
</div>
<div class="collapsible-body">
<h5>NowPlaying Provider(Windows)</h5>
macOS and Linux are not supported. AIMP and iTunes were checked by developer. <br>CAD:foobar2000, MusicBee,J. River Media Center, Media Jukebox<br>WLM:Last.fm Client, TTPlayer, OpenPandora, Zune.<br> For foobar2000, <a href="http://poiru.github.com/foo-cad/">foo_cad plugin</a> is required.<br>
macOS and Linux are not supported. AIMP and iTunes were checked by developer. <br>CAD:foobar2000, MusicBee,J. River Media Center, Media Jukebox<br>WLM:Last.fm Client, TTPlayer, OpenPandora, Zune.<br> For foobar2000, <a href="http://poiru.github.com/foo-cad/">foo_cad plugin</a> is required. And MusicBee requires CAD.<br>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="aimp" value="AIMP" />
<label for="aimp">AIMP</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="itunes" value="ITUNES" />
@@ -380,6 +323,7 @@
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Post</li>
<li>Ctrl+Enter+Shift:Post(secondary toot)</li>
<li>Alt+Enter:Secondary Toot Button</li>
<li>Ctrl+E:Make all notifications read</li>
<li>Esc:Hide toot box</li>
<li>F5:Super Reload</li>
@@ -406,17 +350,17 @@
<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://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>Support(Pixiv FANBOX)</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;">Give me a sushi!</a>
<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><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.
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a href="https://github.com/cutls/TheDesk/blob/master/TOS.md">Terms of Use</a>
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a href="https://thedesk.top/tos.html">Terms of Use</a>/<a href="https://thedesk.top/priv.html">Privacy Policy</a>
<br>Developer: Cutls P(
<a href="index.html?mode=user&code=Cutls@kirishima.cloud">@Cutls@kirishima.cloud</a>)
<br>
@@ -426,9 +370,9 @@ TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のため
<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/lang/lang.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/platform/pickr.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>

480
app/view/en/setting.vue.js Normal file
View File

@@ -0,0 +1,480 @@
var yesno=[
{
text:"Yes",
value:"yes"
},{
text:"No",
value:"no"
}
];
var envConstruction=[
{
id:"popup",
storage:"popup",
checkbox:false,
doubleText:false,
setValue:0,
width:50,
text:{
head:"Popup notification(on Windows)",
desc:'Hide to set "0"',
after:"sec"
}
},{
id:"notf",
storage:"nativenotf",
checkbox:true,
setValue:"yes",
text:{
head:"Native notification",
desc:"This does not work on Windows Portable ver.",
checkbox:yesno
}
},{
id:"width",
storage:"width",
checkbox:false,
doubleText:false,
width:50,
setValue:300,
text:{
head:"Minimum width of columns",
desc:"Scroll bar will be shown when your window size is more than ammounts of columns.",
after:"px above"
}
},{
id:"fixwidth",
storage:"fixwidth",
checkbox:false,
doubleText:false,
setValue:300,
width:50,
text:{
head:"Minimum width of TweetDeck browser",
desc:"",
after:"px above"
}
},{
id:"size",
storage:"size",
checkbox:false,
doubleText:false,
width:50,
setValue:13,
text:{
head:"Font size",
desc:'<span style="font-size:13px">13px(absolute value)</span>',
after:"px"
}
},{
id:"ha",
storage:"ha",
checkbox:true,
setValue:false,
text:{
head:"Disable hardware acceleration",
desc:"Auto restarted",
checkbox:[
{
text:"Yes",
value:"true"
},{
text:"No",
value:"false"
}
]
}
}
];
var tlConstruction=[
{
id:"time",
storage:"datetype",
checkbox:true,
setValue:"absolute",
text:{
head:"Time format",
desc:'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.',
checkbox:[
{
text:"Relative",
value:"relative"
},{
text:"Absolute",
value:"absolute"
},{
text:"Both relative and absolute",
value:"double"
},{
text:"Mixed",
value:"medium"
}
]
}
},{
id:"ul",
storage:"locale",
checkbox:true,
setValue:"yes",
text:{
head:"Server's unique locale",
desc:"This value is available on some Japanese servers",
checkbox:yesno
}
},{
id:"nsfw",
storage:"nsfw",
checkbox:true,
setValue:"yes",
text:{
head:"Hide NSFW pictures",
desc:"Strong blur effect",
checkbox:yesno
}
},{
id:"cw",
storage:"cw",
checkbox:true,
setValue:"yes",
text:{
head:"Hide CW contents",
desc:"",
checkbox:yesno
}
},{
id:"rp",
storage:"replyct",
checkbox:true,
setValue:"hidden",
text:{
head:"Reply counter style",
desc:"",
checkbox:[
{
text:"Show 1+ if the replies are more than 1.",
value:"hidden"
},{
text:"Show 1+ if the replies are more than 1.",
value:"all"
}
]
}
},{
id:"gif",
storage:"gif",
checkbox:true,
setValue:"yes",
text:{
head:"Animated GIF images animation",
desc:"",
checkbox:yesno
}
},{
id:"tag",
storage:"tag-range",
checkbox:true,
setValue:"local",
text:{
head:"Tag TL Search",
desc:"",
checkbox:[
{
text:"Use federated network",
value:"all"
},{
text:"Use local network",
value:"local"
}
]
}
},{
id:"via",
storage:"viashow",
checkbox:true,
setValue:"no",
text:{
head:"Show via",
desc:"",
checkbox:yesno
}
},{
id:"mov",
storage:"mouseover",
checkbox:true,
setValue:"no",
text:{
head:"Hide action buttons without mouseover",
desc:"You may feel 'mouseover' is unconfortable:(",
checkbox:[
{
text:"Mouseover to show",
value:"yes"
},{
text:"Click to show",
value:"click"
},{
text:"No",
value:"no"
}
]
}
},{
id:"notfm",
storage:"setasread",
checkbox:true,
setValue:"yes",
text:{
head:"Show Notification marker, red colored bell and counter(if you show a notification column.)",
desc:"",
checkbox:yesno
}
},{
checkbox:false,
doubleText:true,
data:[
{
id:"sentence",
storage:"sentence",
width:50,
setValue:500,
text:{after:"lines above or"}
},{
id:"letters",
storage:"letters",
width:50,
setValue:7000,
text:{after:"letters above"}
}
],
text:{
head:"Auto folding",
desc:"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.",
}
},{
id:"img-height",
storage:"img-height",
checkbox:false,
doubleText:false,
width:80,
setValue:200,
text:{
head:"Height of images",
desc:'Option:Set "full" to uncrop.',
after:"px"
}
},{
id:"ticker",
storage:"ticker_ok",
checkbox:true,
setValue:"no",
text:{
head:"Enable #InstanceTicker",
desc:'Show colorful stickers about the server. <a href="https://cdn.weep.me/mastodon/">About #InstanceTicker</a> Copyright 2018 weepjp, kyori19.',
checkbox:yesno
}
},{
id:"anime",
storage:"animation",
checkbox:true,
setValue:"yes",
text:{
head:"Animation of timelines",
desc:"",
checkbox:yesno
}
}
];
var postConstruction=[
{
id:"cw-text",
storage:"cw-text",
checkbox:false,
doubleText:false,
width:150,
setValue:"",
text:{
head:"Default warining text",
desc:"",
after:""
}
},{
checkbox:false,
doubleText:true,
data:[
{
id:"cw_sentence",
storage:"cw_sentence",
width:50,
setValue:500,
text:{after:"lines above or"}
},{
id:"cw_letters",
storage:"cw_letters",
width:50,
setValue:7000,
text:{after:"letters above"}
}
],
text:{
head:"Alert before posting a long toot.",
desc:"Show dialog whether you make too-long text hidden.",
}
},{
id:"cws",
storage:"always-cw",
checkbox:true,
setValue:"no",
text:{
head:"Always CW set",
desc:"",
checkbox:yesno
}
},{
id:"vis",
storage:"vis",
checkbox:true,
setValue:"public",
text:{
head:"Default visibility",
desc:"",
checkbox:[
{
text:"Public",
value:"public"
},{
text:"Unlisted",
value:"unlisted"
},{
text:"Private",
value:"private"
},{
text:"Direct",
value:"direct"
},{
text:"Memory(memorized as each server)",
value:"memory"
},{
text:"Default of your visibility(Set on preferences of Mastodon server)",
value:"useapi"
}
]
}
},{
id:"img",
storage:"img",
checkbox:true,
setValue:"no-act",
text:{
head:"Posting images preferences",
desc:"",
checkbox:[
{
text:"Insert media URL",
value:"url"
},{
text:"Insert nothig",
value:"no-act"
}
]
}
},{
id:"box",
storage:"box",
checkbox:true,
setValue:"yes",
text:{
head:"Action of posting-box",
desc:"",
checkbox:[
{
text:"Folding",
value:"yes"
},{
text:"Open after posting",
value:"no"
},{
text:"Absolutely open",
value:"absolute"
}
]
}
},{
id:"quote",
storage:"quote",
checkbox:true,
setValue:"nothing",
text:{
head:"Quote format",
desc:"",
checkbox:[
{
text:"Only URL",
value:"simple"
},{
text:"URL and acct(mention to the user)",
value:"mention"
},{
text:"URL, text and acct(mention to the user)",
value:"full"
},{
text:"Disabled(Hide buttons on TLs)",
value:"nothing"
}
]
}
},{
id:"main",
storage:"mainuse",
checkbox:true,
setValue:"remain",
text:{
head:"Default accounts of actions",
desc:"Main account can be set on Account Manager.",
checkbox:[
{
text:"Account you used recently",
value:"remain"
},{
text:"Main account",
value:"main"
}
]
}
},{
id:"sec",
storage:"sec",
checkbox:true,
setValue:"public",
text:{
head:"Secondary Toot Button",
desc:"",
checkbox:[
{
text:"Hidden",
value:"nothing"
},{
text:"Public",
value:"public"
},{
text:"Unlisted",
value:"unlisted"
},{
text:"Private",
value:"private"
},{
text:"Direct",
value:"direct"
},{
text:"Local Only",
value:"local",
kirishima:true,
kirishimaText:"非対応インスタンスでは「未収載」になります。"
}
]
}
}
]

View File

@@ -6,6 +6,13 @@
<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">
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
</head>
<body>
<style>
@@ -68,14 +75,11 @@ a,button,input,label,i{
<p>Get latest TheDesk</p>
<span id="now"></span><b id="ver"></b><br>
<span id="det"></span><br>
<button id="update" class="waves-effect btn" onclick="update('true')" style="margin-left:15px;">Start</button>
<div id="checkbox">
Options:<br>
<input type="checkbox" class="filled-in" id="portable" value="true" />
<label for="portable">Portable ver.</label><br>
<input type="checkbox" class="filled-in" id="rewrite" value="true" />
<label for="rewrite">Not rewrite</label><br>
</div>
<button class="waves-effect btn windows hide" onclick="update('install')" style="margin-left:15px;">Installer ver.</button>
<button class="waves-effect btn windows hide" onclick="update('portable')" style="margin-left:15px;">Portable ver.</button>
<button class="waves-effect btn linux hide" onclick="update('linux')" style="margin-left:15px;">Start</button>
<button class="waves-effect btn mac hide" onclick="update('mac')" style="margin-left:15px;">Start</button>
<br>
Some problems?<br>Please download on <a href="https://thedesk.top">Oficial HP</a>.
</div>
<div id="skipper" class="hide">
@@ -116,17 +120,49 @@ function update(sel){
$("#dlnow").toggleClass("hide");
$("#dlnow").toggleClass("show");
$("#prog").text("");
if($('#rewrite:checked').val()=="true"){
var versioning=true;
}else{
var versioning=false;
}
if($('#portable:checked').val()=="true"){
var zip=true;
}else{
var zip=false;
}
ipc.send('download-btn', [sel,enc(localStorage.getItem("next-ver")),zip,versioning]);
var remote=electron.remote;
var bit=process.arch;
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) {
if(sel=="install"){
if(bit=="x64"){
var url=json["winx64"];
var file="TheDesk-setup.exe";
}else if(bit=="ia32"){
var url=json["winia32"];
var file="TheDesk-setup-ia32.exe";
}
}else if(sel=="portable"){
if(bit=="x64"){
var url=json["winx64p"];
var file="TheDesk.exe";
}else if(bit=="ia32"){
var url=json["winia32p"];
var file="TheDesk-ia32.exe";
}
}else if(sel=="linux"){
if(bit=="x64"){
var url=json["linuxx64"];
var file="TheDesk-linux-x64.zip";
}else if(bit=="ia32"){
var url=json["linuxia64"];
var file="TheDesk-linux-ia32.zip";
}
}else if(sel=="mac"){
var url=json["mac"];
var file="TheDesk-darwin-x64.zip";
}
ipc.send('download-btn', [url,file]);
});
}
function quit(){
ipc.send('quit', 'go');
@@ -142,9 +178,14 @@ ipc.on('mess', function (event, arg) {
})
function verck(){
var remote=electron.remote;
var platform=remote.process.platform;
if(platform!="win32"){
$('#portable').prop("disabled",true)
var platform=remote.process.platform;
var bit=process.arch;
if(platform=="win32"){
$('.windows').removeClass("hide")
}else if(platform=="linux"){
$('.linux').removeClass("hide")
}else if(platform=="darwin"){
$('.mac').removeClass("hide")
}
var start="https://thedesk.top/ver.json";
fetch(start, {
@@ -160,7 +201,8 @@ function verck(){
$("#ver").text(json.desk);
localStorage.setItem("next-ver",json.desk);
$("#det").html(json.detail);
$("#now").text(localStorage.getItem("ver"));
$("#now").text(localStorage.getItem("ver"));
});
}
function nextv(){

View File

@@ -20,6 +20,13 @@ body,html{overflow-y: scroll;}
.card .colorsel div.exc{width:40px;height:20px;}
</style>
<meta charset="utf-8">
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
</head>
<body id="mainView">
<script type="text/javascript" src="../../js/common/jquery.js"></script>
@@ -76,7 +83,7 @@ Some instance data by <a href="https://instances.social" target="_blank">instanc
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br>
<span id="ins-desc"></span><br>
<img src="./img/loading.svg" id="ins-prof" width="200"><br>
<img src="../../img/loading.svg" id="ins-prof" width="200"><br>
<br>
ドメイン名:<span id="ins-name"></span><br>
接続サーバー数:<span id="ins-connect"></span><br>

View File

@@ -13,6 +13,13 @@
<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">
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
</head>
<body>
<script type="text/javascript" src="../../js/common/jquery.js"></script>
@@ -25,15 +32,14 @@
<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="Miria (17.0.1)-beta2";
var ver="Usamin (18.1.2)";
//betaを入れるとバージョンチェックしない
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
//var ver="beta";
//WinstoreではバージョンCK・言語・Misskeyトークンの機能が排除
var winstore=false;
var acct_id=0;
var tlid=0;
verck(ver,winstore);
verck(ver);
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<div id="tl">
@@ -46,8 +52,10 @@ var tlid=0;
</div>
</div>
</div>
<div id="post-box" class="z-depth-3">
<div id="post-box" class="z-depth-5">
<div id="post-bar" class="drag-bar">投稿</div>
<!--トゥートボックス-->
<div id="left-side">
<div class="row" style="margin-bottom:0;">
</span>
<div class="" style="float:left;">
@@ -116,7 +124,6 @@ var tlid=0;
<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>
@@ -129,7 +136,7 @@ var tlid=0;
</div>
<div class="col s12 mize" style="margin-bottom:5px; padding:0;">
<div id="taglist"></div>
<span id="preview" class="mize"></span>
<div id="preview" class="mize"></div>
<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>:
@@ -178,6 +185,9 @@ var tlid=0;
<li>
<a onclick="schedule();">時間指定投稿</a>
</li>
<li>
<a onclick="pollToggle();">アンケート</a>
</li>
</ul>
<!--hidden area-->
<input type="hidden" id="reply">
@@ -189,59 +199,87 @@ var tlid=0;
<button class="btn waves-effect indigo darken-3 unmize hide toot-btn-group" onclick="sec()" id="toot-sec-btn"><i class="material-icons" id="toot-sec-icon" title="セカンダリートゥート">lock_open</i></button>
</div>
</div>
<div id="right-side">
<div id="suggest"></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>
<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>
<div id="emoji" class="hide">
<span class="gray sml">サーバーによって実装が異なります。
<a onclick="emojiGet('true')" class="pointer">絵文字更新</a>
<i class="material-icons waves-effect" onclick="emojiToggle()" title="このボックスを閉じる" data-trans-title="post_box_close">cancel</i>
<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>
</span>
<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>
<!--Poll UI-->
<div id="poll" class="hide">
<select id="poll-sel" onchange="pollProviderCk()">
<option value="nothing">アンケートを使用しない</option>
<option value="votedon">votedon.</option>
<option value="mastodon-poll">Mastodon(2.8~)</option>
</select>
<div id="votedon" class="poll-provider hide">
WIP
</div>
<div id="mastodon-poll" class="poll-provider hide">
<input type="text" class="mastodon-choice" placeholder="選択肢1">
<input type="text" class="mastodon-choice" placeholder="選択肢2">
<input type="text" class="mastodon-choice" placeholder="選択肢3">
<input type="text" class="mastodon-choice" placeholder="選択肢4">
<input type="checkbox" class="filled-in" id="poll-multiple" value="1" />
<label for="poll-multiple">複数選択を許可</label><br>
<input type="checkbox" class="filled-in" id="poll-until" value="1" />
<label for="poll-until">投票するまで票数を隠す</label><br>
<input type="number" style="width:50px" id="days_poll" placeholder="d" value="0">
<input type="number" style="width:50px" id="hours_poll" placeholder="h" value="0">時間
<input type="number" style="width:50px" id="mins_poll" placeholder="m" value="0">
</div>
</div>
</div>
</div>
<!-- Modal Structure Tootdata-->
<div id="tootmodal" class="modal modal-fixed-footer">
@@ -269,14 +307,14 @@ var tlid=0;
<div class="collapsible-body toot-reset" id="toot-after">
</div>
</li>
<li>
<li class="dm-hide">
<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>
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">person_outline</i>これより前のユーザーTL(BTソース確認)
</div>
@@ -290,7 +328,7 @@ var tlid=0;
<div class="collapsible-body toot-reset" id="toot-fav">
</div>
</li>
<li>
<li class="dm-hide">
<div class="collapsible-header">
<i class="text-darken-3 fa fa-retweet"></i>このトゥートをブーストした人
</div>
@@ -298,19 +336,20 @@ var tlid=0;
</div>
</li>
</ul>
<div class="dm-hide">
他のアカウントを使用(<i class="fa fa-retweet"></i>/<i class="fa fa-star"></i>の解除はできません)<br>
<div class="row">
<div class="col s4">
<div class="col s6">
<select id="status-acct-sel" class="acct-sel"></select>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share left"></i>返信</button>
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share"></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>
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i class="fa fa-retweet"></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 class="col s2">
<button class="dropdown-button btn waves-effect orange" style="width:100%;" onclick="staEx('fav')"><i class="fa fa-star"></i></button>
</div>
</div>
<div id="toot-tools">
@@ -318,11 +357,12 @@ var tlid=0;
<div id="toot-after">
</div>
</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="waves-effect waves-green btn-flat dm-hide" onclick="brws()">ブラウザで開く</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="shot()">スクリーンショット</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="cbCopy()">URLをコピー</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="cbCopy('emb')">埋め込む</a>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
</div>
</div>
@@ -332,7 +372,7 @@ var tlid=0;
<div id="his-data-show">
<div class="his-float" id="his-float-data">
<div id="his-basic-prof">
<img src="./img/loading.svg" id="his-prof">
<img src="../../img/loading.svg" id="his-prof">
<span id="his-name">Loading...</span><span class="gray" id="his-bot"></span>
<br>@
<span id="his-acct"></span><br>
@@ -543,16 +583,24 @@ var tlid=0;
<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-Miria_17-0-1" class="release-do" style="display:none; ">
<div id="release-Usamin_18-1-1" class="release-do" style="display:none; ">
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
Entyでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。<br>
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
<h5>Release Note Miria (17.0.1)</h5>
バグ修正<br>
(Mastodon 2.7)<b>時間指定投稿が利用できます。</b><br>
(Mastodon 2.7)<b>「インスタンス」を「サーバー」に変更</b><br>
<h5>Release Note Usamin (18.1.1)</h5>
・お知らせ機能改善<br>
・Integrated TLで一部挙動改善(Thanks to <a href="https://www.kr-kp.com/">kPherox</a>)<br>
--以下18.1.0--<br>
・iTunes NowPlaying(macOS)にアルバムアートワークを付ける(Thanks to <a href="https://www.kr-kp.com/">kPherox</a>)<br>
・カラムを<b>縦に並べられる</b>ように(2つ目以降のカラム毎の設定の「左に重ねる」「右に出す」を押す)<br>
・画像を個別に削除する(画像をクリックして)<br>
・何個もアルバムアートワークが投稿されるバグを修正<br>
・Misskeyでログインしたまま何もできないバグを修正(権限回り)
</div>
<div id="release-en">
<h5>Let's make it native!</h5>
<a href="https://translate.thedesk.top">Crowdin translation project</a>
</div>
<br><br>
<h3>ご支援ください。</h3>
@@ -560,9 +608,9 @@ var tlid=0;
<a class="btn-share btn waves-effect waves-light purple lighten-2" href="https://enty.jp/Cutls" target="_blank">
Entyで支援
</a>
<a class="btn-share btn waves-effect waves-light red lighten-2" href="https://osushi.love/Cutls_P" target="_blank">
Osushi.loveで寿司を贈る
</a>
<a class="btn-share btn waves-effect waves-light red lighten-2" href="https://www.pixiv.net/fanbox/creator/28105985" target="_blank">
Pixiv FANBOXで支援
</a>
<a class="btn-share btn waves-effect waves-light blue" href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">
Amazonほしいものリスト
</a>
@@ -582,130 +630,154 @@ var tlid=0;
<i class="material-icons pointer" onclick="endPip()">close</i>
<div id="pip-content">
</div>
</div>
<!--カラム追加-->
<div id="add-box" class="hide z-depth-4 notf-box">
<div class="input-field"><span data-trans="your_acct">アカウントを選択</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 id="webview-add" class="hide">TweetDeckを表示します。TJDeckをカスタムしたものが読み込まれます(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>)。キーボードショートカットが邪魔をするので、文字入力時はカラムの「WebView優先」にチェックを入れてください。
</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>Close
</button>
</div>
</div>
<!--リスト-->
<div id="list-box" class="hide notf-box z-depth-4">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="list-acct-sel" class="acct-sel"></select>
<label>アカウントを選択</label>
</div>
<!--menu-->
<div id="menu" class="z-depth-5" style="display:none">
<div id="menu-bar" class="drag-bar"></div>
<span class="cancel">
<i class="material-icons waves-effect" onclick="menu()" title="このボックスを閉じる(X)">cancel</i>
</span>
<div id="menu-wrapper">
<div id="left-menu">
<div class="waves-effect active" onclick="addColumnMenu()" id="addColumnMenu"><i class="material-icons">add</i><span>カラム追加</span></div>
<div class="waves-effect" onclick="sortMenu()" id="sortMenu"><i class="material-icons">sort</i><span>カラム一覧/並べ替え</span></div>
<div class="waves-effect" onclick="searchMenu()" id="searchMenu"><i class="material-icons">search</i><span>検索</span></div>
<div class="waves-effect" onclick="listMenu()" id="listMenu"><i class="material-icons">view_headline</i><span>リスト</span></div>
<div class="waves-effect" onclick="filterMenu()" id="filterMenu"><i class="material-icons">filter_list</i><span>フィルター</span></div>
<div class="waves-effect" onclick="help()"><i class="material-icons">help_outline</i><span>ヘルプ</span></div>
<div class="waves-effect" onclick="location.href='index.html'"><i class="material-icons">refresh</i><span>TL再読込</span></div>
</div>
<div id="right-menu">
<!--カラム追加-->
<div id="add-box" class="hide menu-content">
<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 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 class="input-field">
<div id="auth">
<input type="hidden" value="local" id="type-sel">
表示するタイムライン
<div id="tltype">
<div class="type waves-effect active" data-type="local"><div><i class="material-icons">people_outline</i></div><span>ローカル</span></div>
<div class="type waves-effect" data-type="local-media"><div><i class="material-icons">people_outline</i><i class="material-icons sub-icon">perm_media</i></div><span>ローカル(メディア)</span></div>
<div class="type waves-effect" data-type="home"><div><i class="material-icons">home</i></div><span>ホーム</span></div>
<div class="type waves-effect" data-type="pub"><div><i class="material-icons">language</i></div><span>連合</span></div>
<div class="type waves-effect" data-type="pub-media"><div><i class="material-icons">language</i><i class="material-icons sub-icon">perm_media</i></div><span>連合(メディア)</span></div>
<div class="type waves-effect" data-type="dm"><div><i class="material-icons">mail_outline</i></div><span>ダイレクトメッセージ</span></div>
<div class="type waves-effect" data-type="mix"><div><i class="material-icons">merge_type</i></div><span>統合(ローカルとホーム)</span></div>
<div class="type waves-effect" data-type="plus"><div><i class="material-icons">merge_type</i><i class="material-icons sub-icon">reply</i></div><span>統合(LTL+BT+返信)</span></div>
<div class="type waves-effect" data-type="notf"><div><i class="material-icons">notifications</i></div><span>通知</span></div>
</div>
</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 id="webview-add" class="hide">TweetDeckを表示します。TJDeckをカスタムしたものが読み込まれます(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>)。キーボードショートカットが邪魔をするので、文字入力時はカラムの「WebView優先」にチェックを入れてください。
</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 menu-content">
<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 menu-content">
<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>
</div>
</div>
<!--リスト-->
<div id="list-box" class="hide menu-content">
<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 menu-content">
<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="number" style="width:50px" id="days_filter" placeholder="d" value="0">
<input type="number" style="width:50px" id="hours_filter" placeholder="h" value="0">時間
<input type="number" 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>
<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>
<a onclick="about()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">info</i>このソフトについて
</a>&nbsp;|&nbsp;
<a onclick="bottomReverse()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">swap_horiz</i>トゥートボタンの左右入れ替え
</a>
</div>
<div id="main">
<!--TLのTL-->
<div id="timeline-container">
<h3>Welcome to TheDesk</h3><br><a href="acct.html">アカウントを追加</a>するか下の<i class="material-icons">add</i>ボタンよりカラムを追加してください。
<h3>Welcome to TheDesk</h3><br><a href="acct.html">アカウントを追加</a>するか下の<i class="material-icons">apps</i>ボタンよりカラムを追加してください。
</div>
</div>
</div>
@@ -713,53 +785,26 @@ var tlid=0;
<div id="bottom" class="reverse">
<div class="leftside reverse">
<div id="dambox">
<input type="text" id="posttgl" placeholder="トゥート" style="height:2rem">
</div>
<button id="posttgl" class="btn waves-effect indigo" style="width: 100%;height: 2.5rem;line-height: 0;margin: 0;">
<i class="material-icons" style="position: relative; top: 5px; font-size: 1.5rem; text-align: center; margin-right: 10px;">edit</i>トゥート
</button>
</div>
<div class="leftside reverse" 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">Preferences:</span>
<a onclick="bottomReverse()" class="nex waves-effect">
<i class="material-icons nex" title="トゥートバーの左右入れ替え" data-trans-title="reverse">swap_horiz</i>
</a>
<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>
<a href="https://docs.thedesk.top" class="setting nex waves-effect" target="_blank">
<i class="material-icons nex" title="ヘルプ">help_outline</i>
</a>
</div>
</div>
</div>
<div class="btnsgroup">
<a href="acct.html" class="nex waves-effect">
<i class="material-icons nex big-icon" title="アカウントマネージャー(Ctrl+Shift+M)">account_circle</i>
</a>
<a href="setting.html" class="nex waves-effect">
<i class="material-icons nex" title="設定(Ctrl+Shift+S)">settings</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="menu()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="リスト">apps</i>
</a>
</div>
</div></div>
<div>
<div id="tips-menu">
<div class="btnsgroup" style="height:34px"><span class="grouptitle">Tips:</span>
@@ -799,9 +844,11 @@ var tlid=0;
<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/tl/misskeyparse.js"></script>
<script type="text/javascript" src="../../js/tl/dm.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/poll.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>
@@ -834,4 +881,5 @@ var tlid=0;
<script type="text/javascript" src="../../js/userdata/prof-edit.js"></script>
<script type="text/javascript" src="../../js/emoji/emojipack.js"></script>
<script type="text/javascript" src="../../js/emoji/default-emoji.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/ui/menu.js"></script>

View File

@@ -2,19 +2,32 @@
<html lang="ja">
<head>
<title>Settings - TheDesk</title>
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
<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/pickr.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">
<style>input{max-height:50px!important} .pcr-result{height:1rem !important;}</style>
</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/lang.ja.js"></script>
<script src="https://unpkg.com/json5@^2.0.0/dist/index.min.js"></script>
<script src="../../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="setting.vue.js"></script>
<h4>設定</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
@@ -23,11 +36,55 @@
</div>
<div class="collapsible-body">
<h5>言語</h5>
<a onclick="changelang('ja')" class="pointer">日本語</a>/<a onclick="changelang('en')" class="pointer">English</a>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br>
<a href="../ja/setting.html" onclick="changelang('ja')">日本語(Japanese)</a>/<a href="../en/setting.html" onclick="changelang('en')">English</a>/<a href="../ps/setting.html" onclick="changelang('ps')">Crowdin web translate</a>/
<h5>設定のインポートとエクスポート</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3" style="width:100%; max-width:200px;">エクスポート</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3" style="width:100%; max-width:200px;">インポート</button>
<h5>テーマの設定</h5>
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<templete v-html=item.text.desc></templete><br>
<template v-if="item.id=='notf'"><a onclick="notftest()" class="pointer">通知テスト</a><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id" v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">変更</button>
</template>
</template>
</div>
<h5>フォント</h5>
「選択」を押してフォントを選んでください。<br>
<button class="btn waves-effect" style="width:100px;" onclick="font()">選択</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:300px; height:500px;"></div>
<br>
<input type="text" style="width:150px" id="font">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<br>
<h5>デフォルトの保存先</h5>
画像ダウンロードやスクリーンショットに影響します。<br>
<button class="btn waves-effect" style="width:100px;" onclick="savefolder()">変更</button>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">color_lens</i>テーマの設定
</div>
<div class="collapsible-body">
<h4>テーマの選択</h4>
<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" />
@@ -38,141 +95,84 @@
<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>新規通知のポップアップお知らせの表示秒数</h5>0に設定すると表示されません
<br>
<input type="text" style="width:50px" id="popup">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<br>
<h5>ネイティブ通知設定</h5>
Portableバージョンでは表示できません。<br><a onclick="notftest()" class="pointer">通知テスト</a>
<br>
<input class="with-gap" onchange="settings()" name="notf" type="radio" id="ntf_yes" value="yes" />
<label for="ntf_yes">はい</label>
<input class="with-gap" onchange="settings()" name="notf" type="radio" id="ntf_no" value="no" />
<label for="ntf_no">いいえ</label>
<br>
<h5>マルチカラムの最低横幅</h5>画面全体の横幅÷コラム数がこの値を超えた時、横スクロールとなります。
<br>
<input type="text" style="width:50px" id="width">px以上
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<br>
<h5>フォント</h5>
「選択」を押してフォントを選んでください。<br>
<button class="btn waves-effect" style="width:100px;" onclick="font()">選択</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:300px; height:500px;">
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom" value="custom" />
<label for="custom">Custom</label>
<div style="width:300px" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
<br>
<input type="text" style="width:150px" id="font">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<br>
<h5>フォントサイズ</h5>
<span style="font-size:15px">15px(絶対指定)</span>
<br>
<input type="text" style="width:50px" id="size">px
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button><br>
<h5>デフォルトの保存先</h5>
画像ダウンロードやスクリーンショットに影響します。<br>
<button class="btn waves-effect" style="width:100px;" onclick="savefolder()">変更</button>
<br>
</div>
<h4>カスタムテーマの作成・編集</h4>
<div style="width:300px" id="edit-selector" data-add="新規作成">
<select id="custom-edit-sel" class="custom-sel" onchange="custom()">
<option value="add_new">新規作成</option>
</select>
</div>
<h5>名前</h5>
<input type="text" style="width:300px" id="custom_name" placeholder="名前...">
<h5>説明</h5>
<div class="input-field"><textarea style="width:300px" id="custom_desc" class="materialize-textarea" placeholder="説明..."></textarea></div>
<h5>色の系統</h5>
<input class="with-gap" name="derection" type="radio" id="dark" value="dark" checked="true" />
<label for="dark">Dark</label>
<input class="with-gap" name="derection" type="radio" id="light" value="light" />
<label for="light">Light</label>
<div id="pickers">
<div>
<h5>Primary</h5>補助要素に使われる背景色
<div id="color-picker0-wrap"><div class="color-picker" id="color-picker0"></div></div>
<input type="hidden" id="color-picker0_value">
</div>
<div>
<h5>Secondary</h5>全体の背景色など
<div id="color-picker1-wrap"><div class="color-picker" id="color-picker1"></div></div>
<input type="hidden" id="color-picker1_value">
</div>
<div>
<h5>Texts</h5>テキストの色
<div id="color-picker2-wrap"><div class="color-picker" id="color-picker2"></div></div>
<input type="hidden" id="color-picker2_value">
</div>
<div>
<h5>Accent</h5>ブーストの背景色など
<div id="color-picker3-wrap"><div class="color-picker" id="color-picker3"></div></div>
<input type="hidden" id="color-picker3_value">
</div>
</div>
<button class="btn-large waves-effect" onclick="customComp()">変更</button>&nbsp;<button class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">削除</button><br><br>
<input type="text" style="width:300px" id="custom_json" class="materialize-textarea" placeholder="JSON style" readonly><br>
このコードは他のTheDeskなどとシェアできます。このコードをMiASに貼ることはご遠慮ください。詳細:<a href="https://thedesk.top/mias.html" target="_blank">テーマ互換性</a>
<h4>カスタムテーマのインポート</h4>
<a href="https://assets.msky.cafe/" target="_blank">MiAS</a>上の80を超えるテーマを張り付けることもできます。<br>
<input type="text" style="width:300px" id="custom_import" class="materialize-textarea" placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">インポート</button><br>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>タイムラインの設定
</div>
<div class="collapsible-body">
<h5>時間表記設定</h5>相対時間の例:"1分前","3日前"
<br>絶対時間の例"23:25:21","2017年12月30日 23:59:00"
<br>混合表示は、当日のトゥートのみ相対、それ以外は絶対で表示
<br>
<input class="with-gap" onchange="settings()" onchange="settings()" name="time" type="radio" id="relative" value="relative" />
<label for="relative">相対時間</label>
<input class="with-gap" onchange="settings()" name="time" type="radio" id="absolute" value="absolute" />
<label for="absolute">絶対時間</label>
<input class="with-gap" onchange="settings()" name="time" type="radio" id="double" value="double" />
<label for="double">両方表示</label>
<input class="with-gap" onchange="settings()" name="time" type="radio" id="medium" value="medium" />
<label for="medium">混合表示</label>
<h5>独自ロケールを使用</h5>対応サーバーではそのサーバーにあわせた言語表示ができます。
<br>
<input class="with-gap" onchange="settings()" name="ul" type="radio" id="ul_yes" value="yes" />
<label for="ul_yes">はい</label>
<input class="with-gap" onchange="settings()" name="ul" type="radio" id="ul_no" value="no" />
<label for="ul_no">いいえ</label>
<br>
<h5>非表示設定の画像(NSFW)を隠す</h5>きつめのぼかしがかかります。
<br>
<input class="with-gap" onchange="settings()" name="nsfw" type="radio" id="n_yes" value="yes" />
<label for="n_yes">はい</label>
<input class="with-gap" onchange="settings()" name="nsfw" type="radio" id="n_no" value="no" />
<label for="n_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">はい</label>
<input class="with-gap" onchange="settings()" name="cw" type="radio" id="c_no" value="no" />
<label for="c_no">いいえ</label>
<br>
<h5>リプライ数表示</h5>
<input class="with-gap" onchange="settings()" name="rp" type="radio" id="rp_hidden" value="hidden" />
<label for="rp_hidden">2以上のとき1+と表示</label>
<input class="with-gap" onchange="settings()" name="rp" type="radio" id="rp_all" value="all" />
<label for="rp_all">完全に表示</label>
<br>
<h5>アイコンのアニメーションを再生する</h5>
<input class="with-gap" onchange="settings()" name="gif" type="radio" id="g_yes" value="yes" />
<label for="g_yes">はい</label>
<input class="with-gap" onchange="settings()" name="gif" type="radio" id="g_no" value="no" />
<label for="g_no">いいえ</label>
<br>
<h5>タグタイムラインの表示範囲</h5>
<input class="with-gap" onchange="settings()" name="tag" type="radio" id="t_all" value="all" />
<label for="t_all">接続しているサーバー</label>
<input class="with-gap" onchange="settings()" name="tag" type="radio" id="t_local" value="local" />
<label for="t_local">検索対象のサーバーのみ</label>
<br>
<h5>viaを表示する</h5>
<input class="with-gap" onchange="settings()" name="via" type="radio" id="via_yes" value="yes" />
<label for="via_yes">はい</label>
<input class="with-gap" onchange="settings()" name="via" type="radio" id="via_hide" value="hide" />
<label for="via_hide">いいえ</label>
<br>
<h5>アクションメニューを非表示</h5>
「マウスオーバー」はすこし鬱陶しいと思うかもしれません。<br>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_yes" value="yes" />
<label for="mov_yes">マウスオーバーで表示</label>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_click" value="click" />
<label for="mov_click">クリックで表示</label>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_no" value="no" />
<label for="mov_no">いいえ</label>
<br>
<h5>通知を開いているとき、通知新着お知らせを表示する</h5>
<input class="with-gap" onchange="settings()" name="notfm" type="radio" id="notfm_yes" value="yes" />
<label for="notfm_yes">はい</label>
<input class="with-gap" onchange="settings()" name="notfm" type="radio" id="notfm_no" value="no" />
<label for="notfm_no">いいえ</label>
<br>
<h5>指定行数以上を折りたたむ</h5>
5文字以下のトゥートは折りたたみません。また、折りたたみ時は改行が描画されません。改行のみを行数とカウントします。
<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>
<br>
<h5>画像の高さ
</h5>
<input type="text" style="width:50px" id="img-height">px
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<br>
<h5>#InstanceTickerを使う</h5>
トゥートした人の所属サーバーをわかりやすく彩ります(自サーバー以外のトゥート向け)。<a href="https://cdn.weep.me/mastodon/">#InstanceTickerについて</a> Copyright 2018 weepjp, kyori19.<br>
<input class="with-gap" onchange="settings()" name="ticker" type="radio" id="ticker_yes" value="yes" />
<label for="ticker_yes">はい</label>
<input class="with-gap" onchange="settings()" name="ticker" type="radio" id="ticker_no" value="no" />
<label for="ticker_no">いいえ</label>
<br>
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id" v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">変更</button>
</template>
</template>
</div>
</div>
</li>
<li>
@@ -180,89 +180,32 @@
<i class="material-icons">send</i>投稿設定
</div>
<div class="collapsible-body">
<h5>デフォルトの警告文</h5>
<input type="text" style="width:150px" id="cw-text">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<br>
<h5>長文投稿時に警告</h5>
下で指定した以上のトゥートを投稿するときにCWするかのダイアログを表示します。
<br>
<input type="text" style="width:50px" id="cw_sentence">行 以上 または
<input type="text" style="width:50px" id="cw_letters">文字 以上
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<br>
<h5>標準でCWを設定</h5>
<input class="with-gap" onchange="settings()" name="cws" type="radio" id="cws_yes" value="yes" />
<label for="cws_yes">はい</label>
<input class="with-gap" onchange="settings()" name="cws" type="radio" id="cws_no" value="no" />
<label for="cws_no">いいえ
</label>
<br>
<h5>デフォルトの公開設定</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">前回の投稿設定を記憶する(サーバーごとに記憶されます)</label>
<input class="with-gap" onchange="settings()" name="vis" type="radio" id="server" value="server" />
<label for="server">マストドンアカウント設定の既定値</label>
<br>
<h5>画像投稿設定</h5>
<input class="with-gap" onchange="settings()" name="img" type="radio" id="i_url" value="url" />
<label for="i_url">画像を投稿し、画像の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>
<br>
<input class="with-gap" onchange="settings()" name="img" type="radio" id="i_inline" value="inline" disabled />
<label for="i_inline">現在利用できません。
<!--画像を投稿し、インラインで表示(Markdownに対応したインスタンスのみ。マルチアカウント環境では非推奨。)-->
</label>
<br>
<h5>投稿ボックスの挙動</h5>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="bx_yes" value="yes" />
<label for="bx_yes">たたむ</label>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="bx_no" value="no" />
<label for="bx_no">投稿後も隠さない
</label>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="bx_abs" value="absolute" />
<label for="bx_abs">枠外クリックで閉じない(起動時に展開)</label>
<br>
<h5>引用形式</h5>
<input class="with-gap" onchange="settings()" name="quote" type="radio" id="q_simple" value="simple" />
<label for="q_simple">URLのみ</label>
<input class="with-gap" onchange="settings()" name="quote" type="radio" id="q_mention" value="mention" />
<label for="q_mention">URLとアカウント名(相手に通知)</label>
<input class="with-gap" onchange="settings()" name="quote" type="radio" id="q_full" value="full" />
<label for="q_full">本文・URL・アカウント名
</label>
<br>
<h5>投稿後や起動時のアカウント</h5>
メインアカウントはアカウント設定で指定できます。投稿以外のアカウント選択にも影響します。<br>
<input class="with-gap" onchange="settings()" name="main" type="radio" id="mn_remain" value="remain" />
<label for="mn_remain">最後に使用したアカウント</label>
<input class="with-gap" onchange="settings()" name="main" type="radio" id="mn_main" value="main" />
<label for="mn_main">メインアカウント</label>
</label>
<h5>セカンダリートゥートボタン</h5>
公開範囲の変更とトゥートを一発でできます。<br>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-nothing" value="nothing" />
<label for="sec-nothing">表示しない</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-public" value="public" />
<label for="sec-public">公開(Public)</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-unlisted" value="unlisted" />
<label for="sec-unlisted">未収載(Unlisted)</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-private" value="private" />
<label for="sec-private">非公開(Private)</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-direct" value="direct" />
<label for="sec-direct">ダイレクト(Direct)</label>
<input class="with-gap hide kirishima" onchange="settings()" name="sec" type="radio" id="sec-local" value="local" />
<label for="sec-local">ローカル限定</label><span class="hide kirishima">非対応インスタンスでは「未収載」になります。</span>
<br>
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template v-if="!check.kirishima || (check.kirishima && kirishima)">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id" v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">変更</button>
</template>
</template>
</div>
</div>
</li>
<li>
@@ -309,7 +252,7 @@
</div>
<div class="collapsible-body">
<h5>NowPlayingのソース(Windows)</h5>
macOSやLinuxでは動作しません。AIMPとiTunes以外未検証です。<br>foobar2000, MusicBee,J. River Media Center, Media JukeboxはCADを、Last.fm Client, TTPlayer, OpenPandora, ZuneはWLMを選んでください。<br>ただし、foobar2000は<a href="http://poiru.github.com/foo-cad/">foo_cad plugin</a>が必要です。<br>
macOSやLinuxでは動作しません。AIMPとiTunes以外未検証です。<br>foobar2000, MusicBee,J. River Media Center, Media JukeboxはCADを、Last.fm Client, TTPlayer, OpenPandora, ZuneはWLMを選んでください。<br>ただし、foobar2000は<a href="http://poiru.github.com/foo-cad/">foo_cad plugin</a>が必要です。MusicBeeもCADを有効にする必要があります。<br>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="aimp" value="AIMP" />
<label for="aimp">AIMP</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="itunes" value="ITUNES" />
@@ -380,6 +323,7 @@
<li>X:投稿パネルを開閉</li>
<li>Ctrl+Enter:投稿</li>
<li>Ctrl+Enter+Shift:投稿(セカンダリートゥート)</li>
<li>Alt+Enter:セカンダリートゥートボタン</li>
<li>Ctrl+E:全ての通知を既読にする</li>
<li>Esc:投稿パネルを消す</li>
<li>F5:スーパーリロード</li>
@@ -406,17 +350,17 @@
<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://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>支援(Pixiv FANBOX)</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(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>
<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
<a onclick="localStorage.removeItem('new-ver-skip'); location.href='index.html';" class="pointer">アップデートを確認</a><br>
<a href="oss.html">OSS License(オープンソースライセンス)</a><br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018 All Rights Reserved.
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a href="https://github.com/cutls/TheDesk/blob/master/TOS.md">Terms of Use</a>
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a href="https://thedesk.top/tos.html">Terms of Use</a>/<a href="https://thedesk.top/priv.html">Privacy Policy</a>
<br>Developer: Cutls P(
<a href="index.html?mode=user&code=Cutls@kirishima.cloud">@Cutls@kirishima.cloud</a>)
<br>
@@ -426,9 +370,9 @@ TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のため
<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/lang/lang.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/platform/pickr.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>

480
app/view/ja/setting.vue.js Normal file
View File

@@ -0,0 +1,480 @@
var yesno=[
{
text:"はい",
value:"yes"
},{
text:"いいえ",
value:"no"
}
];
var envConstruction=[
{
id:"popup",
storage:"popup",
checkbox:false,
doubleText:false,
setValue:0,
width:50,
text:{
head:"新規通知のポップアップお知らせの表示秒数",
desc:'0に設定すると表示されません',
after:"秒"
}
},{
id:"notf",
storage:"nativenotf",
checkbox:true,
setValue:"yes",
text:{
head:"ネイティブ通知設定",
desc:"Portableバージョンでは表示できません。",
checkbox:yesno
}
},{
id:"width",
storage:"width",
checkbox:false,
doubleText:false,
width:50,
setValue:300,
text:{
head:"マルチカラムの最低横幅",
desc:"画面全体の横幅÷コラム数がこの値を超えた時、横スクロールとなります。",
after:"px 以上"
}
},{
id:"fixwidth",
storage:"fixwidth",
checkbox:false,
doubleText:false,
setValue:300,
width:50,
text:{
head:"TweetDeckの限定の最低横幅",
desc:"",
after:"px 以上"
}
},{
id:"size",
storage:"size",
checkbox:false,
doubleText:false,
width:50,
setValue:13,
text:{
head:"フォントサイズ",
desc:'<span style="font-size:13px">13px(絶対指定)</span>',
after:"px"
}
},{
id:"ha",
storage:"ha",
checkbox:true,
setValue:false,
text:{
head:"ハードウェアアクセラレーションの無効化",
desc:"表示(特に設定画面)が乱れる場合に「はい」を選択してください。自動で再起動します。",
checkbox:[
{
text:"はい",
value:"true"
},{
text:"いいえ",
value:"false"
}
]
}
}
];
var tlConstruction=[
{
id:"time",
storage:"datetype",
checkbox:true,
setValue:"absolute",
text:{
head:"時間表記設定",
desc:'相対時間の例:"1分前","3日前"<br>絶対時間の例"23:25:21","2017年12月30日 23:59:00"<br>混合表示は、当日のトゥートのみ相対、それ以外は絶対で表示 ',
checkbox:[
{
text:"相対時間",
value:"relative"
},{
text:"絶対時間",
value:"absolute"
},{
text:"両方表示",
value:"double"
},{
text:"混合表示",
value:"medium"
}
]
}
},{
id:"ul",
storage:"locale",
checkbox:true,
setValue:"yes",
text:{
head:"独自ロケールを使用",
desc:"対応サーバーではそのサーバーにあわせた言語表示ができます。",
checkbox:yesno
}
},{
id:"nsfw",
storage:"nsfw",
checkbox:true,
setValue:"yes",
text:{
head:"非表示設定の画像(NSFW)を隠す",
desc:"きつめのぼかしがかかります。",
checkbox:yesno
}
},{
id:"cw",
storage:"cw",
checkbox:true,
setValue:"yes",
text:{
head:"非表示設定のテキスト(CW)を隠す",
desc:"",
checkbox:yesno
}
},{
id:"rp",
storage:"replyct",
checkbox:true,
setValue:"hidden",
text:{
head:"リプライ数表示",
desc:"",
checkbox:[
{
text:"2以上のとき1+と表示",
value:"hidden"
},{
text:"2以上のとき1+と表示",
value:"all"
}
]
}
},{
id:"gif",
storage:"gif",
checkbox:true,
setValue:"yes",
text:{
head:"アイコンのアニメーションを再生する",
desc:"",
checkbox:yesno
}
},{
id:"tag",
storage:"tag-range",
checkbox:true,
setValue:"local",
text:{
head:"タグタイムラインの表示範囲",
desc:"",
checkbox:[
{
text:"接続しているサーバー",
value:"all"
},{
text:"検索対象のサーバーのみ",
value:"local"
}
]
}
},{
id:"via",
storage:"viashow",
checkbox:true,
setValue:"no",
text:{
head:"viaを表示する",
desc:"",
checkbox:yesno
}
},{
id:"mov",
storage:"mouseover",
checkbox:true,
setValue:"no",
text:{
head:"アクションメニューを非表示",
desc:"「マウスオーバー」はすこし鬱陶しいと思うかもしれません。",
checkbox:[
{
text:"マウスオーバーで表示",
value:"yes"
},{
text:"クリックで表示",
value:"click"
},{
text:"いいえ",
value:"no"
}
]
}
},{
id:"notfm",
storage:"setasread",
checkbox:true,
setValue:"yes",
text:{
head:"通知を開いているとき、通知新着お知らせを表示する",
desc:"",
checkbox:yesno
}
},{
checkbox:false,
doubleText:true,
data:[
{
id:"sentence",
storage:"sentence",
width:50,
setValue:500,
text:{after:"行 以上 または"}
},{
id:"letters",
storage:"letters",
width:50,
setValue:7000,
text:{after:"文字 以上"}
}
],
text:{
head:"指定行数以上を折りたたむ",
desc:"5文字以下のトゥートは折りたたみません。また、折りたたみ時は改行が描画されません。改行のみを行数とカウントします。",
}
},{
id:"img-height",
storage:"img-height",
checkbox:false,
doubleText:false,
width:80,
setValue:200,
text:{
head:"画像の高さ",
desc:'オプション:「full」と指定すると全ての画像をクロップしません。',
after:"px"
}
},{
id:"ticker",
storage:"ticker_ok",
checkbox:true,
setValue:"no",
text:{
head:"#InstanceTickerを使う",
desc:'トゥートした人の所属サーバーをわかりやすく彩ります(自サーバー以外のトゥート向け)。<a href="https://cdn.weep.me/mastodon/">#InstanceTickerについて</a> Copyright 2018 weepjp, kyori19.',
checkbox:yesno
}
},{
id:"anime",
storage:"animation",
checkbox:true,
setValue:"yes",
text:{
head:"タイムラインのアニメーション",
desc:"",
checkbox:yesno
}
}
];
var postConstruction=[
{
id:"cw-text",
storage:"cw-text",
checkbox:false,
doubleText:false,
width:150,
setValue:"",
text:{
head:"デフォルトの警告文",
desc:"",
after:""
}
},{
checkbox:false,
doubleText:true,
data:[
{
id:"cw_sentence",
storage:"cw_sentence",
width:50,
setValue:500,
text:{after:"行 以上 または"}
},{
id:"cw_letters",
storage:"cw_letters",
width:50,
setValue:7000,
text:{after:"文字 以上"}
}
],
text:{
head:"長文投稿時に警告",
desc:"下で指定した以上のトゥートを投稿するときにCWするかのダイアログを表示します。",
}
},{
id:"cws",
storage:"always-cw",
checkbox:true,
setValue:"no",
text:{
head:"標準でCWを設定",
desc:"",
checkbox:yesno
}
},{
id:"vis",
storage:"vis",
checkbox:true,
setValue:"public",
text:{
head:"デフォルトの公開設定",
desc:"",
checkbox:[
{
text:"公開(Public)",
value:"public"
},{
text:"未収載(Unlisted)",
value:"unlisted"
},{
text:"非公開(Private)",
value:"private"
},{
text:"ダイレクト(Direct)",
value:"direct"
},{
text:"前回の投稿設定を記憶する(サーバーごとに記憶されます)",
value:"memory"
},{
text:"マストドンアカウント設定の既定値",
value:"useapi"
}
]
}
},{
id:"img",
storage:"img",
checkbox:true,
setValue:"no-act",
text:{
head:"画像投稿設定",
desc:"",
checkbox:[
{
text:"画像を投稿し、画像のURLを最後に表示",
value:"url"
},{
text:"画像を投稿するがURLは表示しない",
value:"no-act"
}
]
}
},{
id:"box",
storage:"box",
checkbox:true,
setValue:"yes",
text:{
head:"投稿ボックスの挙動",
desc:"",
checkbox:[
{
text:"たたむ",
value:"yes"
},{
text:"投稿後も隠さない",
value:"no"
},{
text:"枠外クリックで閉じない(起動時に展開)",
value:"absolute"
}
]
}
},{
id:"quote",
storage:"quote",
checkbox:true,
setValue:"nothing",
text:{
head:"引用形式",
desc:"",
checkbox:[
{
text:"URLのみ",
value:"simple"
},{
text:"URLとアカウント名(相手に通知)",
value:"mention"
},{
text:"本文・URL・アカウント名",
value:"full"
},{
text:"使わない(TL上にボタンも表示されません)",
value:"nothing"
}
]
}
},{
id:"main",
storage:"mainuse",
checkbox:true,
setValue:"remain",
text:{
head:"投稿後や起動時のアカウント",
desc:"メインアカウントはアカウント設定で指定できます。投稿以外のアカウント選択にも影響します。",
checkbox:[
{
text:"最後に使用したアカウント",
value:"remain"
},{
text:"メインアカウント",
value:"main"
}
]
}
},{
id:"sec",
storage:"sec",
checkbox:true,
setValue:"public",
text:{
head:"セカンダリートゥートボタン",
desc:"",
checkbox:[
{
text:"表示しない",
value:"nothing"
},{
text:"公開(Public)",
value:"public"
},{
text:"未収載(Unlisted)",
value:"unlisted"
},{
text:"非公開(Private)",
value:"private"
},{
text:"ダイレクト(Direct)",
value:"direct"
},{
text:"ローカル限定",
value:"local",
kirishima:true,
kirishimaText:"非対応インスタンスでは「未収載」になります。"
}
]
}
}
]

View File

@@ -6,6 +6,13 @@
<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">
<!--
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
</head>
<body>
<style>
@@ -68,14 +75,11 @@ a,button,input,label,i{
<p>アップデートがあります</p>
<span id="now"></span><b id="ver"></b><br>
<span id="det"></span><br>
<button id="update" class="waves-effect btn" onclick="update('true')" style="margin-left:15px;">開始</button>
<div id="checkbox">
Options:<br>
<input type="checkbox" class="filled-in" id="portable" value="true" />
<label for="portable">ポータブル版</label><br>
<input type="checkbox" class="filled-in" id="rewrite" value="true" />
<label for="rewrite">上書きしない</label><br>
</div>
<button class="waves-effect btn windows hide" onclick="update('install')" style="margin-left:15px;">インストーラー版(推奨)</button>
<button class="waves-effect btn windows hide" onclick="update('portable')" style="margin-left:15px;">ポータブル版</button>
<button class="waves-effect btn linux hide" onclick="update('linux')" style="margin-left:15px;">開始</button>
<button class="waves-effect btn mac hide" onclick="update('mac')" style="margin-left:15px;">開始</button>
<br>
問題が発生しますか?<br><a href="https://thedesk.top">公式HP</a>からダウンロードをお試しください。
</div>
<div id="skipper" class="hide">
@@ -116,17 +120,49 @@ function update(sel){
$("#dlnow").toggleClass("hide");
$("#dlnow").toggleClass("show");
$("#prog").text("");
if($('#rewrite:checked').val()=="true"){
var versioning=true;
}else{
var versioning=false;
}
if($('#portable:checked').val()=="true"){
var zip=true;
}else{
var zip=false;
}
ipc.send('download-btn', [sel,enc(localStorage.getItem("next-ver")),zip,versioning]);
var remote=electron.remote;
var bit=process.arch;
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) {
if(sel=="install"){
if(bit=="x64"){
var url=json["winx64"];
var file="TheDesk-setup.exe";
}else if(bit=="ia32"){
var url=json["winia32"];
var file="TheDesk-setup-ia32.exe";
}
}else if(sel=="portable"){
if(bit=="x64"){
var url=json["winx64p"];
var file="TheDesk.exe";
}else if(bit=="ia32"){
var url=json["winia32p"];
var file="TheDesk-ia32.exe";
}
}else if(sel=="linux"){
if(bit=="x64"){
var url=json["linuxx64"];
var file="TheDesk-linux-x64.zip";
}else if(bit=="ia32"){
var url=json["linuxia64"];
var file="TheDesk-linux-ia32.zip";
}
}else if(sel=="mac"){
var url=json["mac"];
var file="TheDesk-darwin-x64.zip";
}
ipc.send('download-btn', [url,file]);
});
}
function quit(){
ipc.send('quit', 'go');
@@ -142,9 +178,14 @@ ipc.on('mess', function (event, arg) {
})
function verck(){
var remote=electron.remote;
var platform=remote.process.platform;
if(platform!="win32"){
$('#portable').prop("disabled",true)
var platform=remote.process.platform;
var bit=process.arch;
if(platform=="win32"){
$('.windows').removeClass("hide")
}else if(platform=="linux"){
$('.linux').removeClass("hide")
}else if(platform=="darwin"){
$('.mac').removeClass("hide")
}
var start="https://thedesk.top/ver.json";
fetch(start, {
@@ -160,7 +201,8 @@ function verck(){
$("#ver").text(json.desk);
localStorage.setItem("next-ver",json.desk);
$("#det").html(json.detail);
$("#now").text(localStorage.getItem("ver"));
$("#now").text(localStorage.getItem("ver"));
});
}
function nextv(){

View File

@@ -20,6 +20,13 @@ body,html{overflow-y: scroll;}
.card .colorsel div.exc{width:40px;height:20px;}
</style>
<meta charset="utf-8">
{{comment-start}}
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
{{comment-end}}
</head>
<body id="mainView">
<script type="text/javascript" src="../../js/common/jquery.js"></script>
@@ -76,7 +83,7 @@ Some instance data by <a href="https://instances.social" target="_blank">instanc
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br>
<span id="ins-desc"></span><br>
<img src="./img/loading.svg" id="ins-prof" width="200"><br>
<img src="../../img/loading.svg" id="ins-prof" width="200"><br>
<br>
{{domain}}:<span id="ins-name"></span><br>
{{connect}}:<span id="ins-connect"></span>{{ko}}<br>

View File

@@ -13,6 +13,13 @@
<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">
{{comment-start}}
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
{{comment-end}}
</head>
<body>
<script type="text/javascript" src="../../js/common/jquery.js"></script>
@@ -30,10 +37,9 @@ var ver="{{versionLetter}}";
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
//var ver="beta";
//WinstoreではバージョンCK・言語・Misskeyトークンの機能が排除
var winstore=false;
var acct_id=0;
var tlid=0;
verck(ver,winstore);
verck(ver);
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<div id="tl">
@@ -46,8 +52,10 @@ var tlid=0;
</div>
</div>
</div>
<div id="post-box" class="z-depth-3">
<div id="post-box" class="z-depth-5">
<div id="post-bar" class="drag-bar">{{post-new}}</div>
<!--トゥートボックス-->
<div id="left-side">
<div class="row" style="margin-bottom:0;">
</span>
<div class="" style="float:left;">
@@ -116,7 +124,6 @@ var tlid=0;
<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="{{nsfwDes}}" onclick="nsfw()">visibility_off</i>
@@ -129,7 +136,7 @@ var tlid=0;
</div>
<div class="col s12 mize" style="margin-bottom:5px; padding:0;">
<div id="taglist"></div>
<span id="preview" class="mize"></span>
<div id="preview" class="mize"></div>
<span class=" sml mize"><span data-trans="reply">{{replyMode}}</span>:
<span id="rec">{{no}}</span>/<span data-trans="file">{{temp}}</span>:
<span id="mec">{{nothing}}</span>/<span data-trans="vis">{{vis}}</span>:
@@ -178,6 +185,9 @@ var tlid=0;
<li>
<a onclick="schedule();">{{schedule}}</a>
</li>
<li>
<a onclick="pollToggle();">{{poll}}</a>
</li>
</ul>
<!--hidden area-->
<input type="hidden" id="reply">
@@ -189,59 +199,87 @@ var tlid=0;
<button class="btn waves-effect indigo darken-3 unmize hide toot-btn-group" onclick="sec()" id="toot-sec-btn"><i class="material-icons" id="toot-sec-icon" title="{{sectoot}}">lock_open</i></button>
</div>
</div>
<div id="right-side">
<div id="suggest"></div>
<!--絵文字ピッカー-->
<div id="emoji" class="hide shared z-depth-4">
<span class="gray sml">{{emojiWarn}}
<a onclick="emojiGet('true')" class="pointer">{{refreshEmoji}}</a>
<i class="material-icons waves-effect" onclick="emoji()" title="{{closeThisBox}}" data-trans-title="post_box_close">cancel</i>
<br>
</span>
<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>{{showThisEmoji}}<br><span class="gray sml">{{emojiInsertWarn}}</span>
<div id="emoji" class="hide">
<span class="gray sml">{{emojiWarn}}
<a onclick="emojiGet('true')" class="pointer">{{refreshEmoji}}</a>
<i class="material-icons waves-effect" onclick="emojiToggle()" title="{{closeThisBox}}" data-trans-title="post_box_close">cancel</i>
<br>
<a onclick="customEmoji()" class="pointer waves-effect" title="{{customEmoji}}">
<i class="material-icons">add</i>
</a>
<a onclick="defaultEmoji('people')" class="pointer waves-effect" title="{{peopleEmoji}}">
<i class="material-icons">people</i>
</a>
<a onclick="defaultEmoji('nature')" class="pointer waves-effect" title="{{natureEmoji}}">
<i class="material-icons">local_florist</i>
</a>
<a onclick="defaultEmoji('food')" class="pointer waves-effect" title="{{foodEmoji}}">
<i class="material-icons">restaurant</i>
</a>
<a onclick="defaultEmoji('activity')" class="pointer waves-effect" title="{{activityEmoji}}">
<i class="material-icons">directions_run</i>
</a>
<a onclick="defaultEmoji('place')" class="pointer waves-effect" title="{{placeEmoji}}">
<i class="material-icons">directions_car</i>
</a>
<a onclick="defaultEmoji('object')" class="pointer waves-effect" title="{{thingsEmoji}}">
<i class="material-icons">attach_file</i>
</a>
<a onclick="defaultEmoji('symbol')" class="pointer waves-effect" title="{{symbolEmoji}}">
<i class="material-icons">gesture</i>
</a>
<a onclick="defaultEmoji('flag')" class="pointer waves-effect" title="{{flagsEmoji}}">
<i class="material-icons">flag</i>
</a>
<a onclick="faicon()" class="pointer waves-effect" title="faicon" id="faicon-btn">
<i class="fa fa-fort-awesome"></i>
</a>
</span>
<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>{{showThisEmoji}}<br><span class="gray sml">{{emojiInsertWarn}}</span>
<br>
<a onclick="customEmoji()" class="pointer waves-effect" title="{{customEmoji}}">
<i class="material-icons">add</i>
</a>
<a onclick="defaultEmoji('people')" class="pointer waves-effect" title="{{peopleEmoji}}">
<i class="material-icons">people</i>
</a>
<a onclick="defaultEmoji('nature')" class="pointer waves-effect" title="{{natureEmoji}}">
<i class="material-icons">local_florist</i>
</a>
<a onclick="defaultEmoji('food')" class="pointer waves-effect" title="{{foodEmoji}}">
<i class="material-icons">restaurant</i>
</a>
<a onclick="defaultEmoji('activity')" class="pointer waves-effect" title="{{activityEmoji}}">
<i class="material-icons">directions_run</i>
</a>
<a onclick="defaultEmoji('place')" class="pointer waves-effect" title="{{placeEmoji}}">
<i class="material-icons">directions_car</i>
</a>
<a onclick="defaultEmoji('object')" class="pointer waves-effect" title="{{thingsEmoji}}">
<i class="material-icons">attach_file</i>
</a>
<a onclick="defaultEmoji('symbol')" class="pointer waves-effect" title="{{symbolEmoji}}">
<i class="material-icons">gesture</i>
</a>
<a onclick="defaultEmoji('flag')" class="pointer waves-effect" title="{{flagsEmoji}}">
<i class="material-icons">flag</i>
</a>
<a onclick="faicon()" class="pointer waves-effect" title="faicon" id="faicon-btn">
<i class="fa fa-fort-awesome"></i>
</a>
</div>
</div>
<!--Poll UI-->
<div id="poll" class="hide">
<select id="poll-sel" onchange="pollProviderCk()">
<option value="nothing">{{pollDdisabled}}</option>
<option value="votedon">votedon.</option>
<option value="mastodon-poll">Mastodon(2.8~)</option>
</select>
<div id="votedon" class="poll-provider hide">
WIP
</div>
<div id="mastodon-poll" class="poll-provider hide">
<input type="text" class="mastodon-choice" placeholder="{{choice}}1">
<input type="text" class="mastodon-choice" placeholder="{{choice}}2">
<input type="text" class="mastodon-choice" placeholder="{{choice}}3">
<input type="text" class="mastodon-choice" placeholder="{{choice}}4">
<input type="checkbox" class="filled-in" id="poll-multiple" value="1" />
<label for="poll-multiple">{{pollmulti}}</label><br>
<input type="checkbox" class="filled-in" id="poll-until" value="1" />
<label for="poll-until">{{polluntil}}</label><br>
<input type="number" style="width:50px" id="days_poll" placeholder="d" value="0">{{days}}
<input type="number" style="width:50px" id="hours_poll" placeholder="h" value="0">{{hours}}
<input type="number" style="width:50px" id="mins_poll" placeholder="m" value="0">{{mins}}
</div>
</div>
</div>
</div>
<!-- Modal Structure Tootdata-->
<div id="tootmodal" class="modal modal-fixed-footer">
@@ -269,14 +307,14 @@ var tlid=0;
<div class="collapsible-body toot-reset" id="toot-after">
</div>
</li>
<li>
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">people_outline</i>{{beforeLTL}}
</div>
<div class="collapsible-body toot-reset" id="toot-before">
</div>
</li>
<li>
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">person_outline</i>{{beforeUTL}}
</div>
@@ -290,7 +328,7 @@ var tlid=0;
<div class="collapsible-body toot-reset" id="toot-fav">
</div>
</li>
<li>
<li class="dm-hide">
<div class="collapsible-header">
<i class="text-darken-3 fa fa-retweet"></i>{{btedPeople}}
</div>
@@ -298,19 +336,20 @@ var tlid=0;
</div>
</li>
</ul>
<div class="dm-hide">
{{useOtherAcct1}}(<i class="fa fa-retweet"></i>/<i class="fa fa-star"></i>{{useOtherAcct2}})<br>
<div class="row">
<div class="col s4">
<div class="col s6">
<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>{{reply}}</button>
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share"></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>{{bt}}</button>
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i class="fa fa-retweet"></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>{{favRegist}}</button>
<div class="col s2">
<button class="dropdown-button btn waves-effect orange" style="width:100%;" onclick="staEx('fav')"><i class="fa fa-star"></i></button>
</div>
</div>
<div id="toot-tools">
@@ -318,11 +357,11 @@ var tlid=0;
<div id="toot-after">
</div>
</div>
</div>
<div class="modal-footer">
<a href="#!" class="waves-effect waves-green btn-flat" onclick="brws()">{{openBrowser}}</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="shot()">{{screenshot}}</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy()">{{copyURL}}</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy('emb')">{{embed}}</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="brws()">{{openBrowser}}</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="cbCopy()">{{copyURL}}</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="cbCopy('emb')">{{embed}}</a>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">{{close}}</a>
</div>
</div>
@@ -332,7 +371,7 @@ var tlid=0;
<div id="his-data-show">
<div class="his-float" id="his-float-data">
<div id="his-basic-prof">
<img src="./img/loading.svg" id="his-prof">
<img src="../../img/loading.svg" id="his-prof">
<span id="his-name">Loading...</span><span class="gray" id="his-bot"></span>
<br>@
<span id="his-acct"></span><br>
@@ -543,16 +582,24 @@ var tlid=0;
<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-Miria_17-0-1" class="release-do" style="display:none; ">
<div id="release-Usamin_18-1-1" class="release-do" style="display:none; ">
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
Entyでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。<br>
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
<h5>Release Note Miria (17.0.1)</h5>
バグ修正<br>
(Mastodon 2.7)<b>時間指定投稿が利用できます。</b><br>
(Mastodon 2.7)<b>「インスタンス」を「サーバー」に変更</b><br>
<h5>Release Note Usamin (18.1.1)</h5>
・お知らせ機能改善<br>
・Integrated TLで一部挙動改善(Thanks to <a href="https://www.kr-kp.com/">kPherox</a>)<br>
--以下18.1.0--<br>
・iTunes NowPlaying(macOS)にアルバムアートワークを付ける(Thanks to <a href="https://www.kr-kp.com/">kPherox</a>)<br>
・カラムを<b>縦に並べられる</b>ように(2つ目以降のカラム毎の設定の「左に重ねる」「右に出す」を押す)<br>
・画像を個別に削除する(画像をクリックして)<br>
・何個もアルバムアートワークが投稿されるバグを修正<br>
・Misskeyでログインしたまま何もできないバグを修正(権限回り)
</div>
<div id="release-en">
<h5>Let's make it native!</h5>
<a href="https://translate.thedesk.top">Crowdin translation project</a>
</div>
<br><br>
<h3>{{supportme}}</h3>
@@ -560,9 +607,9 @@ var tlid=0;
<a class="btn-share btn waves-effect waves-light purple lighten-2" href="https://enty.jp/Cutls" target="_blank">
{{EntySupport}}
</a>
<a class="btn-share btn waves-effect waves-light red lighten-2" href="https://osushi.love/Cutls_P" target="_blank">
{{sendSushi}}
</a>
<a class="btn-share btn waves-effect waves-light red lighten-2" href="https://www.pixiv.net/fanbox/creator/28105985" target="_blank">
{{PixivSupport}}
</a>
<a class="btn-share btn waves-effect waves-light blue" href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">
{{AWLSupport}}
</a>
@@ -582,125 +629,149 @@ var tlid=0;
<i class="material-icons pointer" onclick="endPip()">close</i>
<div id="pip-content">
</div>
</div>
<!--カラム追加-->
<div id="add-box" class="hide z-depth-4 notf-box">
<div class="input-field"><span data-trans="your_acct">{{selectAcct}}</span>
<br>
<select id="add-acct-sel" class="acct-sel" style="color:black" onchange="addselCk()"></select>
<label></label>
</div>
<div class="input-field">
<div id="auth">
<select id="type-sel" style="color:black">
<option value="local" data-trans="local">{{local}}</option>
<option value="local-media" data-trans="local-media">{{localMedia}}</option>
<option value="home" data-trans="home">{{home}}</option>
<option value="pub" data-trans="public">{{fed}}</option>
<option value="pub-media" data-trans="public-media">{{fedMedia}}</option>
<option value="dm" data-trans="dm">{{dm}}</option>
<option value="mix" data-trans="integrated">{{integratedTLDes}}</option>
<option value="plus" data-trans="plus">{{localPlusDes}}</option>
<option value="notf" data-trans="notification">{{notf}}</option>
</select>
<label data-trans="show_tl">{{showThisTL}}</label>
</div>
<div id="noauth" class="hide">{{showThisTL}}
<input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);" placeholder="e.g:mstdn.jp">
</div>
<div id="webview-add" class="hide">{{webviewWarn}}
</div>
</div>
<button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()" data-trans-i="add">
<i class="material-icons left">add</i>{{add}}
</button>
<br>
<br>
</div>
<!--検索-->
<div id="src-box" class="hide notf-box z-depth-4" style="width:500px">
<div class="input-field">
<select id="src-acct-sel" class="acct-sel" onchange="trend()"></select>
</div><div class="input-field">
<i class="material-icons prefix">search</i>
<input id="src" type="text" class="validate" style="width:calc( 60% - 40px);">
<label for="src" data-trans="src">{{search}}</label>
<button class="btn waves-effect indigo" style="width:calc( 40% - 40px);" onclick="src()" data-trans-i="src">
<i class="material-icons left">search</i>{{search}}
</button>
<br>
<br>
</div>
<div id="search">
<div id="src-contents">
</div>
</div>
</div>
<!--並べ替え-->
<div id="sort-box" class="hide">
<ul id="sort"></ul>
<div>
<button onclick="sort()" class="btn waves-effect nex" style="width:100%; max-width:300px;" data-trans-i="sort">
<i class="material-icons left">sort</i>{{sortSet}}
</button>
<button onclick="sortToggle()" class="btn waves-effect nex" style="width:100%; max-width:300px;" data-trans-i="close">
<i class="material-icons left">close</i>{{close}}
</button>
</div>
</div>
<!--リスト-->
<div id="list-box" class="hide notf-box z-depth-4">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="list-acct-sel" class="acct-sel"></select>
<label>{{selectAcct}}</label>
</div>
<!--menu-->
<div id="menu" class="z-depth-5" style="display:none">
<div id="menu-bar" class="drag-bar"></div>
<span class="cancel">
<i class="material-icons waves-effect" onclick="menu()" title="{{closeThisBox}}(X)">cancel</i>
</span>
<div id="menu-wrapper">
<div id="left-menu">
<div class="waves-effect active" onclick="addColumnMenu()" id="addColumnMenu"><i class="material-icons">add</i><span>{{addColumn}}</span></div>
<div class="waves-effect" onclick="sortMenu()" id="sortMenu"><i class="material-icons">sort</i><span>{{sortColumns}}</span></div>
<div class="waves-effect" onclick="searchMenu()" id="searchMenu"><i class="material-icons">search</i><span>{{search}}</span></div>
<div class="waves-effect" onclick="listMenu()" id="listMenu"><i class="material-icons">view_headline</i><span>{{list}}</span></div>
<div class="waves-effect" onclick="filterMenu()" id="filterMenu"><i class="material-icons">filter_list</i><span>{{filter}}</span></div>
<div class="waves-effect" onclick="help()"><i class="material-icons">help_outline</i><span>{{help}}</span></div>
<div class="waves-effect" onclick="location.href='index.html'"><i class="material-icons">refresh</i><span>{{f5}}</span></div>
</div>
<div id="right-menu">
<!--カラム追加-->
<div id="add-box" class="hide menu-content">
<div class="input-field"><span data-trans="your_acct">{{selectAcct}}</span>
<br>
<select id="add-acct-sel" class="acct-sel" style="color:black" onchange="addselCk()"></select>
<label></label>
</div>
<div style="float:left; padding-top:8px; padding-bottom:28px;">
<button class="btn waves-effect indigo" style="width:80px;" onclick="list()" data-trans-i="lists">
{{listLocale}}
</button>
<div class="input-field">
<div id="auth">
<input type="hidden" value="local" id="type-sel">
{{showThisTL}}
<div id="tltype">
<div class="type waves-effect active" data-type="local"><div><i class="material-icons">people_outline</i></div><span>{{local}}</span></div>
<div class="type waves-effect" data-type="local-media"><div><i class="material-icons">people_outline</i><i class="material-icons sub-icon">perm_media</i></div><span>{{localMedia}}</span></div>
<div class="type waves-effect" data-type="home"><div><i class="material-icons">home</i></div><span>{{home}}</span></div>
<div class="type waves-effect" data-type="pub"><div><i class="material-icons">language</i></div><span>{{fed}}</span></div>
<div class="type waves-effect" data-type="pub-media"><div><i class="material-icons">language</i><i class="material-icons sub-icon">perm_media</i></div><span>{{fedMedia}}</span></div>
<div class="type waves-effect" data-type="dm"><div><i class="material-icons">mail_outline</i></div><span>{{dm}}</span></div>
<div class="type waves-effect" data-type="mix"><div><i class="material-icons">merge_type</i></div><span>{{integratedTLDes}}</span></div>
<div class="type waves-effect" data-type="plus"><div><i class="material-icons">merge_type</i><i class="material-icons sub-icon">reply</i></div><span>{{localPlusDes}}</span></div>
<div class="type waves-effect" data-type="notf"><div><i class="material-icons">notifications</i></div><span>{{notf}}</span></div>
</div>
</div>
<div id="noauth" class="hide">{{showThisTL}}
<input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);" placeholder="e.g:mstdn.jp">
</div>
<div id="webview-add" class="hide">{{webviewWarn}}
</div>
</div>
<button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()" data-trans-i="add">
<i class="material-icons left">add</i>{{add}}
</button>
<br>
<br>
</div>
<!--検索-->
<div id="src-box" class="hide menu-content">
<div class="input-field">
<select id="src-acct-sel" class="acct-sel" onchange="trend()"></select>
</div><div class="input-field">
<i class="material-icons prefix">search</i>
<input id="src" type="text" class="validate" style="width:calc( 60% - 40px);">
<label for="src" data-trans="src">{{search}}</label>
<button class="btn waves-effect indigo" style="width:calc( 40% - 40px);" onclick="src()" data-trans-i="src">
<i class="material-icons left">search</i>{{search}}
</button>
<br>
<br>
</div>
<div id="search">
<div id="src-contents">
</div>
</div>
</div>
<!--並べ替え-->
<div id="sort-box" class="hide menu-content">
<ul id="sort"></ul>
<div>
<button onclick="sort()" class="btn waves-effect nex" style="width:100%; max-width:300px;" data-trans-i="sort">
<i class="material-icons left">sort</i>{{sortSet}}
</button>
</div>
</div>
<!--リスト-->
<div id="list-box" class="hide menu-content">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="list-acct-sel" class="acct-sel"></select>
<label>{{selectAcct}}</label>
</div>
<div style="float:left; padding-top:8px; padding-bottom:28px;">
<button class="btn waves-effect indigo" style="width:80px;" onclick="list()" data-trans-i="lists">
{{listLocale}}
</button>
</div>
<br><br>
<div id="lists"></div>
<div id="lists-user"></div>
<input type="text" style="width:150px" id="list-add" placeholder="{{name}}">
<button class="btn waves-effect" style="width:120px;" onclick="makeNewList()">{{makeNew}}</button>
</div>
<!--フィルター-->
<div id="filter-box" class="hide menu-content">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="filter-acct-sel" class="acct-sel"></select>
<label>{{selectAcct}}</label>
</div>
<div style="float:left; padding-top:8px; padding-bottom:28px;">
<button class="btn waves-effect indigo" style="width:80px;" onclick="filter()" data-trans-i="filters">
{{listLocale}}
</button>
</div>
<div id="filtered-words"></div>
<input type="hidden" id="filter-edit-id">
<input type="text" style="width:150px" id="filter-add-word" placeholder="{{filterWord}}"><br>
{{degree}}<br>
<input type="checkbox" class="filled-in" id="home_filter" value="home" />
<label for="home_filter">{{home}}</label>
<input type="checkbox" class="filled-in" id="local_filter" value="public" />
<label for="local_filter">{{local}}</label>
<input type="checkbox" class="filled-in" id="notf_filter" value="notifications" />
<label for="notf_filter">{{notf}}</label>
<input type="checkbox" class="filled-in" id="conv_filter" value="thread" />
<label for="conv_filter">{{conver}}</label><br>
{{option}}<br>
<input type="checkbox" class="filled-in" id="wholeword_filter" value="1" />
<label for="wholeword_filter">{{matchWord}}</label><br>
<span class="sml">{{warnMatchWord}}</span><br>
<input type="checkbox" class="filled-in" id="except_filter" value="1" />
<label for="except_filter">{{except}}</label><br>
<span class="sml">{{exceptWorn}}</span><br>
{{avalableBefore}}<span class="sml">{{warnAvBefore}}<b>{{warnAvBefore2}}</b></span><br><br>
<input type="number" style="width:50px" id="days_filter" placeholder="d" value="0">{{days}}
<input type="number" style="width:50px" id="hours_filter" placeholder="h" value="0">{{hours}}
<input type="number" style="width:50px" id="mins_filter" placeholder="m" value="0">{{mins}}
<button class="btn waves-effect" style="width:120px;" onclick="makeNewFilter()" id="add-filter-btn">{{add}}</button><br>
<span class="sml">{{warnOnIntegratedTL}}</span>
</div>
<br><br>
<div id="lists"></div>
<div id="lists-user"></div>
<input type="text" style="width:150px" id="list-add" placeholder="{{name}}">
<button class="btn waves-effect" style="width:120px;" onclick="makeNewList()">{{makeNew}}</button>
</div>
<!--フィルター-->
<div id="filter-box" class="hide notf-box z-depth-4">
<div class="input-field" style="width:calc( 100% - 100px);float:left">
<select id="filter-acct-sel" class="acct-sel"></select>
<label>{{selectAcct}}</label>
</div>
<div style="float:left; padding-top:8px; padding-bottom:28px;">
<button class="btn waves-effect indigo" style="width:80px;" onclick="filter()" data-trans-i="filters">
{{listLocale}}
</button>
</div>
<div id="filtered-words"></div>
<input type="hidden" id="filter-edit-id">
<input type="text" style="width:150px" id="filter-add-word" placeholder="{{filterWord}}"><br>
{{degree}}<br>
<input type="checkbox" class="filled-in" id="home_filter" value="home" />
<label for="home_filter">{{home}}</label>
<input type="checkbox" class="filled-in" id="local_filter" value="public" />
<label for="local_filter">{{local}}</label>
<input type="checkbox" class="filled-in" id="notf_filter" value="notifications" />
<label for="notf_filter">{{notf}}</label>
<input type="checkbox" class="filled-in" id="conv_filter" value="thread" />
<label for="conv_filter">{{conver}}</label><br>
{{option}}<br>
<input type="checkbox" class="filled-in" id="wholeword_filter" value="1" />
<label for="wholeword_filter">{{matchWord}}</label><br>
<span class="sml">{{warnMatchWord}}</span><br>
<input type="checkbox" class="filled-in" id="except_filter" value="1" />
<label for="except_filter">{{except}}</label><br>
<span class="sml">{{exceptWorn}}</span><br>
{{avalableBefore}}<span class="sml">{{warnAvBefore}}<b>{{warnAvBefore2}}</b></span><br><br>
<input type="text" style="width:50px" id="days_filter" placeholder="d" value="0">{{days}}
<input type="text" style="width:50px" id="hours_filter" placeholder="h" value="0">{{hours}}
<input type="text" style="width:50px" id="mins_filter" placeholder="m" value="0">{{mins}}
<button class="btn waves-effect" style="width:120px;" onclick="makeNewFilter()" id="add-filter-btn">{{add}}</button><br>
<span class="sml">{{warnOnIntegratedTL}}</span>
</div>
<a onclick="about()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">info</i>{{about}}
</a>&nbsp;|&nbsp;
<a onclick="bottomReverse()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">swap_horiz</i>{{reverse}}
</a>
</div>
<div id="main">
<!--TLのTL-->
@@ -713,53 +784,26 @@ var tlid=0;
<div id="bottom" class="reverse">
<div class="leftside reverse">
<div id="dambox">
<input type="text" id="posttgl" placeholder="{{toot}}" style="height:2rem">
</div>
<button id="posttgl" class="btn waves-effect indigo" style="width: 100%;height: 2.5rem;line-height: 0;margin: 0;">
<i class="material-icons" style="position: relative; top: 5px; font-size: 1.5rem; text-align: center; margin-right: 10px;">edit</i>{{toot}}
</button>
</div>
<div class="leftside reverse" id="group">
<div class="btnsgroup"><span class="grouptitle">Columns:</span>
<a onclick="addToggle()" class="nex waves-effect" data-trans-i="add" id="add-tgl">
<i class="material-icons nex" title="{{addColumn}}" data-trans-title="column_add">add</i>
</a>
<a onclick="sortToggle()" class="nex waves-effect">
<i class="material-icons nex big-icon" title="{{sortColumns}}" data-trans-title="sort">sort</i>
</a>
</div>
<div class="btnsgroup"><span class="grouptitle">Accounts:</span>
<a href="acct.html" class="nex waves-effect">
<i class="material-icons nex big-icon" title="{{acctMan}}(Ctrl+Shift+M)" data-trans-title="manager">account_circle</i>
</a>
<a onclick="srcToggle()" class="nex waves-effect" id="src-tgl">
<i class="material-icons" title="{{search}}" data-trans-title="src">search</i>
</a>
<a onclick="listToggle()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="{{list}}" data-trans-title="list">view_headline</i>
</a>
<a onclick="filterToggle()" class="nex waves-effect" id="filter-tgl">
<i class="material-icons" title="{{filter}}" data-trans-title="filter">filter_list</i>
</a>
</div>
<div class="btnsgroup"><span class="grouptitle">Preferences:</span>
<a onclick="bottomReverse()" class="nex waves-effect">
<i class="material-icons nex" title="{{reverse}}" data-trans-title="reverse">swap_horiz</i>
</a>
<a href="setting.html" class="nex waves-effect">
<i class="material-icons nex" title="{{setting}}(Ctrl+Shift+S)" data-trans-title="setting">settings</i>
</a>
<a href="index.html" class="nex mize waves-effect">
<i class="material-icons nex" title="{{f5}}(F5/⌘+R)" data-trans-title="reload">refresh</i>
</a>
<a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="{{nanoDes}}TheDesk Nano" data-trans-title="nano_desp">remove_from_queue</i>
</a>
<a onclick="window.open('https://astarte.thedesk.top');" class="setting nex waves-effect" target="_blank" id="ranking-btn" style="display:none;">
<i class="material-icons nex" title="アスタルテランキング">timeline</i>
</a>
<a href="https://docs.thedesk.top" class="setting nex waves-effect" target="_blank">
<i class="material-icons nex" title="{{help}}">help_outline</i>
</a>
</div>
</div>
</div>
<div class="btnsgroup">
<a href="acct.html" class="nex waves-effect">
<i class="material-icons nex big-icon" title="{{acctMan}}(Ctrl+Shift+M)">account_circle</i>
</a>
<a href="setting.html" class="nex waves-effect">
<i class="material-icons nex" title="{{setting}}(Ctrl+Shift+S)">settings</i>
</a>
<a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="{{nanoDes}}TheDesk Nano" data-trans-title="nano_desp">remove_from_queue</i>
</a>
<a onclick="menu()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="{{list}}">apps</i>
</a>
</div>
</div></div>
<div>
<div id="tips-menu">
<div class="btnsgroup" style="height:34px"><span class="grouptitle">Tips:</span>
@@ -799,9 +843,11 @@ var tlid=0;
<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/tl/misskeyparse.js"></script>
<script type="text/javascript" src="../../js/tl/dm.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/poll.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>
@@ -834,4 +880,5 @@ var tlid=0;
<script type="text/javascript" src="../../js/userdata/prof-edit.js"></script>
<script type="text/javascript" src="../../js/emoji/emojipack.js"></script>
<script type="text/javascript" src="../../js/emoji/default-emoji.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/ui/menu.js"></script>

View File

@@ -0,0 +1,21 @@
{
"list": "crwdns365:0crwdne365:0",
"back": "crwdns366:0crwdne366:0",
"add": "crwdns367:0crwdne367:0",
"codesetupwarn": "crwdns368:0crwdne368:0",
"codesetup": "crwdns369:0crwdne369:0",
"mainacct": "crwdns370:0crwdne370:0",
"selacct": "crwdns371:0crwdne371:0",
"codepastewarn": "crwdns372:0crwdne372:0",
"codepaste": "crwdns373:0crwdne373:0",
"domain": "crwdns374:0crwdne374:0",
"connect": "crwdns375:0crwdne375:0",
"toots": "crwdns376:0crwdne376:0",
"users": "crwdns377:0crwdne377:0",
"users2": "crwdns378:0crwdne378:0",
"safety": "crwdns379:0crwdne379:0",
"ver": "crwdns380:0crwdne380:0",
"ko": "crwdns381:0crwdne381:0",
"thisismisskey": "crwdns382:0crwdne382:0",
"misskeylogin": "crwdns383:0crwdne383:0"
}

View File

@@ -4,6 +4,7 @@
"showSelectProf":"Show profile of the selecting account",
"closethisbox":"Close this box",
"toot":"Toot",
"post-new":"Post new",
"nsfwDes":"Mark media as sensitive",
"cwDes":"Hide text behind warning",
"selfile":"Attach..",
@@ -43,6 +44,13 @@
"thingsEmoji":"Emojis of tools",
"symbolEmoji":"Emojis of symbols",
"flagsEmoji":"Emojis of flags",
"poll":"Poll",
"pollDdisabled":"Polls: Disabled",
"pollProvider":"Provider of Poll",
"polluntil":"Hide 'votes' count until people vote it.",
"choice":"Choice",
"pollmulti":"Multiple select",
"expires_in":"Expires in...(sec)",
"contextBefore":"Context before this toot",
"thisToot":"This toot",
"contextAfter":"Context after this toot",
@@ -97,6 +105,7 @@
"supportme":"Support TheDesk!",
"TheDeskDes":"TheDesk has no ad, you need no charge to unlock premium features. We need your friendly support!",
"EntySupport":"Support on Enty",
"PixivSupport":"Support on Pixiv FANBOX",
"AWLSupport":"Amazon Wish List",
"SendAmazonGift1":"Give me Amazon Gift Card:",
"SendAmazonGift2":"",
@@ -107,15 +116,15 @@
"fed":"Federated",
"fedMedia":"Federated(Media)",
"dm":"Direct Message",
"integratedTLDes":"Integrated(Local and Home)",
"localPlusDes":"Integrated(Local and replies and BT on Home)",
"integratedTLDes":"Integrated(Local/Home)",
"localPlusDes":"LTL+Reply+BT",
"notf":"Notifications",
"showThisTL":"Show this TL:",
"webviewWarn":"TweetDeck with customed TJDeck(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>). Keyboard shortcuts will irritate you. When you feel so, you check 'Prefer WebView' on top of the column.",
"add":"Add",
"search":"Search",
"sortSet":"Sort",
"selectAcct":"Select an account",
"selectAcct":"Account(Scroll to show all)",
"listLocale":"List",
"filterWord":"Filtering words",
"degree":"Filter contexts",
@@ -131,19 +140,21 @@
"days":"days",
"hours":"hours",
"mins":"minutes",
"secs":"seconds",
"warnOnIntegratedTL":"Integrated TL/Plus TL will hide both Home-filtering words and Local-filtering words.",
"helloTheDesk":"<h3>Welcome to TheDesk</h3><br><a href=\"acct.html\">Add an account</a> or click <i class=\"material-icons\">add</i> to add a column.",
"helloTheDesk":"<h3>Welcome to TheDesk</h3><br><a href=\"acct.html\">Add an account</a> or click <i class=\"material-icons\">apps</i> to add a column.",
"addColumn":"Add a column",
"sortColumns":"Sort",
"acctMan":"Account Manager",
"filter":"Filter",
"setting":"Preferences",
"reverse":"Toot box reverse",
"f5":"Super Reload",
"reverse":"Toot button layout reverse",
"f5":"Reload TL",
"nanoDes":"The smallest Mastodon,",
"verTips":"Version",
"clockTips":"Clock",
"ramTips":"RAM status",
"changeTips":"Change Tips",
"help":"Help"
"help":"Help",
"about":"About TheDesk"
}

View File

@@ -3,6 +3,7 @@
"close":"Close",
"showSelectProf":"選択したアカウントのプロフィールを表示",
"closethisbox":"このボックスを閉じる",
"post-new":"投稿",
"toot":"トゥート",
"nsfwDes":"画像に制限を付与",
"cwDes":"コンテンツワーニング(トゥートを表示する前にメッセージで隠す)",
@@ -43,6 +44,13 @@
"thingsEmoji":"もの",
"symbolEmoji":"記号",
"flagsEmoji":"国旗",
"poll":"アンケート",
"pollDdisabled":"アンケートを使用しない",
"pollProvider":"アンケートのプロバイダ",
"choice":"選択肢",
"polluntil":"投票するまで票数を隠す",
"pollmulti":"複数選択を許可",
"expires_in":"有効期限(秒)",
"contextBefore":"これより前の会話",
"thisToot":"対象のトゥート",
"contextAfter":"これより後の会話",
@@ -97,6 +105,7 @@
"supportme":"ご支援ください。",
"TheDeskDes":"TheDeskは営利目的ではないため、有料機能や広告は一切ありません。<br>皆様のあたたかいご支援のもとで製作されています。",
"EntySupport":"Entyで支援",
"PixivSupport":"Pixiv FANBOXで支援",
"AWLSupport":"Amazonほしいものリスト",
"SendAmazonGift1":"",
"SendAmazonGift2":"にAmazonギフトカードを送る",
@@ -108,14 +117,14 @@
"fedMedia":"連合(メディア)",
"dm":"ダイレクトメッセージ",
"integratedTLDes":"統合(ローカルとホーム)",
"localPlusDes":"統合(ローカルとブースト・リプライ)",
"localPlusDes":"統合(LTL+BT+返信)",
"notf":"通知",
"showThisTL":"表示するタイムライン",
"webviewWarn":"TweetDeckを表示します。TJDeckをカスタムしたものが読み込まれます(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>)。キーボードショートカットが邪魔をするので、文字入力時はカラムの「WebView優先」にチェックを入れてください。",
"add":"追加",
"search":"検索",
"sortSet":"並べ替え設定",
"selectAcct":"アカウントを選択",
"selectAcct":"選択(スクロールで全選択肢表示)",
"filterWord":"フィルターワード",
"listLocale":"一覧",
"degree":"適応範囲",
@@ -131,19 +140,21 @@
"days":"日",
"hours":"時間",
"mins":"分",
"secs":"秒",
"warnOnIntegratedTL":"Integrated TL/Plus TLは、公開/ホームのフィルターワードが合算されて適応されます。どちらか一方の指定でも非表示になります。",
"helloTheDesk":"<h3>Welcome to TheDesk</h3><br><a href=\"acct.html\">アカウントを追加</a>するか下の<i class=\"material-icons\">add</i>ボタンよりカラムを追加してください。",
"helloTheDesk":"<h3>Welcome to TheDesk</h3><br><a href=\"acct.html\">アカウントを追加</a>するか下の<i class=\"material-icons\">apps</i>ボタンよりカラムを追加してください。",
"addColumn":"カラム追加",
"sortColumns":"カラム一覧/並べ替え",
"acctMan":"アカウントマネージャー",
"filter":"フィルター",
"setting":"設定",
"reverse":"トゥートバーの左右入れ替え",
"f5":"スーパーリロード",
"reverse":"トゥートボタンの左右入れ替え",
"f5":"TL再読込",
"nanoDes":"最小のマストドン。",
"verTips":"バージョン",
"clockTips":"時計",
"ramTips":"システムメモリ容量",
"changeTips":"Tips変更",
"help":"ヘルプ"
"help":"ヘルプ",
"about":"このソフトについて"
}

View File

@@ -0,0 +1,158 @@
{
"draghere": "crwdns384:0crwdne384:0",
"close": "crwdns385:0crwdne385:0",
"showSelectProf": "crwdns386:0crwdne386:0",
"closethisbox": "crwdns387:0crwdne387:0",
"toot": "crwdns388:0crwdne388:0",
"post-new": "crwdns2402:0crwdne2402:0",
"nsfwDes": "crwdns389:0crwdne389:0",
"cwDes": "crwdns390:0crwdne390:0",
"selfile": "crwdns391:0crwdne391:0",
"adobephoto": "crwdns392:0crwdne392:0",
"insertEmoji": "crwdns393:0crwdne393:0",
"NPSpotify": "crwdns1880:0crwdne1880:0",
"NPiTunes": "crwdns2404:0crwdne2404:0",
"schedule": "crwdns1884:0crwdne1884:0",
"postat": "crwdns1886:0crwdne1886:0",
"scheduleWarn": "crwdns1888:0crwdne1888:0",
"clearToot": "crwdns395:0crwdne395:0",
"replyMode": "crwdns396:0crwdne396:0",
"no": "crwdns397:0crwdne397:0",
"yes": "crwdns398:0crwdne398:0",
"temp": "crwdns399:0crwdne399:0",
"nothing": "crwdns400:0crwdne400:0",
"vis": "crwdns401:0crwdne401:0",
"cwtext": "crwdns402:0crwdne402:0",
"selectVis": "crwdns403:0crwdne403:0",
"publicJP": "crwdns404:0crwdne404:0",
"unlistedJP": "crwdns405:0crwdne405:0",
"privateJP": "crwdns406:0crwdne406:0",
"localJP": "crwdns407:0crwdne407:0",
"sectoot": "crwdns1890:0crwdne1890:0",
"directJP": "crwdns408:0crwdne408:0",
"emojiWarn": "crwdns409:0crwdne409:0",
"emojiInsertWarn": "crwdns410:0crwdne410:0",
"refreshEmoji": "crwdns411:0crwdne411:0",
"closeThisBox": "crwdns412:0crwdne412:0",
"showThisEmoji": "crwdns413:0crwdne413:0",
"customEmoji": "crwdns414:0crwdne414:0",
"peopleEmoji": "crwdns415:0crwdne415:0",
"natureEmoji": "crwdns416:0crwdne416:0",
"foodEmoji": "crwdns417:0crwdne417:0",
"activityEmoji": "crwdns418:0crwdne418:0",
"placeEmoji": "crwdns419:0crwdne419:0",
"thingsEmoji": "crwdns420:0crwdne420:0",
"symbolEmoji": "crwdns421:0crwdne421:0",
"flagsEmoji": "crwdns422:0crwdne422:0",
"poll": "crwdns2406:0crwdne2406:0",
"pollDdisabled": "crwdns2408:0crwdne2408:0",
"pollProvider": "crwdns2410:0crwdne2410:0",
"polluntil": "crwdns2412:0crwdne2412:0",
"choice": "crwdns2414:0crwdne2414:0",
"pollmulti": "crwdns2416:0crwdne2416:0",
"expires_in": "crwdns2418:0crwdne2418:0",
"contextBefore": "crwdns423:0crwdne423:0",
"thisToot": "crwdns424:0crwdne424:0",
"contextAfter": "crwdns425:0crwdne425:0",
"beforeLTL": "crwdns426:0crwdne426:0",
"beforeUTL": "crwdns427:0crwdne427:0",
"favedPeople": "crwdns428:0crwdne428:0",
"btedPeople": "crwdns429:0crwdne429:0",
"useOtherAcct1": "crwdns430:0crwdne430:0",
"useOtherAcct2": "crwdns431:0crwdne431:0",
"reply": "crwdns432:0crwdne432:0",
"bt": "crwdns433:0crwdne433:0",
"favRegist": "crwdns434:0crwdne434:0",
"openBrowser": "crwdns435:0crwdne435:0",
"screenshot": "crwdns436:0crwdne436:0",
"copyURL": "crwdns437:0crwdne437:0",
"embed": "crwdns438:0crwdne438:0",
"toots": "crwdns439:0crwdne439:0",
"follow": "crwdns440:0crwdne440:0",
"follower": "crwdns441:0crwdne441:0",
"timeline": "crwdns442:0crwdne442:0",
"operateOtherAcct": "crwdns443:0crwdne443:0",
"list": "crwdns444:0crwdne444:0",
"makeNew": "crwdns445:0crwdne445:0",
"blocks": "crwdns446:0crwdne446:0",
"mutes": "crwdns447:0crwdne447:0",
"block": "crwdns448:0crwdne448:0",
"mute": "crwdns449:0crwdne449:0",
"domainBlock": "crwdns450:0crwdne450:0",
"editProf": "crwdns451:0crwdne451:0",
"change": "crwdns1892:0crwdne1892:0",
"followReq": "crwdns452:0crwdne452:0",
"likeHimOrHer": "crwdns453:0crwdne453:0",
"endorse": "crwdns454:0crwdne454:0",
"openinbrowser": "crwdns455:0crwdne455:0",
"frc": "crwdns456:0crwdne456:0",
"more": "crwdns457:0crwdne457:0",
"revoverJP": "crwdns458:0crwdne458:0",
"warnUseOtherAcct": "crwdns459:0crwdne459:0",
"revoverJPde": "crwdns460:0crwdne460:0",
"or": "crwdns461:0crwdne461:0",
"openProf": "crwdns462:0crwdne462:0",
"warnListRegist": "crwdns463:0crwdne463:0",
"blockDomain": "crwdns464:0crwdne464:0",
"name": "crwdns465:0crwdne465:0",
"note": "crwdns466:0crwdne466:0",
"editProfImg": "crwdns467:0crwdne467:0",
"editHeader": "crwdns468:0crwdne468:0",
"likeUserDes": "crwdns469:0crwdne469:0",
"get": "crwdns470:0crwdne470:0",
"historyBack": "crwdns471:0crwdne471:0",
"empUser": "crwdns472:0crwdne472:0",
"supportme": "crwdns473:0crwdne473:0",
"TheDeskDes": "crwdns474:0crwdne474:0",
"EntySupport": "crwdns475:0crwdne475:0",
"AWLSupport": "crwdns476:0crwdne476:0",
"SendAmazonGift1": "crwdns477:0crwdne477:0",
"SendAmazonGift2": "crwdns478:0crwdne478:0",
"sendSushi": "crwdns479:0crwdne479:0",
"local": "crwdns480:0crwdne480:0",
"localMedia": "crwdns481:0crwdne481:0",
"home": "crwdns482:0crwdne482:0",
"fed": "crwdns483:0crwdne483:0",
"fedMedia": "crwdns484:0crwdne484:0",
"dm": "crwdns485:0crwdne485:0",
"integratedTLDes": "crwdns486:0crwdne486:0",
"localPlusDes": "crwdns487:0crwdne487:0",
"notf": "crwdns488:0crwdne488:0",
"showThisTL": "crwdns489:0crwdne489:0",
"webviewWarn": "crwdns490:0crwdne490:0",
"add": "crwdns491:0crwdne491:0",
"search": "crwdns492:0crwdne492:0",
"sortSet": "crwdns493:0crwdne493:0",
"selectAcct": "crwdns494:0crwdne494:0",
"listLocale": "crwdns495:0crwdne495:0",
"filterWord": "crwdns496:0crwdne496:0",
"degree": "crwdns497:0crwdne497:0",
"conver": "crwdns498:0crwdne498:0",
"option": "crwdns499:0crwdne499:0",
"matchWord": "crwdns500:0crwdne500:0",
"warnMatchWord": "crwdns501:0crwdne501:0",
"except": "crwdns502:0crwdne502:0",
"exceptWorn": "crwdns503:0crwdne503:0",
"avalableBefore": "crwdns504:0crwdne504:0",
"warnAvBefore": "crwdns505:0crwdne505:0",
"warnAvBefore2": "crwdns506:0crwdne506:0",
"days": "crwdns507:0crwdne507:0",
"hours": "crwdns508:0crwdne508:0",
"mins": "crwdns509:0crwdne509:0",
"secs": "crwdns2420:0crwdne2420:0",
"warnOnIntegratedTL": "crwdns510:0crwdne510:0",
"helloTheDesk": "crwdns511:0crwdne511:0",
"addColumn": "crwdns512:0crwdne512:0",
"sortColumns": "crwdns513:0crwdne513:0",
"acctMan": "crwdns514:0crwdne514:0",
"filter": "crwdns515:0crwdne515:0",
"setting": "crwdns516:0crwdne516:0",
"reverse": "crwdns517:0crwdne517:0",
"f5": "crwdns518:0crwdne518:0",
"nanoDes": "crwdns519:0crwdne519:0",
"verTips": "crwdns520:0crwdne520:0",
"clockTips": "crwdns521:0crwdne521:0",
"ramTips": "crwdns522:0crwdne522:0",
"changeTips": "crwdns523:0crwdne523:0",
"help": "crwdns1894:0crwdne1894:0"
}

View File

@@ -10,6 +10,8 @@
"backup":"Import and export of preferences",
"import":"Import",
"export":"Export",
"hardwareAcceleration":"Disable hardware acceleration",
"hardwareAccelerationWarn":"Auto restarted",
"theme":"Themes",
"popup":"Popup notification(on Windows)",
"popupwarn":"Hide to set \"0\"",
@@ -17,8 +19,10 @@
"nativenotf":"Native notification",
"nnwarn":"This does not work on Windows Portable ver.",
"nntest":"Notification test",
"minwidth":"Minimam width of columns",
"minwidth":"Minimum width of columns",
"minwidthwarn":"Scroll bar will be shown when your window size is more than ammounts of columns.",
"fixwidth":"Minimum width of TweetDeck browser",
"fixwidthwarn":"",
"above":"above",
"font":"Font",
"fontwarn":"Select your favorite font to 'Select'",
@@ -26,6 +30,20 @@
"savefolder":"Folder to save",
"savefolderwarn":"TheDesk uses this value when it try to save pictures or take screenshots.",
"absolute":"absolute value",
"themeSel":"Select theme",
"customtheme":"Edit and add custom themes",
"customthemeDirection":"Color scheme",
"primary":"Background color",
"secondarycolor":"Background of components",
"text":"Text color",
"accent":"Background of boosts",
"add_new":"Add new",
"name":"Name",
"desc":"About this theme",
"customShare":"Share this code with other TheDesk. Do not share this code with MiAS.",
"customImport":"Import of custom themes",
"delete":"Delete",
"cImpWarn":"Get more themes on <a href=\"https://assets.msky.cafe/\" target=\"_blank\">MiAS</a>",
"timeline":"Timeline Preferences",
"timemode":"Time format",
"relativetime":"Relative format:\"1 minutes ago\",\"3 days ago\"",
@@ -63,8 +81,10 @@
"letters":"letters",
"or":"or",
"imgheight":"Height of images",
"imgheightwarn":"Option:Set \"full\" to uncrop.",
"ticker":"Enable #InstanceTicker",
"tickerwarn":"Show colorful stickers about tooters' server. <a href=\"https://cdn.weep.me/mastodon/\">About #InstanceTicker</a> Copyright 2018 weepjp, kyori19.",
"tickerwarn":"Show colorful stickers about the server. <a href=\"https://cdn.weep.me/mastodon/\">About #InstanceTicker</a> Copyright 2018 weepjp, kyori19.",
"animation":"Animation of timelines",
"post":"Posting Preferences",
"autocw":"Alert before posting a long toot.",
"autocwwarn":"Show dialog whether you make too-long text hidden.",
@@ -85,6 +105,7 @@
"simple":"Only URL",
"mention":"URL and acct(mention to the user)",
"full":"URL, text and acct(mention to the user)",
"notqt":"Disabled(Hide buttons on TLs)",
"main":"Default accounts of actions",
"mainwarn":"Main account can be set on Account Manager.",
"lastacct":"Account you used recently",
@@ -108,7 +129,7 @@
"empcolorwarn":"Use this color to emphasis",
"spotify":"Spotify and NowPlaying Preferences",
"npProvider":"NowPlaying Provider(Windows)",
"npPeoviderWarn":"macOS and Linux are not supported. AIMP and iTunes were checked by developer. <br>CAD:foobar2000, MusicBee,J. River Media Center, Media Jukebox<br>WLM:Last.fm Client, TTPlayer, OpenPandora, Zune.<br> For foobar2000, <a href=\"http://poiru.github.com/foo-cad/\">foo_cad plugin</a> is required.",
"npPeoviderWarn":"macOS and Linux are not supported. AIMP and iTunes were checked by developer. <br>CAD:foobar2000, MusicBee,J. River Media Center, Media Jukebox<br>WLM:Last.fm Client, TTPlayer, OpenPandora, Zune.<br> For foobar2000, <a href=\"http://poiru.github.com/foo-cad/\">foo_cad plugin</a> is required. And MusicBee requires CAD.",
"spotifynote1":"Click ",
"spotifynote2":"icon to NowPlaying",
"link":"Account Connection",

View File

@@ -10,6 +10,8 @@
"backup":"設定のインポートとエクスポート",
"import":"インポート",
"export":"エクスポート",
"hardwareAcceleration":"ハードウェアアクセラレーションの無効化",
"hardwareAccelerationWarn":"表示(特に設定画面)が乱れる場合に「はい」を選択してください。自動で再起動します。",
"theme":"テーマの設定",
"popup":"新規通知のポップアップお知らせの表示秒数",
"popupwarn":"0に設定すると表示されません",
@@ -19,6 +21,8 @@
"nntest":"通知テスト",
"minwidth":"マルチカラムの最低横幅",
"minwidthwarn":"画面全体の横幅÷コラム数がこの値を超えた時、横スクロールとなります。",
"fixwidth":"TweetDeckの限定の最低横幅",
"fixwidthwarn":"",
"above":"以上",
"font":"フォント",
"fontwarn":"「選択」を押してフォントを選んでください。",
@@ -26,6 +30,20 @@
"savefolder":"デフォルトの保存先",
"savefolderwarn":"画像ダウンロードやスクリーンショットに影響します。",
"absolute":"絶対指定",
"themeSel":"テーマの選択",
"customtheme":"カスタムテーマの作成・編集",
"customthemeDirection":"色の系統",
"primary":"全体の背景色など",
"secondarycolor":"補助要素に使われる背景色",
"text":"テキストの色",
"accent":"ブーストの背景色など",
"add_new":"新規作成",
"name":"名前",
"desc":"説明",
"customShare":"このコードは他のTheDeskなどとシェアできます。このコードをMiASに貼ることはご遠慮ください。詳細:<a href=\"https://thedesk.top/mias.html\" target=\"_blank\">テーマ互換性</a>",
"customImport":"カスタムテーマのインポート",
"delete":"削除",
"cImpWarn":"<a href=\"https://assets.msky.cafe/\" target=\"_blank\">MiAS</a>上の80を超えるテーマを張り付けることもできます。",
"timeline":"タイムラインの設定",
"timemode":"時間表記設定",
"relativetime":"相対時間の例:\"1分前\",\"3日前\"",
@@ -63,8 +81,10 @@
"letters":"文字",
"or":"または",
"imgheight":"画像の高さ",
"imgheightwarn":"オプション:「full」と指定すると全ての画像をクロップしません。",
"ticker":"#InstanceTickerを使う",
"tickerwarn":"トゥートした人の所属サーバーをわかりやすく彩ります(自サーバー以外のトゥート向け)。<a href=\"https://cdn.weep.me/mastodon/\">#InstanceTickerについて</a> Copyright 2018 weepjp, kyori19.",
"animation":"タイムラインのアニメーション",
"post":"投稿設定",
"autocw":"長文投稿時に警告",
"autocwwarn":"下で指定した以上のトゥートを投稿するときにCWするかのダイアログを表示します。",
@@ -85,6 +105,7 @@
"simple":"URLのみ",
"mention":"URLとアカウント名(相手に通知)",
"full":"本文・URL・アカウント名",
"notqt":"使わない(TL上にボタンも表示されません)",
"main":"投稿後や起動時のアカウント",
"mainwarn":"メインアカウントはアカウント設定で指定できます。投稿以外のアカウント選択にも影響します。",
"lastacct":"最後に使用したアカウント",
@@ -108,7 +129,7 @@
"empcolorwarn":"強調色(テーマによって異なります。)",
"spotify":"SpotifyとNowPlayingの設定",
"npProvider":"NowPlayingのソース(Windows)",
"npPeoviderWarn":"macOSやLinuxでは動作しません。AIMPとiTunes以外未検証です。<br>foobar2000, MusicBee,J. River Media Center, Media JukeboxはCADを、Last.fm Client, TTPlayer, OpenPandora, ZuneはWLMを選んでください。<br>ただし、foobar2000は<a href=\"http://poiru.github.com/foo-cad/\">foo_cad plugin</a>が必要です。",
"npPeoviderWarn":"macOSやLinuxでは動作しません。AIMPとiTunes以外未検証です。<br>foobar2000, MusicBee,J. River Media Center, Media JukeboxはCADを、Last.fm Client, TTPlayer, OpenPandora, ZuneはWLMを選んでください。<br>ただし、foobar2000は<a href=\"http://poiru.github.com/foo-cad/\">foo_cad plugin</a>が必要です。MusicBeeもCADを有効にする必要があります。",
"spotifynote1":"",
"spotifynote2":"ボタンから簡単にNowPlayingができます。",
"link":"アカウントの連携",

View File

@@ -0,0 +1,173 @@
{
"setting": "crwdns524:0crwdne524:0",
"set": "crwdns525:0crwdne525:0",
"yes": "crwdns526:0crwdne526:0",
"no": "crwdns527:0crwdne527:0",
"change": "crwdns528:0crwdne528:0",
"select": "crwdns1896:0crwdne1896:0",
"env": "crwdns529:0crwdne529:0",
"setlang": "crwdns530:0crwdne530:0",
"backup": "crwdns531:0crwdne531:0",
"import": "crwdns532:0crwdne532:0",
"export": "crwdns533:0crwdne533:0",
"theme": "crwdns534:0crwdne534:0",
"popup": "crwdns1898:0crwdne1898:0",
"popupwarn": "crwdns536:0crwdne536:0",
"s": "crwdns537:0crwdne537:0",
"nativenotf": "crwdns538:0crwdne538:0",
"nnwarn": "crwdns539:0crwdne539:0",
"nntest": "crwdns540:0crwdne540:0",
"minwidth": "crwdns2376:0crwdne2376:0",
"minwidthwarn": "crwdns542:0crwdne542:0",
"fixwidth": "crwdns2378:0crwdne2378:0",
"fixwidthwarn": "crwdns2380:0crwdne2380:0",
"above": "crwdns543:0crwdne543:0",
"font": "crwdns544:0crwdne544:0",
"fontwarn": "crwdns1900:0crwdne1900:0",
"fontsize": "crwdns546:0crwdne546:0",
"savefolder": "crwdns547:0crwdne547:0",
"savefolderwarn": "crwdns548:0crwdne548:0",
"absolute": "crwdns549:0crwdne549:0",
"themeSel": "crwdns2422:0crwdne2422:0",
"customtheme": "crwdns2424:0crwdne2424:0",
"customthemeDirection": "crwdns2426:0crwdne2426:0",
"primary": "crwdns2428:0crwdne2428:0",
"secondarycolor": "crwdns2430:0crwdne2430:0",
"text": "crwdns2432:0crwdne2432:0",
"accent": "crwdns2434:0crwdne2434:0",
"add_new": "crwdns2436:0crwdne2436:0",
"name": "crwdns2438:0crwdne2438:0",
"desc": "crwdns2440:0crwdne2440:0",
"customShare": "crwdns2442:0crwdne2442:0",
"customImport": "crwdns2444:0crwdne2444:0",
"timeline": "crwdns550:0crwdne550:0",
"timemode": "crwdns551:0crwdne551:0",
"relativetime": "crwdns552:0crwdne552:0",
"absolutetime": "crwdns553:0crwdne553:0",
"mixtime": "crwdns554:0crwdne554:0",
"relativesel": "crwdns555:0crwdne555:0",
"absolutesel": "crwdns1902:0crwdne1902:0",
"doublesel": "crwdns557:0crwdne557:0",
"mixsel": "crwdns558:0crwdne558:0",
"locale": "crwdns1904:0crwdne1904:0",
"localewarn": "crwdns1906:0crwdne1906:0",
"nswf": "crwdns561:0crwdne561:0",
"nsfwwarn": "crwdns562:0crwdne562:0",
"cw": "crwdns563:0crwdne563:0",
"replyct": "crwdns564:0crwdne564:0",
"replyct_hidden": "crwdns565:0crwdne565:0",
"replyct_full": "crwdns566:0crwdne566:0",
"gif": "crwdns567:0crwdne567:0",
"box": "crwdns568:0crwdne568:0",
"boxyes": "crwdns569:0crwdne569:0",
"boxabs": "crwdns570:0crwdne570:0",
"boxno": "crwdns571:0crwdne571:0",
"tag": "crwdns572:0crwdne572:0",
"tagfed": "crwdns573:0crwdne573:0",
"taglocal": "crwdns574:0crwdne574:0",
"via": "crwdns575:0crwdne575:0",
"mouseover": "crwdns576:0crwdne576:0",
"mouseoverwarn": "crwdns577:0crwdne577:0",
"mv": "crwdns578:0crwdne578:0",
"mvclick": "crwdns579:0crwdne579:0",
"notfmarker": "crwdns580:0crwdne580:0",
"autofold": "crwdns581:0crwdne581:0",
"autofoldwarn": "crwdns582:0crwdne582:0",
"lines": "crwdns583:0crwdne583:0",
"letters": "crwdns584:0crwdne584:0",
"or": "crwdns585:0crwdne585:0",
"imgheight": "crwdns586:0crwdne586:0",
"ticker": "crwdns1908:0crwdne1908:0",
"tickerwarn": "crwdns1910:0crwdne1910:0",
"animation": "crwdns2446:0crwdne2446:0",
"post": "crwdns587:0crwdne587:0",
"autocw": "crwdns588:0crwdne588:0",
"autocwwarn": "crwdns589:0crwdne589:0",
"defaultcw": "crwdns590:0crwdne590:0",
"cws": "crwdns591:0crwdne591:0",
"defaultvis": "crwdns592:0crwdne592:0",
"public": "crwdns593:0crwdne593:0",
"unlisted": "crwdns594:0crwdne594:0",
"private": "crwdns595:0crwdne595:0",
"direct": "crwdns596:0crwdne596:0",
"memory": "crwdns1912:0crwdne1912:0",
"useapi": "crwdns1914:0crwdne1914:0",
"postimg": "crwdns599:0crwdne599:0",
"showurl": "crwdns600:0crwdne600:0",
"nourl": "crwdns601:0crwdne601:0",
"disabled": "crwdns602:0crwdne602:0",
"quote": "crwdns603:0crwdne603:0",
"simple": "crwdns604:0crwdne604:0",
"mention": "crwdns605:0crwdne605:0",
"full": "crwdns606:0crwdne606:0",
"main": "crwdns607:0crwdne607:0",
"mainwarn": "crwdns608:0crwdne608:0",
"lastacct": "crwdns609:0crwdne609:0",
"usemainacct": "crwdns610:0crwdne610:0",
"secondary": "crwdns1916:0crwdne1916:0",
"secwarn": "crwdns1918:0crwdne1918:0",
"nothing": "crwdns1920:0crwdne1920:0",
"localonly": "crwdns1922:0crwdne1922:0",
"keysc": "crwdns611:0crwdne611:0",
"iks": "crwdns612:0crwdne612:0",
"okswarn": "crwdns613:0crwdne613:0",
"muteemp": "crwdns614:0crwdne614:0",
"climute": "crwdns615:0crwdne615:0",
"cliemp": "crwdns616:0crwdne616:0",
"cliwarn": "crwdns617:0crwdne617:0",
"enter": "crwdns618:0crwdne618:0",
"wordmute": "crwdns619:0crwdne619:0",
"wordemp": "crwdns620:0crwdne620:0",
"useremp": "crwdns621:0crwdne621:0",
"useerempwarn": "crwdns622:0crwdne622:0",
"empcolorwarn": "crwdns623:0crwdne623:0",
"spotify": "crwdns624:0crwdne624:0",
"npProvider": "crwdns2354:0crwdne2354:0",
"npPeoviderWarn": "crwdns2356:0crwdne2356:0",
"spotifynote1": "crwdns625:0crwdne625:0",
"spotifynote2": "crwdns626:0crwdne626:0",
"link": "crwdns627:0crwdne627:0",
"linkwarn": "crwdns628:0crwdne628:0",
"connect": "crwdns629:0crwdne629:0",
"disconnect": "crwdns630:0crwdne630:0",
"templeteedit": "crwdns631:0crwdne631:0",
"templeteeditwarn": "crwdns632:0crwdne632:0",
"templete1": "crwdns2358:0{song}crwdnd2358:0{album}crwdnd2358:0{artist}crwdnd2358:0{url}crwdne2358:0",
"templete2": "crwdns2360:0{song}crwdnd2360:0{album}crwdnd2360:0{artist}crwdnd2360:0{composer}crwdnd2360:0{hz}crwdnd2360:0{bitRate}crwdnd2360:0{genre}crwdne2360:0",
"templete3": "crwdns2362:0{song}crwdnd2362:0{album}crwdnd2362:0{artist}crwdne2362:0",
"postartwork": "crwdns635:0crwdne635:0",
"tts": "crwdns636:0crwdne636:0",
"speed": "crwdns637:0crwdne637:0",
"speedwarn": "crwdns638:0crwdne638:0",
"pitch": "crwdns639:0crwdne639:0",
"pitchwarn": "crwdns640:0crwdne640:0",
"vol": "crwdns641:0crwdne641:0",
"volwarn": "crwdns642:0crwdne642:0",
"test": "crwdns643:0crwdne643:0",
"sample": "crwdns644:0crwdne644:0",
"playstop": "crwdns645:0crwdne645:0",
"back": "crwdns646:0crwdne646:0",
"keyscs": "crwdns647:0crwdne647:0",
"keyscr": "crwdns648:0crwdne648:0",
"keynew": "crwdns649:0crwdne649:0",
"keytoggle": "crwdns650:0crwdne650:0",
"keypost": "crwdns651:0crwdne651:0",
"keysecpost": "crwdns1924:0crwdne1924:0",
"keyunread": "crwdns652:0crwdne652:0",
"keyesc": "crwdns653:0crwdne653:0",
"keyf5": "crwdns654:0crwdne654:0",
"keyclear": "crwdns655:0crwdne655:0",
"keyacctman": "crwdns656:0crwdne656:0",
"keyshowprof": "crwdns657:0crwdne657:0",
"keyrow": "crwdns658:0crwdne658:0",
"keyzoom": "crwdns659:0crwdne659:0",
"reset": "crwdns660:0crwdne660:0",
"resetconfirm": "crwdns661:0crwdne661:0",
"about": "crwdns662:0crwdne662:0",
"hp": "crwdns663:0crwdne663:0",
"support": "crwdns664:0crwdne664:0",
"help": "crwdns665:0crwdne665:0",
"sushi": "crwdns666:0crwdne666:0",
"checkup": "crwdns667:0crwdne667:0",
"ossJP": "crwdns668:0crwdne668:0"
}

View File

@@ -2,7 +2,8 @@
"updatehere":"Get latest TheDesk",
"download":"Start",
"portable":"Portable ver.",
"winzip":"Durling unzippng, TheDesk may freeze. It takes several seconds.",
"installer":"Installer ver.",
"snap":"Snap ver may be on Snapcraft",
"unrewrite":"Not rewrite",
"sureupd":"You may lose a cool experience!",
"skipupd":"Skip this update",

View File

@@ -2,7 +2,8 @@
"updatehere":"アップデートがあります",
"download":"開始",
"portable":"ポータブル版",
"unrewrite":"上書きしない",
"installer":"インストーラー版(推奨)",
"snap":"snap版はSnapcraft等よりDLしてください。",
"sureupd":"アップデートは必ず行ってください",
"skipupd":"アップデートをスキップする",
"nexttl":"次回TL表示時まで",

View File

@@ -0,0 +1,16 @@
{
"updatehere": "crwdns669:0crwdne669:0",
"download": "crwdns670:0crwdne670:0",
"portable": "crwdns1950:0crwdne1950:0",
"installer": "crwdns2382:0crwdne2382:0",
"snap": "crwdns2384:0crwdne2384:0",
"unrewrite": "crwdns673:0crwdne673:0",
"sureupd": "crwdns674:0crwdne674:0",
"skipupd": "crwdns675:0crwdne675:0",
"nexttl": "crwdns676:0crwdne676:0",
"nextver": "crwdns677:0crwdne677:0",
"problem1": "crwdns678:0crwdne678:0",
"problem2": "crwdns679:0crwdne679:0",
"continue": "crwdns680:0crwdne680:0",
"dlnow": "crwdns681:0crwdne681:0"
}

View File

@@ -1,33 +1,90 @@
<!doctype html>
<html lang="{{lang}}">
<html lang="@@lang@@">
<head>
<title>Settings - TheDesk</title>
@@comment-start@@
<script type="text/javascript">
var _jipt = [];
_jipt.push(['project', 'thedesk']);
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
@@comment-end@@
<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/pickr.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">
<style>input{max-height:50px!important} .pcr-result{height:1rem !important;}</style>
</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/lang.{{lang}}.js"></script>
<h4>{{setting}}</h4>
<script type="text/javascript" src="../../js/lang/lang.@@lang@@.js"></script>
<script src="https://unpkg.com/json5@^2.0.0/dist/index.min.js"></script>
<script src="../../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="setting.vue.js"></script>
<h4>@@setting@@</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>{{env}}
<i class="material-icons">desktop_windows</i>@@env@@
</div>
<div class="collapsible-body">
<h5>{{setlang}}</h5>
{{langlist}}
<h5>{{backup}}</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3" style="width:100%; max-width:200px;">{{export}}</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3" style="width:100%; max-width:200px;">{{import}}</button>
<h5>{{theme}}</h5>
<h5>@@setlang@@</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br>
@@langlist@@
<h5>@@backup@@</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3" style="width:100%; max-width:200px;">@@export@@</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3" style="width:100%; max-width:200px;">@@import@@</button>
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<templete v-html=item.text.desc></templete><br>
<template v-if="item.id=='notf'"><a onclick="notftest()" class="pointer">@@nntest@@</a><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id" v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">@@change@@</button>
</template>
</template>
</div>
<h5>@@font@@</h5>
@@fontwarn@@<br>
<button class="btn waves-effect" style="width:100px;" onclick="font()">@@select@@</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:300px; height:500px;"></div>
<br>
<input type="text" style="width:150px" id="font">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">@@set@@</button>
<br>
<h5>@@savefolder@@</h5>
@@savefolderwarn@@<br>
<button class="btn waves-effect" style="width:100px;" onclick="savefolder()">@@change@@</button>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">color_lens</i>@@theme@@
</div>
<div class="collapsible-body">
<h4>@@themeSel@@</h4>
<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" />
@@ -38,278 +95,164 @@
<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>
<button class="btn waves-effect" style="width:100px;" onclick="font()">{{select}}</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:300px; height:500px;">
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom" value="custom" />
<label for="custom">Custom</label>
<div style="width:300px" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
<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><br>
<h5>{{savefolder}}</h5>
{{savefolderwarn}}<br>
<button class="btn waves-effect" style="width:100px;" onclick="savefolder()">{{change}}</button>
<br>
<h4>@@customtheme@@</h4>
<div style="width:300px" id="edit-selector" data-add="@@add_new@@">
<select id="custom-edit-sel" class="custom-sel" onchange="custom()">
<option value="add_new">@@add_new@@</option>
</select>
</div>
<h5>@@name@@</h5>
<input type="text" style="width:300px" id="custom_name" placeholder="@@name@@...">
<h5>@@desc@@</h5>
<div class="input-field"><textarea style="width:300px" id="custom_desc" class="materialize-textarea" placeholder="@@desc@@..."></textarea></div>
<h5>@@customthemeDirection@@</h5>
<input class="with-gap" name="derection" type="radio" id="dark" value="dark" checked="true" />
<label for="dark">Dark</label>
<input class="with-gap" name="derection" type="radio" id="light" value="light" />
<label for="light">Light</label>
<div id="pickers">
<div>
<h5>Primary</h5>@@secondarycolor@@
<div id="color-picker0-wrap"><div class="color-picker" id="color-picker0"></div></div>
<input type="hidden" id="color-picker0_value">
</div>
<div>
<h5>Secondary</h5>@@primary@@
<div id="color-picker1-wrap"><div class="color-picker" id="color-picker1"></div></div>
<input type="hidden" id="color-picker1_value">
</div>
<div>
<h5>Texts</h5>@@text@@
<div id="color-picker2-wrap"><div class="color-picker" id="color-picker2"></div></div>
<input type="hidden" id="color-picker2_value">
</div>
<div>
<h5>Accent</h5>@@accent@@
<div id="color-picker3-wrap"><div class="color-picker" id="color-picker3"></div></div>
<input type="hidden" id="color-picker3_value">
</div>
</div>
<button class="btn-large waves-effect" onclick="customComp()">@@change@@</button>&nbsp;<button class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">@@delete@@</button><br><br>
<input type="text" style="width:300px" id="custom_json" class="materialize-textarea" placeholder="JSON style" readonly><br>
@@customShare@@
<h4>@@customImport@@</h4>
@@cImpWarn@@<br>
<input type="text" style="width:300px" id="custom_import" class="materialize-textarea" placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">@@import@@</button><br>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>@@timeline@@
</div>
<div class="collapsible-body">
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id" v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">@@change@@</button>
</template>
</template>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>{{timeline}}
<i class="material-icons">send</i>@@post@@
</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>{{replyct}}</h5>
<input class="with-gap" onchange="settings()" name="rp" type="radio" id="rp_hidden" value="hidden" />
<label for="rp_hidden">{{replyct_hidden}}</label>
<input class="with-gap" onchange="settings()" name="rp" type="radio" id="rp_all" value="all" />
<label for="rp_all">{{replyct_full}}</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">{{mv}}</label>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_click" value="click" />
<label for="mov_click">{{mvclick}}</label>
<input class="with-gap" onchange="settings()" name="mov" type="radio" id="mov_no" value="no" />
<label for="mov_no">{{no}}</label>
<br>
<h5>{{notfmarker}}</h5>
<input class="with-gap" onchange="settings()" name="notfm" type="radio" id="notfm_yes" value="yes" />
<label for="notfm_yes">{{yes}}</label>
<input class="with-gap" onchange="settings()" name="notfm" type="radio" id="notfm_no" value="no" />
<label for="notfm_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>
<h5>{{ticker}}</h5>
{{tickerwarn}}<br>
<input class="with-gap" onchange="settings()" name="ticker" type="radio" id="ticker_yes" value="yes" />
<label for="ticker_yes">{{yes}}</label>
<input class="with-gap" onchange="settings()" name="ticker" type="radio" id="ticker_no" value="no" />
<label for="ticker_no">{{no}}</label>
<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>{{autocw}}</h5>
{{autocwwarn}}
<br>
<input type="text" style="width:50px" id="cw_sentence">{{lines}} {{above}} {{or}}
<input type="text" style="width:50px" id="cw_letters">{{letters}} {{above}}
<button class="btn waves-effect" style="width:100px;" onclick="settings()">{{set}}</button>
<br>
<h5>{{cws}}</h5>
<input class="with-gap" onchange="settings()" name="cws" type="radio" id="cws_yes" value="yes" />
<label for="cws_yes">{{yes}}</label>
<input class="with-gap" onchange="settings()" name="cws" type="radio" id="cws_no" value="no" />
<label for="cws_no">{{no}}
</label>
<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>{{box}}</h5>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="bx_yes" value="yes" />
<label for="bx_yes">{{boxyes}}</label>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="bx_no" value="no" />
<label for="bx_no">{{boxno}}
</label>
<input class="with-gap" onchange="settings()" name="box" type="radio" id="bx_abs" value="absolute" />
<label for="bx_abs">{{boxabs}}</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>
<h5>{{secondary}}</h5>
{{secwarn}}<br>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-nothing" value="nothing" />
<label for="sec-nothing">{{nothing}}</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-public" value="public" />
<label for="sec-public">{{public}}</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-unlisted" value="unlisted" />
<label for="sec-unlisted">{{unlisted}}</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-private" value="private" />
<label for="sec-private">{{private}}</label>
<input class="with-gap" onchange="settings()" name="sec" type="radio" id="sec-direct" value="direct" />
<label for="sec-direct">{{direct}}</label>
<input class="with-gap hide kirishima" onchange="settings()" name="sec" type="radio" id="sec-local" value="local" />
<label for="sec-local">{{localonly}}</label><span class="hide kirishima">非対応インスタンスでは「未収載」になります。</span>
<br>
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
{{item.text.desc}}<br>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template v-if="!check.kirishima || (check.kirishima && kirishima)">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue" type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
</template>
<template v-else>
<template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data">
<input type="text" v-model="textbox.setValue" type="radio" v-bind:id="textbox.id" v-bind:style="{ width: textbox.width+'px'}" />{{textbox.text.after}}
</template>
</template>
<template v-else>
<input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id" v-bind:style="{ width: item.width+'px'}"/>{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">@@change@@</button>
</template>
</template>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">keyboard</i>{{keysc}}
<i class="material-icons">keyboard</i>@@keysc@@
</div>
<div class="collapsible-body">
<h5>{{iks}}</h5>
{{okswarn}}<br>
<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>
<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>
<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>
<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}}
<i class="material-icons">bookmark</i>@@muteemp@@
</div>
<div class="collapsible-body">
<h5>{{climute}}</h5>
<h5>@@climute@@</h5>
<div id="mute-cli"></div>
<h5>{{cliemp}}</h5>
{{cliwarn}}
<h5>{{wordmute}}</h5>
{{enter}}<br>
<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>
<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>
<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}}
<i class="fa fa-spotify"></i>@@spotify@@
</div>
<div class="collapsible-body">
<h5>{{npProvider}}</h5>
{{npPeoviderWarn}}<br>
<h5>@@npProvider@@</h5>
@@npPeoviderWarn@@<br>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="aimp" value="AIMP" />
<label for="aimp">AIMP</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="itunes" value="ITUNES" />
@@ -324,72 +267,73 @@
<label for="wlm">WLM</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="cad" value="CAD" />
<label for="cad">CAD</label><br><br>
{{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>
@@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>
{{templete3}}<br>
@@templete1@@<br>
@@templete2@@<br>
@@templete3@@<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>
<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>
<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>
<label for="awk_no">@@no@@</label>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>{{tts}}
<i class="material-icons">hearing</i>@@tts@@
</div>
<div class="collapsible-body">
<h5>{{speed}}</h5>
{{speedwarn}}<br>
<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>
<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>
<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>
<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>
<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>
<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+Enter+Shift:{{keysecpost}}</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>
<br>@@keyscs@@
<li>Ctrl+1-9:@@keyscr@@</li>
<li>N:@@keynew@@</li>
<li>X:@@keytoggle@@</li>
<li>Ctrl+Enter:@@keypost@@</li>
<li>Ctrl+Enter+Shift:@@keysecpost@@</li>
<li>Alt+Enter:@@secondary@@</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>
<li>Ctrl+Shift+P:@@keyshowprof@@</li>
<li>←/→:@@keyrow@@</li>
<li>@@keyzoom@@</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
@@ -402,21 +346,21 @@
<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('{{resetconfirm}}')){ 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>
<button class="btn waves-effect red" style="width:100%; max-width:500px;" onclick="if(confirm('@@resetconfirm@@')){ 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://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>@@support@@(Pixiv FANBOX)</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>
Kyash<br>
<img src="../../img/kyash.png" width="100"><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>
<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.
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a href="https://github.com/cutls/TheDesk/blob/master/TOS.md">Terms of Use</a>
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a href="https://thedesk.top/tos.html">Terms of Use</a>/<a href="https://thedesk.top/priv.html">Privacy Policy</a>
<br>Developer: Cutls P(
<a href="index.html?mode=user&code=Cutls@kirishima.cloud">@Cutls@kirishima.cloud</a>)
<br>
@@ -426,9 +370,9 @@ TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のため
<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/lang/lang.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/platform/pickr.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>

Some files were not shown because too many files have changed in this diff Show More