Compare commits

...

211 Commits

Author SHA1 Message Date
Cutls
a07d6b3172 Merge pull request #52 from cutls/WIP-(before-CI)
travis
2019-04-12 23:39:54 +09:00
Cutls
253f742332 travis 2019-04-12 23:39:28 +09:00
Cutls
35e262293d Merge pull request #51 from cutls/WIP-(before-CI)
Wip (before ci)
2019-04-12 23:37:14 +09:00
Cutls
972ea9f5ed travjs 2019-04-12 23:36:16 +09:00
Cutls
0c1191e362 travis 2019-04-12 23:35:48 +09:00
Cutls
426e48325c osx 2019-04-12 23:35:22 +09:00
Cutls
6c86825732 update travis 2019-04-12 23:33:36 +09:00
Cutls
e0cae78827 Merge pull request #50 from cutls/WIP-(before-CI)
Wip (before ci)
2019-04-12 23:32:37 +09:00
Cutls
09d3643b19 travis 2019-04-12 23:32:14 +09:00
Cutls
ed93d5b4f2 ul 2019-04-12 23:30:59 +09:00
Cutls
f0d7d84f8e travis update 2019-04-12 23:29:30 +09:00
Cutls
05fab4c45c Change 2019-04-12 23:26:38 +09:00
Cutls
3059ec9941 Merge pull request #49 from cutls/WIP-(before-CI)
Wip (before ci)
2019-04-12 23:20:26 +09:00
Cutls
892872869b TheDesk Usamin (18.2.1) 2019-04-12 23:19:27 +09:00
Cutls
0db7ed4a33 TheDesk Usamin (18.2.1) 2019-04-12 23:14:38 +09:00
Cutls
54e12db08b Fix XSS 2019-04-12 23:12:57 +09:00
Cutls
6fb90f0c8e Merge pull request #48 from cutls/WIP-(before-CI)
TheDesk Usamin (18.2.0)
2019-04-11 17:13:20 +09:00
Cutls
5f3257a83b TheDesk Usamin (18.2.0) 2019-04-11 17:11:26 +09:00
Cutls
f333595817 WIP: done some ToDo 2019-04-11 12:52:38 +09:00
Cutls
cc1018c65d next ver 2019-04-11 03:11:03 +09:00
Cutls
1c16a5f4a0 WIP done some ToDO 2019-04-11 02:59:13 +09:00
Cutls
0ad7bf9036 WIP some ToDo 2019-04-11 01:52:01 +09:00
Cutls
1670c0bc08 ToDo: done: ts column/menu .active/ about 2019-04-09 23:12:11 +09:00
Cutls
f1c4276d06 Add list on misskey 2019-04-08 00:14:06 +09:00
Cutls
50bfbbd755 Merge pull request #47 from kPherox/fix-reopen-macos
Fix cannot reopen in macOS
2019-04-05 21:48:24 +09:00
kPherox
f5afafe26a Remove all listener when closed main window 2019-04-05 20:43:37 +09:00
kPherox
c524777505 Fix cannot repoen in macOS 2019-04-05 19:55:13 +09:00
Cutls
8155baa07d fix about window 2019-04-04 01:09:57 +09:00
Cutls
32c56dcf6a Fix link to quesdon 2019-04-04 01:07:07 +09:00
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
cutls
456500e954 TheDesk Miria (17.0.1)-beta2 2019-01-29 10:49:14 +09:00
Cutls
e3470ae0f2 electron-builder error
electron must be in devDependencies, not in dependencies.
2019-01-29 01:06:24 +09:00
Cutls
7da4cd53d2 Merge pull request #13 from kaias1jp/nowplaying-node-linux-disabled
Nowplaying node linux disabled
2019-01-29 00:56:05 +09:00
kaias1jp
1f1a429e35 Delete TheDeskBuild.sh 2019-01-28 21:45:49 +09:00
kaias1jp
1efa656529 modified: main.js
modified:   package.json
2019-01-28 21:37:59 +09:00
popn.ja
52cb240be3 modified: TheDeskBuild.sh 2019-01-28 20:32:21 +09:00
kaias1jp
6411fc9fb1 modified: TheDeskBuild.sh 2019-01-28 18:56:36 +09:00
kaias1jp
48da2cf287 new file: TheDeskBuild.sh 2019-01-28 18:44:50 +09:00
kaias1jp
8968c248df modified: main.js
modified:   package.json
2019-01-28 18:39:16 +09:00
cutls
27721fa481 check 2019-01-28 09:45:32 +09:00
Cutls
ee618155ac file cng 2019-01-28 09:22:17 +09:00
Cutls
f6e8f04b2a Update .travis.yml 2019-01-28 09:00:41 +09:00
cutls
c6e99b2b47 tetst release 2019-01-28 03:31:10 +09:00
cutls
c6701a4d59 finish to absolute 2019-01-28 03:28:25 +09:00
cutls
693993e899 typo 2019-01-28 02:59:27 +09:00
cutls
314ec5ab4d pray for last commit 2019-01-28 02:57:13 +09:00
cutls
d344a7fc47 git bash 2019-01-28 02:41:58 +09:00
cutls
28f2e9302a git bash 2019-01-28 02:40:15 +09:00
cutls
697d942180 rename to mobe 2019-01-28 01:54:20 +09:00
cutls
6412139ae4 back-escape deleted 2019-01-28 01:08:10 +09:00
cutls
add018263e abs path 2019-01-28 00:53:38 +09:00
cutls
baaa3e2527 last update I do 2019-01-28 00:33:28 +09:00
cutls
79276bf698 replacer 2019-01-28 00:20:33 +09:00
cutls
3953f560e4 some bugs for WBT 2019-01-28 00:11:53 +09:00
cutls
75d6a558ad for windows 2019-01-27 23:53:33 +09:00
cutls
230dd30294 wine required 2019-01-27 23:21:35 +09:00
cutls
e49c803f89 mistake 2 2019-01-27 23:09:24 +09:00
cutls
80577639d7 mistake 2019-01-27 22:58:53 +09:00
cutls
b85ac213da plus dependencies 2019-01-27 22:48:23 +09:00
cutls
a8f446a1bd delete np-node 2019-01-27 22:36:17 +09:00
cutls
b7ec01aa1f travis set up file 2019-01-27 22:19:31 +09:00
cutls
6cc765a6f1 travis master update 2019-01-27 22:07:51 +09:00
cutls
54a39151d1 travis update 2019-01-27 21:32:35 +09:00
cutls
37a1b7e52d travis update 2019-01-27 21:22:58 +09:00
cutls
54231cde73 traviss update 2019-01-27 21:17:40 +09:00
cutls
57f7a92063 travis update 2019-01-27 21:09:30 +09:00
cutls
61c67457ac travis 2019-01-27 21:07:11 +09:00
cutls
c05e13858b Merge branch 'master' of https://github.com/cutls/TheDesk 2019-01-27 19:49:33 +09:00
cutls
caa8d97a23 update versions 2019-01-27 19:49:17 +09:00
cutls
7921633efd Local NowPlaying for Windows 2019-01-26 23:27:35 +09:00
cutls
77ad2bd200 Some additional info & improve format 2019-01-26 23:26:56 +09:00
cutls
fa3b3e0800 New language style for worldwide 2019-01-26 12:24:26 +09:00
cutls
e1fb172f5b New electron-builder files 2019-01-26 12:24:08 +09:00
cutls
ccb0cb6db4 Excluded type of Notifications 2019-01-26 12:23:53 +09:00
Cutls
44e507dc90 Build command(npm) 2019-01-25 11:41:48 +09:00
Cutls
c59267bf6e Update package.json 2019-01-24 01:04:21 +09:00
Cutls
da0d9bbb51 Update README.md 2019-01-24 00:59:21 +09:00
Cutls
c6d9d7aa49 typo 2019-01-23 22:39:21 +09:00
Cutls
a08b7501ce macOS icons(electron-builder) 2019-01-23 22:20:14 +09:00
Cutls
5950fa5bbd Create README.md 2019-01-23 22:19:34 +09:00
Cutls
ed326cb264 Update package.json 2019-01-23 18:03:11 +09:00
Cutls
4a984af695 electron-builder 2019-01-23 17:58:31 +09:00
Cutls
d36a9215af Update README.md 2019-01-23 13:48:11 +09:00
Cutls
e145efb1a2 Update index.html 2019-01-23 13:31:21 +09:00
Cutls
c434ed903d Update index.html 2019-01-23 13:31:02 +09:00
Cutls
fa546df375 Update snapcraft.yaml 2019-01-23 13:24:44 +09:00
Cutls
cbe0cb171b Update snapcraft.yaml 2019-01-23 13:22:21 +09:00
Cutls
70f76d61f4 typo
from crowdin issue
2019-01-23 11:08:00 +09:00
cutls
0d0a9c43ad TheDesk Miria (17.0.1) 2019-01-22 01:26:22 +09:00
cutls
f762dd600c Alert when posting unlisted, private, direct toot with tags 2019-01-22 01:26:11 +09:00
cutls
f3186373bf Scheduled toot available 2019-01-22 01:25:40 +09:00
cutls
4f82cf00d6 fix some bugs(icon) 2019-01-22 01:24:37 +09:00
cutls
ec2fb97a68 Change from Instance to Server 2019-01-22 01:24:15 +09:00
cutls
2c85cee77a Update README.md 2019-01-13 11:05:41 +09:00
cutls
c6ad258c1c Merge branch 'master' of https://github.com/cutls/TheDesk 2019-01-13 11:03:10 +09:00
cutls
4c0735b2ed CSS Fixed 2019-01-13 11:02:52 +09:00
Cutls
cdaca5c9f7 Update 2018-12-16 23:04:00 +09:00
Cutls
0175038e77 How to install 2018-12-16 23:01:25 +09:00
Cutls
205e1d3332 TOS, priv, Build 2018-12-16 16:17:52 +09:00
Cutls
66d97388f5 Delete TOS 2018-12-16 16:12:33 +09:00
cutls
c60572b132 Merge branch 'master' of https://github.com/cutls/TheDesk 2018-12-09 03:46:22 +09:00
cutls
bc197db0d5 TheDesk Miria (17.0.0) 2018-12-09 03:46:01 +09:00
Cutls
a93c488aa5 Update README.md 2018-11-28 01:21:52 +09:00
Cutls
a2d0268d39 LICENSE Updated 2018-11-28 01:21:23 +09:00
cutls
8bb27aa8d5 Merge branch 'master' of https://github.com/cutls/TheDesk 2018-09-27 00:25:59 +09:00
cutls
0c7cf6f776 TheDesk Akane (16.1.6) 2018-09-27 00:25:35 +09:00
Cutls
abd2a39204 Create LICENSE.md 2018-09-21 15:54:12 +09:00
124 changed files with 16629 additions and 5517 deletions

2
.gitignore vendored
View File

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

29
.travis.yml Normal file
View File

@@ -0,0 +1,29 @@
os: osx
language: node_js
node_js:
- '10.15.2'
script: node -v
before_deploy:
- brew update
- npm install electron-builder -g
- cd app
- npm install
- electron-builder --mac --x64
- mv ../build/TheDesk*.dmg ../TheDesk.dmg
- mv ../build/TheDesk*.zip ../TheDesk-darwin-x64.zip
- cd ../
deploy:
provider: releases
# GitHub にリリースするための API KEY を暗号化した値
api_key:
secure: jndR02p5KRTtcJk18b3YsXL2cC+yzEf1AOqXdpWciF8f3lO5oY01jlxd17xdHIcK7VywSsLVZpLToSdqAoIEhJ5OxEQ/FmA3FlmbwwD6ou13gLa4VGIvsBHveCmKGjVu0Z++atIy76tZYU1SOWFWv4B0ZhnVz2ca2VZynvLgw3YNsPJH7rHO966GXgRkGYJAJ4UvLg3sj/iztVh2FSfbUj5IGO1e/JHJO63wAo1MSQtRjkutVgl/djnBLC6vbL4YHkM3Ynpkx/YQEcxwrmeY0Ra8D5yYDq4MNIDMmZahWC+k4u2eA2Cj2ifBFNxbZvTN75vLwRBp6DsTNHsiqkXrSPDBdNeet31RbwTQ6LtsK8jqmL4S/59dmLcj7uCU2WxyBLPbJdbdZWlqW2ZQvfQY8QVAYy7S3MiHQWQN0oP5wqXk89jcgR42ig/zsqFNPpXHM4mExR7l/gDLPg0j9c3XEF6sWtk3FmJN1i4+B+9kn09b6UKlV7EFPKp8XcFNrz4ZcE9/I8lKwsqLVG2jAXIk7Z9LwDRcAmK5eG348X5zwFtOY6raKIvRw2cn92bPnEI+55v8A4WANS2647GFTgxHj30D0d/sOZmJ5BS34zpdWTgE0AlKg7sOqkncjqoW5J5zCh5Ow7b3KXvEvlAts44mAag8tZTectxMP4iguXvTnv4=
# Releases ページにアップロードするファイル
file:
- TheDesk.dmg
- TheDesk-darwin-x64.zip
skip_cleanup: true
on:
repo: cutls/TheDesk
branches:
only:
- master

8
LICENSE.md Normal file
View File

@@ -0,0 +1,8 @@
# プライバシーポリシー
* TheDeskは「開発者からのお知らせ」配信のためにサーバー(thedesk.top)に常時アクセスしています。
* 上記の接続によるユーザーの情報提供はありません。(IPアドレス等を含む)
* thedesk.topのページにおいては、Googleアナリティクスによる解析を採用しています。
* 配信についてAmazon Web Service CloudFrontを使用しています。CloudFrontにはアクセス解析機能がありますが、これの使用につきましては同プライバシーポリシーに則ります。
* 接続するインスタンスのプライバシーポリシーはAPIを通じた全てのアクションに対して有効ですので、TheDeskについてもそれらに則ります。

104
README.md
View File

@@ -1,5 +1,7 @@
# 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)
@@ -8,62 +10,108 @@ 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)
[GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)
The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/)/アイコンは[クリエイティブ・コモンズ 表示-非営利-継承](https://creativecommons.org/licenses/by-nc-sa/4.0/)で提供されています。
[Press Kit](https://dl.thedesk.top/press/TheDesk+PressKit.zip)
* [PNG](https://dl.thedesk.top/press/TheDesk.png)
* [Monotone SVG](https://dl.thedesk.top/press/TheDesk.svg)
* [ico](https://dl.thedesk.top/press/TheDesk.ico)
* [icns](https://dl.thedesk.top/press/TheDesk.icns)
## Terms of Use/利用規約
[TOS.md](https://github.com/cutls/TheDesk/blob/master/TOS.md)
* [利用規約(Terms of Use(ja))](https://thedesk.top/tos.html)
* [プライバシーポリシー(Privacy Policy(ja))](https://thedesk.top/priv.html)
## Language/言語
- 日本語(Japanese)
- English(英語)
* 日本語(Japanese)
* English(英語)
### Translation/翻訳
Crowdin project was started! Visit: https://crowdin.com/project/thedesk
Crowdin project is available! Visit: https://translate.thedesk.top
Crowdinから翻訳に参加してみませんか: https://crowdin.com/project/thedesk
## Component/構成
app:Raw files(you can download to modify or check)
app:そのままのファイル.ダウンロード→テスト用
desk.icns: If you build yourself on macOS, you can use this .icns file as icon.
desk.icns: macOS向けアイコン.セルフビルドにどうぞ.
Crowdinから翻訳に参加してみませんか: https://translate.thedesk.top
## Requirement/環境
- Electron 2.0.7
- electron-dl
- Jimp
- adm-zip
- itunes-nowplaying-mac(for macOS)
- node-notifier
- Ability to read unformated files!
* Electron 3.0.10(install yourself)
* electron-dl(in package.json)
* Jimp(in package.json)
* font-manager(in package.json)
* Python 2.x(install yourself)
* VisualC++(Windows)(install yourself)
* itunes-nowplaying-mac(for macOS)(in package.json)
* node-notifier(in package.json)
* sumchecker(in package.json)
* Ability to read unformated files!(install yourself)
## Contributors/コントリビューター
## Contributors/主なコントリビューター
macOSビルダー
- [とねぢ](https://minohdon.jp/@toneji)
* [とねぢ](https://minohdon.jp/@toneji)
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
Misskey(misskey.xyz)のトークンは含まれておりません。
`git clone https://github.com/cutls/TheDesk`
`npm install electron -g`
`cd TheDesk/app`
`npm install`
`npm install --save-dev electron-rebuild`
electron-packager is required. electron-packagerが必要です.
Linux/macOS
`./node_modules/.bin/electron-rebuild`
Windows
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --win32metadata.CompanyName="TheDesk&Cutls.com" --win32metadata.FileDescription="TheDesk" --win32metadata.OriginalFilename="TheDesk" --win32metadata.InternalName="TheDesk" --win32metadata.ProductName="TheDesk" --platform=win32 --arch=all --electron-version=2.0.7 --icon=.\app\thedesk.ico --overwrite`
`.\node_modules\.bin\electron-rebuild.cmd`
To install Python 2.x and Visual C++ for Windows, before running `npm install --save-dev electron-rebuild`
WindowsでPython 2.xやVisualC++を一発でインストールできるツールもあります(`npm install --save-dev electron-rebuild`の前に)
`npm install --global windows-build-tools`
日本語話者向けですが、macOSビルドにはXCodeが要るとの情報があります。([とねぢ](https://minohdon.jp/@toneji)氏談)
### 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=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=2.0.7 --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=2.0.7 --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/詳しく

108
TOS.md
View File

@@ -1,108 +0,0 @@
# Terms of Use
## Copyright
(C)TheDesk 2018 all rights reserved. Website:[https://thedesk.top](https://thedesk.top)
## 利用規約
利用規約とは __禁止行為__ と、 __規約__ を含めたものを指します。
### 禁止行為
- 同一内容の連投行為
- 複数インスタンスやSNSへの同時投稿
- misskey.xyzへのthedesk-misskeyからの投稿
## 規約
- このソフトウェアを通じて投稿される内容やAPIを通じたアクションは全て投稿者が権利を主張でき、責務を負うことになります。
- MastodonのAPIを通じたアクションは、全てそのインスタンスの規約に従っていなければなりません。特記無き場合、法的責任はそのインスタンスのホストの所在国の法律に従って下さい。
- その他API(Adobe,Spotify,マストドンユーザーマッチング,instances.social)へのアクセスは、各サービスの規約・プライバシーポリシーを遵守してください。
- Spotifyのログイン情報はTheDeskのサーバーに保存されますが、EUにおける「一般データ保護規則General Data Protection Regulation:GDPR」を遵守できていないため、EU内ユーザーは利用できません。
- 改変、翻訳に関わらず、利用しているインスタンスに関わらないTheDeskに起因する法的責任は日本国の法律に従います。
- TheDeskの開発者からの情報を送信するため、使用時には常に開発者のサーバー(thedesk.top)と接続しています。
この規約はTheDesk Akane (16.1.3)以降に効力を持ちます。
## Terms of Use
### Prohibited
- Posting toots which have the same contents each other in moments.
- Posting toots which have the same contents each other to several instances at once.
- Posting to misskey.xyz via thedesk-misskey.
## Terms
- You are immediately responsible to all actions through this software.
- You have to follow the instance's rules or laws of the hosted country.
- You have to follow the rules of other API(Adobe,Spotify,マストドンユーザーマッチング,instances.social) if you use them.
- Your Spotify login data is stored in TheDesk server, however TheDesk isn't following General Data Protection Regulation:GDPR which allows users in EU to use TheDesk.
- The developer of TheDesk follows Japanese laws.
- TheDesk is always connected to its server, in order to receive infomation from the developer.
TheDesk Akane (16.1.3) and above is under this TOS.
 
以下バージョンとコードネームの比較です。
_斜字_ はTheDeskには採用していません。前作等に使用されています。
__太字__ は2018年9月17日現在のTheDeskで使用されたコードネームです。
[カッコ囲み]は飛ばされることが確定しています。バージョンの番号も飛ばされます。
52以降が必要になったときに使用します。
1. _Rin_
1. _Anzu_
1. _Kanako_
1. _Kaede_
1. _Rika_
1. _Ranko_
1. __Miku__
1. _Kirari_
1. __Mika__
1. __Uzuki__
1. __Miho__
1. __Riina__
1. __Airi__
1. __Mizuki__
1. __Mio__
1. __Akane__
1. Miria
1. Nana
1. [Minami]
1. Sachiko
1. Mayu
1. Koume
1. Chieri
1. Anastasia
1. Aiko
1. Shoko
1. Nao
1. Karen
1. Sae
1. Yuko
1. Fumika
1. Yuki
1. Frederica
1. Kanade
1. Nina
1. Arisu
1. Sanae
1. Shiki
1. Syuko
1. Momoka
1. Yui
1. Yuka
1. Asuka
1. Yumi
1. Kyoko
1. Yuuki
1. Ryo
1. Yoshino
1. Hiromi
1. Miyu
1. Tomoe

View File

@@ -76,7 +76,7 @@ a,button{
<img src="./img/desk.png" style="max-width:70%;">
<h5>TheDesk</h5>
<div class='container'>
<div class='area-name1'>バージョン</div>
<div class='area-name1'>External version</div>
<div class='area-data1' id="now"></div>
<div class='area-name2'>Internal version</div>
<div class='area-data2' id="ver"></div>

1
app/build/README.md Normal file
View File

@@ -0,0 +1 @@

BIN
app/build/icon.icns Normal file

Binary file not shown.

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,14 +272,126 @@ 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);
}
.modal-footer{
background-color: var(--modalfooter) !important;
}
.font{
font-size:1.5rem;
margin-bottom:5px;
}
.font:hover{
background-color: #999;
}
.release-do{
border: solid 2px;
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;
}
#something-wrong{
width:100%; height:100%; position:absolute; display:flex; justify-content: center; align-items:center
}
/*スクロールバー*/
::-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;
@@ -35,6 +38,15 @@
#cw-text {
display: none;
}
#sch-box {
display: none;
}
#sch-box input {
width:auto;
}
.picker__close, .picker__today, .picker__clear {
color: #26a69a !important;
}
.cw {
display: none;
}
@@ -42,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;
@@ -78,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

@@ -2,6 +2,7 @@
--bg:white;
--drag:rgba(255, 255, 255, 0.8);
--color:black;
--beforehover:#757575;
--modal:white;
--subcolor:#e0e0e0;
--box:white;
@@ -14,10 +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:#9e9e9e;
--modal:black;
--subcolor:#212121;
--box:#424242;
@@ -30,10 +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:#9e9e9e;
--modal:#0d1351;
--subcolor:#0d1351;
--shared:#004d40;
@@ -46,10 +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:#9e9e9e;
--modal:#261411;
--subcolor:#4e342e;
--shared:#004d40;
@@ -62,10 +75,14 @@
--postbox:#4e342e;
--modalfooter:#261411;
}
.browntheme #imagemodal{
background: url("../img/pixel.svg");
}
.greentheme{
--bg:#c8e6c9;
--drag:rgba(255, 255, 255, 0.8);
--color:black;
--beforehover:#757575;
--modal:#81c784;
--subcolor:#a5d6a7;
--box:#81c784;
@@ -77,4 +94,7 @@
--active:#e6ee9c;
--postbox:#a5d6a7;
--modalfooter:#81c784;
}
.greentheme #imagemodal{
background: url("../img/pixel.white.svg");
}

View File

@@ -57,6 +57,12 @@
#bottom i{
font-size:30px;
}
.exc-icons{
font-size:20px;
}
.exc-chb{
padding-left:24px !important;
}
#bottom .btnsgroup{
border:1px solid;
padding:1px;
@@ -80,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; }
}
@@ -102,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;
@@ -124,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%;
@@ -132,11 +155,18 @@ iframe {
.media-filter .nomedia{
display:none;
}
.bt-filter .shared{
display:none;
}
.except-bt-filter .unshared{
display:none;
}
.cvo {
user-select: text;
padding-left: 5px;
border-bottom:0.5px solid;
padding-right: 2px;
word-break: break-all;
word-break: break-word;
width: 100%;
display: grid;
grid-template-columns: 43px 2fr 1fr;
@@ -158,7 +188,7 @@ grid-area: icon;
}
.area-display_name {
user-select: auto;
user-select: text;
height:1.5em;
margin:2px;
margin-left:5px;
@@ -194,7 +224,10 @@ grid-area: toot;
cursor:text;
user-select: auto;
grid-area: additional;
}
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.area-actions {
padding:0;
@@ -208,7 +241,6 @@ grid-area: toot;
}
.area-vis {
margin:2px;
font-size:0.5rem !important;
grid-area: vis;
}
.area-side {
@@ -217,6 +249,9 @@ grid-area: toot;
margin:2px;
grid-area: side;
}
.btn-flat{
color:var(--color);
}
.area-side i{
margin-left:10px;
}
@@ -224,8 +259,20 @@ grid-area: toot;
margin-top:10px;
}
.action i{
font-size:1rem;
font-size:1.2rem;
margin-right:2px;
}
.action .fa-quote-right{
margin-top: 2px;
}
.actct{
color:var(--beforehover);
}
.actct:hover{
color:var(--color);
transition: 0.5s;
}
.gray {
color: gray;
}
@@ -238,6 +285,7 @@ font-size:1rem;
.toot-img {
object-fit: cover;
width: 100%;
margin-right:1px;
}
.toot img:not(.emoji-img) {
max-width: 100%;
@@ -289,6 +337,7 @@ p:not(:last-child){
.notice-box {
top: 0;
background-color:var(--notfbox);
filter: brightness(110%);
position: relative;
margin-right: 10px;
width:100%;
@@ -391,10 +440,6 @@ p:not(:last-child){
max-height: 190px;
overflow-y: scroll;
}
.u-url {
color: var(--color);
cursor: text;
}
.type-b{
display:none;
}
@@ -407,9 +452,6 @@ p:not(:last-child){
bottom:0px;
right:0px;
}
.btn-flat{
color:var(--color);
}
.toot a span.ellipsis:after{
content:"...";
}
@@ -446,4 +488,76 @@ 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);
}
.jump{
display: inline-block; animation: jump 0.75s linear infinite;
}
@keyframes jump {
0% {
transform: translateY(0);
}
25% {
transform: translateY(-16px);
}
50% {
transform: translateY(0);
}
75% {
transform: translateY(-8px);
}
100% {
transform: translateY(0);
}
}
@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{
@@ -45,6 +45,7 @@
height:1.5rem; padding:0; background-color:#757575; text-align:center;
padding:5px;
margin-bottom:1px;
width:30%;
}
.his-field-content{
height:1.5rem; padding:0; padding-left:5px;
@@ -89,4 +90,11 @@
#his-des .mention{
color: #039be5;
cursor: pointer;
}
#his-float-blocked{
display:flex; justify-content: center; align-items:center;
font-size:2rem;
width: 90%;
height: 100%;
position: absolute;
}

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) {
console.log("Welcome")
if(localStorage.getItem("ver")!=ver){
localStorage.setItem("ver", ver);
console.log("Thank you for your update");
@@ -13,12 +14,82 @@ function verck(ver) {
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";
var cl = c.length;
@@ -46,16 +117,19 @@ function verck(ver) {
var newest=mess.desk;
}
if (newest == ver) {
todo(lang_version_usever[lang].replace("{{ver}}" ,mess.desk));
//betaかWInstoreならアプデチェックしない
} else if (ver.indexOf("beta")==-1 || winstore) {
todo(lang.lang_version_usever.replace("{{ver}}" ,mess.desk));
//betaかWinstoreならアプデチェックしない
} else if (ver.indexOf("beta")!=-1 || winstore) {
}else{
localStorage.removeItem("instance")
if(localStorage.getItem("new-ver-skip")){
if(localStorage.getItem("next-ver")!=newest){
var ipc = electron.ipcRenderer;
ipc.send('update', "true");
}else{
todo(lang_version_skipver[lang]);
console.log(lang.lang_version_skipver);
todo(lang.lang_version_skipver);
}
}else{
var ipc = electron.ipcRenderer;
@@ -123,10 +197,14 @@ function verck(ver) {
}
}
});
}
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:");
@@ -172,11 +250,19 @@ function verck(ver) {
}
}
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);
}

249
app/js/lang/lang.en.js Normal file
View File

@@ -0,0 +1,249 @@
//commonError
var lang={
"language":"en",
"lang_toot":"Toot",
"lang_there":"Yes",
"lang_nothing":"None",
"lang_yesno":"Yes",
"lang_no":"No",
"lang_progress":"Wait...",
"lang_edit":"Edit",
"lang_del":"Delete",
"lang_add":"Add",
"lang_fatalerroroccured":"Some errors are occured, please restart TheDesk.",
"lang_speech":"Google US English",
//language.html
"lang_lang":"Language",
"lang_langlocale":"English",
"lang_back":"Back",
"lang_set":"Set",
"lang_langadd":"Translate TheDesk to other languages or proofread TheDesk on <a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHub</a>. TheDesk needs your help.",
//common/version.js
"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",
//login/manager.js
"lang_manager_info":"About this instance",
"lang_manager_refresh":"Refresh",
"lang_manager_delete":"Logout",
"lang_manager_color":"Account Color",
"lang_manager_confirm":"is about to logout. Continue?",
"lang_manager_mainAcct":"Done:choose main account",
"lang_manager_def":"Default",
"lang_manager_none":"None",
"lang_manager_godev":"Open DevCenter of Misskey. We show also an official documents to refer.",
//post/bb-md.js
"lang_bbmd_misskey":"TheDesk regards \"@\" as reply, but put other parameter. Unlisted on Mastodon means Home on Misskey.",
//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.",
"lang_post_cwtitle":"Auto CW Alert",
"lang_post_cwtxt":"You are about to post longer toot than you set.\nWarning text:",
"lang_post_btn1":"Cancel (will not post)",
"lang_post_btn2":"Make text hidden automatically",
"lang_post_btn3":"Continue to post",
//post/status.js
"lang_status_favWarn":"It will take a miunte to favourite a remote toot.",
"lang_status_btWarn":"It will take a miunte to boost a remote toot.",
"lang_status_follow":"Follow",
"lang_status_unfollow":"Unfollow",
"lang_status_block":"Block",
"lang_status_unblock":"Unblock",
"lang_status_mute":"Mute",
"lang_status_unmute":"Unmute",
"lang_status_redraft":"Continue to delete & redraft? You lose statuses of this toot. This fanction may contain some bugs. Images of this toot will be deleted on older than Mastodon 2.4.1.",
"lang_status_emphas":"'s toots are emphasized. Please reload after this action.",
"lang_status_unemphas":"'s toots are not emphasized. Please reload after this action.",
"lang_status_unendorse":"Not feature on profile",
"lang_status_endorse":"Feature on profile",
//post/suggest.js
"lang_suggest_nodata":"Please get emojis list in order to show suggestion.",
//post/use-txtbox.js
"lang_usetxtbox_reply":"Reply Mode. Ctrl+Shift+C to clear.",
//tl/card.js
"lang_cards_check":" check",
"lang_cards_pip":"PiP mode",
//tl/details.js
"lang_details_nodata":"No data",
"lang_details_filtered":"Filtered toot",
"lang_details_embed":"Embed HTML is cliped.",
"lang_details_url":"URL of this toot is cliped.",
"lang_details_txt":"Content of this toot is cliped.",
//tl/filter.js
"lang_filter_nodata":"No data",
"lang_filter_errordegree":"Please check a context",
//tl/list.js
"lang_list_nodata":"No data",
"lang_list_show":"Show",
"lang_list_users":"Users list",
"lang_list_nouser":"No users in this list.",
"lang_list_add":"Add to the list",
"lang_list_add_misskey":"(perhaps this user has been listed)",
"lang_list_remove":"Remove from the list",
//tl/notification.js
"lang_notf_new":" new notifications",
//tl/speech.js
"lang_speech_refresh":"Save value about TTS config",
//tl/src.js
"lang_src_ts":"chronological order",
"lang_src_people":" people toot",
//tl/tag.js
"lang_tags_always":"Always toots with ",
"lang_tags_realtime":"Tag-stream toot",
"lang_tags_tagunpin":"Unpin {{tag}}",
"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",
//ui/layout.js
"lang_layout_gotop":"Go top of this column. When icon is red, this column cannot connect straming API. Please reload.",
"lang_layout_thisacct":"{{notf}} of this account",
"lang_layout_delthis":"Remove this column",
"lang_layout_setthis":"Preferences of this column",
"lang_layout_mediafil":"Media filtering",
"lang_layout_linkana":"Auto Link Analyzer",
"lang_layout_linkanades":"Auto link analyzer",
"lang_layout_tts":"Text to speech ",
"lang_layout_reconnect":"Reconnect to streaming API",
"lang_layout_headercolor":"Header color of this column",
"lang_layout_nodata":"[No data]<br>F5/⌘+R to reload",
"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",
"lang_spotify_acct":"Connect TheDesk to Spotify",
"lang_spotify_np":"Done:templete of NowPlaying",
"lang_setting_npprovide":"NowPlaying provider:{{set}}",
//userdata/his-data.js
"lang_hisdata_frcreq":"Required Mastodon 2.4.3 and above",
"lang_hisdata_frcwarn":"Unfollow accounts will be shown.",
"lang_hisdata_taketime":"It will take 30s ~ several minutes",
"lang_hisdata_notonmisskey":"Misskey is unable to request.",
//userdata/showOnTL.js
"lang_showontl_movetxt":"This account was moved",
"lang_showontl_movebtn":"Continue on the new account",
"lang_showontl_botacct":"[bot]",
"lang_showontl_followed":"Following you",
"lang_showontl_notf":"Notification ",
"lang_showontl_domain":"Domain ",
"lang_showontl_listwarn":"Follow to add this user to lists.",
"lang_showontl_verified":"This website is verified by owner at ",
//parse
"lang_parse_mentioned":" replied to you",
"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:",
"lang_parse_autofold":"Auto folded",
"lang_parse_more":"More",
"lang_parse_url":"URL Analyzer",
"lang_parse_tagTL":"Timeline of {{tag}}",
"lang_parse_tagtoot":"Toot with {{tag}}",
"lang_parse_tagpin":"Pin {{tag}}",
"lang_parse_public":"Public",
"lang_parse_unlisted":"Unlisted",
"lang_parse_private":"Private",
"lang_parse_direct":"Direct",
"lang_parse_clickcopy":"Click to copy text of this toot",
"lang_parse_clickcopyurl":"Click to copy URL of this toot",
"lang_parse_trans":"Translate to Japanese",
"lang_parse_replyto":"Reply to this toot",
"lang_parse_bt":"Boost this toot",
"lang_parse_fav":"Favourite this toot",
"lang_parse_quote":"Quote this toot",
"lang_parse_del":"Delete this toot",
"lang_parse_pin":"Pin this toot",
"lang_parse_det":"Details via your main account.",
"lang_parse_redraft":"Delete & re-draft",
"lang_parse_followed":"Followed you",
"lang_parse_clientop":"Operation of this client",
"lang_parse_clienttxt":" will be",
"lang_parse_clientno":"done nothing",
"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",
"lang_misskeyparse_reaction":"Reaction",
"lang_misskeyparse_tagnostr":"No streaming API on Tag TLs",
"lang_misskeyparse_listnostr":"No streaming API on List TLs",
"lang_misskeyparse_home":"Home",
"lang_misskeyparse_followers":"Follower",
"lang_misskeyparse_specified":"Specified User",
"lang_misskeyparse_qt":"Misskey renote(quote) mode:Ctrl+Shift+Enter to clear",
"lang_misskeyparse_renoted":" renoted your following post.",
"lang_misskeyparse_quoted":" quoted your following post.",
"lang_misskeyparse_reacted":" reacted your following post.",
//setting
"lang_setting_time":"Time format:{{set}}",
"lang_setting_theme":"Theme:{{set}}",
"lang_setting_nsfw":"NSFW:{{set}}",
"lang_setting_cw":"CW:{{set}}",
"lang_setting_cwtext":"Default CW text:{{set}}",
"lang_setting_cws":"Always CW on:{{set}}",
"lang_setting_rp":"Reply counter:{{set}}",
"lang_setting_vis":"Default visibility:{{set}}",
"lang_setting_popup":"Popup notification:{{set}}",
"lang_setting_off":"Off",
"lang_setting_s":"s",
"lang_setting_box":"Default toot box action:{{set}}",
"lang_setting_gif":"GIF:{{set}}",
"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}}",
"lang_setting_notf":"Native notification:{{set}}",
"lang_setting_quote":"Quote format:{{set}}",
"lang_setting_via":"Via:{{set}}",
"lang_setting_mov":"Action buttons hiding:{{set}}",
"lang_setting_setasread":"Notification markers:{{set}}",
"lang_setting_main":"Default account:{{set}}",
"lang_setting_sec":"Secondary toot button:{{set}}",
"lang_setting_ksref":"Keyboard shortcuts are refreshed.",
"lang_setting_nomuting":"No client is muted.",
"lang_setting_notftest":" Notification test ",
"lang_setting_notftestprof":"Your icon is shown.",
"lang_setting_exportwarn":"Only important data will be exported. You must keep this data secure.",
"lang_setting_importwarn":"All data will be deleted.",
}

251
app/js/lang/lang.ja.js Normal file
View File

@@ -0,0 +1,251 @@
//commonError
var lang={
"language":"ja",
"lang_toot":"トゥート",
"lang_there":"あり",
"lang_nothing":"なし",
"lang_yesno":"はい",
"lang_no":"いいえ",
"lang_progress":"処理中",
"lang_edit":"編集",
"lang_del":"削除",
"lang_add":"追加",
"lang_fatalerroroccured":"エラーが発生しました。しばらく待ってから再起動してください。",
"lang_speech":"Google 日本語",
//language.html
"lang_lang":"言語",
"lang_langlocale":"日本語",
"lang_back":"戻る",
"lang_set":"設定",
"lang_langadd":"<a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHub</a>から翻訳に参加できます。英語の校正(緊急)や他言語に翻訳していただける方を募集しております。",
//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":"認証せずに見る",
//login/manager.js
"lang_manager_info":"インスタンス情報",
"lang_manager_refresh":"情報更新",
"lang_manager_delete":"削除",
"lang_manager_color":"アカウントカラーを選択",
"lang_manager_confirm":"を削除します。",
"lang_manager_mainAcct":"メインアカウントを設定しました。",
"lang_manager_def":"既定",
"lang_manager_none":"なし",
"lang_manager_godev":"MisskeyのDevセンターに移動します。同時に開かれるドキュメントを参考にログインしてください。",
//post/bb-md.js
"lang_bbmd_misskey":"TheDeskにおけるMisskeyでは、@を返信として扱いますが、全ての@は消去され別パラメータに入力されます。また、「未収載」を「ホーム」として扱います。",
//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に表示されません。(一部インスタンスを除く)",
"lang_post_cwtitle":"長文投稿の警告",
"lang_post_cwtxt":"指定文字数、行数を超えるトゥートを行おうとしています。\n自動CWのタイトル:",
"lang_post_btn1":"キャンセル(投稿しない)",
"lang_post_btn2":"自動でCWを付ける",
"lang_post_btn3":"そのまま投稿",
//post/status.js
"lang_status_favWarn":"お気に入り登録しました。インスタンスが違うときは時間がかかる場合があります。",
"lang_status_btWarn":"ブーストしました。インスタンスが違うときは時間がかかる場合があります。",
"lang_status_follow":"フォロー",
"lang_status_unfollow":"フォロー解除",
"lang_status_block":"ブロック",
"lang_status_unblock":"ブロック解除",
"lang_status_mute":"ミュート",
"lang_status_unmute":"ミュート解除",
"lang_status_redraft":"削除して再編集しますか?そのトゥートの全てのデータがリセットされます。この機能はベータ版です。画像は~v2.4.1で破棄されます。",
"lang_status_emphas":"を強調します。リロードしてください。",
"lang_status_unemphas":"を強調解除します。リロードしてください。",
"lang_status_unendorse":"紹介解除",
"lang_status_endorse":"プロフで紹介する",
//post/suggest.js
"lang_suggest_nodata":"サジェストのために絵文字リストを取得してください。",
//post/use-txtbox.js
"lang_usetxtbox_reply":"返信モードです。クリアするときはCtrl+Shift+Cを押してください。",
//tl/card.js
"lang_cards_check":"チェック",
"lang_cards_pip":"ながら観モード",
//tl/details.js
"lang_details_nodata":"データなし",
"lang_details_filtered":"フィルターされました。",
"lang_details_embed":"埋め込みHTMLがコピーされました。",
"lang_details_url":"トゥートURLがコピーされました。",
"lang_details_txt":"トゥート本文がコピーされました。",
//tl/filter.js
"lang_filter_nodata":"フィルターはありません",
"lang_filter_errordegree":"適応範囲を最低一つ以上チェックしてください。",
//tl/list.js
"lang_list_nodata":"リストはありません",
"lang_list_show":"表示",
"lang_list_users":"ユーザー一覧",
"lang_list_nouser":"ユーザーはいません",
"lang_list_add":"リストに追加",
"lang_list_add_misskey":"(重複追加の可能性があります)",
"lang_list_remove":"リストから削除",
//tl/notification.js
"lang_notf_new":"件の新しい通知",
//tl/speech.js
"lang_speech_refresh":"音声読み上げ設定を更新しました。",
//tl/src.js
"lang_src_ts":"時系列",
"lang_src_people":"人がトゥート",
//tl/tag.js
"lang_tags_always":"常に",
"lang_tags_realtime":"実況",
"lang_tags_tagunpin":"{{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}}",
"lang_layout_delthis":"このカラムを削除",
"lang_layout_setthis":"このカラムの設定",
"lang_layout_mediafil":"メディアフィルター",
"lang_layout_linkana":"リンク解析",
"lang_layout_linkanades":"リンクの解析を切り替え",
"lang_layout_tts":"読み上げ",
"lang_layout_reconnect":"ストリーミング再接続",
"lang_layout_headercolor":"TLヘッダーカラー",
"lang_layout_nodata":"[ここにトゥートはありません。]<br>F5/⌘+Rで再読込できます。",
"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":"アルバムアートワークを添付しません。",
"lang_spotify_acct":"アカウント連携をしてください。",
"lang_spotify_np":"NowPlaying文書を更新しました。",
"lang_setting_npprovide":"NowPlayingのソースを{{set}}に設定しました。",
//userdata/his-data.js
"lang_hisdata_frcreq":"Mastodon 2.4.3~が必要です",
"lang_hisdata_frcwarn":"非フォローだけど絡みがある時に表示されます。",
"lang_hisdata_taketime":"30秒から数分かかります",
"lang_hisdata_notonmisskey":"このシステムはMisskeyにはありません。",
//userdata/showOnTL.js
"lang_showontl_movetxt":"このアカウントは移行しています",
"lang_showontl_movebtn":"移行先を見る",
"lang_showontl_botacct":"botアカウント",
"lang_showontl_followed":"フォローされています",
"lang_showontl_notf":"通知",
"lang_showontl_domain":"ドメイン",
"lang_showontl_listwarn":"リストに追加するためにはフォローが必要です。",
"lang_showontl_verified":"このユーザーの所持するWebサイトであると証明されています。",
//parse
"lang_parse_mentioned":"が返信しました",
"lang_parse_faved":"がお気に入り登録しました",
"lang_parse_bted":"がブーストしました",
"lang_parse_btedsimple":"がブースト",
"lang_parse_polled":"のアンケート",
"lang_parse_notftime":"通知された時間",
"lang_parse_cwshow":"見る",
"lang_parse_fulltext":"以下全文",
"lang_parse_autofold":"自動折り畳み",
"lang_parse_more":"続き...",
"lang_parse_url":"URL解析",
"lang_parse_tagTL":"{{tag}}のタイムライン",
"lang_parse_tagtoot":"{{tag}}でトゥート",
"lang_parse_tagpin":"{{tag}}をよく使うタグへ",
"lang_parse_public":"公開",
"lang_parse_unlisted":"未収載",
"lang_parse_private":"非公開",
"lang_parse_direct":"ダイレクト",
"lang_parse_clickcopy":"クリックして本文をコピー",
"lang_parse_clickcopyurl":"クリックしてトゥートURLをコピー",
"lang_parse_trans":"このトゥートを日本語に翻訳",
"lang_parse_replyto":"このトゥートに返信",
"lang_parse_bt":"このトゥートをブースト",
"lang_parse_fav":"このトゥートをお気に入り登録",
"lang_parse_quote":"このトゥートを引用",
"lang_parse_del":"このトゥートを削除",
"lang_parse_pin":"このトゥートをピン留め",
"lang_parse_det":"詳細(メインアカウント経由)",
"lang_parse_redraft":"このトゥートを削除して再編集",
"lang_parse_followed":"フォローされました。",
"lang_parse_clientop":"クライアント処理",
"lang_parse_clienttxt":"に対する処理を選択してください。",
"lang_parse_clientno":"何もしない",
"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":"引用",
"lang_misskeyparse_reaction":"リアクション",
"lang_misskeyparse_tagnostr":"タグTLはストリーミング非対応です。",
"lang_misskeyparse_listnostr":"リストTLはストリーミング非対応です。",
"lang_misskeyparse_home":"ホーム",
"lang_misskeyparse_followers":"フォロワー",
"lang_misskeyparse_specified":"ユーザー指定",
"lang_misskeyparse_qt":"MisskeyのRenote(引用モード)中:Ctrl+Shift+Cでクリア",
"lang_misskeyparse_renoted":"がRepost",
"lang_misskeyparse_quoted":"が引用",
"lang_misskeyparse_reacted":"がリアクション",
//setting
"lang_setting_time":"時間設定を{{set}}に設定しました。",
"lang_setting_theme":"テーマ設定を{{set}}に設定しました。",
"lang_setting_nsfw":"画像表示設定を{{set}}に設定しました。",
"lang_setting_cw":"テキスト表示設定を{{set}}に設定しました。",
"lang_setting_cwtext":"デフォルトの警告文を「{{set}}」に設定しました。",
"lang_setting_cws":"標準でCW:{{set}}",
"lang_setting_rp":"リプライ数表示:{{set}}",
"lang_setting_vis":"デフォルトの公開設定を{{set}}に設定しました。",
"lang_setting_popup":"ポップアップお知らせを{{set}}に設定しました。",
"lang_setting_off":"オフ",
"lang_setting_s":"秒",
"lang_setting_box":"デフォルトでのボックスの挙動を{{set}}に設定しました。",
"lang_setting_gif":"アイコンアニメーション再生を{{set}}に設定しました。",
"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}}に設定しました。",
"lang_setting_notf":"ネイティブ通知を{{set}}に設定しました。",
"lang_setting_quote":"引用形式を{{set}}に設定しました。",
"lang_setting_via":"via表示を{{set}}に設定しました。",
"lang_setting_mov":"アクションボタン非表示を{{set}}に設定しました。",
"lang_setting_setasread":"通知カラム存在時新着非表示を{{set}}に設定しました。",
"lang_setting_main":"起動時・投稿時のアカウントを{{set}}に設定しました。",
"lang_setting_sec":"セカンダリートゥートボタン:{{set}}",
"lang_setting_ksref":"キーボードショートカットが更新されました。",
"lang_setting_nomuting":"ミュートしているクライアントはありません。",
"lang_setting_notftest":"通知テスト",
"lang_setting_notftestprof":"アイコンはあなたのアカウントのものです。",
"lang_setting_exportwarn":"重要なデータのみエクスポートされます。エクスポートされたデータは外部に公開しないでください。全ての認証データが含まれています。",
"lang_setting_importwarn":"全てのデータがリセットされます。"
}

View File

@@ -1,454 +0,0 @@
//commonError
var lang_toot={
"ja":"トゥート",
"en":"Toot"
}
var lang_there={
"ja":"あり",
"en":"Yes"
}
var lang_nothing={
"ja":"なし",
"en":"None"
}
var lang_yesno={
"ja":"はい",
"en":"Yes"
}
var lang_no={
"ja":"いいえ",
"en":"No"
}
var lang_progress={
"ja":"処理中",
"en":"Wait..."
}
var lang_edit={
"ja":"編集",
"en":"Edit"
}
var lang_del={
"ja":"削除",
"en":"Delete"
}
var lang_add={
"ja":"追加",
"en":"Add"
}
var lang_fatalerroroccured={
"ja":"エラーが発生しました。しばらく待ってから再起動してください。",
"en":"Some errors are occured, please restart TheDesk."
}
var lang_speech={
"ja":"Google 日本語",
"en":"Google US English"
}
//language.html
var lang_lang={
"ja":"言語",
"en":"Language"
}
var lang_langlocale={
"ja":"日本語",
"en":"English"
}
var lang_back={
"ja":"戻る",
"en":"Back"
}
var lang_set={
"ja":"設定",
"en":"Set"
}
var lang_langadd={
"ja":"<a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHub</a>から翻訳に参加できます。英語の校正(緊急)や他言語に翻訳していただける方を募集しております。",
"en":"Translate TheDesk to other languages or proofread TheDesk on <a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHub</a>. TheDesk needs your help."
}
//common/version.js
var lang_version_usever={
"ja":"お使いのバージョン{{ver}}は最新です。",
"en":"No update is found({{ver}})"
}
var lang_version_skipver={
"ja":"アップデートはスキップされました。",
"en":"Update was ignored."
}
//login
//login/login.js
var lang_login_noauth={
"ja":"認証せずに見る",
"en":"Show TL of unlogined accounts"
}
//login/manager.js
var lang_manager_info={
"ja":"インスタンス情報",
"en":"About this instance"
}
var lang_manager_refresh={
"ja":"情報更新",
"en":"Refresh"
}
var lang_manager_delete={
"ja":"削除",
"en":"Logout"
}
var lang_manager_color={
"ja":"アカウントカラーを選択",
"en":"Account Color"
}
var lang_manager_confirm={
"ja":"を削除します。",
"en":"is about to logout. Continue?"
}
var lang_manager_mainAcct={
"ja":"メインアカウントを設定しました。",
"en":"Done:choose main account"
}
var lang_manager_def={
"ja":"既定",
"en":"Default"
}
var lang_manager_none={
"ja":"なし",
"en":"None"
}
var lang_manager_godev={
"ja":"MisskeyのDevセンターに移動します。同時に開かれるドキュメントを参考にログインしてください。",
"en":"Open DevCenter of Misskey. We show also an official documents to refer."
}
//post/bb-md.js
var lang_bbmd_misskey={
"ja":"TheDeskにおけるMisskeyでは、@を返信として扱いますが、全ての@は消去され別パラメータに入力されます。また、「未収載」を「ホーム」として扱います。",
"en":"TheDesk regards \"@\" as reply, but put other parameter. Unlisted on Mastodon means Home on Misskey."
}
//post/emoji.js
var lang_emoji_get={
"ja":"絵文字リストを取得",
"en":"Get emojis"
}
var lang_emoji_custom={
"ja":"カスタム絵文字",
"en":"Custom emojis"
}
//post/img.js
var lang_postimg_previewdis={
"ja":"プレビューできません。",
"en":"cannot preview"
}
var lang_postimg_aftupload={
"ja":"アップロード後はアカウントを切り替えられません。",
"en":"You cannot change accounts after uploading."
}
//post/post.js
var lang_post_tagTL={
"ja":"デフォルトタグが挿入されていません。このまま投稿するとローカルには表示されません。",
"en":"This toot does not contain a default tag. This toot will not be shown on Local TL. Continue?"
}
var lang_post_cwtitle={
"ja":"長文投稿の警告",
"en":"Auto CW Alert"
}
var lang_post_cwtxt={
"ja":"指定文字数、行数を超えるトゥートを行おうとしています。\n自動CWのタイトル:",
"en":"You are about to post longer toot than you set.\nWarning text:"
}
var lang_post_btn1={
"ja":"キャンセル(投稿しない)",
"en":"Cancel (will not post)"
}
var lang_post_btn2={
"ja":"自動でCWを付ける",
"en":"Make text hidden automatically"
}
var lang_post_btn3={
"ja":"そのまま投稿",
"en":"Continue to post"
}
//post/status.js
var lang_status_favWarn={
"ja":"お気に入り登録しました。インスタンスが違うときは時間がかかる場合があります。",
"en":"It will take a miunte to favourite a remote toot."
}
var lang_status_btWarn={
"ja":"ブーストしました。インスタンスが違うときは時間がかかる場合があります。",
"en":"It will take a miunte to boost a remote toot."
}
var lang_status_follow={
"ja":"フォロー",
"en":"Follow"
}
var lang_status_unfollow={
"ja":"フォロー解除",
"en":"Unfollow"
}
var lang_status_block={
"ja":"ブロック",
"en":"Block"
}
var lang_status_unblock={
"ja":"ブロック解除",
"en":"Unblock"
}
var lang_status_mute={
"ja":"ミュート",
"en":"Mute"
}
var lang_status_unmute={
"ja":"ミュート解除",
"en":"Unmute"
}
var lang_status_redraft={
"ja":"削除して再編集しますか?そのトゥートの全てのデータがリセットされます。この機能はベータ版です。画像は~v2.4.1で破棄されます。",
"en":"Continue to delete & redraft? You lose statuses of this toot. This fanction may contain some bugs. Images of this toot will be deleted on older than Mastodon 2.4.1."
}
var lang_status_emphas={
"ja":"を強調します。リロードしてください。",
"en":"'s toots are emphasized. Please reload after this action."
}
var lang_status_unemphas={
"ja":"を強調解除します。リロードしてください。",
"en":"'s toots are not emphasized. Please reload after this action."
}
var lang_status_unendorse={
"ja":"紹介解除",
"en":"Not feature on profile"
}
var lang_status_endorse={
"ja":"プロフで紹介する",
"en":"Feature on profile"
}
//post/suggest.js
var lang_suggest_nodata={
"ja":"サジェストのために絵文字リストを取得してください。",
"en":"Please get emojis list in order to show suggestion."
}
//post/use-txtbox.js
var lang_usetxtbox_reply={
"ja":"返信モードです。クリアするときはCtrl+Shift+Cを押してください。",
"en":"Reply Mode. Ctrl+Shift+C to clear."
}
//tl/card.js
var lang_cards_check={
"ja":"チェック",
"en":" check"
}
var lang_cards_pip={
"ja":"ながら観モード",
"en":"PiP mode"
}
//tl/details.js
var lang_details_nodata={
"ja":"データなし",
"en":"No data"
}
var lang_details_filtered={
"ja":"フィルターされました。",
"en":"Filtered toot"
}
var lang_details_embed={
"ja":"埋め込みHTMLがコピーされました。",
"en":"Embed HTML is cliped."
}
var lang_details_url={
"ja":"トゥートURLがコピーされました。",
"en":"URL of this toot is cliped."
}
var lang_details_txt={
"ja":"トゥート本文がコピーされました。",
"en":"Content of this toot is cliped."
}
//tl/filter.js
var lang_filter_nodata={
"ja":"フィルターはありません",
"en":"No data"
}
var lang_filter_errordegree={
"ja":"適応範囲を最低一つ以上チェックしてください。",
"en":"Please check a context"
}
//tl/list.js
var lang_list_nodata={
"ja":"リストはありません",
"en":"No data"
}
var lang_list_show={
"ja":"表示",
"en":"Show"
}
var lang_list_users={
"ja":"ユーザー一覧",
"en":"Users list"
}
var lang_list_nouser={
"ja":"ユーザーはいません",
"en":"No users in this list."
}
var lang_list_add={
"ja":"リストに追加",
"en":"Add to the list"
}
var lang_list_remove={
"ja":"リストから削除",
"en":"Remove from the list"
}
//tl/notification.js
var lang_notf_new={
"ja":"件の新しい通知",
"en":" new notifications"
}
//tl/speech.js
var lang_speech_refresh={
"ja":"音声読み上げ設定を更新しました。",
"en":"Save valie about TTS config"
}
//tl/src.js
var lang_src_ts={
"ja":"時系列",
"en":"chronological order"
}
var lang_src_people={
"ja":"人がトゥート",
"en":" people toot"
}
//tl/tag.js
var lang_tags_always={
"ja":"常に",
"en":"Always toots with "
}
var lang_tags_realtime={
"ja":"実況",
"en":"Tag-stream toot"
}
var lang_tags_tagunpin={
"ja":"{{tag}}をよく使うタグから削除",
"en":"Unpin {{tag}}"
}
var lang_tags_tagwarn={
"ja":"次に{{tag}}なしでトゥートするまで全てのトゥートに{{tag}}が付与されます。",
"en":"When you toot without {{tag}}, tag-streaming mode will be off."
}
//tl/tl.js
var lang_tl_media={
"ja":"メディア",
"en":"Media"
}
var lang_tl_reconnect={
"ja":"Streamingに再接続しました",
"en":"Reconnect to streaming API"
}
//ui/layout.js
var lang_layout_gotop={
"ja":"一番上へ。アイコンが赤のときはストリーミングに接続できていません。F5等で再読込をお試し下さい。",
"en":"Go top of this column. When icon is red, this column cannot connect straming API. Please reload."
}
var lang_layout_thisacct={
"ja":"このアカウントの{{notf}}",
"en":"{{notf}} of this account"
}
var lang_layout_delthis={
"ja":"このカラムを削除",
"en":"Remove this column"
}
var lang_layout_setthis={
"ja":"このカラムの設定",
"en":"Preferences of this column"
}
var lang_layout_mediafil={
"ja":"メディアフィルター",
"en":"Media filtering"
}
var lang_layout_linkana={
"ja":"リンク解析",
"en":"Auto Link Analyzer"
}
var lang_layout_linkanades={
"ja":"リンクの解析を切り替え(OFFで制限を回避出来る場合があります)",
"en":"Auto link analyzer(You may got limitation of API)"
}
var lang_layout_tts={
"ja":"読み上げ",
"en":"Text to speech "
}
var lang_layout_reconnect={
"ja":"ストリーミング再接続",
"en":"Reconnect to streaming API"
}
var lang_layout_headercolor={
"ja":"TLヘッダーカラー",
"en":"Header color of this column"
}
var lang_layout_nodata={
"ja":"[ここにトゥートはありません。]<br>F5/⌘+Rで再読込できます。",
"en":"[No data]<br>F5/⌘+R to reload"
}
var lang_layout_dm={
"ja":"ダイレクトメッセージ",
"en":"Direct Message"
}
var lang_layout_webviewmode={
"ja":"WebView優先",
"en":"Prefer WebView"
}
//ui/spotify.js
var lang_spotify_img={
"ja":"アルバムアートワークを添付します。",
"en":"Attach an album artwork"
}
var lang_spotify_imgno={
"ja":"アルバムアートワークを添付しません。",
"en":"Not ttach an album artwork"
}
var lang_spotify_acct={
"ja":"アカウント連携をしてください。",
"en":"Connect TheDesk to Spotify"
}
var lang_spotify_np={
"ja":"NowPlaying文書を更新しました。",
"en":"Done:templete of NowPlaying"
}
//userdata/his-data.js
var lang_hisdata_frcreq={
"ja":"Mastodon 2.4.3~が必要です",
"en":"Required Mastodon 2.4.3 and above"
}
var lang_hisdata_frcwarn={
"ja":"非フォローだけど絡みがある時に表示されます。",
"en":"Unfollow accounts will be shown."
}
var lang_hisdata_taketime={
"ja":"30秒から数分かかります",
"en":"It will take 30s ~ several minutes"
}
var lang_hisdata_notonmisskey={
"ja":"このシステムはMisskeyにはありません。",
"en":"Misskey is unable to request."
}
//userdata/showOnTL.js
var lang_showontl_movetxt={
"ja":"このアカウントは移行しています",
"en":"This account was moved"
}
var lang_showontl_movebtn={
"ja":"移行先を見る",
"en":"Continue on the new account"
}
var lang_showontl_botacct={
"ja":"botアカウント",
"en":"[bot]"
}
var lang_showontl_followed={
"ja":"フォローされています",
"en":"Following you"
}
var lang_showontl_notf={
"ja":"通知",
"en":"Notification "
}
var lang_showontl_domain={
"ja":"ドメイン",
"en":"Domain "
}
var lang_showontl_listwarn={
"ja":"リストに追加するためにはフォローが必要です。",
"en":"Follow to add this user to lists."
}

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,148 +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_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

@@ -8,17 +8,17 @@ var idata={
"kirishima.cloud_glitch":"enabled",
"kirishima.cloud_public":"パブリックタイムライン",
"minohdon.jp":"instance",
"minohdon.jp_name":"箕面",
"minohdon.jp_name":"箕面どん",
"minohdon.jp_letters":"500",
"minohdon.jp_bbcode":"disabled",
"minohdon.jp_markdown":"disabled",
"minohdon.jp_glitch":"disabled",
"knzk.me":"instance",
"knzk.me_name":"神崎丼",
"knzk.me_name":"Knzk",
"knzk.me_letters":"5000",
"knzk.me_bbcode":"disabled",
"knzk.me_markdown":"disabled",
"knzk.me_glitch":"enabled",
"knzk.me_glitch":"disabled",
"mastodos.com":"instance",
"mastodos.com_name":"マストどす",
"mastodos.com_letters":"500",
@@ -32,7 +32,7 @@ var idata={
"dev.kirishima.cloud_markdown":"enabled",
"dev.kirishima.cloud_glitch":"enabled",
"mstdn.y-zu.org":"instance",
"mstdn.y-zu.org_name":"Yづドン!(502 BadGateway)",
"mstdn.y-zu.org_name":"Yづドン(Y-zuDon)",
"mstdn.y-zu.org_letters":"500",
"mstdn.y-zu.org_bbcode":"disabled",
"mstdn.y-zu.org_markdown":"enabled",
@@ -84,20 +84,14 @@ var idata={
"itabashi.0j0.jp_bbcode":"disabled",
"itabashi.0j0.jp_markdown":"disabled",
"itabashi.0j0.jp_glitch":"disabled",
"theboss.tech":"instance",
"theboss.tech_name":"theboss.tech",
"theboss.tech_letters":"1000",
"theboss.tech_bbcode":"disabled",
"theboss.tech_markdown":"disabled",
"theboss.tech_glitch":"disabled",
"dtp-mstdn.jp":"instance",
"dtp-mstdn.jp_name":"DTP鯖",
"dtp-mstdn.jp_letters":"500",
"dtp-mstdn.jp_bbcode":"disabled",
"dtp-mstdn.jp_markdown":"disabled",
"dtp-mstdn.jp_glitch":"disabled",
"misskey.xyz":"instance",
"misskey.xyz_name":"Misskey",
"misskey.xyz":"misskey",
"misskey.xyz_name":"misskey.xyz",
"misskey.xyz_letters":"1000",
"misskey.xyz_bbcode":"disabled",
"misskey.xyz_markdown":"enabled",
@@ -105,6 +99,28 @@ var idata={
"misskey.xyz_post":"Post",
"misskey.xyz_fav":" reacted your post.",
"misskey.xyz_bt":" reposted your post.",
"misskey.dev":"misskey",
"misskey.dev_name":"misskey.dev",
"misskey.dev_letters":"1024",
"misskey.dev_bbcode":"disabled",
"misskey.dev_markdown":"enabled",
"misskey.dev_public":"Global",
"misskey.dev_post":"Post",
"misskey.dev_fav":" reacted your post.",
"misskey.dev_bt":" reposted your post.",
"precure.ml":"instance",
"precure.ml_name":"キュアスタ!",
"precure.ml_letters":"1024",
"precure.ml_bbcode":"disabled",
"precure.ml_markdown":"disabled",
"precure.ml_post":"キュア!",
"precure.ml_glitch":"disabled",
"best-friends.chat":"instance",
"best-friends.chat_name":"Best Friends",
"best-friends.chat_letters":"500",
"best-friends.chat_bbcode":"disabled",
"best-friends.chat_markdown":"disabled",
"best-friends.chat_glitch":"disabled",
};
localStorage.setItem("instance", JSON.stringify(idata));

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,17 +41,25 @@ function ck() {
}else{
}
}
if (at) {
$("#tl").show();
parseColumn();
multiSelector();
} else {
var multi = localStorage.getItem("multi");
if(!multi || multi=="[]"){
location.href="acct.html?mode=first&code=true"
}else{
var obj = JSON.parse(multi);
Object.keys(obj).forEach(function(key) {
var acct=obj[key];
if(acct.domain){
refresh(key,true)
}
});
if (obj[0].domain) {
$("#tl").show();
ticker();
multiSelector();
verck(ver);
}
}
}
ck();
//ログインポップアップ
function login(url) {
@@ -64,7 +73,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 +81,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 +92,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);
@@ -173,7 +180,7 @@ function getdata() {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast(lang_fatalerroroccured[lang]+"Error:" + json.error,
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
5000);
return;
}
@@ -223,14 +230,14 @@ function getdataAdv(domain, at) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast(lang_fatalerroroccured[lang]+"Error:" + json.error,
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
5000);
return;
}
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 +268,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"){
@@ -285,7 +292,7 @@ function refresh(target) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast(lang_fatalerroroccured[lang]+"Error:" + json.error,
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
5000);
return;
}
@@ -313,8 +320,9 @@ function refresh(target) {
obj[target] = ref;
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
load();
if(!loadskip){
load();
}
});
}
//MarkdownやBBCodeの対応、文字数制限をチェック
@@ -330,7 +338,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 +396,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"){
@@ -444,14 +452,15 @@ function multiSelector() {
var sel;
if(obj.length<1){
$("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
$("#add-acct-sel").html('<option value="noauth">'+lang_login_noauth[lang]+'</option>');
$("#add-acct-sel").html('<option value="noauth">'+lang.lang_login_noauth+'</option>');
}else{
Object.keys(obj).forEach(function(key) {
var acct = obj[key];
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 +474,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_toot[lang]+"("+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);
@@ -498,9 +514,10 @@ function multiSelector() {
});
$("#src-acct-sel").append('<option value="tootsearch">Tootsearch</option>');
$("#add-acct-sel").append('<option value="noauth">'+lang_login_noauth[lang]+'</option><option value="webview">Twitter</option>');
$("#add-acct-sel").append('<option value="noauth">'+lang.lang_login_noauth+'</option><option value="webview">Twitter</option>');
}
$('select').material_select('update');
parseColumn();
}
//バージョンエンコ
@@ -512,3 +529,24 @@ function enc(ver){
var ver = ver.replace( /\]/g , "" );
return ver;
}
//インスタンスティッカー
function ticker() {
var start = "https://toot.app/toot/";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json'
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
console.error(error);
}).then(function(json) {
if (json.error) {
return;
}
if(json){
localStorage.setItem("ticker", JSON.stringify(json));
}
});
}

View File

@@ -2,6 +2,15 @@
//最初に読むやつ
function load() {
$("#acct-list").html("");
if(location.search){
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
var mode=m[1];
var codex=m[2];
if(mode=="first" && codex=="true"){
$("body").addClass("first")
}else{
}
}
var prof = localStorage.getItem("prof");
$(".my-prof").attr("src", prof);
var name = localStorage.getItem("name");
@@ -43,11 +52,11 @@ function load() {
name + '</span>' + escapeHTML(acct.user) + '@' + acct.domain +
'</div><div class="card-action"><a class="waves-effect disTar pointer white-text" onclick="data(\'' +
acct.domain +
'\')"><i class="material-icons">info</i>'+lang_manager_info[lang]+'</a><a class="waves-effect disTar pointer white-text" onclick="refresh(' +
'\')"><i class="material-icons">info</i>'+lang.lang_manager_info+'</a><a class="waves-effect disTar pointer white-text" onclick="refresh(' +
key +
')"><i class="material-icons">refresh</i>'+lang_manager_refresh[lang]+'</a><a class="waves-effect disTar pointer red-text" onclick="multiDel(' +
')"><i class="material-icons">refresh</i>'+lang.lang_manager_refresh+'</a><a class="waves-effect disTar pointer red-text" onclick="multiDel(' +
key +
')"><i class="material-icons">delete</i>'+lang_manager_delete[lang]+'</a><br>'+lang_manager_color[lang]+'<div id="colorsel_'+key+'" class="colorsel"></div></div></div>';
')"><i class="material-icons">delete</i>'+lang.lang_manager_delete+'</a><br>'+lang.lang_manager_color+'<div id="colorsel_'+key+'" class="colorsel"></div></div></div>';
$("#acct-list").append(templete);
colorpicker(key)
});
@@ -57,14 +66,8 @@ function load() {
localStorage.setItem("acct", 0);
var acctN = 0;
}
var electron = require("electron");
var remote=electron.remote;
var platform=remote.process.platform;
if(platform=="win32"){
}else{
$("#linux").prop("checked", true);
}
//全部チェックアリでいいと思うの
$("#linux").prop("checked", true);
}
//最初に読む
@@ -82,7 +85,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',
@@ -141,7 +144,7 @@ function multiDel(target) {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
//削除確認ダイアログ
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] +lang_manager_confirm[lang])) {
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] +lang.lang_manager_confirm)) {
Object.keys(obj).forEach(function(key) {
var nk=key-1;
//公開範囲(差分のみ)
@@ -175,6 +178,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,13 +203,13 @@ function multiDel(target) {
});
var json = JSON.stringify(newcols);
localStorage.setItem("column", json);
load();
}
}
function multiDel2(target) {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] +lang_manager_confirm[lang])) {
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] +lang.lang_manager_confirm)) {
obj.splice(target, 1);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
@@ -261,6 +265,10 @@ function support() {
templete = '<a onclick="login(\'' + key +
'\')" class="collection-item pointer transparent">' + idata[key + "_name"] + '(' + key + ')</a>';
$("#support").append(templete);
}else if (instance == "misskey") {
templete = '<a onclick="misskeyLogin(\'' + key +
'\')" class="collection-item pointer transparent">' + idata[key + "_name"] + '(' + key + ')</a>';
$("#support").append(templete);
}
});
}
@@ -269,7 +277,7 @@ function support() {
function login(url) {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
if($('#misskey:checked').val()=="on" || url=="misskey.xyz"){
if($('#misskey:checked').val()=="on"){
$("#misskey").prop("checked", true);
misskeyLogin(url);
return;
@@ -285,7 +293,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 +301,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,42 +333,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;
}else{
var mkc=$("#misskey-key").val();
localStorage.setItem("mkc",mkc)
if(!mkc){
$("#misskeylogin").show();
$("#misskey-url").val(url);
if(confirm(lang_manager_godev[lang])){
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 {
@@ -373,11 +402,8 @@ function misskeyLogin(url) {
$("#misskey").prop("checked", false);
localStorage.setItem("domain_tmp",url);
shell.openExternal(json.url);
var electron = require("electron");
}
}
}
//テキストボックスにURL入れた
@@ -405,13 +431,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);
@@ -439,7 +465,9 @@ function code(code) {
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
if($("body").hasClass("first")){
location.href="index.html"
}
load();
return;
}
@@ -452,7 +480,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",
@@ -461,7 +489,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"]) {
@@ -492,14 +520,14 @@ function getdata(domain, at) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast(lang_fatalerroroccured[lang]+"Error:" + json.error,
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
5000);
return;
}
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"];
@@ -527,6 +555,9 @@ function getdata(domain, at) {
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
if($("body").hasClass("first")){
location.href="index.html"
}
load();
});
}
@@ -557,7 +588,7 @@ function refresh(target) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast(lang_fatalerroroccured[lang]+"Error:" + json.error,
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
5000);
return;
}
@@ -593,13 +624,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;
@@ -646,19 +677,19 @@ function multisel() {
console.log(obj.length)
if(obj.length<1){
$("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
$("#add-acct-sel").html('<option value="noauth">'+lang_login_noauth[lang]+'</option>');
$("#add-acct-sel").html('<option value="noauth">'+lang.lang_login_noauth+'</option>');
}else{
Object.keys(obj).forEach(function(key) {
var acct = obj[key];
var list = key * 1 + 1;
if (key == last) {
sel = "selected";
mainb='('+lang_manager_def[lang]+')'
mainb='('+lang.lang_manager_def+')'
var domain = localStorage.getItem("domain_" + key);
var profimg=localStorage.getItem("prof_"+key);
var domain=localStorage.getItem("domain_"+key);
if(!profimg){
profimg="./img/missing.svg";
profimg="../../img/missing.svg";
}
} else {
sel = "";
@@ -676,11 +707,11 @@ function multisel() {
function mainacct(){
var acct_id = $("#main-acct-sel").val();
localStorage.setItem("main", acct_id);
Materialize.toast(lang_manager_mainAcct[lang], 3000);
Materialize.toast(lang.lang_manager_mainAcct, 3000);
}
function colorpicker(key){
temp=
'<div onclick="coloradd('+key+',\'def\',\'def\')" class="pointer exc">'+lang_manager_none[lang]+'</div>'+
'<div onclick="coloradd('+key+',\'def\',\'def\')" class="pointer exc">'+lang.lang_manager_none+'</div>'+
'<div onclick="coloradd('+key+',\'f44336\',\'white\')" class="red white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'e91e63\',\'white\')" class="pink white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'9c27b0\',\'white\')" class="purple white-text pointer"></div>'+

View File

@@ -19,7 +19,7 @@
//メンションっぽかったら
var ats=[];
ats = url.match(
/https:\/\/([-a-zA-Z0-9@.]+)\/@([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#]+)/
/https:\/\/([-a-zA-Z0-9.]+)\/@([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#@]+)/
);
console.log(toot);
if(toot){
@@ -41,7 +41,8 @@
}else if(ats){
console.log(ats);
if(ats[2]){
if(ats[1]!="quesdon.rinsuki.net"){
//Quesdon判定
if(!~ats[2].indexOf("@")){
udgEx(ats[2]+"@"+ats[1],"main");
return false
}else{
@@ -58,9 +59,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 +80,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;
@@ -113,28 +111,7 @@
}
return ret;
};
$.strip_tags = function(str, allowed) {
if(!str){
return "";
}
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
.join('');
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
};
function escapeHTML(str) {
if(!str){
return "";
}
return str.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;');
}
//コピー
function execCopy(string){
var temp = $("#copy");
@@ -157,7 +134,7 @@ function progshow(e) {
if(percent<1){
$("#imgup").text(Math.floor(percent*100)+"%");
}else{
$("#imgup").text(lang_progress[lang]);
$("#imgup").text(lang.lang_progress);
}
}
}
@@ -193,4 +170,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

@@ -1,3 +1,160 @@
//jQuery読む
window.jQuery = window.$ = require('../../js/common/jquery.js');
var Hammer = require('../../js/common/hammer.min.js');
var Hammer = require('../../js/common/hammer.min.js');
$.strip_tags = function(str, allowed) {
if(!str){
return "";
}
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
.join('');
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
};
function escapeHTML(str) {
if(!str){
return "";
}
return str.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;');
}
//PHPのnl2brと同様
function nl2br(str) {
if(!str){
return "";
}
str = str.replace(/\r\n/g, "<br />");
str = str.replace(/(\n|\r)/g, "<br />");
return str;
}
function formattime(date){
var str=date.getFullYear()+"-";
if(date.getMonth()+1<10){
str=str+"0"+(date.getMonth()+1)+"-";
}else{
str=str+(date.getMonth()+1)+"-";
}
if(date.getDate()<10){
str=str+"0"+date.getDate()
}else{
str=str+date.getDate()
}
str=str+"T";
if(date.getHours()<10){
str=str+"0"+date.getHours()+":"
}else{
str=str+date.getHours()+":"
}
if(date.getMinutes()<10){
str=str+"0"+date.getMinutes()
}else{
str=str+date.getMinutes()
}
return str;
}
function formattimeutc(date){
var str=date.getUTCFullYear()+"-";
if(date.getUTCMonth()+1<10){
str=str+"0"+(date.getUTCMonth()+1)+"-";
}else{
str=str+(date.getUTCMonth()+1)+"-";
}
if(date.getUTCDate()<10){
str=str+"0"+date.getUTCDate()
}else{
str=str+date.getUTCDate()
}
str=str+"T";
if(date.getUTCHours()<10){
str=str+"0"+date.getUTCHours()+":"
}else{
str=str+date.getUTCHours()+":"
}
if(date.getUTCMinutes()<10){
str=str+"0"+date.getUTCMinutes()
}else{
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,13 +4,13 @@ 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)){
$("#toot-post-btn").text(localStorage.getItem("post_" + acct_id)+"("+localStorage.getItem("domain_"+acct_id)+")");
}else{
$("#toot-post-btn").text(lang_toot[lang]+"("+localStorage.getItem("domain_"+acct_id)+")");
$("#toot-post-btn").text(lang.lang_toot+"("+localStorage.getItem("domain_"+acct_id)+")");
}
if(!localStorage.getItem("bb_"+acct_id) && !localStorage.getItem("md_"+acct_id)){
$(".markdown").addClass("hide");
@@ -40,17 +40,17 @@ function mdCheck(){
$("#trendtag").html("");
}
if(localStorage.getItem("mode_" + domain)=="misskey"){
Materialize.toast(lang_bbmd_misskey[lang], 5000);
Materialize.toast(lang.lang_bbmd_misskey, 5000);
}
if(idata[domain+"_letters"]){
$("#textarea").attr("data-length", idata[domain+"_letters"])
}else{
$("#textarea").attr("data-length", 500)
}
if(idata[domain+"_glitch"]){
if(idata[domain+"_glitch"]==="true"){
$("#local-button").removeClass("hide");
}else{
$("#local-button").removeClass("hide");
$("#local-button").addClass("hide");
}
var multi = localStorage.getItem("multi");
if (multi) {
@@ -117,15 +117,6 @@ if(localStorage.getItem("md")=="hide"){
}[match]
});
}
//PHPのnl2brと同様
function nl2br(str) {
if(!str){
return "";
}
str = str.replace(/\r\n/g, "<br />");
str = str.replace(/(\n|\r)/g, "<br />");
return str;
}
//テキストボックスで選択したやつをタグで囲む(BB版)
function surroundHTML(tagS,tagE) {
var acct_id = $("#post-acct-sel").val();
@@ -299,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

@@ -4,72 +4,127 @@ $("#emoji-before").addClass("disabled");
$("#emoji-next").addClass("disabled");
//絵文字ボタンのトグル
function emojiToggle() {
function emojiToggle(reaction) {
var acct_id = $("#post-acct-sel").val();
var selin = $("#textarea").prop('selectionStart');
if(!selin){
selin=0;
if (!selin) {
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_emoji_get[lang]+'</button>';
'<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet(\'true\');">' + lang.lang_emoji_get + '</button>';
$("#emoji-list").html(html);
} else {
emojiList('home');
emojiList('home', reaction);
}
} else {
$("#poll").addClass("hide")
$("#emoji").addClass("hide")
$("#suggest").html("");
$("#right-side").hide()
}
}
//絵文字リスト挿入
function emojiGet(parse) {
function emojiGet(parse, started) {
$('#emoji-list').html('Loading...');
var acct_id = $("#post-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id);
var start = "https://" + domain + "/api/v1/custom_emojis";
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 (parse == "true") {
$('#emoji-list').html('Parsing...');
//絵文字をマストドン公式と同順にソート
json.sort(function(a, b) {
if (a.shortcode < b.shortcode) return -1;
if (a.shortcode > b.shortcode) return 1;
return 0;
if (localStorage.getItem("mode_" + domain) != "misskey") {
var start = "https://" + domain + "/api/v1/custom_emojis";
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 (parse == "true") {
$('#emoji-list').html('Parsing...');
//絵文字をマストドン公式と同順にソート
json.sort(function (a, b) {
if (a.shortcode < b.shortcode) return -1;
if (a.shortcode > b.shortcode) return 1;
return 0;
});
localStorage.setItem("emoji_" + acct_id, JSON.stringify(json));
} else {
localStorage.setItem("emoji_" + acct_id, JSON.stringify(json));
}
localStorage.setItem("emojiseek", 0);
if (!started) {
emojiList('home')
}
});
} else {
var start = "https://" + domain + "/api/meta";
fetch(start, {
method: 'POST',
headers: {
'content-type': 'application/json'
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
if (json.enableEmojiReaction) {
localStorage.setItem("emojiReaction_" + acct_id, "true");
} else {
localStorage.setItem("emojiReaction_" + acct_id, "disabled");
}
var emojis = json.emojis;
var md = [];
Object.keys(emojis).forEach(function (key) {
var emoji = emojis[key];
md.push({
"shortcode": emoji.name,
"url": emoji.url
})
});
localStorage.setItem("emoji_" + acct_id, JSON.stringify(json));
} else {
localStorage.setItem("emoji_" + acct_id, JSON.stringify(json));
}
localStorage.setItem("emojiseek", 0);
emojiList('home')
});
if (parse == "true") {
$('#emoji-list').html('Parsing...');
//絵文字をマストドン公式と同順にソート
md.sort(function (a, b) {
if (a.shortcode < b.shortcode) return -1;
if (a.shortcode > b.shortcode) return 1;
return 0;
});
localStorage.setItem("emoji_" + acct_id, JSON.stringify(md));
} else {
localStorage.setItem("emoji_" + acct_id, JSON.stringify(md));
}
localStorage.setItem("emojiseek", 0);
if (!started) {
emojiList('home')
}
});
}
}
//リストの描画
function emojiList(target) {
$("#now-emoji").text(lang_emoji_custom[lang]);
function emojiList(target, reaction) {
$("#now-emoji").text(lang.lang_emoji_custom);
var acct_id = $("#post-acct-sel").val();
if (reaction && localStorage.getItem("emojiReaction_" + acct_id) != "true") {
console.error("Disabled")
clear()
hide();
return false;
}
var start = localStorage.getItem("emojiseek");
if (target == "next") {
var start = start * 1 + 127;
@@ -91,7 +146,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 {
@@ -102,8 +157,14 @@ function emojiList(target) {
for (i = start; i < start + 126; i++) {
var emoji = obj[i];
if (emoji) {
html = html + '<a onclick="emojiInsert(\':' + emoji.shortcode +
': \')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
if (reaction) {
html = html + '<a onclick="emojiReaction(\':' + emoji.shortcode +
':\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
} else {
html = html + '<a onclick="emojiInsert(\':' + emoji.shortcode +
':\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
}
}
}
$("#emoji-list").html(html);
@@ -113,14 +174,19 @@ function emojiList(target) {
function emojiInsert(code, del) {
var now = $("#textarea").val();
var selin = localStorage.getItem("cursor");
if (localStorage.getItem("emoji-zero-width") == "yes") {
var brank = "";
} else {
var brank = " ";
}
console.log(selin);
var now = $("#textarea").val();
if(selin>0){
var before = now.substr(0, selin);
var after = now.substr(selin, now.length);
newt = before + " "+ code+" " + after;
}else{
newt = code+" ";
if (selin > 0) {
var before = now.substr(0, selin);
var after = now.substr(selin, now.length);
newt = before + brank + code + brank + after;
} else {
newt = code + brank;
}
if (!del) {
$("#textarea").val(newt);
@@ -128,20 +194,20 @@ function emojiInsert(code, del) {
} else {
var regExp = new RegExp(del, "g");
var now = now.replace(regExp, "");
$("#textarea").val(now + " " + code);
$("#textarea").val(now + brank + code);
}
$("#textarea").focus();
var selin = $("#textarea").prop('selectionStart');
if(!selin){
selin=0;
if (!selin) {
selin = 0;
}
localStorage.setItem("cursor", selin);
}
//改行挿入
function brInsert(code) {
if(!$('#post-box').hasClass("appear")){
localStorage.setItem("nohide",true);
if (!$('#post-box').hasClass("appear")) {
localStorage.setItem("nohide", true);
show();
}
var now = $("#textarea").val();

View File

@@ -43,7 +43,7 @@ function pimg(files) {
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('bmp-image', [files[i].path,i]);
todo(lang_progress[lang]);
todo(lang.lang_progress);
}else{
handleFileUpload(files[i], obj,i);
@@ -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,20 +121,20 @@ 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_postimg_previewdis[lang]);
$('#preview').append(lang.lang_postimg_previewdis);
}
if (!img) {
var img = "no-act";
@@ -152,8 +152,8 @@ function media(b64, type, no) {
todc();
$(".toot-btn-group").prop("disabled", false);
$('select').material_select();
$("#mec").text(lang_there[lang]);
Materialize.toast(lang_postimg_aftupload[lang], 1000);
$("#mec").text(lang.lang_there);
Materialize.toast(lang.lang_postimg_aftupload, 1000);
$("#imgup").text("");
$("#imgsel").show();
localStorage.removeItem("image");
@@ -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");
@@ -32,7 +32,7 @@ function renoteqt(id, acct_id) {
$("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true);
$('select').material_select();
$("#textarea").attr("placeholder",lang_misskeyparse_qt[lang]);
$("#textarea").attr("placeholder",lang.lang_misskeyparse_qt);
$("#textarea").focus();
}
//Reply
@@ -44,7 +44,7 @@ function misskeyreply(id, acct_id) {
$("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true);
$('select').material_select();
$("#textarea").attr("placeholder",lang_misskeyparse_qt[lang]);
$("#textarea").attr("placeholder",lang.lang_misskeyparse_qt);
$("#textarea").focus();
}
//Reaction
@@ -58,14 +58,14 @@ 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){
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding","star"];
for(var i=0;i<reactions.length;i++){
if(json.reactionCounts[reactions[i]]){
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
@@ -93,7 +93,21 @@ function reactiontoggle(id,acct_id,tlid){
}
}
}
}
}
$("#pub_" + id +" .freeReact").toggleClass("hide");
}
//reactioncustom
function reactioncustom(acct_id,id){
$("#reply").val(id);
$("#unreact").hide();
$("#addreact").removeClass("hide");
$("#post-acct-sel").val(acct_id);
$('select').material_select();
localStorage.setItem("nohide",true);
show()
emojiToggle(true)
$("#left-side").hide();
$("#default-emoji").hide();
}
function reactRefresh(acct_id,id){
var domain = localStorage.getItem("domain_" + acct_id);
@@ -119,30 +133,42 @@ function reactRefresh(acct_id,id){
return false;
}
var poll="";
console.log(json);
reactRefreshCore(json)
if(json.error){
$("[toot-id=" + id + "]").hide();
$("[toot-id=" + id + "]").remove();
}else{
reactRefreshCore(json)
}
});
}
function reactRefreshCore(json){
var id=json.id;
if(json.reactionCounts){
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
$("#pub_" + id +" .reactions").removeClass("hide")
for(var i=0;i<reactions.length;i++){
if(json.reactionCounts[reactions[i]]){
console.log(json.reactionCounts[reactions[i]])
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
var regExp = new RegExp( ":", "g" ) ;
Object.keys(json.reactionCounts).forEach(function(keye) {
keyeClass=keye.replace(regExp,'');
if(json.reactionCounts[keye]){
console.log(json.reactionCounts[keye])
$("#pub_" + id +" .re-"+keyeClass+"ct").text(json.reactionCounts[keye])
$("#pub_" + id +" .re-"+keyeClass).removeClass("hide")
}else{
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(0)
$("#pub_" + id +" .re-"+keyeClass+"ct").text(0)
if($("#pub_" + id +" .reactions").hasClass("fullreact")){
$("#pub_" + id +" .re-"+reactions[i]).addClass("hide")
$("#pub_" + id +" .re-"+keyeClass).addClass("hide")
}
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
$("#pub_" + id +" .re-"+keyeClass+"ct").text(json.reactionCounts[keye])
}
}
});
}
}
function emojiReaction(emoji){
var acct_id = $("#post-acct-sel").val();
var id = $("#reply").val();
reaction(emoji,id,acct_id,null)
clear();
hide();
}
function reaction(mode,id,acct_id,tlid){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
@@ -158,10 +184,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 +203,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();
@@ -20,7 +20,7 @@ function post(mode,postvis) {
if(domain=="theboss.tech"){
if(~str.indexOf("#")){
if(str.indexOf("#theboss_tech")=="-1"){
if(!confirm(lang_post_tagTL[lang])){
if(!confirm(lang.lang_post_tagTL)){
return false;
}
}
@@ -29,7 +29,7 @@ function post(mode,postvis) {
if(domain=="dtp-mstdn.jp"){
if(~str.indexOf("#")){
if(str.indexOf("#dtp")=="-1"){
if(!confirm(lang_post_tagTL[lang])){
if(!confirm(lang.lang_post_tagTL)){
return false;
}
}
@@ -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;
@@ -52,23 +53,24 @@ function post(mode,postvis) {
var plus=str.replace(/\n/g,"").slice(0,10)+"...";
const options = {
type: 'info',
title: lang_post_cwtitle[lang],
message: lang_post_cwtxt[lang]+plus,
buttons: [lang_post_btn1[lang],lang_post_btn2[lang], lang_post_btn3[lang]]
}
dialog.showMessageBox(options, function(arg) {
if(arg==1){
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){
$("#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
}
@@ -105,6 +110,16 @@ function post(mode,postvis) {
}else if(vis=="local"){
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)){
return false;
}
}
}
}
if ($("#cw").hasClass("cw-avail")) {
var spo = $("#cw-text").val();
cw();
@@ -112,19 +127,53 @@ function post(mode,postvis) {
} else {
var spo = "";
}
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();
@@ -188,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")
}
@@ -215,9 +264,9 @@ function misskeyPost(){
function clear() {
$("#textarea").val("");
if(localStorage.getItem("stable")){
$("#textarea").val(localStorage.getItem("stable"));
$("#textarea").val("#"+localStorage.getItem("stable")+" ")
}
$("#textarea").attr("placeholder", lang_toot[lang]);
$("#textarea").attr("placeholder", lang.lang_toot);
$("#reply").val("");
$("#media").val("");
var cwt = localStorage.getItem("cw-text");
@@ -236,20 +285,30 @@ function clear() {
$("#cw").addClass("cw-avail");
$("#cw-text").show();
}
$("#rec").text(lang_no[lang]);
$("#mec").text(lang_nothing[lang]);
$("#rec").text(lang.lang_no);
$("#mec").text(lang.lang_nothing);
loadVis();
$("#nsfw").removeClass("yellow-text");
$("#nsfw").html("visibility_off");
$("#nsfw").removeClass("nsfw-avail");
$("#nsc").text(lang_nothing[lang]);
$("#nsc").text(lang.lang_nothing);
$("#drag").css("background-color", "#e0e0e0");
$("#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"));
}
$('select').material_select();
$("#left-side").show();
$("#default-emoji").show();
$("#unreact").show();
$("#addreact").addClass("hide");
}

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);
@@ -112,4 +112,18 @@ $(function() {
});
});
});
//スケジュール
function schedule(){
if($("#sch-box").hasClass("sch-avail")){
$("#sch-box").hide();
$("#sch-box").removeClass("sch-avail");
}else{
var date = new Date();
$("#sch-box").show();
$("#sch-date").val(formattime(date));
console.log(formattime(date));
$("#sch-box").addClass("sch-avail");
}
}

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のふぁぼカウントがおかしい
@@ -43,7 +43,7 @@ function fav(id, acct_id, remote) {
$(".fav_" + id).addClass("yellow-text");
}
}else{
Materialize.toast(lang_status_favWarn[lang], 1000);
Materialize.toast(lang.lang_status_favWarn, 1000);
}
}
}
@@ -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") {
@@ -90,7 +90,7 @@ function rt(id, acct_id, remote) {
$(".rt_" + id).addClass("teal-text");
}
} else {
Materialize.toast(lang_status_btWarn[lang], 1000);
Materialize.toast(lang.lang_status_btWarn, 1000);
}
}
}
@@ -133,18 +133,18 @@ 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")) {
$("#his-data").removeClass("following");
$("#his-follow-btn").text(lang_status_follow[lang]);
$("#his-follow-btn").text(lang.lang_status_follow);
} else {
$("#his-data").addClass("following");
$("#his-follow-btn").text(lang_status_unfollow[lang]);
$("#his-follow-btn").text(lang.lang_status_unfollow);
}
}
}
@@ -168,16 +168,16 @@ 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_status_block[lang]);
$("#his-block-btn").text(lang.lang_status_block);
} else {
$("#his-data").addClass("blocking");
$("#his-block-btn").text(lang_status_unblock[lang]);
$("#his-block-btn").text(lang.lang_status_unblock);
}
}
}
@@ -210,16 +210,16 @@ 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_status_mute[lang]);
$("#his-mute-btn").text(lang.lang_status_mute);
} else {
$("#his-data").addClass("muting");
$("#his-mute-btn").text(lang_status_unmute[lang]);
$("#his-mute-btn").text(lang.lang_status_unmute);
}
}
}
@@ -234,25 +234,27 @@ 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}));
$("[toot-id=" + id+ "]").hide();
$("[toot-id=" + id + "]").remove();
}else{
var start = "https://" + domain + "/api/v1/statuses/" + id;
var httpreq = new XMLHttpRequest();
httpreq.open('DELETE', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.responseType = "json";
httpreq.send();
}
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
}
}
}
//redraft
function redraft(id, acct_id){
if(confirm(lang_status_redraft[lang])){
if(confirm(lang.lang_status_redraft)){
show();
del(id, acct_id);
$("#post-acct-sel").prop("disabled", true);
@@ -278,6 +280,12 @@ function redraft(id, acct_id){
localStorage.setItem("nohide",true);
show();
$("#textarea").val(html);
var cwtxt=$("[toot-id="+id+"] .cw_text").html();
if(cwtxt!=""){
cwtxt=$.strip_tags(cwtxt);
cw();
$("#cw-text").val(cwtxt);
}
}
}
//ピン留め
@@ -294,10 +302,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")) {
@@ -320,10 +328,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();
@@ -343,10 +351,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();
@@ -367,7 +375,7 @@ function empUser(){
if(!obj){
var obj=[];
obj.push(id);
Materialize.toast(id+lang_status_emphas[lang], 4000);
Materialize.toast(id+lang.lang_status_emphas, 4000);
}else{
var can;
Object.keys(obj).forEach(function(key) {
@@ -377,7 +385,7 @@ function empUser(){
}else{
can=true;
obj.splice(key, 1);
Materialize.toast(id+lang_status_unemphas[lang], 4000);
Materialize.toast(id+lang.lang_status_unemphas, 4000);
}
});
}
@@ -400,18 +408,18 @@ 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")) {
$("#his-end-btn").removeClass("endorsed")
$("#his-end-btn").text(lang_status_endorse[lang])
$("#his-end-btn").text(lang.lang_status_endorse)
} else {
$("#his-end-btn").addClass("endorsed")
$("#his-end-btn").text(lang_status_unendorse[lang])
$("#his-end-btn").text(lang.lang_status_unendorse)
}
}
@@ -420,7 +428,7 @@ function pinUser(){
//URLコピー
function tootUriCopy(url){
execCopy(url);
Materialize.toast(lang_details_url[lang], 1500);
Materialize.toast(lang.lang_details_url, 1500);
}
//他のアカウントで…

View File

@@ -13,12 +13,19 @@ 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){
var obj = JSON.parse(localStorage.getItem("emoji_" + acct_id));
if(!obj){
var ehtml=lang_suggest_nodata[lang];
var ehtml=lang.lang_suggest_nodata;
}else{
var num = obj.length;
var ehtml="";
@@ -32,27 +39,29 @@ 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);
}
var tag = new_val.match(/#(\S{3,})/);
var acct = new_val.match(/@(\S{3,})/);
if(localStorage.getItem("imas")){
//セルフNP
var cpnp = new_val.match(/^(?!.*http)\/\/(\S{1,})/);
}else{
var cpnp=[];
}
if (cpnp && cpnp[1]) {
var q = cpnp[1];
cgNPs(q);
} else if (tag && tag[1]) {
if (tag && tag[1]) {
var q = tag[1];
} 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 +81,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 +144,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,19 +1,26 @@
/*リプライ*/
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);
$("#rec").text(lang_yesno[lang]);
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);
$('select').material_select();
$("#textarea").attr("placeholder",lang_usetxtbox_reply[lang]);
$("#textarea").attr("placeholder",lang.lang_usetxtbox_reply);
$("#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

@@ -64,51 +64,12 @@ function additional(acct_id, tlid) {
}).then(function(json) {
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URL"+lang_cards_check[lang]+":<br>Title:" + json.title + "<br>" +
"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + json.title + "<br>" +
json.description + "</span>");
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
$("[toot-id=" + id + "]").addClass("parsed");
}
});
}else{
var start = "https://" + domain + "/api/v1/statuses/" + id + "/card";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
//body: JSON.stringify({})
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
//このリンク鳥やんけ、ってとき
if (json.provider_name=="Twitter"){
if(json.image){
var twiImg='<br><img src="'+json.image+'">';
}else{
var twiImg='';
}
$("[toot-id=" + id + "] .additional").html(
'<blockquote class="twitter-tweet"><b>'+escapeHTML(json.author_name)+'</b><br>'+escapeHTML(json.description)+twiImg+'</blockquote>');
}
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URL"+lang_cards_check[lang]+":<br>Title:" + escapeHTML(json.title) + "<br>" +
escapeHTML(json.description) + "</span>");
}
if (json.html) {
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons" onclick="pip('+id+')" title="'+lang_cards_pip[lang]+'">picture_in_picture_alt</i>');
}
if (json.title) {
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
$("[toot-id=" + id + "]").addClass("parsed");
}
});
}
}else{
@@ -122,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;
@@ -188,7 +149,7 @@ function additionalIndv(tlid, acct_id, id) {
}).then(function(json) {
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URL"+lang_cards_check[lang]+":<br>Title:" + json.title + "<br>" +
"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + json.title + "<br>" +
json.description + "</span>");
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
$("[toot-id=" + id + "]").addClass("parsed");
@@ -232,11 +193,11 @@ function additionalIndv(tlid, acct_id, id) {
}else{
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URL"+lang_cards_check[lang]+":<br>Title:" + escapeHTML(json.title) + "<br>" +
"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + escapeHTML(json.title) + "<br>" +
escapeHTML(json.description) + "</span>");
}
if (json.html) {
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons sml pointer" onclick="pip(\''+id+'\')" title="'+lang_cards_pip[lang]+'">picture_in_picture_alt</i>');
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons sml pointer" onclick="pip(\''+id+'\')" title="'+lang.lang_cards_pip+'">picture_in_picture_alt</i>');
}
}

View File

@@ -1,6 +1,11 @@
//トゥートの詳細
function details(id, acct_id, tlid) {
$(".toot-reset").html(lang_details_nodata[lang]);
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);
@@ -139,7 +145,7 @@ function replyTL(id, acct_id) {
if(localStorage.getItem("mode_" + domain)=="misskey"){
var templete = misskeyParse([json], '', acct_id,"","",mute);
$("#toot-after").prepend(templete);
$("#toot-after .hide").html(lang_details_filtered[lang]);
$("#toot-after .hide").html(lang.lang_details_filtered);
$("#toot-after .by_filter").css("display","block");
$("#toot-after .by_filter").removeClass("hide");
var rep="_replyIds";
@@ -148,8 +154,11 @@ 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_details_filtered[lang]);
$("#toot-reply .hide").html(lang.lang_details_filtered);
$("#toot-reply .by_filter").css("display","block");
$("#toot-reply .by_filter").removeClass("hide");
jQuery("time.timeago").timeago();
@@ -199,7 +208,7 @@ function context(id, acct_id) {
console.log(json);
var templete = misskeyParse(json, '', acct_id,"","",[]);
$("#toot-reply").html(templete);
$("#toot-reply .hide").html(lang_details_filtered[lang]);
$("#toot-reply .hide").html(lang.lang_details_filtered);
$("#toot-reply .by_filter").css("display","block");
$("#toot-reply .by_filter").removeClass("hide");
jQuery("time.timeago").timeago();
@@ -210,8 +219,11 @@ 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_details_filtered[lang]);
$("#toot-after .hide").html(lang.lang_details_filtered);
$("#toot-after .by_filter").css("display","block");
$("#toot-after .by_filter").removeClass("hide");
jQuery("time.timeago").timeago();
@@ -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);
});
}
@@ -368,10 +389,10 @@ function cbCopy(mode){
if(mode=="emb"){
var emb='<iframe src="'+url+'/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400"></iframe><script src="https://'+domain+'/embed.js" async="async"></script>';
execCopy(emb)
Materialize.toast(lang_details_embed[lang], 1500);
Materialize.toast(lang.lang_details_embed, 1500);
}else{
if(execCopy(url)){
Materialize.toast(lang_details_url[lang], 1500);
Materialize.toast(lang.lang_details_url, 1500);
}
}
@@ -387,68 +408,12 @@ function staCopy(id){
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
html=$.strip_tags(html);
if(execCopy(html)){
Materialize.toast(lang_details_txt[lang], 1500);
Materialize.toast(lang.lang_details_txt, 1500);
}
}
//魚拓
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,18 +134,23 @@ 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);
}
});
}
function filterTime(day,hour,min){
$("#days_filter").val(day)
$("#hours_filter").val(hour)
$("#mins_filter").val(min)
}
function makeNewFilter(){
var acct_id = $("#filter-acct-sel").val();
var phr=$("#filter-add-word").val();
@@ -127,7 +169,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 +191,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 +200,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 +214,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 +230,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 +282,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)
@@ -348,4 +390,65 @@ function filterUpdateInternal(json,type){
')" class="setting nex"><i class="material-icons waves-effect nex" title="削除捕捉(削除されても残ります。背景色が変化します。)">delete</i><span id="sta-del-' +
key + '">On</span></a>削除捕捉<a onclick="delreset(' + key +
')" class="pointer">リセット</a><br>
*/
*/
//通知フィルター
function exclude(key){
var excludetxt="";
if($('#exc-reply-'+key+':checked').val()){
excludetxt="?exclude_types[]=mention"
var reply=true
}else{
var reply=false;
}
if($('#exc-fav-'+key+':checked').val()){
if(reply){
excludetxt=excludetxt+"&exclude_types[]=favourite"
}else{
excludetxt="?exclude_types[]=favourite"
}
var fav=true
}else{
var fav=false;
}
if($('#exc-bt-'+key+':checked').val()){
if(reply || fav){
excludetxt=excludetxt+"&exclude_types[]=reblog"
}else{
excludetxt="?exclude_types[]=reblog"
}
var bt=true
}else{
var bt=false;
}
if($('#exc-follow-'+key+':checked').val()){
if(reply || bt || fav){
excludetxt=excludetxt+"&exclude_types[]=follow"
}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)
parseColumn();
}
function excludeCk(key,target){
var exc=localStorage.getItem("exclude-"+key);
if(!exc){
return "";
}
if(~exc.indexOf(target)){
return "checked"
}else{
return "";
}
}

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("");
}
@@ -16,57 +12,104 @@ function list(){
$("#lists-user").html("");
var acct_id = $("#list-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists"
console.log(start)
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if (json) {
var lists = "";
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + list.title+':<a onclick="listShow(' + list.id + ',\'' + list.title + '\',\'' + acct_id +
'\')" class="pointer">'+lang_list_show[lang]+'</a>/<a onclick="listUser(' + list.id + ',' + acct_id +
')" class="pointer">'+lang_list_users[lang]+'</a><br> ';
});
$("#lists").html(lists);
}else{
$("#lists").html(lang_list_nodata[lang]);
}
});
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/api/users/lists/list"
fetch(start, {
method: 'POST',
body: JSON.stringify({
i:at
}),
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if (json) {
var lists = "";
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + list.title+':<a onclick="listShow(\'' + list.id + '\',\'' + list.title + '\',\'' + acct_id +
'\')" class="pointer">'+lang.lang_list_show+'</a><br>';
});
$("#lists").html(lists);
}else{
$("#lists").html(lang.lang_list_nodata);
}
});
}else{
var start = "https://" + domain + "/api/v1/lists"
console.log(start)
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if (json) {
var lists = "";
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + list.title+':<a onclick="listShow(\'' + list.id + '\',\'' + list.title + '\',\'' + acct_id +
'\')" class="pointer">'+lang.lang_list_show+'</a>/<a onclick="listUser(\'' + list.id + '\',' + acct_id +
')" class="pointer">'+lang.lang_list_users+'</a><br>';
});
$("#lists").html(lists);
}else{
$("#lists").html(lang.lang_list_nodata);
}
});
}
}
function makeNewList(){
var acct_id = $("#list-acct-sel").val();
var text=$("#list-add").val();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)!="misskey"){
var start = "https://" + domain + "/api/v1/lists"
console.log(start)
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({
title: text
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
list();
$("#list-add").val("")
}
}
}else{
var start = "https://" + domain + "/api/users/lists/create"
console.log(start)
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = "json";
httpreq.send(JSON.stringify({
i:at,
title: text
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) {
var json = httpreq.response;
list();
$("#list-add").val("")
}
}
}
}
function listShow(id,title,acct_id){
localStorage.setItem("list_"+id+"_"+acct_id,title);
@@ -74,8 +117,8 @@ function listShow(id,title,acct_id){
}
function listUser(id,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
console.log(start)
fetch(start, {
method: 'GET',
@@ -93,17 +136,18 @@ function listUser(id,acct_id){
var lists = "";
var templete = userparse(json,'',acct_id);
if(!json[0]){
templete=lang_list_nouser[lang];
templete=lang.lang_list_nouser;
}
$("#lists-user").html(templete);
}else{
$("#lists-user").html(lang_list_nouser[lang]);
$("#lists-user").html(lang.lang_list_nouser);
}
});
}
function hisList(user,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)!="misskey"){
var start = "https://" + domain + "/api/v1/lists"
console.log(start)
fetch(start, {
@@ -119,15 +163,15 @@ function hisList(user,acct_id){
console.error(error);
}).then(function(json) {
if (json) {
var lists = lang_list_add[lang]+"<br>";
var lists = lang.lang_list_add+"<br>";
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + '<a onclick="listAdd(' + list.id + ',\'' + user + '\',\'' + acct_id +
lists = lists + '<a onclick="listAdd(\'' + list.id + '\',\'' + user + '\',\'' + acct_id +
'\')" class="pointer">'+escapeHTML(list.title)+'</a><br> ';
});
$("#his-lists-a").html(lists);
}else{
$("#his-lists-a").html(lang_list_nodata[lang]);
$("#his-lists-a").html(lang.lang_list_nodata);
}
});
var start = "https://" + domain + "/api/v1/accounts/"+user+"/lists"
@@ -145,33 +189,71 @@ function hisList(user,acct_id){
console.error(error);
}).then(function(json) {
if (json) {
var lists = lang_list_remove[lang]+"<br>";
var lists = lang.lang_list_remove+"<br>";
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + '<a onclick="listRemove(' + list.id + ',\'' + user + '\',\'' + acct_id +
lists = lists + '<a onclick="listRemove(\'' + list.id + '\',\'' + user + '\',\'' + acct_id +
'\')" class="pointer">'+list.title+'</a><br> ';
});
$("#his-lists-b").html(lists);
}else{
$("#his-lists-b").html(lang_list_nodata[lang]);
$("#his-lists-b").html(lang.lang_list_nodata);
}
});
});
}else{
var start = "https://" + domain + "/api/users/lists/list"
fetch(start, {
method: 'POST',
body: JSON.stringify({
i:at
}),
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if (json) {
var lists = "";
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + list.title+':<a onclick="listShow(\'' + list.id + '\',\'' + list.title + '\',\'' + acct_id +
'\')" class="pointer">'+lang.lang_list_show+'</a>/<a onclick="listAdd(\'' + list.id + '\',\'' + user + '\',\'' + acct_id +
'\')" class="pointer">'+lang.lang_list_add+lang.lang_list_add_misskey+'</a><br>';
});
$("#his-lists-a").html(lists);
}else{
$("#his-lists-a").html(lang.lang_list_nodata);
}
});
$("#his-lists-b").html("");
}
}
function listAdd(id,user,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/api/users/lists/push"
var i={
i:at,
listId:id,
userId:user
}
}else{
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
var i={
account_ids: [user]
}
}
console.log(start)
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({
account_ids: [user]
}));
httpreq.responseType = "json";
httpreq.send(JSON.stringify(i));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
hisList(user,acct_id)
}
@@ -180,18 +262,30 @@ function listAdd(id,user,acct_id){
function listRemove(id,user,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/api/users/lists/push"
var method='POST'
var i={
i:at,
listId:id,
userId:user
}
}else{
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
var method='DELETE'
var i={
account_ids: [user]
}
}
console.log(start)
var httpreq = new XMLHttpRequest();
httpreq.open('DELETE', start, true);
httpreq.open(method, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({
account_ids: [user]
}));
httpreq.responseType = "json";
httpreq.send(JSON.stringify(i));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
hisList(user,acct_id)
}

View File

@@ -1,3 +1,25 @@
function escapeHTMLtemp(str) {
if(!str){
return "";
}
return str.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;');
}
$.strip_tagstemp = function(str, allowed) {
if(!str){
return "";
}
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
.join('');
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
};
//オブジェクトパーサー(トゥート)
function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var templete = '';
@@ -55,6 +77,13 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
}else{
wordmute = mutefilter;
}
//Ticker
var tickerck = localStorage.getItem("ticker_ok");
if(tickerck){
var ticker=true;
}else{
var ticker=false;
}
if (!sent) {
var sent = 500;
}
@@ -127,10 +156,19 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var toot = obj[key];
var dis_name=toot.user.name;
if(dis_name){
dis_name=escapeHTML(dis_name);
dis_name=escapeHTMLtemp(dis_name);
}else{
disname="";
}
//絵文字があれば
Object.keys(toot.user.emojis).forEach(function(key5) {
var emoji = toot.user.emojis[key5];
var shortcode = emoji.name;
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);
});
if (mix == "notf") {
if (gif == "yes") {
noticeavatar = toot.user.avatarUrl;
@@ -143,17 +181,17 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
'" width="20" class="notf-icon prof-img" user="' + toot.user.username +
'"></a>';
if (toot.type == "reply") {
var what = lang_parse_mentioned[lang];
var what = lang.lang_parse_mentioned;
var icon = '<i class="big-text fa fa-share teal-text"></i>';
noticeavatar="";
} else if (toot.type == "renote") {
var what = lang_misskeyparse_renoted[lang];
var what = lang.lang_misskeyparse_renoted;
var icon = '<i class="big-text fa fa-retweet light-blue-text"></i>';
} else if (toot.type == "quote") {
var what = lang_misskeyparse_quoted[lang];
var what = lang.lang_misskeyparse_quoted;
var icon = '<i class="big-text fa fa-quote-right orange-text"></i>';
} else if (toot.type == "reaction") {
var what = lang_misskeyparse_reaction[lang];
var what = lang.lang_misskeyparse_reacted;
var reactions={
"like":"👍",
"love":"💓",
@@ -163,29 +201,30 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
"congrats":"🎉",
"amgry":"💢",
"confused":"😥",
"pudding":"🍮"
"pudding":"🍮",
"star":"⭐"
}
var icon=reactions[toot.reaction];
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
for(var i=0;i<reactions.length;i++){
if(toot.note.reactionCounts[reactions[i]]){
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(toot.note.reactionCounts[reactions[i]])
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
}else{
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(0)
if($("#pub_" + id +" .reactions").hasClass("fullreact")){
$("#pub_" + id +" .re-"+reactions[i]).addClass("hide")
}else{
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
}
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(toot.note.reactionCounts[reactions[i]])
}
}
var emojisData = JSON.parse(localStorage.getItem("emoji_" + acct_id));
if(!icon){
if(emojisData){
var num = emojisData.length;
var ehtml="";
for (i = 0; i < num; i++) {
var emoji = emojisData[i];
if (":"+emoji.shortcode+":"==toot.reaction) {
if (emoji) {
icon='<img src="'+emoji.url+'" style="width:1rem">';
}
}
}
}
}
}else{
var icon = '<i class="big-text material-icons indigo-text" style="font-size:17px">info</i>';
}
var noticetext = '<span class="cbadge cbadge-hover"title="' + date(toot.createdAt,
'absolute') + '('+lang_parse_notftime[lang]+')"><i class="fa fa-clock-o"></i>' + date(toot.createdAt,
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.createdAt,
datetype) +
'</span>'+icon+'<a onclick="udg(\'' + toot.user.username +
'\',\'' + acct_id + '\')" class="pointer grey-text">' + dis_name +
@@ -214,26 +253,26 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
var domain = localStorage.getItem("domain_" + acct_id);
if(popup>0){
Materialize.toast("["+domain+"]"+escapeHTML(toot.user.name)+what, popup * 1000);
Materialize.toast("["+domain+"]"+escapeHTMLtemp(toot.user.name)+what, popup * 1000);
}
if(native=="yes"){
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tags(toot.status.content),
icon: toot.account.avatar
body: toot.user.name+"(" + toot.user.username +")"+what+"\n\n"+$.strip_tagstemp(toot.note.text),
icon: toot.user.avatarUrl
};
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', [
'TheDesk:'+domain,
toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tags(toot.status.content),
toot.account.avatar,
toot.user.name+"(" + toot.user.username +")"+what+"\n\n"+$.strip_tagstemp(toot.note.text),
toot.user.avatarUrl,
"toot",
acct_id,
toot.status.id
toot.note.id
]);
}
}
@@ -245,18 +284,18 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
var if_notf='data-notfIndv="'+acct_id+"_"+toot.id+'"';
var toot = toot.note;
var dis_name=escapeHTML(toot.user.name);
var dis_name=escapeHTMLtemp(toot.user.name);
}else{
var if_notf="";
if (toot.renote) {
var rebtxt = lang_parse_btedsimple[lang];
var rebtxt = lang.lang_parse_btedsimple;
var rticon = "fa-retweet light-blue-text";
var notice = '<i class="big-text fa '+rticon+'"></i>'+ dis_name + "(@" + toot.user.username +
")<br>";
var boostback = "shared";
var uniqueid=toot.id;
var toot = toot.renote;
var dis_name=escapeHTML(toot.user.name);
var dis_name=escapeHTMLtemp(toot.user.name);
var uniqueid=toot.id;
var actemojick=false
} else {
@@ -320,27 +359,27 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
if ((toot.cw || toot.cw=="") && cw) {
var content = toot.text;
var spoil = escapeHTML(toot.cw);
var spoil = escapeHTMLtemp(toot.cw);
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_parse_cwshow[lang]+'</a><br>';
'\')" class="nex parsed">'+lang.lang_parse_cwshow+'</a><br>';
} else {
var ct1 = nl2br(toot.text).split('<br />').length -2;
var ct2 = nl2br(toot.text).split('<br>').length -2;
if(ct1>ct2){ var ct= ct1; }else{ var ct= ct2; }
if ((sent < ct && $.mb_strlen($.strip_tags(toot.text)) > 5) || ($.strip_tags(toot.text).length > ltr && $.mb_strlen($.strip_tags(toot.text)) > 5)) {
var content = '<span class="gray">'+lang_parse_fulltext[lang]+'</span><br>' + escapeHTML(toot.text)
var spoil = '<span class="cw-long-' + toot.id + '">' + $.mb_substr($.strip_tags(
if ((sent < ct && $.mb_strlen($.strip_tagstemp(toot.text)) > 5) || ($.strip_tagstemp(toot.text).length > ltr && $.mb_strlen($.strip_tagstemp(toot.text)) > 5)) {
var content = '<span class="gray">'+lang.lang_parse_fulltext+'</span><br>' + escapeHTMLtemp(toot.text)
var spoil = '<span class="cw-long-' + toot.id + '">' + $.mb_substr($.strip_tagstemp(
toot.text), 0, 100) +
'</span><span class="gray">'+lang_parse_autofold[lang]+'</span>';
'</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_parse_more[lang]+'</a><br>';
'\')" class="nex parsed">'+lang.lang_parse_more+'</a><br>';
} else {
var content = escapeHTML(toot.text);
var content = escapeHTMLtemp(toot.text);
if(toot.cw){
var spoil = escapeHTML(toot.cw);
var spoil = escapeHTMLtemp(toot.cw);
}else{
var spoil="";
}
@@ -350,12 +389,12 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
}
var analyze = '';
var urls = $.strip_tags(content).replace(/\n/g, " ").match(
var urls = $.strip_tagstemp(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_parse_url[lang]+'</a><br>';
',\'' + id + '\')" class="add-show pointer">'+lang.lang_parse_url+'</a><br>';
} else {
var analyze = '';
}
@@ -366,7 +405,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var emojick = toot.emojis[0];
}else{
var emojick=false;
}
}
//デフォ絵文字
if(content){
//MFM
@@ -374,17 +413,35 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
content=content.replace(/`(.+)`/gi, '<code>$1</code>')
content=content.replace(/(http(s)?:\/\/[\x21-\x7e]+)/gi, '<a href="$1" target="_blank">$1</a>')
content=content.replace(/\(\(\((.+)\)\)\)/gi, '<span class="shake">$1</span>')
content=content.replace(/<motion>(.+)<\/motion>/gi, '<span class="shake">$1</span>')
content=content.replace(/&lt;motion&gt;(.+)&lt;\/motion&gt;/gi, '<span class="shake">$1</span>')
content=content.replace(/\*\*\*([^*]+)\*\*\*/gi, '<span class="shake" style="font-size:200%">$1</span>')
content=content.replace(/\*\*([^*]+)\*\*/gi, '<b>$1</b>')
content=content.replace(/^(.+)\s(検索|search)$/gmi, '<div class="input-field"><i class="material-icons prefix">search</i><input type="text" style="width:calc( 60% - 80px);" name="q" value="$1" id="srcbox_'+toot.id+'"><label for="src" data-trans="src" class="">検索</label><button class="btn waves-effect indigo" style="width:40%;" data-trans-i="src" onclick="goGoogle(\''+toot.id+'\')">検索</button></div>')
content=content.replace(/\[(.+)\]\(<a href="(http(s)?:\/\/[\x21-\x7e]+)".+\)/gi,'<a href="$2" target="_blank">$1</a>');
content=content.replace(/&lt;center&gt;/gi, '<div class="center">')
content=content.replace(/&lt;\/center&gt;/gi, '</div>')
content=content.replace(/&lt;flip&gt;(.+)&lt;\/flip&gt;/gi, '<span class="fa fa-flip-horizontal">$1</span>')
content=content.replace(/&lt;small&gt;(.+)&lt;\/small&gt;/gi, '<small>$1</small>')
content=content.replace(/&lt;i&gt;(.+)&lt;\/i&gt;/gi, '<i>$1</i>')
content=content.replace(/&lt;spin&gt;(.+)&lt;\/spin&gt;/gi, '<span class="fa fa-spin">$1</span>')
content=content.replace(/\*\*(.+)\*\*/gi, '<b>$1</b>')
content=content.replace(/&lt;jump&gt;(.+)&lt;\/jump&gt;/gi, '<span class="jump">$1</jump>')
content=twemoji.parse(content);
}else{
content="";
}
//絵文字があれば
if (emojick) {
Object.keys(toot.emojis).forEach(function(key5) {
var emoji = toot.emojis[key5];
var shortcode = emoji.name;
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);
spoil = spoil.replace(regExp, emoji_url);
});
}
if(dis_name){
dis_name=twemoji.parse(dis_name);
}else{
@@ -431,7 +488,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
'" data-type="video" class="img-parsed"><video src="' +
purl + '" class="' + sense +
' toot-img pointer" style="max-width:100%; height:'+imh+'px;"></a></span>';
' toot-img pointer" style="max-width:100%;"></a></span>';
}else{
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',' +
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
@@ -460,8 +517,8 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
Object.keys(toot.tags).forEach(function(key4) {
var tag = toot.tags[key4];
var tags = '<a onclick="tagShow(\'' + tag + '\')" class="pointer parsed">#' + tag + '</a><span class="hide" data-tag="' + tag + '">#' + tag + ':<a onclick="tl(\'tag\',\'' + tag + '\',' + acct_id +
',\'add\')" class="pointer parsed" title="' +lang_parse_tagTL[lang].replace("{{tag}}" ,'#'+tag)+ '">TL</a> <a onclick="brInsert(\'#' + tag + '\')" class="pointer parsed" title="' + lang_parse_tagtoot[lang].replace("{{tag}}" ,'#'+tag) + '">Toot</a> '+
'<a onclick="tagPin(\'' + tag + '\')" class="pointer parsed" title="' +lang_parse_tagpin[lang].replace("{{tag}}" ,'#'+tag)+ '">Pin</a></span> ';
',\'add\')" class="pointer parsed" title="' +lang.lang_parse_tagTL.replace("{{tag}}" ,'#'+tag)+ '">TL</a> <a onclick="brInsert(\'#' + tag + '\')" class="pointer parsed" title="' + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag) + '">Toot</a> '+
'<a onclick="tagPin(\'' + tag + '\')" class="pointer parsed" title="' +lang.lang_parse_tagpin.replace("{{tag}}" ,'#'+tag)+ '">Pin</a></span> ';
content=content.replace("#"+tag,tags);
});
//tags = '<div style="float:right">' + tags + '</div>';
@@ -471,23 +528,23 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var visen = toot.visibility;
if (visen == "public") {
var vis =
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="'+lang_parse_public[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="'+lang.lang_parse_public+'('+lang.lang_parse_clickcopy+')" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
var can_rt = "";
} else if (visen == "home") {
var vis =
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang_misskeyparse_home[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang.lang_misskeyparse_home+'('+lang.lang_parse_clickcopy+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
var can_rt = "";
} else if (visen == "followers") {
var vis =
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang_misskeyparse_followers[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">people</i>';
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang.lang_misskeyparse_followers+'('+lang.lang_parse_clickcopy+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">people</i>';
var can_rt = "";
} else if (visen == "private") {
var vis =
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="'+lang_parse_private[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="'+lang.lang_parse_private+'('+lang.lang_parse_clickcopy+')" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
var can_rt = "";
} else if (visen == "specified") {
var vis =
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="'+lang_misskeyparse_specified[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="'+lang.lang_misskeyparse_specified+'('+lang.lang_parse_clickcopy+')" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
var can_rt = "hide";
}
if (toot.user.username == localStorage.getItem("user_" + acct_id)) {
@@ -528,7 +585,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var word=worde
}
var regExp = new RegExp( word, "g" ) ;
if($.strip_tags(content).match(regExp)){
if($.strip_tagstemp(content).match(regExp)){
boostback = "hide by_filter";
}
}
@@ -545,6 +602,23 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
});
}
//Ticker
var tickerdom="";
if(ticker){
var tickerdata=JSON.parse(localStorage.getItem("ticker"));
var thisdomain=toot.user.username.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;
}
}
}
//Poll
var poll="";
if(toot.poll){
@@ -560,8 +634,46 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
});
poll='<div class="vote_'+toot.id+'">'+poll+'</div>';
}
//Reactions
/*
*/
if(localStorage.getItem("emojiReaction_" + acct_id)=="disabled"){
var freeReact="hide";
}else{
var freeReact="";
}
//Reactions
if(toot.reactionCounts){
var addReact="";
Object.keys(toot.reactionCounts).forEach(function(keye) {
var thisReact=toot.reactionCounts[keye];
if(keye=="like"){ var defaultEmoji=true;}
else if(keye=="love"){ var defaultEmoji=true; }
else if(keye=="laugh"){ var defaultEmoji=true; }
else if(keye=="hmm"){ var defaultEmoji=true; }
else if(keye=="surprise"){ var defaultEmoji=true; }
else if(keye=="congrats"){ var defaultEmoji=true; }
else if(keye=="angry"){ var defaultEmoji=true; }
else if(keye=="confused"){ var defaultEmoji=true; }
else if(keye=="pudding"){ var defaultEmoji=true; }
else{
var obj = JSON.parse(localStorage.getItem("emoji_" + acct_id));
if(obj){
var num = obj.length;
var ehtml="";
for (i = 0; i < num; i++) {
var emoji = obj[i];
if (":"+emoji.shortcode+":"==keye) {
if (emoji) {
addReact=addReact+ '<span class="reaction "><a onclick="reaction(\''+keye+'\',\'' + toot.id + '\',' + acct_id +
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;"><img src="'+emoji.url+'" style="width:13px;"></a><span class="re-'+emoji.shortcode+'ct">'+thisReact+
'</span></span>';
}
}
}
}
}
});
if(toot.reactionCounts.like){
var like=toot.reactionCounts.like;
var likehide="";
@@ -630,7 +742,10 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var like=0;var love=0;var laugh=0;var hmm=0;var surprise=0;var congrats=0;var angry=0;var confused=0;var pudding=0;
var likehide="hide";var lovehide="hide";var laughhide="hide";var hmmhide="hide";var suphide="hide";var conghide="hide";var anghide="hide";var confhide="hide";var pudhide="hide";
var fullhide="hide";
}
}
if(!addReact && likehide=="hide"&& lovehide=="hide"&& laughhide=="hide"&& hmmhide=="hide"&& suphide=="hide"&& conghide=="hide"&& anghide=="hide"&& confhide=="hide"&& pudhide=="hide"){
var fullhide="hide";
}
if(toot.myReaction){
var reacted=toot.myReaction;
}else{
@@ -641,6 +756,11 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
content='<span class="gray">This post has no content. It may be media-only, private or deleted.</span>';
}
var trans="";
if(toot.user.emojis){
var actemojick = toot.user.emojis[0];
}else{
var actemojick=false;
}
templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' +
boostback + ' ' + fav_app + ' ' + rt_app + ' ' + hasmedia + '" 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\')" reacted="'+reacted+'">' +
@@ -657,16 +777,16 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
toot.user.username + '</span></div>' +
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'https://' +domain+"/notes/"+
toot.id + '\');" title="' + date(toot.createdAt, 'absolute') +
'('+lang_parse_clickcopyurl[lang]+')"><i class="fa fa-clock-o"></i>' +
'('+lang.lang_parse_clickcopyurl+')"><i class="fa fa-clock-o"></i>' +
date(toot.createdAt, datetype) + '</span>' +
'</div></div>' +
'<div class="area-toot"><span class="toot ' + spoiler + '">' + content +
'<div class="area-toot">'+tickerdom+'<span class="toot ' + spoiler + '">' + content +
'</span><span class="' +
api_spoil + ' cw_text_' + toot.id + '">' + spoil + spoiler_show +
'</span>' +
'' + viewer + '' +
'</div><div class="area-additional"><span class="additional">'+analyze+
'<div class="reactions '+fullhide+'" style="height: 25px;"><span class="'+likehide+' reaction re-like"><a onclick="reaction(\'like\',\'' + toot.id + '\',' + acct_id +
'</div><div class="area-additional"><span class="additional">'+analyze+
'<div class="reactions '+fullhide+'" style="height: 25px;"><span class="'+likehide+' reaction re-like"><a onclick="reaction(\'like\',\'' + toot.id + '\',' + acct_id +
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat" style="padding:0;margin-left:3px;">'+twemoji.parse("👍")+'</a><span class="re-likect">'+like+
'</span></span><span class="'+lovehide+' reaction re-love"><a onclick="reaction(\'love\',\'' + toot.id + '\',' + acct_id +
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("💓")+'</a><span class="re-lovect">'+love+
@@ -684,35 +804,37 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("😥")+'</a><span class="re-confusedct">'+confused+
'</span></span><span class="'+pudhide+' reaction re-pudding"><a onclick="reaction(\'pudding\',\'' + toot.id + '\',' + acct_id +
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("🍮")+'</a><span class="re-puddingct">'+pudding+
'</span></div>'+poll + mentions + tags + '</div>' +
'</span></span>'+addReact+
'<i class="material-icons pointer hide freeReact '+freeReact+'" style="font-size:1.0rem; padding-left:5px;position: relative;top: 3px;" onclick="reactioncustom(\''+acct_id+'\',\''+id+'\')">add_box</i></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(\'https://misskey.xyz/notes/'+toot.id+'\',\'main\')" class="waves-effect waves-dark details" style="padding:0">'+lang_parse_det[lang]+'</a></div>' +
'<div class="action '+antinoauth+'"><a onclick="detEx(\'https://misskey.xyz/notes/'+toot.id+'\',\'main\')" class="waves-effect waves-dark details" style="padding:0">'+lang.lang_parse_det+'</a></div>' +
'<div class="action '+disp["re"]+' '+noauth+'"><a onclick="misskeyreply(\'' + toot.id +
'\',\'' + acct_id + '\',' +
acct_id + ',\''+visen+
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_replyto[lang]+'"><i class="fa fa-share"></i></a></div>' +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_replyto+'"><i class="fa fa-share"></i></a></div>' +
'<div class="action '+can_rt+' '+disp["rt"]+' '+noauth+'"><a onclick="renote(\'' + toot.id + '\',' + acct_id +
',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_misskeyparse_renote[lang]+'"><i class="text-darken-3 fa fa-retweet ' +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_misskeyparse_renote+'"><i class="text-darken-3 fa fa-retweet ' +
if_rt + ' rt_' + toot.id + '"></i><span class="rt_ct"></span></a></div>' +
'<div class="action '+can_rt+' '+disp["qt"]+' '+noauth+'"><a onclick="renoteqt(\'' + toot.id + '\',' + acct_id +
',\'misskey.xyz\',\'misskey.xyz\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_misskeyparse_renoteqt[lang]+'"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
',\'misskey.xyz\',\'misskey.xyz\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_misskeyparse_renoteqt+'"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
'<div class="action '+disp["fav"]+' '+noauth+'"><a onclick="reactiontoggle(\'' + toot.id + '\',' + acct_id +
',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_misskeyparse_reaction[lang]+'"><i class="fa text-darken-3 fa-plus' +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_misskeyparse_reaction+'"><i class="fa text-darken-3 fa-plus' +
if_fav + ' fav_' + toot.id + '"></i></div>' +
'<div class="' + if_mine + ' action '+disp["del"]+' '+noauth+'"><a onclick="del(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_del[lang]+'"><i class="fa fa-trash-o"></i></a></div>' +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_del+'"><i class="fa fa-trash-o"></i></a></div>' +
'<div class="' + if_mine + ' action pin '+disp["pin"]+' '+noauth+'"><a onclick="pin(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_pin[lang]+'"><i class="fa fa-map-pin pin_' + toot.id + '"></i></a></div>'
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_pin+'"><i class="fa fa-map-pin pin_' + toot.id + '"></i></a></div>'
+'<div class="' + if_mine + ' action '+disp["red"]+' '+noauth+'"><a onclick="redraft(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_redraft[lang]+'"><i class="material-icons">redo</i></a></div>'+trans+
'<span class="cbadge viabadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tags(via)+'\')" title="via ' + $.strip_tags(via) + '">via ' +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_redraft+'"><i class="material-icons">redo</i></a></div>'+trans+
'<span class="cbadge viabadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tagstemp(via)+'\')" title="via ' + $.strip_tagstemp(via) + '">via ' +
via +
'</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>' +
@@ -742,10 +864,10 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
} else {
var auth = "";
}
var ftxt=lang_parse_followed[lang];
var ftxt=lang.lang_parse_followed;
if(popup > 0 || popup==-1){
var notftext='<span class="cbadge"title="' + date(toot.createdAt,
'absolute') + '('+lang_parse_notftime[lang]+')"><i class="fa fa-clock-o"></i>' + date(toot.createdAt,
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.createdAt,
datetype) +
'</span>'+ftxt+'<br>';
var toot = toot.user;
@@ -754,7 +876,7 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
}
var memory = localStorage.getItem("notice-mem");
if (popup >= 0 && obj.length < 5 && notftext != memory) {
Materialize.toast(escapeHTML(toot.name)+":"+ftxt, popup * 1000);
Materialize.toast(escapeHTMLtemp(toot.name)+":"+ftxt, popup * 1000);
$(".notf-icon_" + tlid).addClass("red-text");
localStorage.setItem("notice-mem", notftext);
notftext = "";
@@ -786,7 +908,7 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
}
}
if(toot.name){
var dis_name=escapeHTML(toot.name);
var dis_name=escapeHTMLtemp(toot.name);
dis_name=twemoji.parse(dis_name);
}else{
var dis_name=toot.name;

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

@@ -1,6 +1,186 @@
//通知
//取得+Streaming接続
function notf(acct_id, tlid, sys) {
function notf(acct_id, tlid, sys){
if (sys == "direct") {
notfColumn(acct_id, tlid, sys)
} else {
notfCommon(acct_id, tlid, sys)
}
}
function notfColumn(acct_id, tlid, sys){
todo("Notifications Loading...");
var native=localStorage.getItem("nativenotf");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(!native){
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";
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)){
var exc=localStorage.getItem("exclude-"+tlid);
}else{
var exc="";
}
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;
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.lang_notf_new,
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.lang_notf_new,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();
}
}
if(!misskey){
if(localStorage.getItem("streaming_" + acct_id)){
var wss=localStorage.getItem("streaming_" + acct_id)
}else{
var wss="wss://"+domain
}
var start = wss + "/api/v1/streaming/?stream=user&access_token=" +
at;
}else{
var start = "wss://" + domain + "/?i=" +
at;
}
console.log(start);
var wsid = websocketNotf.length;
websocketNotf[acct_id] = new WebSocket(start);
console.log(websocketNotf);
websocketNotf[acct_id].onopen = function(mess) {
console.log("Connect Streaming API(Notf):");
console.log(mess);
$("i[data-notf=" + acct_id +"]").removeClass("red-text");
}
websocketNotf[acct_id].onmessage = function(mess) {
console.log("Receive Streaming API(Notf):"+acct_id);
var popup = localStorage.getItem("popup");
if (!popup) {
popup = 0;
}
console.log(domain)
if(misskey){
console.log("misskey")
console.log(JSON.parse(mess.data));
if (JSON.parse(mess.data).type == "notification") {
var obj = JSON.parse(mess.data).body;
console.log(obj);
if(obj.type!="follow"){
templete = misskeyParse([obj], 'notf', acct_id, 'notf', popup);
}else{
templete = misskeyUserparse([obj], 'notf', acct_id, 'notf', popup);
}
if(obj.type=="reaction"){
console.log("refresh")
reactRefresh(acct_id,obj.note.id)
}
if(!$("div[data-notfIndv=" + acct_id +"_"+obj.id+"]").length){
$("div[data-notf=" + acct_id +"]").prepend(templete);
}
jQuery("time.timeago").timeago();
}else if(JSON.parse(mess.data).type == "note-updated"){
var obj = JSON.parse(mess.data).body.note;
reactRefreshCore(obj)
}
}else{
var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
var type = JSON.parse(mess.data).event;
if (type == "notification") {
var templete="";
localStorage.setItem("lastnotf_" + acct_id,obj.id);
if(obj.type!="follow"){
templete = parse([obj], 'notf', acct_id, 'notf', popup);
}else{
templete = userparse([obj], 'notf', acct_id, 'notf', popup);
}
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();
$("[toot-id=" + obj + "]").remove();
}
}
}
websocketNotf[acct_id].onerror = function(error) {
console.error('WebSocket Error ' + error);
};
}
function notfCommon(acct_id, tlid, sys) {
todo("Notifications Loading...");
var native=localStorage.getItem("nativenotf");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
@@ -32,6 +212,7 @@ function notf(acct_id, tlid, sys) {
}
}
fetch(start, i).then(function(response) {
console.log(response.headers.get('link'));
return response.json();
}).catch(function(error) {
todo(error);
@@ -52,13 +233,13 @@ function notf(acct_id, tlid, sys) {
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: ct+lang_notf_new[lang],
body: ct+lang.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)]);
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang.lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]);
}
}
@@ -82,12 +263,7 @@ function notf(acct_id, tlid, sys) {
}
});
if (sys == "direct") {
$("#timeline_" + tlid).html(templete);
} else {
$("div[data-notf=" + acct_id +"]").html(templete);
}
$("div[data-notf=" + acct_id +"]").html(templete);
$("#landing_" + tlid).hide();
jQuery("time.timeago").timeago();
}
@@ -176,6 +352,8 @@ function notf(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;
@@ -184,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();
}
}
}
}
//通知トグルボタン
@@ -297,23 +482,12 @@ function notfCanceler(acct){
function allNotfRead(){
console.log(localStorage.getItem("notf-fav_2"));
var multi = localStorage.getItem("multi");
if (!multi) {
var obj = [{
at: localStorage.getItem("acct_0_at"),
name: localStorage.getItem("name_0"),
domain: localStorage.getItem("domain_0"),
user: localStorage.getItem("user_0"),
prof: localStorage.getItem("prof_0"),
id: localStorage.getItem("user-id_0")
}];
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
} else {
if (multi) {
var obj = JSON.parse(multi);
}
Object.keys(obj).forEach(function(key) {
console.log(key);
notfCanceler(key)
});
}
}
allNotfRead()

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,26 @@ 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){
imh=200;
}
if(imh=="full"){
imh="auto";
}else{
imh=imh+"px";
}
//独自ロケール
var locale = localStorage.getItem("locale");
if(locale=="yes"){
@@ -66,11 +79,25 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}else{
wordmute = mutefilter;
}
//Ticker
var tickerck = localStorage.getItem("ticker_ok");
if(tickerck){
var ticker=true;
}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;
@@ -126,6 +153,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){
@@ -144,6 +181,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];
@@ -155,7 +196,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);
@@ -171,28 +212,31 @@ 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") {
var what = lang_parse_mentioned[lang];
var what = lang.lang_parse_mentioned;
var icon = "fa-share teal-text";
noticeavatar="";
} else if (toot.type == "reblog") {
var what = lang_parse_bted[lang];
var what = lang.lang_parse_bted;
var icon = "fa-retweet light-blue-text";
if(!locale && localStorage.getItem("bt_" + acct_id)){
what = localStorage.getItem("bt_" + acct_id);
}
} else if (toot.type == "favourite") {
var what = lang_parse_faved[lang];
var what = lang.lang_parse_faved;
var icon = "fa-star yellow-text";
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_parse_notftime[lang]+')"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
datetype) +
'</span><i class="big-text fa '+icon+'"></i><a onclick="udg(\'' + toot.account.id +
'\',\'' + acct_id + '\')" class="pointer grey-text">' + dis_name +
@@ -280,10 +324,10 @@ 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_parse_btedsimple[lang];
var rebtxt = lang.lang_parse_btedsimple;
var rticon = "fa-retweet light-blue-text";
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
rebtxt = ":「わかるわ」";
@@ -307,7 +351,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);
@@ -316,7 +360,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;
@@ -348,7 +392,8 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
var locked = "";
}
if (!toot.application) {
var via = '<span style="font-style: italic;">Unknown</span>';
var via = '';
viashow="hide";
} else {
var via = toot.application.name;
//強調チェック
@@ -366,25 +411,28 @@ 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);
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_parse_cwshow[lang]+'</a><br>';
'\')" 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_parse_fulltext[lang]+'</span><br>' + toot.content
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_parse_autofold[lang]+'</span>';
'</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_parse_more[lang]+'</a><br>';
'\')" class="nex parsed">'+lang.lang_parse_more+'</a><br>';
} else {
var content = toot.content;
var spoil = escapeHTML(toot.spoiler_text);
@@ -397,7 +445,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
);
if (urls) {
var analyze = '<a onclick="additionalIndv(\'' + tlid + '\',' + acct_id +
',\'' + id + '\')" class="add-show pointer">'+lang_parse_url[lang]+'</a><br>';
',\'' + id + '\')" class="add-show pointer">'+lang.lang_parse_url+'</a><br>';
} else {
var analyze = '';
}
@@ -414,7 +462,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);
@@ -427,12 +475,12 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
}else{
var nicoemojick=false;
}
//絵文字があれば
//絵文字があれば(nico)
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 +
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);
@@ -471,9 +519,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 {
@@ -485,12 +533,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 = "";
@@ -499,8 +562,8 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
Object.keys(toot.tags).forEach(function(key4) {
var tag = toot.tags[key4];
tags = tags + '<span class="hide" data-tag="' + tag.name + '">#' + tag.name + ':<a onclick="tl(\'tag\',\'' + tag.name + '\',' + acct_id +
',\'add\')" class="pointer" title="' +lang_parse_tagTL[lang].replace("{{tag}}" ,'#'+tag.name)+ '">TL</a> <a onclick="brInsert(\'#' + tag.name + '\')" class="pointer" title="' + lang_parse_tagtoot[lang].replace("{{tag}}" ,'#'+tag.name) + '">Toot</a> '+
'<a onclick="tagPin(\'' + tag.name + '\')" class="pointer" title="' +lang_parse_tagpin[lang].replace("{{tag}}" ,'#'+tag.name)+ '">Pin</a></span> ';
',\'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>';
}
@@ -518,19 +581,19 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
var visen = toot.visibility;
if (visen == "public") {
var vis =
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="'+lang_parse_public[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="'+lang.lang_parse_public+'('+lang.lang_parse_clickcopy+')" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
var can_rt = "";
} else if (visen == "unlisted") {
var vis =
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang_parse_unlisted[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang.lang_parse_unlisted+'('+lang.lang_parse_clickcopy+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
var can_rt = "";
} else if (visen == "private") {
var vis =
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="'+lang_parse_private[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="'+lang.lang_parse_private+'('+lang.lang_parse_clickcopy+')" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
var can_rt = "hide";
} else if (visen == "direct") {
var vis =
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="'+lang_parse_direct[lang]+'('+lang_parse_clickcopy[lang]+')" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="'+lang.lang_parse_direct+'('+lang.lang_parse_clickcopy+')" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
var can_rt = "hide";
}
if (toot.account.acct == localStorage.getItem("user_" + acct_id)) {
@@ -596,20 +659,94 @@ 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_parse_trans[lang]+'"><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 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>';
}
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 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+'">'+escapeHTML(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">' +
@@ -618,12 +755,12 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
toot.account.acct + locked + '</span></div>' +
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'' +
toot.url + '\');" title="' + date(toot.created_at, 'absolute') +
'('+lang_parse_clickcopyurl[lang]+')"><i class="fa fa-clock-o"></i>' +
'('+lang.lang_parse_clickcopyurl+')"><i class="fa fa-clock-o"></i>' +
date(toot.created_at, datetype) + '</span>' +
'</div></div>' +
'<div class="area-toot"><span class="' +
api_spoil + ' cw_text_' + toot.id + '">' + spoil + spoiler_show +
'</span><span class="toot ' + spoiler + '">' + content +
'<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 +poll+
'</span>' +
'' + viewer + '' +
'</div><div class="area-additional"><span class="additional">' + analyze +
@@ -632,40 +769,41 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
'<div class="area-vis"></div>'+
'<div class="area-actions '+mouseover+'">' +
'<div class="action">'+vis+'</div>'+
'<div class="action '+antinoauth+'"><a onclick="detEx(\''+toot.url+'\',\'main\')" class="waves-effect waves-dark details" style="padding:0">'+lang_parse_det[lang]+'</a></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_parse_replyto[lang]+'"><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_parse_bt[lang]+'"><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_parse_quote[lang]+'"><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_parse_fav[lang]+'"><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 + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_del[lang]+'"><i class="fa fa-trash-o"></i></a></div>' +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_del+'"><i class="fa fa-trash-o"></i></a></div>' +
'<div class="' + if_mine + ' action pin '+disp["pin"]+' '+noauth+'"><a onclick="pin(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_pin[lang]+'"><i class="fa fa-map-pin pin_' + toot.id + ' '+if_pin+'"></i></a></div>'
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_pin+'"><i class="fa fa-map-pin pin_' + toot.id + ' '+if_pin+'"></i></a></div>'
+'<div class="' + if_mine + ' action '+disp["red"]+' '+noauth+'"><a onclick="redraft(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang_parse_redraft[lang]+'"><i class="material-icons">redo</i></a></div>'+trans+
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_redraft+'"><i class="material-icons">redo</i></a></div>'+trans+
'<span class="cbadge viabadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tags(via)+'\')" title="via ' + $.strip_tags(via) + '">via ' +
via +
'</span>'+
'</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>';
});
@@ -705,9 +843,9 @@ function userparse(obj, auth, acct_id, tlid, popup) {
} else {
var auth = "";
}
var ftxt=lang_parse_followed[lang];
if(!locale && localStorage.getItem("follow_" + acct_id)){
ftxt = localStorage.getItem("follow_" + acct_id);
var ftxt=lang.lang_parse_followed;
if(!locale && localStorage.getItem("followlocale_" + acct_id)){
ftxt = localStorage.getItem("followlocale_" + acct_id);
}
if(popup > 0 || popup==-1 || notf){
var notftext=ftxt+'<br>';
@@ -764,7 +902,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);
@@ -776,7 +914,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 +
@@ -784,7 +922,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>' +
@@ -813,18 +951,18 @@ function client(name) {
var dialog=remote.dialog;
const options = {
type: 'info',
title: lang_parse_clientop[lang],
message: name+lang_parse_clienttxt[lang],
buttons: [lang_parse_clientno[lang],lang_parse_clientemp[lang], lang_parse_clientmute[lang]]
title: lang.lang_parse_clientop,
message: name+lang.lang_parse_clienttxt,
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){
var obj=[];
obj.push(name);
Materialize.toast(name+lang_status_emphas[lang], 2000);
Materialize.toast(name+lang.lang_status_emphas, 2000);
}else{
var can;
Object.keys(obj).forEach(function(key) {
@@ -834,19 +972,19 @@ function client(name) {
}else{
can=true;
obj.splice(key, 1);
Materialize.toast(name+lang_status_unemphas[lang], 2000);
Materialize.toast(name+lang.lang_status_unemphas, 2000);
}
});
if(!can){
obj.push(name);
Materialize.toast(name+lang_status_emphas[lang], 2000);
Materialize.toast(name+lang.lang_status_emphas, 2000);
}else{
}
}
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){
@@ -855,7 +993,7 @@ function client(name) {
obj.push(name);
var json = JSON.stringify(obj);
localStorage.setItem("client_mute", json);
Materialize.toast(name+lang_parse_mute[lang], 2000);
Materialize.toast(name+lang.lang_parse_mute, 2000);
}else{
return;
}

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,5 +1,5 @@
$voise = null;
$voiseName = lang_speech[lang];
$voiseName = lang.lang_speech;
$voices = speechSynthesis.getVoices();
$synthes = new SpeechSynthesisUtterance();
$voise = $.grep($voices, function(n, i){return n.name == $voiseName})[0];
@@ -91,7 +91,7 @@ function voiceSettings(){
localStorage.setItem("voice_speed", $("#voicespeed").val()/10);
localStorage.setItem("voice_pitch", $("#voicepitch").val()/50);
localStorage.setItem("voice_vol", $("#voicevol").val()/100);
Materialize.toast(lang_speech_refresh[lang], 3000);
Materialize.toast(lang.lang_speech_refresh, 3000);
}
function voiceSettingLoad(){
var speed=localStorage.getItem("voice_speed");

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("");
}
@@ -15,7 +15,7 @@ function src(mode) {
var q = $("#src").val();
var acct_id = $("#src-acct-sel").val();
if(acct_id=="tootsearch"){
tootsearch(q);
tsAdd(q)
return false;
}
localStorage.setItem("last-use", acct_id);
@@ -73,9 +73,26 @@ function src(mode) {
jQuery("time.timeago").timeago();
});
}
function tootsearch(q){
function tsAdd(q){
var add = {
domain: acct_id,
type: "tootsearch",
data: q
};
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
localStorage.setItem("card_" + obj.length,"true");
obj.push(add);
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
parseColumn();
}
function tootsearch(tlid,q){
var start = "https://tootsearch.chotto.moe/api/v1/search?from=0&sort=created_at%3Adesc&q=" + q
console.log(start)
$("#notice_" + tlid).text("tootsearch("+q+")");
$("#notice_icon_" + tlid).text("search");
fetch(start, {
method: 'GET',
headers: {
@@ -90,17 +107,68 @@ function tootsearch(q){
var templete="";
var json=raw.hits.hits;
console.log(json);
Object.keys(json).forEach(function(key5) {
var toot = json[key5]["_source"];
console.log(toot);
if(toot && toot.account){
templete = templete+parse([toot],'noauth');
var max_id = raw["hits"].length;
for(var i=0;i<json.length;i++){
var toot = json[i]["_source"];
console.log(lastid)
if(lastid!=toot.uri){
console.log(toot);
if(toot && toot.account){
templete = templete+parse([toot], "noauth", null, tlid, 0, [], "tootsearch")
}
}
});
if(!templete){
templete=lang_details_nodata[lang];
var lastid=toot.uri;
}
$("#src-contents").html("Tootsearch("+lang_src_ts[lang]+")<br>" + templete);
if(!templete){
templete=lang.lang_details_nodata;
}else{
templete=templete+'<div class="hide ts-marker" data-maxid="'+max_id+'"></div>';
}
$("#timeline_" + tlid).html(templete);
jQuery("time.timeago").timeago();
});
}
function moreTs(tlid,q){
var sid = $("#timeline_" + tlid + " .ts-marker").last().attr("data-maxid");
moreloading=true;
var start = "https://tootsearch.chotto.moe/api/v1/search?from="+sid+"&sort=created_at%3Adesc&q=" + q
console.log(start)
$("#notice_" + tlid).text("tootsearch("+q+")");
$("#notice_icon_" + tlid).text("search");
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(raw) {
var templete="";
var json=raw.hits.hits;
console.log(json);
var max_id = raw["hits"].length;
for(var i=0;i<json.length;i++){
var toot = json[i]["_source"];
console.log(lastid)
if(lastid!=toot.uri){
console.log(toot);
if(toot && toot.account){
templete = templete+parse([toot], "noauth", null, tlid, 0, [], "tootsearch")
}
}
var lastid=toot.uri;
}
if(!templete){
templete=lang.lang_details_nodata;
}else{
templete=templete+'<div class="hide ts-marker" data-maxid="'+max_id+'"></div>';
}
$("#timeline_" + tlid).append(templete);
jQuery("time.timeago").timeago();
});
}
@@ -116,15 +184,15 @@ 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_src_people[lang];
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+lang.lang_src_people;
}else{
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">'+
'<g><path d="M0,'+six+' L10,'+five+' 20,'+four+' 30,'+three+' 40,'+two+' 50,'+one+' 60,'+zero+'" style="stroke: #9e9e9e; stroke-width: 1;fill: none;"></path></g>'+
'</svg><span style="font-size:200%">'+his[0].uses+'</span>toots&nbsp;<a onclick="tl(\'tag\',\'' + tag.name + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+lang_src_people[lang];
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+lang.lang_src_people;
}
return tags;

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_parse_tagTL[lang].replace("{{tag}}" ,'#'+tag)+ '">TL</a> <a onclick="brInsert(\'#' + tag + '\')" class="pointer" title="' + lang_parse_tagtoot[lang].replace("{{tag}}" ,'#'+tag) + '">Toot</a> '+
'<a onclick="autoToot(\'#' + tag + ' \');brInsert(\'#' + tag + ' \')" class="pointer" title="'+lang_tags_always[lang] + lang_parse_tagtoot[lang].replace("{{tag}}" ,'#'+tag) + '">'+lang_tags_realtime[lang]+'</a> <a onclick="tagRemove(\'' + key + '\')" class="pointer" title="' +lang_tags_tagunpin[lang].replace("{{tag}}" ,'#'+tag)+ '">'+lang_del[lang]+'</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_tags_tagwarn[lang].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");
@@ -47,12 +48,19 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
return;
}else if (type == "notf") {
//通知なら飛ばす
//notf(acct_id, tlid, 'direct');
notf(acct_id, tlid, 'direct');
$("#notice_" + tlid).text(cap(type, data, acct_id) + "(" + localStorage.getItem(
"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);
@@ -151,6 +164,7 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
localStorage.setItem("now", type);
if(localStorage.getItem("mode_" + domain)=="misskey"){
var misskey=true;
console.log(type);
if (type == "home") {
var start = "wss://" + domain +
"/?i=" + at;
@@ -170,12 +184,13 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
var start = "wss://" + domain +
"/hybrid-timeline?i=" + at;
} else if (type == "tag") {
Materialize.toast(lang_misskeyparse_tagnostr[lang], 1000);
Materialize.toast(lang.lang_misskeyparse_tagnostr, 3000);
} else if (type == "noauth") {
var start = "wss://" + acct_id +
"/local-timeline?i=" + at;
} else if (type=="list"){
Materialize.toast(lang_misskeyparse_listnostr[lang], 1000);
var start = "wss://" + domain +
"/user-list?i=" + at+"&listId="+data;
}
}else{
var misskey=false;
@@ -271,7 +286,7 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
}
} else if (typeA == "update") {
} else if (typeA == "update" || typeA == "conversation") {
localStorage.removeItem("delete");
var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
@@ -279,8 +294,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 +374,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;
@@ -370,7 +384,12 @@ function moreload(type, tlid) {
}else if (type == "notf") {
notfmore(tlid);
return;
}else if (type == "tootsearch") {
var data=obj[tlid].data;
moreTs(tlid,data);
return;
}
moreloading=true;
localStorage.setItem("now", type);
todo(cap(type) + " TL MoreLoading");
if(type!="noauth"){
@@ -418,6 +437,117 @@ 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,
headers: hdr
};
}
fetch(start, i).then(function(response) {
return response.json();
}).catch(function(error) {
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, type);
}
$("#timeline_" + tlid).append(templete);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
moreloading=false;
todc();
});
}
}
//TL差分取得
function tlDiff(type, data, acct_id, tlid, delc, voice, mode) {
console.log("sabun")
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
var acct_id = obj[tlid].domain;
if (!type) {
var type = obj[tlid].type;
}else{
var data;
}
if(type=="tag"){
var data=obj[tlid].data;
var tag = localStorage.getItem("tag-range");
if(tag=="local"){
data=data+"&local=true";
}
}else if(type=="list"){
var data=obj[tlid].data;
}
var sid = $("#timeline_" + tlid + " .cvo").first().attr("unique-id");
if (sid && !moreloading) {
if (type == "mix" && localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))!="misskey") {
return;
}else if (type == "plus" && localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))!="misskey") {
return;
}else if (type == "notf") {
return;
}
moreloading=true;
localStorage.setItem("now", type);
todo(cap(type) + " TL MoreLoading");
if(type!="noauth"){
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var hdr={
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
};
var domain = localStorage.getItem("domain_" + acct_id);
}else{
var hdr={
'content-type': 'application/json'
};
domain=acct_id;
}
if(localStorage.getItem("mode_" + domain)=="misskey"){
var misskey=true;
hdr={
'content-type': 'application/json'
};
var url=misskeycom(type, data);
var start = "https://" + domain + "/api/notes/"+url;
var method="POST";
var req={};
if(type!="noauth"){
req.i=at;
}
if(type=="local-media"||type=="pub-media"){
req.mediaOnly=true;
}
if(type=="tag"){
req.tag=data;
}
if(type=="list"){
req.listId=data;
}
req.sinceId=sid;
req.limit=20;
var i={
method: method,
headers: hdr,
body: JSON.stringify(req),
}
}else{
var misskey=false;
var start = "https://" + domain + "/api/v1/timelines/" + com(type,data) +
"since_id=" + sid;
if(type=="dm"){
var start = "https://" + domain + "/api/v1/conversations?" +
"since_id=" + sid;
}
var method="GET";
var i={
method: method,
@@ -432,19 +562,24 @@ 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);
$("#timeline_" + tlid).prepend(templete);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
localStorage.removeItem("morelock")
moreloading=false;
todc();
});
}
}
//TL再取得
function reloadTL(type, data, acct_id, key, delc,voice){
tl(type, data, acct_id, key, delc,voice,"");
}
//WebSocket切断
function tlCloser() {
@@ -508,7 +643,7 @@ function cap(type, data, acct_id) {
}
} else if (type == "local-media") {
if(localStorage.getItem("local_" + acct_id) && !locale){
var response=localStorage.getItem("local_" + acct_id)+"("+lang_tl_media[lang]+")";
var response=localStorage.getItem("local_" + acct_id)+"("+lang.lang_tl_media +")";
}else{
var response="Local TL(Media)";
}
@@ -520,7 +655,7 @@ function cap(type, data, acct_id) {
}
} else if (type == "pub-media") {
if(localStorage.getItem("public_" + acct_id) && !locale){
var response=localStorage.getItem("public_" + acct_id)+"("+lang_tl_media[lang]+")";
var response=localStorage.getItem("public_" + acct_id)+"("+lang.lang_tl_media +")";
}else{
var response="Federated TL(Media)";
}
@@ -549,6 +684,8 @@ function cap(type, data, acct_id) {
var response= "Local+"
}else if (type == "webview") {
var response="Twitter"
}else if (type == "tootsearch") {
var response="tootsearch(" + data + ")";
}
return response;
}
@@ -569,7 +706,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 +733,35 @@ 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="whatshot";
} 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";
}else if (type == "tootsearch") {
var response="search";
}
return response;
}
function strAlive(){
var date = new Date() ;
@@ -670,7 +820,6 @@ function reconnector(tlid,type,acct_id,data,mode){
}
reload(type, '', acct_id, tlid, data, mute, "",voice,mode);
}
Materialize.toast(lang_tl_reconnect[lang], 2000);
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,12 +98,13 @@ 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") {
xhr = new XMLHttpRequest;
xhr.open('GET', murl, true);
xhr.responseType = "arraybuffer";
xhr.addEventListener('progress', function (event) {
if (event.lengthComputable) {
var total=event.total;
@@ -164,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);
@@ -288,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') -
@@ -346,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");
@@ -25,11 +30,7 @@ function parseColumn() {
}
tlCloser();
var multi = localStorage.getItem("multi");
if (!multi) {
var obj = [];
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
} else {
if (multi) {
var obj = JSON.parse(multi);
var templete;
@@ -49,17 +50,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 +68,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;
@@ -78,14 +80,14 @@ function parseColumn() {
var if_notf="";
}
if(localStorage.getItem("notification_" + acct.domain)){
var unique_notf=lang_layout_thisacct[lang].replace("{{notf}}" ,localStorage.getItem("notification_" + acct.domain));
var unique_notf=lang.lang_layout_thisacct.replace("{{notf}}" ,localStorage.getItem("notification_" + acct.domain));
}else{
if(lang=="ja"){
if(lang.language=="ja"){
var notflocale="通知";
}else if(lang=="en"){
}else if(lang.language=="en"){
var notflocale="Notification";
}
var unique_notf=lang_layout_thisacct[lang].replace("{{notf}}" ,notflocale);
var unique_notf=lang.lang_layout_thisacct.replace("{{notf}}" ,notflocale);
}
var insert="";
var icnsert="";
@@ -104,10 +106,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,33 +118,89 @@ 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 if(acct.type=="tootsearch"){
if(!acct.left_fold){
basekey=key;
}
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="";
}
unstreamingTL(acct.type,key,basekey,insert,icnsert,acct.left_fold,css,animecss,acct.data);
}else{
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+'">'+
'<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_layout_gotop[lang]+'"></i></div>'+
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="";
}
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="checkStr(\''+acct.type+'\', \''+data+'\', \''+acct.domain+'\', \''+key+'\', \''+delc+'\',\''+voice+'\',null)" 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 +
')" class="setting nex '+if_notf+'" title="'+unique_notf+'"'+icnsert+'><i class="material-icons waves-effect nex notf-icon_' +
acct.domain + '">notifications</i></div><div class="area-sta"><span class="new badge teal notf-reply_'+acct.domain+' hide" data-badge-caption="Reply">0</span><span class="new badge yellow black-text notf-fav_'+acct.domain+' hide" data-badge-caption="Fav">0</span><span class="new badge blue notf-bt_'+acct.domain+' hide" data-badge-caption="BT">0</span><span class="new badge orange notf-follow_'+acct.domain+' hide" data-badge-caption="Follow">0</span></a></div>'+
'<div class="area-a2"><a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang_layout_delthis[lang]+'"'+icnsert+'>cancel</i></a></div>'+
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_delthis +'"'+icnsert+'>cancel</i></a></div>'+
'<div class="area-a3"><a onclick="setToggle(' + key +
')" class="setting nex" title="'+lang_layout_setthis[lang]+'"'+icnsert+'><i class="material-icons waves-effect nex">settings</i></a></div></div>'+
')" 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 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;"><a onclick="mediaToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang_layout_mediafil[lang]+'">perm_media</i><span id="sta-media-' +
key + '">On</span></a>'+lang_layout_mediafil[lang]+'<br><a onclick="cardToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang_layout_linkanades[lang]+'">link</i><span id="sta-card-' +
key + '">On</span></a>'+lang_layout_linkana[lang]+'<br><a onclick="voiceToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang_layout_tts[lang]+'">hearing</i><span id="sta-voice-' +
key + '">On</span></a>'+lang_layout_tts[lang]+'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_layout_reconnect[lang]+'">low_priority</i></a><span class="'+if_notf+'">'+lang_layout_reconnect[lang]+'</span><br>'+lang_layout_headercolor[lang]+'<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
'" class="tl" tlid="' + key + '"'+notf_attr+' data-type="' + acct.type + '"><div id="landing_'+key+'" style="text-align:center">'+lang_layout_nodata[lang]+'</div></div></div></div>';
$("#timeline-container").append(html);
'" data-notf="' + acct.domain + '" data-type="notf" class="notf-timeline"></div></div><div class="column-hide notf-indv-box" id="util-box_' + 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+'</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;
@@ -162,14 +220,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") {
@@ -196,6 +251,15 @@ function parseColumn() {
}
}
}
function checkStr(type, data, acct_id, key, delc,voice){
if($('#notice_icon_' + key).hasClass("red-text") && type!="notf" && type!="mix"){
console.log("sabun-get")
goTop(key);
tlDiff(type, data, acct_id, key, delc,voice,"");
}else{
goTop(key);
}
}
//セカンダリートゥートボタン
function secvis(set){
if(set=="public"){
@@ -239,12 +303,10 @@ function addColumn() {
var obj = JSON.parse(multi);
if(!obj){
var leng=0;
localStorage.setItem("card_" + leng,"true");
var json = JSON.stringify([add]);
localStorage.setItem("column", json);
}else{
var leng=obj.length;
localStorage.setItem("card_" + leng,"true");
obj.push(add);
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
@@ -269,11 +331,9 @@ function addselCk(){
$("#webview-add").addClass("hide");
}
if(domain=="knzk.me" || domain=="mstdn.y-zu.org"){
$("#type-sel").append('<option value="dm" data-trans="dm" id="direct-add">'+lang_layout_dm[lang]+'</option>');
$('#type-sel').material_select('update');
$("#type-sel").append('<option value="dm" data-trans="dm" id="direct-add">'+lang.layout_dm +'</option>');
}else{
$("#direct-add").remove();
$('#type-sel').material_select('update');
}
}
//カラム削除
@@ -288,7 +348,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++){
@@ -382,20 +442,67 @@ 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_layout_webviewmode[lang]+'</label></div>'+
'<div class="area-sta"><input type="checkbox" id="webviewsel" value="true" class="filled-in"><label for="webviewsel">'+lang.lang_layout_webviewmode +'</label></div>'+
'<div class="area-a2"><a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang_layout_delthis[lang]+'"'+icnsert+'>cancel</i></a></div>'+
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_delthis +'"'+icnsert+'>cancel</i></a></div>'+
'<div class="area-a3"><a onclick="setToggle(' + key +
')" class="setting nex" title="'+lang_layout_setthis[lang]+'"'+icnsert+'><i class="material-icons waves-effect nex">settings</i></a></div></div>'+
')" 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_layout_headercolor[lang]+'<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 unstreamingTL(type,key,basekey,insert,icnsert,left_fold,css,animecss,q){
if(!left_fold){
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>';
}
var html='<div class="boxIn" id="timeline_box_' + key + '_box" tlid="' + key +
'"><div class="notice-box z-depth-2" id="menu_'+key+'" style="'+insert+' ">'+
'<div class="area-notice"><i class="material-icons waves-effect" id="notice_icon_' + key + '" style="font-size:40px; padding-top:25%;" onclick="tootsearch('+key+',\''+q+'\');" 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"></div><div class="area-sta"></div>'+
'<div class="area-a2"><a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_delthis +'"'+icnsert+'>cancel</i></a></div>'+
'<div class="area-a3"><a onclick="setToggle(' + key +
')" 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" id="util-box_' + key +
'" style="padding:5px;">'+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>'+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 '+type+'-timeline " tlid="' + key + '" data-type="' + type + '" data-acct="nostr"><div id="landing_'+key+'" style="text-align:center">'+lang.lang_layout_nodata +'</div></div></div>'
$('#timeline_box_' + basekey + '_parentBox').append(html);
tootsearch(key,q);
cardCheck(key);
ebtCheck(key);
mediaCheck(key);
catchCheck(key);
voiceCheck(key);
return true;
}
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();
}

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

@@ -0,0 +1,53 @@
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");
$("#left-menu div").removeClass("active");
$("#addColumnMenu").addClass("active");
}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,11 +1,14 @@
/*ささやきボックス(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")
$("#left-side").show();
$("#default-emoji").show();
$("#unreact").show();
$("#addreact").addClass("hide");
}
//最小化
function mini() {
@@ -18,16 +21,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 +76,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 +99,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,420 +1,139 @@
//設定(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_setting_time[lang].replace("{{set}}" ,dt), 3000);
}
localStorage.setItem("datetype", dd);
var cd = $("[name=theme]:checked").val();
var ct = $("[for="+cd+"]").html();
if (cd != localStorage.getItem("theme")) {
Materialize.toast(lang_setting_theme[lang].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_setting_nsfw[lang].replace("{{set}}" ,nt), 3000);
}
localStorage.setItem("nsfw", nd);
var cwd = $("[name=cw]:checked").val();
var cwt = $("[for=c_"+cwd+"]").text();
if (cwd != localStorage.getItem("cw")) {
Materialize.toast(lang_setting_cw[lang].replace("{{set}}" ,cwt), 3000);
}
localStorage.setItem("cw", cwd);
var cwtd = $("#cw-text").val();
if (cwtd != localStorage.getItem("cw-text")) {
Materialize.toast(lang_setting_cwtext[lang].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_setting_cws[lang].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_setting_rp[lang].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_setting_vis[lang].replace("{{set}}" ,vist), 3000);
}
localStorage.setItem("vis", visd);
var popd = $("#popup").val();
if (popd > 0 && popd != localStorage.getItem("popup")) {
Materialize.toast(lang_setting_popup[lang].replace("{{set}}" ,popd+lang_setting_s[lang]), 3000);
} else if (popd != localStorage.getItem("popup")) {
Materialize.toast(lang_setting_popup[lang].replace("{{set}}" ,lang_setting_off[lang]), 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_setting_gif[lang].replace("{{set}}" ,gift), 3000);
}
localStorage.setItem("gif", gifd);
var sentd = $("#sentence").val();
var ltrd = $("#letters").val();
if (sentd != localStorage.getItem("sentence") || ltrd != localStorage.getItem("letters")) {
Materialize.toast(lang_setting_selt[lang].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_setting_autocw[lang].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_setting_width[lang].replace("{{set}}" ,widthd), 3000);
}
localStorage.setItem("width", widthd);
var imgd = $("[name=img]:checked").val();
var imgt = $("[for=i_"+imgd+"]").text();
if (imgd != localStorage.getItem("img")) {
Materialize.toast(lang_setting_img[lang].replace("{{set}}" ,imgt), 3000);
}
localStorage.setItem("img", imgd);
var fontd = $("#font").val();
if(fontd){
if (fontd != localStorage.getItem("font")) {
Materialize.toast(lang_setting_font[lang].replace("{{set}}" ,fontd), 3000);
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_setting_font[lang].replace("{{set}}" ,lang_setting_default[lang]), 3000);
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_setting_size[lang].replace("{{set}}" ,sized), 3000);
}
localStorage.setItem("size", sized);
var heid = $("#img-height").val();
if (heid != localStorage.getItem("img-height")) {
Materialize.toast(lang_setting_imgheight[lang].replace("{{set}}" ,heid), 3000);
}
localStorage.setItem("img-height", heid);
var boxd = $("[name=box]:checked").val();
var boxt = $("[for=bx_"+boxd+"]").text();
if (boxd != localStorage.getItem("box")) {
Materialize.toast(lang_setting_box[lang].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_setting_tag[lang].replace("{{set}}" ,tagt), 3000);
}
localStorage.setItem("tag-range", tagd);
var uld = $("[name=ul]:checked").val();
var ult = $("[for=ul_"+uld+"]").text();
if (uld != localStorage.getItem("locale")) {
Materialize.toast(lang_setting_ul[lang].replace("{{set}}" ,ult), 3000);
}
localStorage.setItem("locale", uld);
var ntd = $("[name=notf]:checked").val();
var ntt = $("[for=ntf_"+ntd+"]").text();
if (ntd != localStorage.getItem("nativenotf")) {
Materialize.toast(lang_setting_notf[lang].replace("{{set}}" ,ntt), 3000);
}
localStorage.setItem("nativenotf", ntd);
var qtd = $("[name=quote]:checked").val();
var qtt = $("[for=q_"+qtd+"]").text();
if (qtd != localStorage.getItem("quote")) {
Materialize.toast(lang_setting_quote[lang].replace("{{set}}" ,qtt), 3000);
}
localStorage.setItem("quote", qtd);
var viad = $("[name=via]:checked").val();
var viat = $("[for=via_"+viad+"]").text();
if (viad != localStorage.getItem("viashow")) {
Materialize.toast(lang_setting_via[lang].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_setting_setasread[lang].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_setting_mov[lang].replace("{{set}}" ,movt), 3000);
}
localStorage.setItem("mouseover", movd);
var maind = $("[name=main]:checked").val();
var maint = $("[for=mn_"+maind+"]").text();
if (maind != localStorage.getItem("mainuse")) {
Materialize.toast(lang_setting_main[lang].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_setting_sec[lang].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 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();
function climute(){
//クライアントミュート
var cli = localStorage.getItem("client_mute");
var obj = JSON.parse(cli);
if(!obj){
$("#mute-cli").html(lang_setting_nomuting[lang]);
$("#mute-cli").html(lang.lang_setting_nomuting);
}else{
if(!obj[0]){
$("#mute-cli").html(lang_setting_nomuting[lang]);
$("#mute-cli").html(lang.lang_setting_nomuting);
return;
}
var templete;
@@ -424,7 +143,7 @@ function climute(){
templete = '<div class="acct" id="acct_' + key + '">' + list +
'.' +
cli + '<button class="btn waves-effect red disTar" onclick="cliMuteDel(' +
key + ')">'+lang_del[lang]+'</button><br></div>';
key + ')">'+lang.lang_del+'</button><br></div>';
$("#mute-cli").append(templete);
});
}
@@ -468,20 +187,20 @@ function notftest(){
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: lang_setting_notftest[lang]+'('+lang_setting_notftestprof[lang]+')',
body: lang.lang_setting_notftest+'('+lang.lang_setting_notftestprof+')',
icon: localStorage.getItem("prof_0")
};
if(os=="darwin"){
var n = new Notification('TheDesk'+lang_setting_notftest[lang], options);
var n = new Notification('TheDesk'+lang.lang_setting_notftest, options);
}else{
ipc.send('native-notf', ['TheDesk'+lang_setting_notftest[lang],lang_setting_notftest[lang]+'('+lang_setting_notftestprof[lang]+')',localStorage.getItem('prof_0'),"",""]);
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_setting_ksref[lang], 3000);
Materialize.toast(lang.lang_setting_ksref, 3000);
}
function oksload(){
if(localStorage.getItem("oks-1")){$("#oks-1").val(localStorage.getItem("oks-1"))}
@@ -497,7 +216,7 @@ function changelang(lang){
});
}
function exportSettings(){
if(!confirm(lang_setting_exportwarn[lang])){
if(!confirm(lang.lang_setting_exportwarn)){
return false;
}
var electron = require("electron");
@@ -507,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){
@@ -523,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"),
@@ -571,7 +297,7 @@ function exportSettings(){
});
}
function importSettings(){
if(!confirm(lang_setting_importwarn[lang])){
if(!confirm(lang.lang_setting_importwarn)){
return false;
}
var electron = require("electron");
@@ -582,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);
@@ -605,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]);
}
@@ -649,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.")
}
@@ -668,4 +421,230 @@ function savefolder(){
}, (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(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();
@@ -58,6 +58,8 @@ function Scap(type, data) {
return "Integrated"
}else if (type == "webview") {
return "Twitter"
}else if (type == "tootsearch") {
return "tootsearch(" + data + ")"
}else{
console.log(type);
}
@@ -104,18 +106,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

@@ -57,10 +57,10 @@ function spotifyFlagSave(){
var awk = $("[name=awk]:checked").val();
if(awk=="yes"){
localStorage.setItem("artwork","yes");
Materialize.toast(lang_spotify_img[lang], 3000);
Materialize.toast(lang.lang_spotify_img, 3000);
}else{
localStorage.removeItem("artwork");
Materialize.toast(lang_spotify_imgno[lang], 3000);
Materialize.toast(lang.lang_spotify_imgno, 3000);
}
}
function nowplaying(mode){
@@ -118,18 +118,34 @@ function nowplaying(mode){
$("#textarea").val(content);
});
}else{
alert(lang_spotify_acct[lang]);
alert(lang.lang_spotify_acct);
}
}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");
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);
var regExp = new RegExp("{album}", "g");
@@ -141,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");
@@ -158,7 +174,26 @@ function nowplaying(mode){
function spotifySave(){
var temp=$("#np-temp").val();
localStorage.setItem("np-temp", temp);
Materialize.toast(lang_spotify_np[lang], 3000);
Materialize.toast(lang.lang_spotify_np, 3000);
}
function npprovider(){
var provd = $("[name=npp]:checked").val();
if(!provd){
if (localStorage.getItem("np_provider")) {
$("[value="+localStorage.getItem("np_provider")+"]").prop("checked", true);
}else{
$("[value=AIMP]").prop("checked", true);
localStorage.setItem("np_provider", "AIMP");
}
}else{
if (provd != localStorage.getItem("np_provider")) {
Materialize.toast(lang.lang_setting_npprovide.replace("{{set}}" ,provd), 3000);
}
localStorage.setItem("np_provider", provd);
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('itunes', ["set",provd]);
}
}
if(location.search){
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
@@ -179,50 +214,4 @@ $("#npbtn").click(function() {
$("#npbtn").bind('contextmenu', function() {
nowplaying('itunes');
return false;
});
/*cinderella NP*/
function cgNP(q){
suggest = "https://cg.toot.app/api/v1/?song=" + q
console.log(suggest)
fetch(suggest, {
method: 'GET',
headers: {
'content-type': 'application/json'
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
var electron = require("electron");
var ipc = electron.ipcRenderer;
var flag=localStorage.getItem("artwork");
if(flag){
var img=json.album.artwork;
ipc.send('bmp-image', [img,0]);
}
var content=localStorage.getItem("np-temp");
if(!content || content==""){
var content="#NowPlaying {song} / {album} / {artist}\n{url}";
}
var regExp = new RegExp("{song}", "g");
content = content.replace(regExp, json.name);
var regExp = new RegExp("{album}", "g");
content = content.replace(regExp, json.album.name);
var regExp = new RegExp("{artist}", "g");
content = content.replace(regExp, json.artist.text);
var regExp = new RegExp("{composer}", "g");
content = content.replace(regExp, json.composer);
var regExp = new RegExp("{lyricist}", "g");
content = content.replace(regExp, json.lyricist);
var regExp = new RegExp("{bpm}", "g");
content = content.replace(regExp, json.bpm);
var regExp = new RegExp("{genre}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{url}", "g");
content = content.replace(regExp, "");
$("#textarea").val(content);
});
}
});

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

@@ -142,7 +142,7 @@ function spotifytips(){
spotint=setInterval(spotStart, 1000);
});
}else{
alert(lang_spotify_acct[lang]);
alert(lang.lang_spotify_acct);
}
}
function spotStart(){

View File

@@ -53,7 +53,7 @@ function utl(user, more, acct_id) {
var templete = parse(json, '', acct_id, 'user');
}
if(!json[0]){
templete=lang_details_nodata[lang]+"<br>";
templete=lang.lang_details_nodata+"<br>";
}
if (more) {
$("#his-tl-contents").append(templete);
@@ -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="";
}
@@ -155,7 +155,7 @@ function flw(user, more, acct_id) {
var templete = userparse(json,'',acct_id);
}
if(templete==""){
templete=lang_details_nodata[lang]+"<br>";
templete=lang.lang_details_nodata+"<br>";
}
if (more) {
$("#his-follow-list-contents").append(templete);
@@ -221,7 +221,7 @@ function fer(user, more, acct_id) {
var templete = userparse(json,'',acct_id);
}
if(templete==""){
templete=lang_details_nodata[lang]+"<br>";
templete=lang.lang_details_nodata+"<br>";
}
if (more) {
$("#his-follower-list-contents").append(templete);
@@ -283,7 +283,7 @@ function showFav(more, acct_id) {
var templete = misskeyParse(json, '', acct_id,'user');
}
if(!json[0]){
templete=lang_details_nodata[lang]+"<br>";
templete=lang.lang_details_nodata+"<br>";
}
if (more) {
$("#his-fav-list-contents").append(templete);
@@ -339,7 +339,7 @@ function showMut(more, acct_id) {
console.error(error);
}).then(function(json) {
if(!json[0]){
templete=lang_details_nodata[lang]+"<br>";
templete=lang.lang_details_nodata+"<br>";
}
var templete = userparse(json,'',acct_id);
if (more) {
@@ -358,7 +358,7 @@ function showBlo(more, acct_id) {
}
var domain = localStorage.getItem("domain_" + acct_id);
if(localStorage.getItem("mode_" + domain)=="misskey"){
$("#his-blocking-list-contents").html(lang_hisdata_notonmisskey[lang]+"<br>");
$("#his-blocking-list-contents").html(lang.lang_hisdata_notonmisskey+"<br>");
return false;
}
var at = localStorage.getItem("acct_"+ acct_id + "_at");
@@ -382,7 +382,7 @@ function showBlo(more, acct_id) {
console.error(error);
}).then(function(json) {
if(!json[0]){
templete=lang_details_nodata[lang]+"<br>";
templete=lang.lang_details_nodata+"<br>";
}
var templete = userparse(json,'',acct_id);
if (more) {
@@ -445,7 +445,7 @@ function showReq(more, acct_id) {
}
if(!json[0]){
templete=lang_details_nodata[lang]+"<br>";
templete=lang.lang_details_nodata+"<br>";
}
if (more) {
$("#his-request-list-contents").append(templete);
@@ -463,7 +463,7 @@ function showDom(more, acct_id) {
}
var domain = localStorage.getItem("domain_" + acct_id);
if(localStorage.getItem("mode_" + domain)=="misskey"){
$("#his-domain-list-contents").html(lang_hisdata_notonmisskey[lang]+"<br>");
$("#his-domain-list-contents").html(lang.lang_hisdata_notonmisskey+"<br>");
return false;
}
var at = localStorage.getItem("acct_"+ acct_id + "_at");
@@ -489,7 +489,7 @@ function showDom(more, acct_id) {
}).then(function(json) {
var templete = "";
if(!json[0]){
templete=lang_details_nodata[lang]+"<br>";
templete=lang.lang_details_nodata+"<br>";
}
Object.keys(json).forEach(function(key) {
var domain = json[key];
@@ -514,7 +514,7 @@ function showFrl(more, acct_id) {
}
var domain = localStorage.getItem("domain_" + acct_id);
if(localStorage.getItem("mode_" + domain)=="misskey"){
$("#his-follow-recom-contents").html(lang_hisdata_notonmisskey[lang]+"<br>");
$("#his-follow-recom-contents").html(lang.lang_hisdata_notonmisskey+"<br>");
return false;
}
var at = localStorage.getItem("acct_"+ acct_id + "_at");
@@ -534,13 +534,13 @@ function showFrl(more, acct_id) {
}).then(function(response) {
return response.json();
}).catch(function(error) {
$("#his-follow-recom-contents").html(lang_details_nodata[lang]+"("+lang_hisdata_frcreq[lang]+")<br>");
$("#his-follow-recom-contents").html(lang.lang_details_nodata+"("+lang.lang_hisdata_frcreq+")<br>");
console.error(error);
}).then(function(json) {
console.log(json);
if(!json[0]){
console.log("No data");
templete=lang_details_nodata[lang]+"("+lang_hisdata_frcwarn[lang]+")<br>";
templete=lang.lang_details_nodata+"("+lang.lang_hisdata_frcwarn+")<br>";
}else{
var templete = userparse(json,'',acct_id);
}
@@ -557,7 +557,7 @@ function showFrl(more, acct_id) {
//ユーザーマッチングリスト
function showMat() {
$("#his-matching-list-contents").html(lang_hisdata_taketime[lang]);
$("#his-matching-list-contents").html(lang.lang_hisdata_taketime);
var full=$("#his-acct").attr("fullname");
var acct_id=$("#his-data").attr("use-acct");
full=full.split("@");

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();
@@ -86,8 +86,8 @@ function udg(user, acct_id) {
//moved設定時
if (json.moved) {
Materialize.toast(
lang_showontl_movetxt[lang]+'<button class="btn-flat toast-action" onclick="udg(\'' +
json.moved.id + '\',\''+acct_id+'\')">'+lang_showontl_movebtn[lang]+'</button>', 4000)
lang.lang_showontl_movetxt+'<button class="btn-flat toast-action" onclick="udg(\'' +
json.moved.id + '\',\''+acct_id+'\')">'+lang.lang_showontl_movebtn+'</button>', 4000)
}
$('#his-data').modal('open');
$('#his-data').attr("user-id", user);
@@ -117,7 +117,7 @@ function udg(user, acct_id) {
var emoji = json.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'">';
'" class="emoji-img" data-emoji="'+shortcode+'" draggable="false">';
var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url);
note = note.replace(regExp, emoji_url);
@@ -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){
@@ -139,8 +143,15 @@ function udg(user, acct_id) {
for(var i=0;i<json.fields.length;i++){
var fname=json.fields[i].name;
var fval=json.fields[i].value;
if(json.fields[i].verified_at){
var when=lang.lang_showontl_verified+":"+crat(json.fields[i].verified_at);
var color="rgba(121,189,154,.25);"
}else{
var when="";
var color="inherit"
}
fval=twemoji.parse(fval);
note=note+'<tr><td class="his-field-title">'+fname+'</td><td class="his-field-content">'+fval+'</td></tr>';
note=note+'<tr><td class="his-field-title">'+fname+'</td><td class="his-field-content" title="'+when+'" style="background-color:'+color+'">'+fval+'</td></tr>';
}
note=note+'</table>'
$("#his-des").html(twemoji.parse(note));
@@ -151,7 +162,7 @@ function udg(user, acct_id) {
$("#his-des").html(twemoji.parse(note));
}
if(json.bot){
$("#his-bot").html(lang_showontl_botacct[lang]);
$("#his-bot").html(lang.lang_showontl_botacct);
}
$('#his-data').css('background-size', 'cover');
$("#his-data .tab-content").css("height",$("#his-float-timeline").height()-70+"px")
@@ -288,21 +299,21 @@ function misskeyUdg(user, acct_id) {
if (json.isFollowing) {
//自分がフォローしている
$("#his-data").addClass("following");
$("#his-follow-btn").text(lang_status_unfollow[lang]);
$("#his-follow-btn").text(lang.lang_status_unfollow);
hisList(user,acct_id);
}else{
$("#his-follow-btn").text(lang_status_follow[lang]);
$("#his-follow-btn").text(lang.lang_status_follow);
}
if (json.isFollowed) {
//フォローされてる
$("#his-relation").text(lang_showontl_followed[lang]);
$("#his-relation").text(lang.lang_showontl_followed);
}
$("#his-block-btn").hide();
if (json.isMuted) {
$("#his-data").addClass("muting");
$("#his-mute-btn").text(lang_status_unmute[lang]);
$("#his-mute-btn").text(lang.lang_status_unmute);
}else{
$("#his-mute-btn").text(lang_status_mute[lang]);
$("#his-mute-btn").text(lang.lang_status_mute);
}
$(".only-my-data").hide();
$(".only-his-data").show();
@@ -347,46 +358,52 @@ function relations(user, acct_id) {
if (json.following) {
//自分がフォローしている
$("#his-data").addClass("following");
$("#his-follow-btn").text(lang_status_unfollow[lang]);
$("#his-follow-btn").text(lang.lang_status_unfollow);
hisList(user,acct_id);
}else{
$("#his-follow-btn").text(lang_status_follow[lang]);
$("#his-follow-btn").text(lang.lang_status_follow);
}
if (json.followed_by) {
//フォローされてる
$("#his-relation").text(lang_showontl_followed[lang]);
$("#his-relation").text(lang.lang_showontl_followed);
}
if (json.blocking) {
$("#his-data").addClass("blocking");
$("#his-block-btn").text(lang_status_unblock[lang]);
$("#his-block-btn").text(lang.lang_status_unblock);
}else{
$("#his-block-btn").text(lang_status_block[lang]);
$("#his-block-btn").text(lang.lang_status_block);
}
if (json.muting) {
$("#his-data").addClass("muting");
$("#his-mute-btn").text(lang_status_unmute[lang]);
$("#his-mute-btn").text(lang.lang_status_unmute);
}else{
$("#his-mute-btn").text(lang_status_mute[lang]);
$("#his-mute-btn").text(lang.lang_status_mute);
}
if (json.muting_notifications) {
$("#his-data").addClass("mutingNotf");
$("#his-notf-btn").text(lang_showontl_notf[lang]+lang_status_unmute[lang]);
$("#his-notf-btn").text(lang.lang_showontl_notf+lang.lang_status_unmute);
}else{
$("#his-notf-btn").text(lang_showontl_notf[lang]+lang_status_mute[lang]);
$("#his-notf-btn").text(lang.lang_showontl_notf+lang.lang_status_mute);
}
if (json.domain_blocking) {
$("#his-data").addClass("blockingDom");
$("#his-domain-btn").text(lang_showontl_domain[lang]+lang_status_unblock[lang]);
$("#his-domain-btn").text(lang.lang_showontl_domain+lang.lang_status_unblock);
}else{
$("#his-domain-btn").text(lang_showontl_domain[lang]+lang_status_block[lang]);
$("#his-domain-btn").text(lang.lang_showontl_domain+lang.lang_status_block);
}
//Endorsed
if(json.endorsed){
$("#his-end-btn").addClass("endorsed");
$("#his-end-btn").text(lang_status_unendorse[lang])
$("#his-end-btn").text(lang.lang_status_unendorse)
}else{
$("#his-end-btn").removeClass("endorsed");
$("#his-end-btn").text(lang_status_endorse[lang])
$("#his-end-btn").text(lang.lang_status_endorse)
}
//Blocked
if(json.blocked_by){
$("#his-float-timeline").hide();
$("#his-float-blocked").show();
$("#his-follow-btn").hide()
}
});
@@ -410,8 +427,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("");
@@ -431,15 +448,15 @@ function reset(){
$("#his-notf-btn").show();
$("#his-domain-btn").show();
$("#his-emp-btn").show();
$("#his-follow-btn").text(lang_status_follow[lang]);
$("#his-mute-btn").text(lang_status_mute[lang]);
$("#his-block-btn").text(lang_status_block[lang]);
$("#his-notf-btn").text(lang_showontl_notf[lang]+lang_status_mute[lang]);
$("#his-domain-btn").text(lang_showontl_domain[lang]+lang_status_block[lang]);
$("#his-follow-btn").text(lang.lang_status_follow);
$("#his-mute-btn").text(lang.lang_status_mute);
$("#his-block-btn").text(lang.lang_status_block);
$("#his-notf-btn").text(lang.lang_showontl_notf+lang.lang_status_mute);
$("#his-domain-btn").text(lang.lang_showontl_domain+lang.lang_status_block);
$("#his-relation").text("");
$(".cont-series").html("");
$("#domainblock").val("");
$("#his-lists-a").html(lang_showontl_listwarn[lang]);
$("#his-lists-a").html(lang.lang_showontl_listwarn);
$("#his-lists-b").html('');
$("#his-name-val").val("");
$("#his-des-val").val("");
@@ -449,6 +466,8 @@ function reset(){
$("#his-f4-name").val(""); $("#his-f4-val").val("");
$("#his-endorse").html("");
$("#his-openin").attr("data-href", "");
$("#his-float-timeline").show();
$("#his-float-blocked").hide();
}
$('#my-data-nav .custom-tab').on('click',function(){
var target=$(this).find("a").attr("go");

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,29 +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 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;
// アプリケーションをコントロールするモジュール
const app = electron.app;
// ウィンドウを作成するモジュール
const BrowserWindow = electron.BrowserWindow;
const {
download
} = require('electron-dl');
const join = require('path').join;
// メインウィンドウは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'));
@@ -42,9 +47,17 @@ try {
height: "string",
x: "string",
y: "string"
}; // デフォルトバリュー
}
function isFile(file){
try {
fs.statSync(file);
return true
} catch (err) {
if (err.code === 'ENOENT') return false
}
}
// 全てのウィンドウが閉じたら終了
app.on('window-all-closed', function() {
if (process.platform != 'darwin') {
@@ -52,28 +65,42 @@ app.on('window-all-closed', function() {
app.quit();
}
});
// macOSでウィンドウを閉じた後に再度開けるようにする
app.on('activate', function() {
if (mainWindow == null) {
createWindow();
}
});
function createWindow() {
// メイン画面の表示。ウィンドウの幅、高さを指定できる
var platform=process.platform;
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 + '/thedesk.png'}
}else{
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 {
if(isFile(lang_path)) {
console.log("exist");
var lang = fs.readFileSync(lang_path, 'utf8');
} catch (e) {
var lang=app.getLocale();
if(~lang.indexOf("ja")){
} else {
var langs=app.getLocale();
console.log(langs);
if(~langs.indexOf("ja")){
lang="ja";
}else{
lang="en";
}
fs.writeFileSync(lang_path,lang);
fs.mkdir(app.getPath("userData"), function (err) {
fs.writeFileSync(lang_path,lang);
});
}
console.log(app.getLocale());
console.log("launch:"+lang);
// メイン画面の表示。ウィンドウの幅、高さを指定できる
var platform=process.platform;
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 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);
electron.session.defaultSession.clearCache(() => {})
if(process.argv){
if(process.argv[1]){
@@ -91,7 +118,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();
}
@@ -100,6 +127,7 @@ function createWindow() {
}
// ウィンドウが閉じられたらアプリも終了
mainWindow.on('closed', function() {
electron.ipcMain.removeAllListeners();
mainWindow = null;
});
mainWindow.on('close', function() {
@@ -118,61 +146,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,dir)));
}
//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);
@@ -180,429 +169,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) => {
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);
});
}
});
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'));
});
app.setAsDefaultProtocolClient('thedesk')
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,dir){
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(dir + '/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;
@@ -69,7 +71,33 @@ textarea {
</style>
</head>
<body>
<script type="text/javascript" src="./js/common/jquery.js"></script>
<script>
//jQuery読む
window.jQuery = window.$ = require('./js/common/jquery.js');
var Hammer = require('./js/common/hammer.min.js');
$.strip_tags = function(str, allowed) {
if(!str){
return "";
}
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
.join('');
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
};
function escapeHTML(str) {
if(!str){
return "";
}
return str.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;');
}
</script>
<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
<select id="post-acct-sel" style="max-width:150px">
</select>
@@ -82,8 +110,6 @@ textarea {
</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")){
@@ -92,8 +118,6 @@ textarea {
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>
@@ -139,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>

2689
app/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,13 @@
{
"name": "thedesk",
"version": "16.1.5",
"version": "18.2.1",
"description": "TheDesk is a Mastodon client for PC.",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"test": "echo \"Error: no test specified\" && exit 1",
"dist": "build --linux snap",
"build:all": "electron-builder --win --linux",
"build:win": "electron-builder --win"
},
"keywords": [],
"bugs": {
@@ -13,7 +16,7 @@
},
"homepage": "https://thedesk.top",
"author": {
"name": "Cutls P",
"name": "Cutls",
"url": "https://kirishima.clooud/@Cutls",
"email": "web-pro@cutls.com"
},
@@ -22,42 +25,79 @@
"name": "とねぢ",
"url": "https://minohdon.jp/@toneji",
"email": "solfa.tono@gmail.com"
},
{
"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-or-later",
"license": "GPL-3.0",
"dependencies": {
"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": {
"itunes-nowplaying-mac": "^0.2.3"
"nowplaying-node": "^0.1.3",
"itunes-nowplaying-mac": "git+https://github.com/rinsuki/itunes-nowplaying-mac#pull/1/head"
},
"build": {
"productName": "TheDesk",
"appId": "top.thedesk",
"directories": {
"output": "build"
"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": {
"oneClick": false,
"allowToChangeInstallationDirectory": true,
"artifactName": "TheDesk-setup.${ext}"
},
"linux": {
"icon": "build/icons",
"target": [
"deb",
"rpm"
"snap"
],
"category": "Network"
},
"electronDownload": {
"version": "2.0.7"
"mac": {
"target": ["dmg","zip"]
},
"electronVersion": "2.0.7"
"electronDownload": {
"version": "4.0.6"
},
"electronVersion": "4.0.6"
},
"devDependencies": {
"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

@@ -18,39 +18,56 @@ body,html{overflow-y: scroll;}
.colorsel{ display:flex; }
.card .colorsel div:not(.exc){width:20px;height:20px;}
.card .colorsel div.exc{width:40px;height:20px;}
.first{
display:flex;
justify-content: center;
align-items:center
}
.first .hide-first{
display:none;
}
</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>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.js"></script>
<script type="text/javascript" src="../../js/lang/lang.en.js"></script>
<script>
var lang="en";
var misskeytoken=false;
</script>
<script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">Back</a><br>
<h5>List of accounts</h5>
<div id="acct-list"></div>
<div class="divider"></div>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">Back</a><br>
<h5>List of accounts</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div>
<h5>Add an account</h5><br>
<div id="add">
<div class="row">
<div class="col s6">
<div class="col s8">
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp">
<div id="ins-suggest"></div>
Check if TheDesk is not working on Windows, you want to login Pleroma instance.<br>
Uncheck it to skip pasiting code.(login to Mastodon on Windows or macOS) (Recommended: pcheck)<br>
<input type="checkbox" class="filled-in" id="linux" />
<label for="linux">Code setup</label><br>
<input type="checkbox" class="filled-in" id="misskey" />
<label for="misskey">Login as Misskey</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br>
</div>
<div class="col s6">
<div class="col s4">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
@@ -67,6 +84,8 @@ body,html{overflow-y: scroll;}
<input type="text" id="misskey-key" placeholder="Code">
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br>
</div>
</div>
<div class="hide-first">
<h5>Main an account</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">Select an account</span>
<br>
@@ -77,14 +96,15 @@ 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 instances:<span id="ins-connect"></span><br>
Federated servers:<span id="ins-connect"></span><br>
Toots:<span id="ins-toot"></span><br>
Users:<span id="ins-user"></span>Users<br>
Connection:<span id="ins-per"></span>%<br>
Mastodon version:<span id="ins-ver"></span>@<span id="ins-upd"></span><br>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/common/sha256.js"></script>

View File

@@ -13,29 +13,32 @@
<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>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.js"></script>
<script type="text/javascript" src="../../js/lang/parse.lang.js"></script>
<script type="text/javascript" src="../../js/lang/lang.en.js"></script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/version.js"></script>
<script type="text/javascript" src="../../js/common/keyshortcut.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
<script>
var ver="Akane (16.1.5)";
var ver="Usamin (18.2.1)";
//betaを入れるとバージョンチェックしない
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
//var ver="beta";
//WinstoreではバージョンCK・言語・Misskeyトークンの機能が排除
var winstore=false;
var acct_id=0;
var tlid=0;
var lang="en";
verck(ver);
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<div id="tl">
@@ -48,8 +51,10 @@ var lang="en";
</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"><span id="unreact">Post new</span><span id="addreact" class="hide">Reaction</span></div>
<!--トゥートボックス-->
<div id="left-side">
<div class="row" style="margin-bottom:0;">
</span>
<div class="" style="float:left;">
@@ -118,21 +123,19 @@ var lang="en";
<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>
<i class="waves-effect gray material-icons purple-text dropdown-button" data-activates='dropdown1' id="vis-icon">public</i>
<a class="waves-effect gray" id="cw" onclick="cw()" title="Hide text behind warning">CW</a>
<span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray" onclick="fileselect()" title="Attach..">photo_library</i></span></span>
<i class="waves-effect gray material-icons" onclick="adobe()" title="Adobe Photo Editor">format_shapes</i>
<i class="waves-effect gray material-icons" onclick="emojiToggle()" id="emojibtn" title="Emojis">tag_faces</i>
<a class="pointer waves-effect gray" id="npbtn" title="NowPlaying[Click to insert info of Spotify(account link is required.)/control+click to insert that of iTunes(macOS)]"><i class="material-icons" style="font-size:24px;">music_note</i></a>
<i class="waves-effect gray material-icons dropdown-button" data-activates='dropdown2'>more_vert</i>
<i class="material-icons nex gray waves-effect" title="Clear toot box(Ctrl+Shit+C)" data-trans-title="post_box_clear" id="clear">clear</i>
</div>
<div class="col s12 mize" style="margin-bottom:5px; padding:0;">
<div id="taglist"></div>
<span id="preview" class="mize"></span>
<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>:
@@ -140,6 +143,9 @@ var lang="en";
</span>
<br>
<input type="text" id="cw-text" placeholder="Warning text" class="mize" style="margin:0">
<div id="sch-box">Post at<br><span class="sml">2.7.0~ Minimum time gap:5min(clock on the server may not be accurate.)</span><br>
<input type="datetime-local" id="sch-date" placeholder="Scheduled toot" class="datepicker" style="margin:0">
</div>
</div>
</div>
<!-- 公開範囲 Dropdown Structure -->
@@ -164,6 +170,24 @@ var lang="en";
<a onclick="vis('direct')" class="disabled direct">(Direct)</a>
</li>
</ul>
<!-- その他 Dropdown Structure -->
<ul id='dropdown2' class='dropdown-content'>
<li>
<a onclick="adobe()">Adobe Photo Editor</a>
</li>
<li>
<a onclick="nowplaying('spotify');">NowPlaying(Spotify)</a>
</li>
<li>
<a onclick="nowplaying('itunes');">NowPlaying</a>
</li>
<li>
<a onclick="schedule();">Scheduled toot</a>
</li>
<li>
<a onclick="pollToggle();">Poll</a>
</li>
</ul>
<!--hidden area-->
<input type="hidden" id="reply">
<input type="hidden" id="media">
@@ -174,59 +198,82 @@ var lang="en";
<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>
<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="mastodon-poll">Mastodon(2.8~)</option>
</select>
<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">day(s)
<input type="number" style="width:50px" id="hours_poll" placeholder="h" value="0">hour(s)
<input type="number" style="width:50px" id="mins_poll" placeholder="m" value="0">minute(s)
</div>
</div>
</div>
</div>
<!-- Modal Structure Tootdata-->
<div id="tootmodal" class="modal modal-fixed-footer">
@@ -254,14 +301,14 @@ var lang="en";
<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>
@@ -275,7 +322,7 @@ var lang="en";
<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>
@@ -283,19 +330,20 @@ var lang="en";
</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">
@@ -303,11 +351,11 @@ var lang="en";
<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="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>
@@ -317,7 +365,7 @@ var lang="en";
<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" draggable="false">
<span id="his-name">Loading...</span><span class="gray" id="his-bot"></span>
<br>@
<span id="his-acct"></span><br>
@@ -470,6 +518,9 @@ var lang="en";
</div>
</div>
</div>
<div class="his-float" id="his-float-blocked">
<div>You are blocked. Why?</div>
</div>
</div>
</div>
<div class="modal-footer">
@@ -528,28 +579,28 @@ var lang="en";
<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-Akane_16-1-5" style="display:none">
<div id="release-Usamin_18-2-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 Akane (16.1.5)</h5>
16.1.5<br>
<ul>
<li>バグ,脆弱性修正</li>
</ul>
16.1.4<br>
<ul>
<li>全てバグ修正(5件ほど)</li>
</ul>
ご迷惑をおかけしたことをお詫び申し上げます。
16.1.3<br>
<ul>
<li>セカンダリートゥートボタン</li>
<li>読み上げや絵文字に関するバグの修正</li>
<li>公式ヘルプサイト:<a href="https://docs.thedesk.top">TheDesk Docs</a></li>
</ul>
いつの間にかリアルタイムユーザー数が100を超えていました。皆様のご愛顧に感謝申し上げます。<br>
<h5>Release Note Usamin (18.2.0)</h5>
<b>緊急の脆弱性修正</b>
<h5>Release Note Usamin (18.2.0)</h5>
・tootsearchをひとつのカラムにしてエゴサが捗る<br>
・イントロダクション(初回起動時)の挙動修正<br>
・リンクプレビューを最大1行ずつに省略(タイトルと本文)<br>
・ブロックされたときのプロフィールの動作(Mastodon 2.8~)<br>
・(Misskey)MFM追加flipやjumpなど<br>
・(Misskey)リストに対応<br>
・(Misskey)カスタム絵文字に対応。カスタム絵文字によるリアクションに対応(対応インスタンスに限る)。<br>
<b>カスタム絵文字をゼロ幅スペースによる挿入に変更する機能</b><br>
・一部機能の統廃合とバグの修正<br>
・best-friends.chatやキュアスタ、misskey.devをサポートインスタンスに追加
</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>
@@ -557,9 +608,9 @@ var lang="en";
<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>
@@ -579,130 +630,162 @@ var lang="en";
<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">
<input id="src" type="text" class="validate" style="width:60%">
<label for="src" data-trans="src">Search</label>
<button class="btn waves-effect indigo" style="width: 36%;padding: 0;padding-left: 15px;" onclick="src()" data-trans-i="src">
<i class="material-icons left" style="margin:0">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:97.5%;" 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">day(s)
<input type="number" style="width:50px" id="hours_filter" placeholder="h" value="0">hour(s)
<input type="number" style="width:50px" id="mins_filter" placeholder="m" value="0">minute(s)<br>
Quick:<a onclick="filterTime(0,0,30)" class="pointer">30minute(s)</a>/
<a onclick="filterTime(0,1,0)" class="pointer">1hour(s)</a>/
<a onclick="filterTime(0,6,0)" class="pointer">6hour(s)</a>/
<a onclick="filterTime(0,12,0)" class="pointer">12hour(s)</a>/
<a onclick="filterTime(1,0,0)" class="pointer">1day(s)</a>/
<a onclick="filterTime(7,0,0)" class="pointer">7day(s)</a>/
<a onclick="filterTime(0,0,0)" class="pointer">Never</a><br>
<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.
<div id="something-wrong">
<div>Internal error: please clear all data(at setting page) <b>All data will be deleted.</b></div>
</div>
</div>
</div>
</div>
@@ -710,53 +793,26 @@ var lang="en";
<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>
@@ -796,9 +852,11 @@ var lang="en";
<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>
@@ -810,6 +868,7 @@ var lang="en";
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/ui/post-box.js"></script>
<script type="text/javascript" src="../../js/ui/layout.js"></script>
<script type="text/javascript" src="../../js/post/emoji.js"></script>
<script type="text/javascript" src="../../js/login/instance.js"></script>
<script type="text/javascript" src="../../js/login/login.js"></script>
<script type="text/javascript" src="../../js/ui/img.js"></script>
@@ -823,7 +882,6 @@ var lang="en";
<script type="text/javascript" src="../../js/post/img.js"></script>
<script type="text/javascript" src="../../js/post/status.js"></script>
<script type="text/javascript" src="../../js/post/misskeystatus.js"></script>
<script type="text/javascript" src="../../js/post/emoji.js"></script>
<script type="text/javascript" src="../../js/post/suggest.js"></script>
<script type="text/javascript" src="../../js/post/bb-md.js"></script>
<script type="text/javascript" src="../../js/userdata/showOnTL.js"></script>
@@ -831,4 +889,5 @@ var lang="en";
<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

@@ -877,7 +877,29 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.<br>
<h5>#InstanceTicker</h5>
The MIT License (MIT)<br>
<br>
ORIGINAL CSS © 小田急don <a href="https://odakyu.app/@ars42525">https://odakyu.app/@ars42525</a><br>
#InstanceTicker © weep.me <a href="https://weep.me/@weep">https://weep.me/@weep</a><br>
<br>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:<br>
<br>
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.<br>
<br>
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.<br>
</article>
<a href="setting.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>Back</a>
<script type="text/javascript" src="../../js/ui/theme.js"></script>

View File

@@ -1,407 +1,441 @@
<!doctype html>
<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">
</head>
<body id="mainView" style="overflow-y:scroll">
<script type="text/javascript" src="../../js/common/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/setting.lang.js"></script>
<script>var lang="en";</script>
<h4>Preferences</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>System Preferences
</div>
<div class="collapsible-body">
<h5>Languages</h5>
<a onclick="changelang('ja')" class="pointer">日本語</a>/<a onclick="changelang('en')" class="pointer">English</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>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="black" value="black" />
<label for="black">Black</label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="white" value="white" />
<label for="white">White</label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="indigo" value="indigo" />
<label for="indigo">Indigo<span class="imas hide">(エンドレスナイト)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="brown" value="brown" />
<label for="brown">Brown<span class="imas hide">(ビタースイート・タイム)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
<label for="green">Green<span class="imas hide">(ユースフルロマンス)</span></label>
<br>
<h5>Popup notification(on window)</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>
Set local font<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>
</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">Absoltue</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>Instance unique locale</h5>This value is available on some Japanese instances
<br>
<input class="with-gap" onchange="settings()" name="ul" type="radio" id="ul_yes" value="yes" />
<label for="ul_yes">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">linesaboveor
<input type="text" style="width:50px" id="letters">lettersabove
<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>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<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">linesaboveor
<input type="text" style="width:50px" id="cw_letters">lettersabove
<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 instance)</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 instance)</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>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">keyboard</i>Keyboard shortcut Preferences
</div>
<div class="collapsible-body">
<h5>Easy inserter</h5>
You can insert any letters and emojis with only 3 keys<br>
Ctrl+Shift+1:<input type="text" style="width:150px" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:150px" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:150px" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
<style>
input {
max-height: 50px !important
}
</div>
</li>
<li>
<div class="collapsible-header">
.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>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>System Preferences
</div>
<div class="collapsible-body">
<h5>Languages</h5>
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>
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if=item.text.desc>
<templete v-html=item.text.desc></templete><br>
</template>
<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><br>
</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" />
<label for="white">White</label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="indigo" value="indigo" />
<label for="indigo">Indigo<span class="imas hide">(エンドレスナイト)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="brown" value="brown" />
<label for="brown">Brown<span class="imas hide">(ビタースイート・タイム)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
<label for="green">Green<span class="imas hide">(ユースフルロマンス)</span></label>
<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>
<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">
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if=item.text.desc>
<templete v-html=item.text.desc></templete><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><br>
</template>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>Posting Preferences
</div>
<div class="collapsible-body">
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if=item.text.desc>
<templete v-html=item.text.desc></templete><br>
</template>
<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><br>
</template>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">Fkeyboard</i>Keyboard shortcut Preferences
</div>
<div class="collapsible-body">
<h5>Easy inserter</h5>
You can insert any letters and emojis with only 3 keys<br>
Ctrl+Shift+1:<input type="text" style="width:150px" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:150px" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:150px" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>Mute & Emphasis Preferences
</div>
<div class="collapsible-body">
<h5>Client Mute</h5>
<div id="mute-cli"></div>
<h5>Client Emphasis</h5>
Click client name on toots to toggle mute and emphasis.
<h5>Words Mute</h5>
Enter to set<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Words Emphasis</h5>
Enter to set<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Users Emphasis</h5>
Set on users data modals.
<span class="emphasized"> Use this color to emphasis </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fa fa-spotify"></i>Spotify and NowPlaying Preferences
</div>
<div class="collapsible-body">
Click <i class="material-icons" style="font-size:24px;">music_note</i>icon to NowPlaying<br>
<h5>Account Connection</h5>
TheDesk save your data on thedesk.top server.<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button onclick="spotifyAuth()" class="btn waves-effect" style="width:100px;">Save</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex" style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-enable"><i class="fa fa-spotify left"></i>Connect</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled" style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i class="fa fa-spotify left"></i>Disconnect</a>
<h5>Edit a template</h5>
<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
</div>
<div class="collapsible-body">
<h5>Client Mute</h5>
<div id="mute-cli"></div>
<h5>Client Emphasis</h5>
Click client name on toots to toggle mute and emphasis.
<h5>Words Mute</h5>
Enter to set<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Words Emphasis</h5>
Enter to set<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Users Emphasis</h5>
Set on users data modals.
<span class="emphasized"> Use this color to emphasis </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fa fa-spotify"></i>Spotify and NowPlaying Preferences
</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. 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" />
<label for="itunes">iTunes</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="npmm" value="MEDIAMONKEY" />
<label for="npmm">MediaMonkey</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="winamp" value="WINAMP" />
<label for="winamp">Winamp</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wmp" value="WMP" />
<label for="wmp">WMP</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wlm" value="WLM" />
<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>
Click <i class="material-icons" style="font-size:24px;">music_note</i>icon to NowPlaying<br>
<h5>Account Connection</h5>
TheDesk save your data on thedesk.top server.<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button
onclick="spotifyAuth()" class="btn waves-effect" style="width:100px;">Save</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex"
style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-enable"><i
class="fa fa-spotify left"></i>Connect</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i
class="fa fa-spotify left"></i>Disconnect</a>
<h5>Edit a template</h5>
<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
Refer:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
iTunes NowPlaying:{url} is disabled, but composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre} are available.<br>
<span class="imas hide">CINDERELLA NowPlaying(imastodon.net限定)では作曲家{composer}/作詞家{lyricist}/BPM{bpm}が有効です。<br>
CINDERELLA NowPlayingはimastodon.netにログインしているとき、トゥート欄に「//」を入力し、その後に曲名を入れることで可能です。</span><br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Attach an Artwork of Spotify</h5>
<span class="imas hide">この設定はCINDERELLA NowPlaying(imastodon.net限定)にも適用されます。</span><br>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes" value="yes" />
<label for="awk_yes">Yes</label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no" value="no" />
<label for="awk_no">No</label>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>TTS(text to speech) Preferences
</div>
<div class="collapsible-body">
<h5>Speed</h5>
1-100(default:10)<br>
<p class="range-field"><input type="range" id="voicespeed" min="1" max="100" value="10" style="width:500px; max-width:100%"/></p>
<h5>Pitch</h5>
0-100(default:50)<br>
<p class="range-field"><input type="range" id="voicepitch" min="0" max="100" value="50" style="width:500px; max-width:100%"/></p>
<h5>Volume</h5>
0-100(default:100)<br>
<p class="range-field"><input type="range" id="voicevol" min="0" max="100" value="100" style="width:500px; max-width:100%"/></p>
<h5>Test</h5>
<input type="text" style="width:350px" id="voicetxt" value="TheDesk is an open-source Mastodon client for PC.">
<button class="btn waves-effect blue" style="width:150px;" onclick="voicePlay()" id="testplay">Play/Stop</button><br>
<br>
<button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">Save</button>
</div>
</li>
</ul>
<br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>Back</a>
<br>
<br>Keyboard shortcuts
<li>Ctrl+1-9:Jump to n(1-9)th column</li>
<li>N:Open toot box</li>
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Post</li>
<li>Ctrl+Enter+Shift:Post(secondary toot)</li>
<li>Ctrl+E:Make all notifications read</li>
<li>Esc:Hide toot box</li>
<li>F5:Super Reload</li>
<li>Ctrl+Shift+C:Clear toot box</li>
<li>Ctrl+Shift+S:Preferences</li>
<li>Ctrl+Shift+M:Account Manager</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:Show profile of selecting</li>
<li>←/→:Show next or previous image</li>
<li>Mousewheel:Zoom a image</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
<li>Shift+Enter:全角スペースを入れて改行</li>
<li>Shift+Space:ゼロ幅スペース</li>
以下アスタルテにログインしている場合のみ
<br>
<li>Ctrl+R:
<a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く
</li><br>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:500px;" onclick="if(confirm('Delete all data. You cannot undo. Continue?')){ localStorage.clear(); location.href='index.html'; }"><i class="material-icons left">delete</i>Reset(Danger)</button><br><br>
<button class="btn waves-effect indigo" onclick="about()" style="width:100%; max-width:500px;"><i class="material-icons left">info</i>About TheDesk</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">web</i>Website</a>
<a href="https://enty.jp/Cutls" class="btn waves-effect purple lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>Support(Enty)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:500px;"><i class="material-icons left">list</i>Help/Docs(Constructing)</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2" style="width:100%; max-width:500px;"><i class="fa fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=Cutls@kirishima.cloud" class="btn waves-effect blue lighten-2" style="width:100%; max-width:500px;"><img src="../../img/desk_full.svg" class="left" width="25" style="padding-top:5px;">Developer: Cutls@kirishima.cloud</a>
<a class="btn waves-effect red lighten-2" href="https://osushi.love/Cutls_P" target="_blank" style="width:100%; max-width:500px;"><img src="../../img/sushi.svg" class="left" width="25" style="padding-top:5px;">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>
<br>Developer: Cutls P(
<a href="index.html?mode=user&code=Cutls@kirishima.cloud">@Cutls@kirishima.cloud</a>)
Spotify:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
macOS:{song}:Song name/{album}:Album name/{artist}:Artist name/composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre}<br>
Windows:{song}:Song name/{album}:Album name/{artist}:Artist name<br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Attach an Artwork of Spotify</h5>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes" value="yes" />
<label for="awk_yes">Yes</label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no" value="no" />
<label for="awk_no">No</label>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>TTS(text to speech) Preferences
</div>
<div class="collapsible-body">
<h5>Speed</h5>
1-100(default:10)<br>
<p class="range-field"><input type="range" id="voicespeed" min="1" max="100" value="10"
style="width:500px; max-width:100%" /></p>
<h5>Pitch</h5>
0-100(default:50)<br>
<p class="range-field"><input type="range" id="voicepitch" min="0" max="100" value="50"
style="width:500px; max-width:100%" /></p>
<h5>Volume</h5>
0-100(default:100)<br>
<p class="range-field"><input type="range" id="voicevol" min="0" max="100" value="100"
style="width:500px; max-width:100%" /></p>
<h5>Test</h5>
<input type="text" style="width:350px" id="voicetxt" value="TheDesk is an open-source Mastodon client for PC.">
<button class="btn waves-effect blue" style="width:150px;" onclick="voicePlay()"
id="testplay">Play/Stop</button><br>
<br>
<button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">Save</button>
</div>
</li>
</ul>
<br>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>
<script type="text/javascript" src="../../js/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/ui/settings.js"></script>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>
<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>Keyboard shortcuts
<li>Ctrl+1-9:Jump to n(1-9)th column</li>
<li>N:Open toot box</li>
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Post</li>
<li>Ctrl+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>
<li>Ctrl+Shift+C:Clear toot box</li>
<li>Ctrl+Shift+S:Preferences</li>
<li>Ctrl+Shift+M:Account Manager</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:Show profile of selecting</li>
<li>←/→:Show next or previous image</li>
<li>Mousewheel:Zoom a image</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
<li>Shift+Enter:全角スペースを入れて改行</li>
<li>Shift+Space:ゼロ幅スペース</li>
以下アスタルテにログインしている場合のみ
<br>
<li>Ctrl+R:
<a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く
</li><br>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:500px;"
onclick="if(confirm('Delete all data. You cannot undo. Continue?')){ localStorage.clear(); location.href='index.html'; }"><i
class="material-icons left">delete</i>Reset(Danger)</button><br><br>
<button class="btn waves-effect indigo" onclick="about()" style="width:100%; max-width:500px;"><i
class="material-icons left">info</i>About TheDesk</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:500px;"><i
class="material-icons left">web</i>Website</a>
<a href="https://enty.jp/Cutls" class="btn waves-effect purple lighten-2" style="width:100%; max-width:500px;"><i
class="material-icons left">trending_up</i>Support(Enty)</a>
<a href="https://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>
<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://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>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>
<script type="text/javascript" src="../../js/ui/spotify.js"></script>
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/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>

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

@@ -0,0 +1,491 @@
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:"非対応インスタンスでは「未収載」になります。"
}
]
}
},{
id:"zero",
storage:"emoji-zero-width",
checkbox:true,
setValue:"normal",
setValue:"no",
text:{
head:"Zero-width space when inserting emojis",
desc:"",
checkbox:yesno
}
}
]

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">Poetable 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

@@ -18,39 +18,56 @@ body,html{overflow-y: scroll;}
.colorsel{ display:flex; }
.card .colorsel div:not(.exc){width:20px;height:20px;}
.card .colorsel div.exc{width:40px;height:20px;}
.first{
display:flex;
justify-content: center;
align-items:center
}
.first .hide-first{
display:none;
}
</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>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.js"></script>
<script type="text/javascript" src="../../js/lang/lang.ja.js"></script>
<script>
var lang="ja";
var misskeytoken=false;
</script>
<script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">戻る</a><br>
<h5>アカウント一覧</h5>
<div id="acct-list"></div>
<div class="divider"></div>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">戻る</a><br>
<h5>アカウント一覧</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div>
<h5>アカウントを追加</h5><br>
<div id="add">
<div class="row">
<div class="col s6">
<div class="col s8">
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp">
<div id="ins-suggest"></div>
Windows以外でご使用の方やPleromaにログインされる方はチェックを入れてさい。<br>
チェックを外すとコード貼り付けをスキップできます。(<u>Mastodon</u>にWindowsやmacOSからログインする場合)失敗する場合はチェックを入れてください。<br>
<input type="checkbox" class="filled-in" id="linux" />
<label for="linux">コードセットアップ</label><br>
<input type="checkbox" class="filled-in" id="misskey" />
<label for="misskey">Misskeyとしてログイン</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br>
</div>
<div class="col s6">
<div class="col s4">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
@@ -67,6 +84,8 @@ body,html{overflow-y: scroll;}
<input type="text" id="misskey-key" placeholder="コードを入力">
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br>
</div>
</div>
<div class="hide-first">
<h5>メインアカウント</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">アカウントを選択</span>
<br>
@@ -77,14 +96,15 @@ 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>
接続サーバー数:<span id="ins-connect"></span><br>
トゥート数:<span id="ins-toot"></span><br>
ユーザー数:<span id="ins-user"></span>ユーザー数<br>
コネクション:<span id="ins-per"></span>%<br>
Mastodonバージョン:<span id="ins-ver"></span>@<span id="ins-upd"></span><br>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/common/sha256.js"></script>

109
app/view/ja/beta.html Normal file
View File

@@ -0,0 +1,109 @@
<!doctype html>
<!--Vue.jsでなんかTLづくりやってみようみたいなやつ。そっ閉じ推奨。-->
<html lang="ja">
<head>
<title>Beta - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<meta charset="utf-8">
</head>
<a href="index.html">Back</a>
<div id="tl">
<div :id="pub_id" class="cvo" :class="boostback" v-bind:class="{ 'faved': fav_app, 'rted': rt_app, 'pinned':pin_app,'hasmedia':hasmedia}"
:toot-id="id" :unique-id="uniqueid" :data-medias="media_ids" :unixtime="unixtime" :data-notfIndv="if_notf"
@mouseover="mov('mv')" @click="mov('cl')" @mouseout="resetmv('mv')">
<div class="area-notice"><span class="gray sharesta"><span v-if="notice"><i class="big-text fa" :class="rticon"></i>{{dis_name}}(@{{acct}})<br></span></span></div>
<div class="area-icon">
<a @click="udg" :user="acct" class="udg"><img :src="avatar" width="40" class="prof-img" :user="acct"></a>
<a @click="udg" :user="acct" class="udg" v-if="notice"><img :src="avatar" width="40" class="notf-icon prof-img" :user="acct"></a>
</div>
Yeah
</div>
</div>
<script>
var app = new Vue({
el: '#tl',
data: {
tlid:0,
pub_id:"pub_123",
id: 123,
uniqueid:1234,
boostback:'a',
fav_app:true,
rt_app:true,
pin_app:false,
hasmedia:false,
media_ids:'',
unixtime:'1238954',
if_notf:''
},
methods: {
mov: function (c) {
mov(this.id,this.tlid,c)
},
resetmv: function (c) {
resetmv(c)
}
}
})
</script>
<script>
function mov(a,b,c){
console.log(a+":"+b+":"+c);
}
function resetmv(a){
console.log(a);
}
</script>
<!--@mouseover="mov({{id}},{{tlid}},'mv')" @click="mov({{id}},{{tlid}},'cl')" @mouseout="resetmv('mv')"-->
<!--
<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[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">noticehome</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.acctlocked</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_parse_clickcopyurl[lang])"><i class="fa fa-clock-o"></i>
date(toot.created_at, datetype)</span>
</div></div>
<div class="area-toot"><span class="api_spoil cw_text_toot.id">spoilspoiler_show</span><span class="toot spoiler">content</span>
viewer
</div><div class="area-additional"><span class="additional">analyze</span>mentionstags</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_parse_det[lang]</a></div>
<div class="action disp["re"] noauth"><a onclick="re(toot.id,toot.account.acct,acct_id,visen)" class="waves-effect waves-dark btn-flat" style="padding:0" title="lang_parse_replyto[lang]">
<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_parse_bt[lang]"><i class="text-darken-3 fa fa-retweet
if_rt rt_toot.id"></i><span class="rt_ct">toot.reblogs_count
</span></a></div>
<div class="action can_rt disp["qt"] noauth"><a onclick="qt(toot.id,acct_id
,toot.account.acct ,toot.url
)" class="waves-effect waves-dark btn-flat" style="padding:0" title="lang_parse_quote[lang]"><i class="text-darken-3 fa fa-quote-right"></i></a></div>
<div class="action disp["fav"] noauth"><a onclick="fav(toot.id,acct_id
,tlid
)" class="waves-effect waves-dark btn-flat" style="padding:0" title="lang_parse_fav[lang]"><i class="fa text-darken-3 fa-star
if_fav fav_toot.id"></i><span class="fav_ct">toot.favourites_count
</a></span></div>
<div class="if_mine action disp["del"] noauth"><a onclick="del(toot.id,
acct_id
)" class="waves-effect waves-dark btn-flat" style="padding:0" title="lang_parse_del[lang]"><i class="fa fa-trash-o"></i></a></div>
<div class="if_mine action pin disp["pin"] noauth"><a onclick="pin(toot.id,
acct_id
)" class="waves-effect waves-dark btn-flat" style="padding:0" title="lang_parse_pin[lang]"><i class="fa fa-map-pin pin_toot.id if_pin"></i></a></div>
<div class="if_mine action disp["red"] noauth"><a onclick="redraft(toot.id,
acct_id
)" class="waves-effect waves-dark btn-flat" style="padding:0" title="lang_parse_redraft[lang]"><i class="material-icons">redo</i></a></div>trans
<span class="cbadge viabadge waves-effect viashow mine_via" onclick="client($.strip_tags(via))" title="via $.strip_tags(via)">via
via
</span>
</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>
</div></div>
</div></div>
-->

View File

@@ -13,29 +13,32 @@
<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>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.js"></script>
<script type="text/javascript" src="../../js/lang/parse.lang.js"></script>
<script type="text/javascript" src="../../js/lang/lang.ja.js"></script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/version.js"></script>
<script type="text/javascript" src="../../js/common/keyshortcut.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
<script>
var ver="Akane (16.1.5)";
var ver="Usamin (18.2.1)";
//betaを入れるとバージョンチェックしない
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
//var ver="beta";
//WinstoreではバージョンCK・言語・Misskeyトークンの機能が排除
var winstore=false;
var acct_id=0;
var tlid=0;
var lang="ja";
verck(ver);
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<div id="tl">
@@ -48,8 +51,10 @@ var lang="ja";
</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"><span id="unreact">投稿</span><span id="addreact" class="hide">Reaction</span></div>
<!--トゥートボックス-->
<div id="left-side">
<div class="row" style="margin-bottom:0;">
</span>
<div class="" style="float:left;">
@@ -118,21 +123,19 @@ var lang="ja";
<span class="sml gray pointer anti-markdown mize">
<a onclick="mdToggle()">Markdownエディタを表示</a>
</span>
<span id="suggest"></span>
</div>
<div class="col s12 mize" style="margin-top: 0; display:flex; justify-content: space-between">
<i class="waves-effect gray material-icons" id="nsfw" title="画像に制限を付与" onclick="nsfw()">visibility_off</i>
<i class="waves-effect gray material-icons purple-text dropdown-button" data-activates='dropdown1' id="vis-icon">public</i>
<a class="waves-effect gray" id="cw" onclick="cw()" title="コンテンツワーニング(トゥートを表示する前にメッセージで隠す)">CW</a>
<span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray" onclick="fileselect()" title="ファイルを選択">photo_library</i></span></span>
<i class="waves-effect gray material-icons" onclick="adobe()" title="Adobeフォトエディタ">format_shapes</i>
<i class="waves-effect gray material-icons" onclick="emojiToggle()" id="emojibtn" title="絵文字を挿入">tag_faces</i>
<a class="pointer waves-effect gray" id="npbtn" title="NowPlaying[クリックでSpotify(アカウント連携が必要です)/control+クリックでiTunes(macOSが必要です)]"><i class="material-icons" style="font-size:24px;">music_note</i></a>
<i class="waves-effect gray material-icons dropdown-button" data-activates='dropdown2'>more_vert</i>
<i class="material-icons nex gray waves-effect" title="トゥートボックスのクリア(Ctrl+Shit+C)" data-trans-title="post_box_clear" id="clear">clear</i>
</div>
<div class="col s12 mize" style="margin-bottom:5px; padding:0;">
<div id="taglist"></div>
<span id="preview" class="mize"></span>
<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>:
@@ -140,6 +143,9 @@ var lang="ja";
</span>
<br>
<input type="text" id="cw-text" placeholder="警告文" class="mize" style="margin:0">
<div id="sch-box">時間指定投稿<br><span class="sml">2.7.0~ 5分以内には投稿できません。サーバーの時計が正確とは限りません。</span><br>
<input type="datetime-local" id="sch-date" placeholder="時間指定投稿" class="datepicker" style="margin:0">
</div>
</div>
</div>
<!-- 公開範囲 Dropdown Structure -->
@@ -164,6 +170,24 @@ var lang="ja";
<a onclick="vis('direct')" class="disabled direct">ダイレクト(Direct)</a>
</li>
</ul>
<!-- その他 Dropdown Structure -->
<ul id='dropdown2' class='dropdown-content'>
<li>
<a onclick="adobe()">Adobeフォトエディタ</a>
</li>
<li>
<a onclick="nowplaying('spotify');">NowPlaying(Spotify)</a>
</li>
<li>
<a onclick="nowplaying('itunes');">NowPlaying</a>
</li>
<li>
<a onclick="schedule();">時間指定投稿</a>
</li>
<li>
<a onclick="pollToggle();">アンケート</a>
</li>
</ul>
<!--hidden area-->
<input type="hidden" id="reply">
<input type="hidden" id="media">
@@ -174,59 +198,82 @@ var lang="ja";
<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>
<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="mastodon-poll">Mastodon(2.8~)</option>
</select>
<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">
@@ -254,14 +301,14 @@ var lang="ja";
<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>
@@ -275,7 +322,7 @@ var lang="ja";
<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>
@@ -283,19 +330,20 @@ var lang="ja";
</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">
@@ -303,11 +351,11 @@ var lang="ja";
<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="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>
@@ -317,7 +365,7 @@ var lang="ja";
<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" draggable="false">
<span id="his-name">Loading...</span><span class="gray" id="his-bot"></span>
<br>@
<span id="his-acct"></span><br>
@@ -470,6 +518,9 @@ var lang="ja";
</div>
</div>
</div>
<div class="his-float" id="his-float-blocked">
<div>ブロックされています。なぜでしょう?</div>
</div>
</div>
</div>
<div class="modal-footer">
@@ -528,28 +579,28 @@ var lang="ja";
<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-Akane_16-1-5" style="display:none">
<div id="release-Usamin_18-2-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 Akane (16.1.5)</h5>
16.1.5<br>
<ul>
<li>バグ,脆弱性修正</li>
</ul>
16.1.4<br>
<ul>
<li>全てバグ修正(5件ほど)</li>
</ul>
ご迷惑をおかけしたことをお詫び申し上げます。
16.1.3<br>
<ul>
<li>セカンダリートゥートボタン</li>
<li>読み上げや絵文字に関するバグの修正</li>
<li>公式ヘルプサイト:<a href="https://docs.thedesk.top">TheDesk Docs</a></li>
</ul>
いつの間にかリアルタイムユーザー数が100を超えていました。皆様のご愛顧に感謝申し上げます。<br>
<h5>Release Note Usamin (18.2.0)</h5>
<b>緊急の脆弱性修正</b>
<h5>Release Note Usamin (18.2.0)</h5>
・tootsearchをひとつのカラムにしてエゴサが捗る<br>
・イントロダクション(初回起動時)の挙動修正<br>
・リンクプレビューを最大1行ずつに省略(タイトルと本文)<br>
・ブロックされたときのプロフィールの動作(Mastodon 2.8~)<br>
・(Misskey)MFM追加flipやjumpなど<br>
・(Misskey)リストに対応<br>
・(Misskey)カスタム絵文字に対応。カスタム絵文字によるリアクションに対応(対応インスタンスに限る)。<br>
<b>カスタム絵文字をゼロ幅スペースによる挿入に変更する機能</b><br>
・一部機能の統廃合とバグの修正<br>
・best-friends.chatやキュアスタ、misskey.devをサポートインスタンスに追加
</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>
@@ -557,9 +608,9 @@ var lang="ja";
<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>
@@ -579,130 +630,162 @@ var lang="ja";
<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">
<input id="src" type="text" class="validate" style="width:60%">
<label for="src" data-trans="src">検索</label>
<button class="btn waves-effect indigo" style="width: 36%;padding: 0;padding-left: 15px;" onclick="src()" data-trans-i="src">
<i class="material-icons left" style="margin:0">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:97.5%;" 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"><br>
Quick:<a onclick="filterTime(0,0,30)" class="pointer">30分</a>/
<a onclick="filterTime(0,1,0)" class="pointer">1時間</a>/
<a onclick="filterTime(0,6,0)" class="pointer">6時間</a>/
<a onclick="filterTime(0,12,0)" class="pointer">12時間</a>/
<a onclick="filterTime(1,0,0)" class="pointer">1日</a>/
<a onclick="filterTime(7,0,0)" class="pointer">7日</a>/
<a onclick="filterTime(0,0,0)" class="pointer">無期限</a><br>
<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>ボタンよりカラムを追加してください。
<div id="something-wrong">
<div>内部エラーです。再読込して治らない場合は初期化(全データ削除)をしてください。(事前に設定をエクスポートしておくことをおすすめします。)</div>
</div>
</div>
</div>
</div>
@@ -710,53 +793,26 @@ var lang="ja";
<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>
@@ -796,9 +852,11 @@ var lang="ja";
<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>
@@ -810,6 +868,7 @@ var lang="ja";
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/ui/post-box.js"></script>
<script type="text/javascript" src="../../js/ui/layout.js"></script>
<script type="text/javascript" src="../../js/post/emoji.js"></script>
<script type="text/javascript" src="../../js/login/instance.js"></script>
<script type="text/javascript" src="../../js/login/login.js"></script>
<script type="text/javascript" src="../../js/ui/img.js"></script>
@@ -823,7 +882,6 @@ var lang="ja";
<script type="text/javascript" src="../../js/post/img.js"></script>
<script type="text/javascript" src="../../js/post/status.js"></script>
<script type="text/javascript" src="../../js/post/misskeystatus.js"></script>
<script type="text/javascript" src="../../js/post/emoji.js"></script>
<script type="text/javascript" src="../../js/post/suggest.js"></script>
<script type="text/javascript" src="../../js/post/bb-md.js"></script>
<script type="text/javascript" src="../../js/userdata/showOnTL.js"></script>
@@ -831,4 +889,5 @@ var lang="ja";
<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

@@ -876,6 +876,29 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.<br>
<h5>#InstanceTicker</h5>
The MIT License (MIT)<br>
<br>
ORIGINAL CSS © 小田急don <a href="https://odakyu.app/@ars42525">https://odakyu.app/@ars42525</a><br>
#InstanceTicker © weep.me <a href="https://weep.me/@weep">https://weep.me/@weep</a><br>
<br>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:<br>
<br>
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.<br>
<br>
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.<br>
</article>
<a href="setting.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>戻る</a>
<script type="text/javascript" src="../../js/ui/theme.js"></script>

View File

@@ -1,407 +1,441 @@
<!doctype html>
<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">
</head>
<body id="mainView" style="overflow-y:scroll">
<script type="text/javascript" src="../../js/common/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/setting.lang.js"></script>
<script>var lang="ja";</script>
<h4>設定</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>環境設定
</div>
<div class="collapsible-body">
<h5>言語</h5>
<a onclick="changelang('ja')" class="pointer">日本語</a>/<a onclick="changelang('en')" class="pointer">English</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>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="black" value="black" />
<label for="black">Black</label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="white" value="white" />
<label for="white">White</label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="indigo" value="indigo" />
<label for="indigo">Indigo<span class="imas hide">(エンドレスナイト)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="brown" value="brown" />
<label for="brown">Brown<span class="imas hide">(ビタースイート・タイム)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
<label for="green">Green<span class="imas hide">(ユースフルロマンス)</span></label>
<br>
<h5>新規通知のポップアップお知らせの表示秒数</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>
<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>
</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>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<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>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">keyboard</i>キーボードショートカットの設定
</div>
<div class="collapsible-body">
<h5>簡単文字入力</h5>
絵文字やタグ、&gt;BTなどを登録しておくとすぐに入力できます。<br>
Ctrl+Shift+1:<input type="text" style="width:150px" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:150px" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:150px" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
<style>
input {
max-height: 50px !important
}
</div>
</li>
<li>
<div class="collapsible-header">
.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>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>環境設定
</div>
<div class="collapsible-body">
<h5>言語</h5>
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>
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if=item.text.desc>
<templete v-html=item.text.desc></templete><br>
</template>
<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><br>
</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" />
<label for="white">White</label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="indigo" value="indigo" />
<label for="indigo">Indigo<span class="imas hide">(エンドレスナイト)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="brown" value="brown" />
<label for="brown">Brown<span class="imas hide">(ビタースイート・タイム)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
<label for="green">Green<span class="imas hide">(ユースフルロマンス)</span></label>
<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>
<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">
<div id="tlView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if=item.text.desc>
<templete v-html=item.text.desc></templete><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><br>
</template>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>投稿設定
</div>
<div class="collapsible-body">
<div id="postView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
<template v-if=item.text.desc>
<templete v-html=item.text.desc></templete><br>
</template>
<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><br>
</template>
</div>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">Fkeyboard</i>キーボードショートカットの設定
</div>
<div class="collapsible-body">
<h5>簡単文字入力</h5>
絵文字やタグ、&gt;BTなどを登録しておくとすぐに入力できます。<br>
Ctrl+Shift+1:<input type="text" style="width:150px" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:150px" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:150px" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>ミュート・強調の設定
</div>
<div class="collapsible-body">
<h5>クライアントミュート</h5>
<div id="mute-cli"></div>
<h5>クライアント強調</h5>
各トゥートのクライアントをクリックすると設定できます。
<h5>ワードミュート</h5>
Enterで確定<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>ワード強調</h5>
Enterで確定<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>ユーザー強調</h5>
各ユーザーのデータ表示画面で設定できます。
<span class="emphasized"> 強調色(テーマによって異なります。) </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fa fa-spotify"></i>SpotifyとNowPlayingの設定
</div>
<div class="collapsible-body">
<i class="material-icons" style="font-size:24px;">music_note</i>ボタンから簡単にNowPlayingができます。<br>
<h5>アカウントの連携</h5>
APIの性質上thedesk.topへアクセスします。<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button onclick="spotifyAuth()" class="btn waves-effect" style="width:100px;">設定</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex" style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-enable"><i class="fa fa-spotify left"></i>接続</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled" style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i class="fa fa-spotify left"></i>切断</a>
<h5>テンプレートの編集</h5>
以下を編集してテンプレートを変更できます。<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
</div>
<div class="collapsible-body">
<h5>クライアントミュート</h5>
<div id="mute-cli"></div>
<h5>クライアント強調</h5>
各トゥートのクライアントをクリックすると設定できます。
<h5>ワードミュート</h5>
Enterで確定<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>ワード強調</h5>
Enterで確定<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>ユーザー強調</h5>
各ユーザーのデータ表示画面で設定できます。
<span class="emphasized"> 強調色(テーマによって異なります。) </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fa fa-spotify"></i>SpotifyとNowPlayingの設定
</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>が必要です。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" />
<label for="itunes">iTunes</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="npmm" value="MEDIAMONKEY" />
<label for="npmm">MediaMonkey</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="winamp" value="WINAMP" />
<label for="winamp">Winamp</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wmp" value="WMP" />
<label for="wmp">WMP</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wlm" value="WLM" />
<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>
<i class="material-icons" style="font-size:24px;">music_note</i>ボタンから簡単にNowPlayingができます。<br>
<h5>アカウントの連携</h5>
APIの性質上thedesk.topへアクセスします。<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button
onclick="spotifyAuth()" class="btn waves-effect" style="width:100px;">設定</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex"
style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-enable"><i
class="fa fa-spotify left"></i>接続</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i
class="fa fa-spotify left"></i>切断</a>
<h5>テンプレートの編集</h5>
以下を編集してテンプレートを変更できます。<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
テンプレート:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名/{url}:各曲のSpotifyのURL<br>
iTunes NowPlayingでも{url}以外のテンプレートに従ってトゥートされます。また、作曲家{composer}/サンプルレート{hz}/ビットレート{bitRate}/ジャンル{genre}が有効です。<br>
<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;">設定</button>
<h5>Spotifyでアルバムアートワークを添付する</h5>
<span class="imas hide">この設定はCINDERELLA NowPlaying(imastodon.net限定)にも適用されます。</span><br>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes" value="yes" />
<label for="awk_yes"></label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no" value="no" />
<label for="awk_no">いいえ</label>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>読み上げの設定
</div>
<div class="collapsible-body">
<h5>読み上げの速さ</h5>
1-100まで、デフォルトは10。<br>
<p class="range-field"><input type="range" id="voicespeed" min="1" max="100" value="10" style="width:500px; max-width:100%"/></p>
<h5>読み上げの高さ</h5>
0-100まで、デフォルトは50。(大きくなるほど高い)<br>
<p class="range-field"><input type="range" id="voicepitch" min="0" max="100" value="50" style="width:500px; max-width:100%"/></p>
<h5>読み上げの音量</h5>
0-100まで、デフォルトは100。<br>
<p class="range-field"><input type="range" id="voicevol" min="0" max="100" value="100" style="width:500px; max-width:100%"/></p>
<h5>テスト</h5>
<input type="text" style="width:350px" id="voicetxt" value="これはテスト音声です。TheDeskはオープンソースのPC向けマストドンクライアントです。マルチインスタンスやマルチカラムに対応しています。">
<button class="btn waves-effect blue" style="width:150px;" onclick="voicePlay()" id="testplay">再生/停止</button><br>
<br>
<button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">設定</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>戻る</a>
<br>
<br>キーボードショートカット一覧
<li>Ctrl+1-9:1番目9番目のTLにスクロール</li>
<li>N:投稿パネルを開く</li>
<li>X:投稿パネルを開閉</li>
<li>Ctrl+Enter:投稿</li>
<li>Ctrl+Enter+Shift:投稿(セカンダリートゥート)</li>
<li>Ctrl+E:全ての通知を既読にする</li>
<li>Esc:投稿パネルを消す</li>
<li>F5:スーパーリロード</li>
<li>Ctrl+Shift+C:入力内容を消す</li>
<li>Ctrl+Shift+S:設定</li>
<li>Ctrl+Shift+M:アカウントマネージャ</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:現在選択中のプロフィール</li>
<li>←/→:イメージビューワー起動時に画像切り替え</li>
<li>マウスホイール:イメージビューワー時に拡大縮小</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
<li>Shift+Enter:全角スペースを入れて改行</li>
<li>Shift+Space:ゼロ幅スペース</li>
以下アスタルテにログインしている場合のみ
<br>
<li>Ctrl+R:
<a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く
</li><br>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:500px;" onclick="if(confirm('全てのデータを削除します。この操作は取り消せません。')){ localStorage.clear(); location.href='index.html'; }"><i class="material-icons left">delete</i>初期化</button><br><br>
<button class="btn waves-effect indigo" onclick="about()" style="width:100%; max-width:500px;"><i class="material-icons left">info</i>このソフトについて</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">web</i>公式HP</a>
<a href="https://enty.jp/Cutls" class="btn waves-effect purple lighten-2" style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>支援(Enty)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:500px;"><i class="material-icons left">list</i>ヘルプ/Docs(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>
<br>Developer: Cutls P(
<a href="index.html?mode=user&code=Cutls@kirishima.cloud">@Cutls@kirishima.cloud</a>)
Spotify:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名/{url}:各曲のSpotifyのURL<br>
macOS:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名/作曲家{composer}/サンプルレート{hz}/ビットレート{bitRate}/ジャンル{genre}<br>
Windows:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名<br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>アルバムアートワークを添付する(Spotify/Windows)</h5>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes" value="yes" />
<label for="awk_yes">はい</label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no" value="no" />
<label for="awk_no">いえ</label>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>読み上げの設定
</div>
<div class="collapsible-body">
<h5>読み上げの速さ</h5>
1-100まで、デフォルトは10。<br>
<p class="range-field"><input type="range" id="voicespeed" min="1" max="100" value="10"
style="width:500px; max-width:100%" /></p>
<h5>読み上げの高さ</h5>
0-100まで、デフォルトは50。(大きくなるほど高い)<br>
<p class="range-field"><input type="range" id="voicepitch" min="0" max="100" value="50"
style="width:500px; max-width:100%" /></p>
<h5>読み上げの音量</h5>
0-100まで、デフォルトは100。<br>
<p class="range-field"><input type="range" id="voicevol" min="0" max="100" value="100"
style="width:500px; max-width:100%" /></p>
<h5>テスト</h5>
<input type="text" style="width:350px" id="voicetxt" value="これはテスト音声です。TheDeskはオープンソースのPC向けマストドンクライアントです。マルチサーバーやマルチカラムに対応しています。">
<button class="btn waves-effect blue" style="width:150px;" onclick="voicePlay()"
id="testplay">再生/停止</button><br>
<br>
<button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">設定</button>
</div>
</li>
</ul>
<br>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>
<script type="text/javascript" src="../../js/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/ui/settings.js"></script>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i
class="material-icons left">undo</i>戻る</a>
<br>
<br>キーボードショートカット一覧
<li>Ctrl+1-9:1番目9番目のTLにスクロール</li>
<li>N:投稿パネルを開く</li>
<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>
<li>Ctrl+Shift+C:入力内容を消す</li>
<li>Ctrl+Shift+S:設定</li>
<li>Ctrl+Shift+M:アカウントマネージャ</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:現在選択中のプロフィール</li>
<li>←/→:イメージビューワー起動時に画像切り替え</li>
<li>マウスホイール:イメージビューワー時に拡大縮小</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
<li>Shift+Enter:全角スペースを入れて改行</li>
<li>Shift+Space:ゼロ幅スペース</li>
以下アスタルテにログインしている場合のみ
<br>
<li>Ctrl+R:
<a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く
</li><br>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:500px;"
onclick="if(confirm('全てのデータを削除します。この操作は取り消せません。')){ localStorage.clear(); location.href='index.html'; }"><i
class="material-icons left">delete</i>初期化</button><br><br>
<button class="btn waves-effect indigo" onclick="about()" style="width:100%; max-width:500px;"><i
class="material-icons left">info</i>このソフトについて</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:500px;"><i
class="material-icons left">web</i>公式HP</a>
<a href="https://enty.jp/Cutls" class="btn waves-effect purple lighten-2" style="width:100%; max-width:500px;"><i
class="material-icons left">trending_up</i>支援(Enty)</a>
<a href="https://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>
<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://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>
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>
<script type="text/javascript" src="../../js/ui/spotify.js"></script>
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/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>

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

@@ -0,0 +1,491 @@
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:"非対応インスタンスでは「未収載」になります。"
}
]
}
},{
id:"zero",
storage:"emoji-zero-width",
checkbox:true,
setValue:"normal",
setValue:"no",
text:{
head:"絵文字にゼロ幅スペースを使う",
desc:"",
checkbox:yesno
}
}
]

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

@@ -18,29 +18,46 @@ body,html{overflow-y: scroll;}
.colorsel{ display:flex; }
.card .colorsel div:not(.exc){width:20px;height:20px;}
.card .colorsel div.exc{width:40px;height:20px;}
.first{
display:flex;
justify-content: center;
align-items:center
}
.first .hide-first{
display:none;
}
</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>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.js"></script>
<script type="text/javascript" src="../../js/lang/lang.{{lang}}.js"></script>
<script>
var lang="{{lang}}";
var misskeytoken=false;
</script>
<script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">{{back}}</a><br>
<h5>{{list}}</h5>
<div id="acct-list"></div>
<div class="divider"></div>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">{{back}}</a><br>
<h5>{{list}}</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div>
<h5>{{add}}</h5><br>
<div id="add">
<div class="row">
<div class="col s6">
<div class="col s8">
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp">
<div id="ins-suggest"></div>
{{codesetupwarn}}<br>
@@ -50,7 +67,7 @@ body,html{overflow-y: scroll;}
<label for="misskey">{{thisismisskey}}</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br>
</div>
<div class="col s6">
<div class="col s4">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
@@ -67,6 +84,8 @@ body,html{overflow-y: scroll;}
<input type="text" id="misskey-key" placeholder="{{codepaste}}">
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br>
</div>
</div>
<div class="hide-first">
<h5>{{mainacct}}</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">{{selacct}}</span>
<br>
@@ -77,7 +96,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>
@@ -85,6 +104,7 @@ Administered by:<a id="ins-admin"></a><br>
{{users}}:<span id="ins-user"></span>{{users}}<br>
{{safety}}:<span id="ins-per"></span>%<br>
{{ver}}:<span id="ins-ver"></span>@<span id="ins-upd"></span><br>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/common/sha256.js"></script>

View File

@@ -13,29 +13,32 @@
<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>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.js"></script>
<script type="text/javascript" src="../../js/lang/parse.lang.js"></script>
<script type="text/javascript" src="../../js/lang/lang.{{lang}}.js"></script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/version.js"></script>
<script type="text/javascript" src="../../js/common/keyshortcut.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
<script>
var ver="Akane (16.1.5)";
var ver="{{versionLetter}}";
//betaを入れるとバージョンチェックしない
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
//var ver="beta";
//WinstoreではバージョンCK・言語・Misskeyトークンの機能が排除
var winstore=false;
var acct_id=0;
var tlid=0;
var lang="{{lang}}";
verck(ver);
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<div id="tl">
@@ -48,8 +51,10 @@ var lang="{{lang}}";
</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"><span id="unreact">{{post-new}}</span><span id="addreact" class="hide">Reaction</span></div>
<!--トゥートボックス-->
<div id="left-side">
<div class="row" style="margin-bottom:0;">
</span>
<div class="" style="float:left;">
@@ -118,21 +123,19 @@ var lang="{{lang}}";
<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>
<i class="waves-effect gray material-icons purple-text dropdown-button" data-activates='dropdown1' id="vis-icon">public</i>
<a class="waves-effect gray" id="cw" onclick="cw()" title="{{cwDes}}">CW</a>
<span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray" onclick="fileselect()" title="{{selfile}}">photo_library</i></span></span>
<i class="waves-effect gray material-icons" onclick="adobe()" title="{{adobephoto}}">format_shapes</i>
<i class="waves-effect gray material-icons" onclick="emojiToggle()" id="emojibtn" title="{{insertEmoji}}">tag_faces</i>
<a class="pointer waves-effect gray" id="npbtn" title="{{NowPlayingDes}}"><i class="material-icons" style="font-size:24px;">music_note</i></a>
<i class="waves-effect gray material-icons dropdown-button" data-activates='dropdown2'>more_vert</i>
<i class="material-icons nex gray waves-effect" title="{{clearToot}}(Ctrl+Shit+C)" data-trans-title="post_box_clear" id="clear">clear</i>
</div>
<div class="col s12 mize" style="margin-bottom:5px; padding:0;">
<div id="taglist"></div>
<span id="preview" class="mize"></span>
<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>:
@@ -140,6 +143,9 @@ var lang="{{lang}}";
</span>
<br>
<input type="text" id="cw-text" placeholder="{{cwtext}}" class="mize" style="margin:0">
<div id="sch-box">{{postat}}<br><span class="sml">{{scheduleWarn}}</span><br>
<input type="datetime-local" id="sch-date" placeholder="{{schedule}}" class="datepicker" style="margin:0">
</div>
</div>
</div>
<!-- 公開範囲 Dropdown Structure -->
@@ -164,6 +170,24 @@ var lang="{{lang}}";
<a onclick="vis('direct')" class="disabled direct">{{directJP}}(Direct)</a>
</li>
</ul>
<!-- その他 Dropdown Structure -->
<ul id='dropdown2' class='dropdown-content'>
<li>
<a onclick="adobe()">{{adobephoto}}</a>
</li>
<li>
<a onclick="nowplaying('spotify');">{{NPSpotify}}</a>
</li>
<li>
<a onclick="nowplaying('itunes');">{{NPiTunes}}</a>
</li>
<li>
<a onclick="schedule();">{{schedule}}</a>
</li>
<li>
<a onclick="pollToggle();">{{poll}}</a>
</li>
</ul>
<!--hidden area-->
<input type="hidden" id="reply">
<input type="hidden" id="media">
@@ -174,59 +198,82 @@ var lang="{{lang}}";
<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>
<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="mastodon-poll">Mastodon(2.8~)</option>
</select>
<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">
@@ -254,14 +301,14 @@ var lang="{{lang}}";
<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>
@@ -275,7 +322,7 @@ var lang="{{lang}}";
<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>
@@ -283,19 +330,20 @@ var lang="{{lang}}";
</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">
@@ -303,11 +351,11 @@ var lang="{{lang}}";
<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>
@@ -317,7 +365,7 @@ var lang="{{lang}}";
<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" draggable="false">
<span id="his-name">Loading...</span><span class="gray" id="his-bot"></span>
<br>@
<span id="his-acct"></span><br>
@@ -470,6 +518,9 @@ var lang="{{lang}}";
</div>
</div>
</div>
<div class="his-float" id="his-float-blocked">
<div>{{blocked}}</div>
</div>
</div>
</div>
<div class="modal-footer">
@@ -528,28 +579,28 @@ var lang="{{lang}}";
<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-Akane_16-1-5" style="display:none">
<div id="release-Usamin_18-2-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 Akane (16.1.5)</h5>
16.1.5<br>
<ul>
<li>バグ,脆弱性修正</li>
</ul>
16.1.4<br>
<ul>
<li>全てバグ修正(5件ほど)</li>
</ul>
ご迷惑をおかけしたことをお詫び申し上げます。
16.1.3<br>
<ul>
<li>セカンダリートゥートボタン</li>
<li>読み上げや絵文字に関するバグの修正</li>
<li>公式ヘルプサイト:<a href="https://docs.thedesk.top">TheDesk Docs</a></li>
</ul>
いつの間にかリアルタイムユーザー数が100を超えていました。皆様のご愛顧に感謝申し上げます。<br>
<h5>Release Note Usamin (18.2.0)</h5>
<b>緊急の脆弱性修正</b>
<h5>Release Note Usamin (18.2.0)</h5>
・tootsearchをひとつのカラムにしてエゴサが捗る<br>
・イントロダクション(初回起動時)の挙動修正<br>
・リンクプレビューを最大1行ずつに省略(タイトルと本文)<br>
・ブロックされたときのプロフィールの動作(Mastodon 2.8~)<br>
・(Misskey)MFM追加flipやjumpなど<br>
・(Misskey)リストに対応<br>
・(Misskey)カスタム絵文字に対応。カスタム絵文字によるリアクションに対応(対応インスタンスに限る)。<br>
<b>カスタム絵文字をゼロ幅スペースによる挿入に変更する機能</b><br>
・一部機能の統廃合とバグの修正<br>
・best-friends.chatやキュアスタ、misskey.devをサポートインスタンスに追加
</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>
@@ -557,9 +608,9 @@ var lang="{{lang}}";
<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>
@@ -579,130 +630,162 @@ var lang="{{lang}}";
<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">
<input id="src" type="text" class="validate" style="width:60%">
<label for="src" data-trans="src">{{search}}</label>
<button class="btn waves-effect indigo" style="width: 36%;padding: 0;padding-left: 15px;" onclick="src()" data-trans-i="src">
<i class="material-icons left" style="margin:0">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:97.5%;" 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}}<br>
Quick:<a onclick="filterTime(0,0,30)" class="pointer">30{{mins}}</a>/
<a onclick="filterTime(0,1,0)" class="pointer">1{{hours}}</a>/
<a onclick="filterTime(0,6,0)" class="pointer">6{{hours}}</a>/
<a onclick="filterTime(0,12,0)" class="pointer">12{{hours}}</a>/
<a onclick="filterTime(1,0,0)" class="pointer">1{{days}}</a>/
<a onclick="filterTime(7,0,0)" class="pointer">7{{days}}</a>/
<a onclick="filterTime(0,0,0)" class="pointer">{{unlimited}}</a><br>
<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-->
<div id="timeline-container">
{{helloTheDesk}}
<div id="something-wrong">
<div>{{helloTheDesk}}</div>
</div>
</div>
</div>
</div>
@@ -710,53 +793,26 @@ var lang="{{lang}}";
<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>
@@ -796,9 +852,11 @@ var lang="{{lang}}";
<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>
@@ -810,6 +868,7 @@ var lang="{{lang}}";
<script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/ui/post-box.js"></script>
<script type="text/javascript" src="../../js/ui/layout.js"></script>
<script type="text/javascript" src="../../js/post/emoji.js"></script>
<script type="text/javascript" src="../../js/login/instance.js"></script>
<script type="text/javascript" src="../../js/login/login.js"></script>
<script type="text/javascript" src="../../js/ui/img.js"></script>
@@ -823,7 +882,6 @@ var lang="{{lang}}";
<script type="text/javascript" src="../../js/post/img.js"></script>
<script type="text/javascript" src="../../js/post/status.js"></script>
<script type="text/javascript" src="../../js/post/misskeystatus.js"></script>
<script type="text/javascript" src="../../js/post/emoji.js"></script>
<script type="text/javascript" src="../../js/post/suggest.js"></script>
<script type="text/javascript" src="../../js/post/bb-md.js"></script>
<script type="text/javascript" src="../../js/userdata/showOnTL.js"></script>
@@ -831,4 +889,5 @@ var lang="{{lang}}";
<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>

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