Compare commits

...

242 Commits

Author SHA1 Message Date
Cutls
37695735e0 TheDesk Usamin (18.6.1) 2019-06-16 22:00:31 +09:00
Cutls
c15625c063 Fix: wordmute/emp 2019-06-16 21:52:41 +09:00
Cutls
cd65bd4c2a Fix: bugs about new(?) Materialize 2019-06-16 20:35:15 +09:00
Cutls
fc3fead235 Fix: font of textarea 2019-06-16 20:34:57 +09:00
Cutls
2e00282560 Update README 2019-06-16 20:34:41 +09:00
Cutls
54d740e861 Change: #86 open in browser on acct prof page 2019-06-16 02:05:27 +09:00
Cutls
478a849e8d Fix: error about RAM 2019-06-16 01:34:49 +09:00
Cutls
82c5b35d07 TweetDeck 2019-06-16 01:18:40 +09:00
Cutls
dda9469874 TheDesk Usamin (18.6.0) - fix 2019-06-16 01:08:10 +09:00
Cutls
334fbdab3f TheDesk Usamin (18.6.0) 2019-06-15 23:07:18 +09:00
Cutls
a5f8e34ee6 Fix: 'about' preload #86 2019-06-15 18:52:28 +09:00
Cutls
eba54d0906 Change: some node integration on rend-proc #86 2019-06-15 02:30:29 +09:00
Cutls
070c40a958 Remove: node on update.html #86 2019-06-15 02:23:41 +09:00
Cutls
8d308cae5e Remove: Adobe photo editor 2019-06-15 02:17:28 +09:00
Cutls
848e9fcf99 Change: language.js reload #86 2019-06-15 02:12:55 +09:00
Cutls
d146776b17 Remove: node on spotify/tips/showOnTL.js #86 2019-06-15 02:10:11 +09:00
Cutls
7da16a7428 Remove: node on setting/system.js #86 2019-06-15 02:01:38 +09:00
Cutls
7b46145114 Remove: node on ui/img/layout.js #86 2019-06-15 01:32:59 +09:00
Cutls
725f0f789a Remove: node on notification/parse.js #86 2019-06-15 01:25:51 +09:00
Cutls
772a5438aa Remove: node on details/misskeyparse.js #86 2019-06-15 01:20:12 +09:00
Cutls
3c276b329b Remove: node on post.js #86 2019-06-15 01:15:45 +09:00
Cutls
e2cde71831 Remove: node in firest/img(post).js #86 2019-06-15 01:10:32 +09:00
Cutls
861ee3250d Remove: node in manager.js #86 2019-06-15 01:05:53 +09:00
Cutls
5672ccfa37 Add: login auth open url #86 2019-06-15 01:01:07 +09:00
Cutls
65e691cda8 Add: install source dialog #86 2019-06-15 00:54:44 +09:00
Cutls
56cca8b529 Change: mainWindow to event.sender on IPC #86 2019-06-15 00:51:41 +09:00
Cutls
367f2f656e Add: getPlatform #86 2019-06-14 23:25:27 +09:00
Cutls
7f806bd155 Add: sendSinmpleIpc for 'about' #86 2019-06-14 23:21:08 +09:00
Cutls
a70444e3c7 Introduce: preload and postMessage #86 2019-06-14 23:17:16 +09:00
Cutls
1a72033571 return 2019-06-14 00:59:33 +09:00
Cutls
a475407c27 try 2019-06-14 00:54:22 +09:00
Cutls
b602cd92a9 try 2019-06-14 00:54:08 +09:00
Cutls
2878a4a524 Fix beta 2019-06-14 00:53:19 +09:00
Cutls
8b1ac63343 Introducing: Materialize 1.0.0 2019-06-07 01:11:04 +09:00
Cutls
8d1012c9fb Merge branch 'master' of https://github.com/cutls/TheDesk 2019-06-06 23:42:15 +09:00
Cutls
62f2654358 Fix: Notice "ended" when poll has been ended without your vote 2019-06-06 23:42:02 +09:00
Cutls
e7feb4b2c5 Merge pull request #84 from cutls/dependabot/npm_and_yarn/app/electron-builder-20.43.0
Bump electron-builder from 20.41.0 to 20.43.0 in /app
2019-06-05 23:55:30 +09:00
dependabot-preview[bot]
dcc62b32a2 Bump electron-builder from 20.41.0 to 20.43.0 in /app
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 20.41.0 to 20.43.0.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/compare/v20.41.0...v20.43.0)
2019-06-04 20:25:43 +00:00
Cutls
26eecd11b6 Fix package 2019-06-04 23:31:39 +09:00
Cutls
8d388bbd4b update and construct script 2019-06-04 23:01:04 +09:00
Cutls
409635b00c Fix: hide filter btns on coll notf pane 2019-06-04 22:41:04 +09:00
Cutls
17a71ddbf6 Fix: Exclude notification 2019-06-04 22:37:03 +09:00
Cutls
d2a86af0e2 Change month logic and English 2019-06-04 22:29:47 +09:00
Cutls
f23dc928b2 WIP: Now Usamin (18.5.1) 2019-06-04 01:26:00 +09:00
Cutls
68e11dc222 WIP support me 2019-06-04 01:01:14 +09:00
Cutls
075c3ef9ca Merge branch 'master' of https://github.com/cutls/TheDesk 2019-06-03 23:39:27 +09:00
Cutls
6b004a3992 Fix visibility on Misskey #83 2019-06-03 23:38:58 +09:00
Cutls
3cf198538a Merge pull request #82 from cutls/dependabot/npm_and_yarn/app/electron-builder-20.41.0
Bump electron-builder from 20.40.2 to 20.41.0 in /app
2019-06-03 01:42:00 +09:00
Cutls
612400944e Fix: Pleroma hashtags unshown 2019-05-29 23:24:50 +09:00
Cutls
5f22d2427e Fix: Pleroma image unshown 2019-05-29 23:13:38 +09:00
Cutls
2692967b7d Fix: emojis select buttons on white-themes 2019-05-29 00:42:06 +09:00
dependabot-preview[bot]
2ed85ab978 Bump electron-builder from 20.40.2 to 20.41.0 in /app
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 20.40.2 to 20.41.0.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/compare/v20.40.2...v20.41.0)
2019-05-27 23:31:23 +00:00
Cutls
f843872a14 travis final 2019-05-27 02:59:57 +09:00
Cutls
b365b9d15b travis 19 2019-05-27 02:40:48 +09:00
Cutls
938ff926c3 travis 18 2019-05-27 02:28:08 +09:00
Cutls
7a1a6354df travis 17 2019-05-27 02:21:40 +09:00
Cutls
37e9d8242b travis 16 2019-05-27 02:19:09 +09:00
Cutls
8bf03f2809 travis 2019-05-27 02:02:37 +09:00
Cutls
c684a5b0d0 travis 16 2019-05-27 01:40:07 +09:00
Cutls
3281461809 travis 15 2019-05-27 01:38:52 +09:00
Cutls
2cd5cf505d travis 14 2019-05-27 01:34:26 +09:00
Cutls
42334450bf travis 14 2019-05-27 01:24:00 +09:00
Cutls
410633c873 travis 14 2019-05-27 01:18:44 +09:00
Cutls
ee67baf0b4 travis 13 2019-05-27 01:17:15 +09:00
Cutls
7afa959e6c travis 12 2019-05-27 00:45:26 +09:00
Cutls
ca0db95910 travis 11 2019-05-27 00:41:34 +09:00
Cutls
9825a84880 travis 11 2019-05-27 00:33:30 +09:00
Cutls
68260f3d85 travis 10 2019-05-27 00:22:50 +09:00
Cutls
d25fcfadc1 travis 9 2019-05-27 00:10:12 +09:00
Cutls
7059c1bb31 travis 9 2019-05-26 23:59:38 +09:00
Cutls
a4ac0af6e1 travis 8 2019-05-26 23:56:16 +09:00
Cutls
205a3bea44 travis 7 2019-05-26 23:55:16 +09:00
Cutls
748a69b3bd travis 6 2019-05-26 23:42:35 +09:00
Cutls
be36c3dd0b travis run all test 2019-05-26 23:40:03 +09:00
Cutls
13384ed93f travis final 2019-05-26 22:56:37 +09:00
Cutls
92b8a36019 travis windows 2 2019-05-26 22:43:08 +09:00
Cutls
225786e07f travis win 2019-05-26 22:40:37 +09:00
Cutls
8c8cf44ed6 travis 6 2019-05-26 22:22:45 +09:00
Cutls
c3e6e657c9 travis 5 2019-05-26 22:16:16 +09:00
Cutls
04185ea07b travis 4 2019-05-26 22:09:00 +09:00
Cutls
49794e05d0 travis 3 2019-05-26 21:58:31 +09:00
Cutls
b2be1a7bcc travis 2 2019-05-26 21:53:33 +09:00
Cutls
2d167c9c2e travis 1 2019-05-26 21:46:26 +09:00
Cutls
5251ba9b3f update README 2019-05-26 20:57:42 +09:00
Cutls
df443003e4 travis 2019-05-26 20:49:49 +09:00
Cutls
3719b1ed40 travis 2019-05-26 20:47:07 +09:00
Cutls
d4a246ea59 Merge pull request #80 from cutls/WIP-(before-CI)
Wip (before ci)
2019-05-26 20:44:18 +09:00
Cutls
c77b0f5924 Merge branch 'master' into WIP-(before-CI) 2019-05-26 20:44:09 +09:00
Cutls
bb1165ecf9 Merge branch 'WIP-(before-CI)' of https://github.com/cutls/TheDesk into WIP-(before-CI) 2019-05-26 20:43:15 +09:00
Cutls
93d2e8e0d5 Update to Usamin (18.5.0) 2019-05-26 20:42:52 +09:00
Cutls
b0db765f25 Update FUNDING.yml 2019-05-25 16:43:13 +09:00
Cutls
68a3786fb8 Create FUNDING.yml 2019-05-25 14:53:51 +09:00
Cutls
9103ba6af1 Merge pull request #75 from cutls/dependabot/npm_and_yarn/app/WIP-(before-CI)/jimp-0.6.4
Bump jimp from 0.2.28 to 0.6.4 in /app
2019-05-25 13:22:24 +09:00
Cutls
dd8e89234c Fix TheDesk Oshirase 2019-05-22 23:39:55 +09:00
Cutls
bcb358cc8b Merge pull request #77 from kPherox/fix-hidden-timeline-scroll-bottom
Fix the hidden last of the timeline
2019-05-22 07:45:17 +09:00
kPherox
f42c59669f refs cutls#11 Fix the hidden last of the timeline
- 通知TLを一番下までスクロールしても最後の投稿の全文が見えない。(「アクションメニューを非表示」は「いいえ」にしてある)
2019-05-22 02:02:30 +09:00
dependabot[bot]
d656860b2e Bump jimp from 0.2.28 to 0.6.4 in /app
Bumps [jimp](https://github.com/oliver-moran/jimp) from 0.2.28 to 0.6.4.
- [Release notes](https://github.com/oliver-moran/jimp/releases)
- [Commits](https://github.com/oliver-moran/jimp/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-05-21 15:55:10 +00:00
Cutls
30744e402a Merge pull request #76 from cutls/dependabot/npm_and_yarn/app/WIP-(before-CI)/electron-builder-20.40.2
Bump electron-builder from 20.39.0 to 20.40.2 in /app
2019-05-22 00:53:36 +09:00
Cutls
43bac6f3e6 Add: notification filter by user (for head) 2019-05-22 00:00:54 +09:00
dependabot[bot]
dae4371a3f Bump electron-builder from 20.39.0 to 20.40.2 in /app
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 20.39.0 to 20.40.2.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/compare/v20.39.0...v20.40.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-05-20 20:21:58 +00:00
Cutls
990c2f796e Fix acct-select-box 2019-05-20 22:34:58 +09:00
Cutls
89c3a4f8b1 Delete some 2019-05-20 08:41:24 +09:00
Cutls
ca12884735 WIP: Introduce Electron 5.0.1 2019-05-19 19:24:27 +09:00
Cutls
07e907b599 Add: Astarte marquee BBCode 2019-05-19 18:31:47 +09:00
Cutls
e0bdd1e0b2 japanese README 2019-05-19 18:21:54 +09:00
Cutls
595b1a3c62 reverse 2019-05-19 17:57:07 +09:00
Cutls
236392299b add screenshot 2019-05-19 17:54:04 +09:00
Cutls
418b2e7668 check2 2019-05-19 17:38:46 +09:00
Cutls
052694dbde test readme 2019-05-19 17:30:15 +09:00
Cutls
d529a105c5 Merge branch 'WIP-(before-CI)' of https://github.com/cutls/TheDesk into WIP-(before-CI) 2019-05-19 17:01:18 +09:00
Cutls
40d877682b check dependa 2019-05-19 17:01:15 +09:00
Cutls
5e324f19ae Merge pull request #72 from cutls/dependabot/npm_and_yarn/app/WIP-(before-CI)/vue-2.6.10
Bump vue from 2.6.9 to 2.6.10 in /app
2019-05-19 17:00:45 +09:00
Cutls
9d8b9cbd04 Merge pull request #71 from cutls/dependabot/npm_and_yarn/app/WIP-(before-CI)/electron-dl-1.14.0
Bump electron-dl from 1.11.0 to 1.14.0 in /app
2019-05-19 17:00:35 +09:00
dependabot[bot]
54e5180732 Bump vue from 2.6.9 to 2.6.10 in /app
Bumps [vue](https://github.com/vuejs/vue) from 2.6.9 to 2.6.10.
- [Release notes](https://github.com/vuejs/vue/releases)
- [Commits](https://github.com/vuejs/vue/compare/v2.6.9...v2.6.10)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-05-19 08:00:07 +00:00
Cutls
dbf959782f Merge pull request #70 from cutls/dependabot/npm_and_yarn/app/WIP-(before-CI)/tar-4.4.8
[Security] Bump tar from 2.2.1 to 4.4.8 in /app
2019-05-19 16:58:43 +09:00
Cutls
33114ca3c8 Merge pull request #74 from cutls/dependabot/npm_and_yarn/app/WIP-(before-CI)/sumchecker-3.0.0
Bump sumchecker from 2.0.2 to 3.0.0 in /app
2019-05-19 16:56:54 +09:00
dependabot[bot]
4c2aebc7c1 Bump sumchecker from 2.0.2 to 3.0.0 in /app
Bumps [sumchecker](https://github.com/malept/sumchecker) from 2.0.2 to 3.0.0.
- [Release notes](https://github.com/malept/sumchecker/releases)
- [Changelog](https://github.com/malept/sumchecker/blob/master/NEWS.md)
- [Commits](https://github.com/malept/sumchecker/compare/v2.0.2...v3.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-05-19 07:56:12 +00:00
Cutls
b51470f999 Merge pull request #73 from cutls/dependabot/npm_and_yarn/app/WIP-(before-CI)/node-notifier-5.4.0
Bump node-notifier from 5.2.1 to 5.4.0 in /app
2019-05-19 16:54:43 +09:00
Cutls
b2be5f3706 become a patreon 2019-05-19 16:54:23 +09:00
Cutls
06eb347cf8 More prettier 2019-05-19 16:39:30 +09:00
dependabot[bot]
81c5c1d86a Bump node-notifier from 5.2.1 to 5.4.0 in /app
Bumps [node-notifier](https://github.com/mikaelbr/node-notifier) from 5.2.1 to 5.4.0.
- [Release notes](https://github.com/mikaelbr/node-notifier/releases)
- [Changelog](https://github.com/mikaelbr/node-notifier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mikaelbr/node-notifier/compare/v5.2.1...v5.4.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-05-19 07:13:55 +00:00
dependabot[bot]
82858b7b92 Bump electron-dl from 1.11.0 to 1.14.0 in /app
Bumps [electron-dl](https://github.com/sindresorhus/electron-dl) from 1.11.0 to 1.14.0.
- [Release notes](https://github.com/sindresorhus/electron-dl/releases)
- [Commits](https://github.com/sindresorhus/electron-dl/compare/v1.11.0...v1.14.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-05-19 07:12:59 +00:00
dependabot[bot]
b3506aec3c [Security] Bump tar from 2.2.1 to 4.4.8 in /app
Bumps [tar](https://github.com/npm/node-tar) from 2.2.1 to 4.4.8. **This update includes security fixes.**
- [Release notes](https://github.com/npm/node-tar/releases)
- [Commits](https://github.com/npm/node-tar/compare/v2.2.1...v4.4.8)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-05-19 07:12:56 +00:00
Cutls
de6e9c6f11 Update SHA256 lib 2019-05-19 15:47:45 +09:00
Cutls
d3ff1aa17a Debug 2019-05-19 15:17:05 +09:00
Cutls
3cde6d0bff Improved: attached video on Pleroma 2019-05-16 00:17:47 +09:00
Cutls
bfade31849 Add link to unknown media 2019-05-16 00:11:09 +09:00
Cutls
3a06820f1e Fix: follow request 2019-05-16 00:01:54 +09:00
Cutls
c5f712359d Merge pull request #68 from cutls/WIP-(before-CI)
18.4.0
2019-05-11 01:36:07 +09:00
Cutls
c9cca85db3 Add features 2019-05-11 01:32:54 +09:00
Cutls
07b203b719 TheDesk Usamin (18.4.0) 2019-05-11 01:31:15 +09:00
Cutls
a636c745e4 Add: follow request auth/reject 2019-05-09 00:46:26 +09:00
Cutls
e9024312a7 Fix: some Misskey bugs about reaction 2019-05-09 00:31:05 +09:00
Cutls
edbe3c164f Add: Misskey v11 streaming method 2019-05-08 00:48:59 +09:00
Cutls
8991cb5a96 Add: NSFW notice 2019-05-07 22:43:30 +09:00
Cutls
b4aa5aead5 Merge pull request #67 from cutls/WIP-(before-CI)
TheDesk Usamin (18.3.3)
2019-05-07 00:45:08 +09:00
Cutls
873a8fd229 fix typo 2019-05-07 00:44:04 +09:00
Cutls
d0ddc58160 TheDesk Usamin (18.3.3) 2019-05-07 00:43:21 +09:00
Cutls
6eebfed609 get blurhash 2019-05-07 00:42:06 +09:00
Cutls
09b7b8633e Merge pull request #66 from cutls/WIP-(before-CI)
TheDesk Usaimin (18.3.2)
2019-05-06 19:36:08 +09:00
Cutls
c93326d218 Add notestock notice 2019-05-06 19:34:49 +09:00
Cutls
a03c5c0ecf TheDesk Usain (18.3.2) 2019-05-06 19:31:28 +09:00
Cutls
0380251294 Check vulnerability 2019-05-06 19:30:05 +09:00
Cutls
d8f857e05d TheDesk Usamin (18.3.2) 2019-05-06 19:15:54 +09:00
Cutls
7a06a2b192 Add: min_id TL 2019-05-06 19:10:03 +09:00
Cutls
771db8c3ad Notestock 2019-05-06 01:28:00 +09:00
Cutls
9a800639e6 Custom emojis' marign 2019-05-06 01:27:54 +09:00
Cutls
550c7b1805 change to cutls.com from kirishima.cloud 2019-05-03 01:08:46 +09:00
Cutls
ad7c7ffa66 Fix: flag emojis #64 2019-05-03 00:51:10 +09:00
Cutls
57978bd152 TheDesk Minami💛(announce) 2019-04-25 01:10:49 +09:00
Cutls
5cd72a538c add note 2019-04-22 23:19:34 +09:00
Cutls
d439169c63 Merge pull request #61 from kPherox/fix-integrated-tl-reconnect-streaming
Fix integrated tl reconnect streaming
2019-04-22 23:18:12 +09:00
Cutls
da39e0ded6 package 2019-04-22 23:17:46 +09:00
Cutls
823fae5eac TheDesk Usamin (18.3.1) 2019-04-22 23:16:57 +09:00
kPherox
4f3a7c47e3 Change console log level 2019-04-22 03:33:56 +09:00
kPherox
bd8d480e07 Check error count on integrated tl 2019-04-22 03:31:14 +09:00
kPherox
a09c031dbe Add type integrated to reconnector 2019-04-22 03:26:57 +09:00
kPherox
1fee94846d Fix typo 2019-04-22 02:02:23 +09:00
Cutls
4fb37525d5 Merge branch 'WIP-(before-CI)' of https://github.com/cutls/TheDesk into WIP-(before-CI) 2019-04-22 01:51:42 +09:00
Cutls
8f25557f20 wip 2019-04-22 01:51:32 +09:00
Cutls
cb47eabed9 Merge pull request #60 from kPherox/fix-poll-vote-button
Fix poll vote button
2019-04-22 01:50:29 +09:00
kPherox
f8823a4c5a Fix bug that deleting the vote button 2019-04-22 01:34:50 +09:00
kPherox
7fdd5964cc Fix lang_parse_vote for en 2019-04-22 01:00:20 +09:00
Cutls
3aadcaef0f add some notifications sound 2019-04-20 23:40:12 +09:00
Cutls
f58d4f349b TheDesk Usamin (18.3.0) 2019-04-20 00:59:31 +09:00
Cutls
9bb8ec0b66 some security update 2019-04-19 23:02:30 +09:00
Cutls
ec9a14d63b custom emojis when poll 2019-04-16 01:38:29 +09:00
Cutls
82a00f4d1e security 2019-04-16 01:29:44 +09:00
Cutls
af97f88d0a sound 2019-04-15 00:45:04 +09:00
Cutls
e27351481b Merge pull request #58 from cutls/WIP-(before-CI)
Wip (before ci)
2019-04-14 18:58:33 +09:00
Cutls
4c375e2d0a travis 2019-04-14 18:58:12 +09:00
Cutls
53cd49d4e8 travis 2019-04-14 18:55:30 +09:00
Cutls
e36942180e restart 2019-04-14 03:48:44 +09:00
Cutls
6b58c88118 travis 2019-04-14 03:46:15 +09:00
Cutls
d20777ed18 travis 2019-04-14 03:45:30 +09:00
Cutls
202e389c20 travis 2019-04-14 03:38:07 +09:00
Cutls
707a5b2033 change travis 2019-04-14 03:31:19 +09:00
Cutls
0967c93dde Merge pull request #57 from cutls/WIP-(before-CI)
Wip (before ci)
2019-04-14 03:26:44 +09:00
Cutls
b13849a427 readme 2019-04-14 03:26:19 +09:00
Cutls
d0322c7bda TheDesk Usamin (18.2.3) 2019-04-14 03:22:16 +09:00
Cutls
494a4e90d6 fix some undif 2019-04-14 03:06:59 +09:00
Cutls
d1968a2e69 Merge pull request #56 from cutls/mac
miss
2019-04-14 01:43:57 +09:00
Cutls
51e6909f77 #64 fix 2019-04-14 01:42:49 +09:00
Cutls
cec46faf19 keybase 2019-04-14 01:42:18 +09:00
Cutls
53f880ab97 Merge pull request #55 from kPherox/fix-nowplaying-for-asar-packed
Fix nowplaying for asar packed
2019-04-14 01:41:30 +09:00
kPherox
cc20b0a7c0 Replace promise to async/await 2019-04-14 01:33:00 +09:00
kPherox
efac88db4c Change to pass error on itunes-np 2019-04-14 01:32:16 +09:00
Cutls
2e1c076b5f Merge pull request #53 from kPherox/update-package
Update package
2019-04-14 00:36:19 +09:00
kPherox
5a03df6ee9 Change itunes-nowplaying-mac pull request number 2019-04-14 00:13:57 +09:00
kPherox
ade5893183 Unpack asar for itunes-nowplaying-mac 2019-04-14 00:12:35 +09:00
kPherox
8a17e737f9 Add npm scripts for build
Update README.md#buildビルド

初回のcloneするときの流れを修正してからnpm scriptsを利用するように書き換え
2019-04-14 00:09:35 +09:00
kPherox
94c1ff3731 Replace dev dependency electron-packager to electron-builder
Some package update
2019-04-13 23:34:10 +09:00
Cutls
4e5fe2fc91 proof lang 2019-04-13 12:51:54 +09:00
Cutls
f88ed31e38 Add keybase 2019-04-13 12:41:58 +09:00
Cutls
7df51c161b mac 18.2.2 2019-04-13 03:55:05 +09:00
Cutls
b5d1686c12 update package 2019-04-13 02:32:42 +09:00
Cutls
a1048b3243 to linux 2019-04-13 02:31:07 +09:00
Cutls
f9090e261d travis 2019-04-13 02:21:21 +09:00
Cutls
4029f168df readme 2019-04-13 01:55:01 +09:00
Cutls
7965e7c742 pavkage 2019-04-13 01:54:33 +09:00
Cutls
932e6731c9 readme package 2019-04-13 01:49:22 +09:00
Cutls
3c3eb5209b readme 2019-04-13 01:48:26 +09:00
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
133 changed files with 40058 additions and 31755 deletions

8
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,8 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: cutls
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
custom: https://www.pixiv.net/fanbox/creator/28105985

2
.gitignore vendored
View File

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

View File

@@ -1,33 +1,47 @@
os: windows os:
- windows
- linux
- osx
language: node_js language: node_js
node_js: node_js:
- '10.15.2' - '10.15.2'
script: node -v script: node -v
before_deploy: before_deploy:
- cd app
- npm install electron-builder -g - npm install electron-builder -g
- cd app
- VERSION=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]')
- npm install - npm install
- electron-builder --win --ia32 - if [ "$TRAVIS_OS_NAME" = "osx" ];then electron-builder --mac -p never;else :;fi
- mv ../build/TheDesk-setup.exe ../TheDesk-setup-ia32.exe - if [ "$TRAVIS_OS_NAME" = "linux" ];then electron-builder --linux --x64 -p never;else :;fi
- mv ../build/TheDesk*.exe ../TheDesk-ia32.exe - if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../build;else :;fi
- electron-builder --win --x64 - if [ "$TRAVIS_OS_NAME" = "linux" ];then ls;else :;fi
- mv ../build/TheDesk-setup.exe ../TheDesk-setup.exe - if [ "$TRAVIS_OS_NAME" = "linux" ];then mv thedesk-*.zip thedesk.zip;else :;fi
- mv ../build/TheDesk*.exe ../TheDesk.exe - if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../app;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then electron-builder --win --ia32 -p never;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../build;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then ls;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then mv TheDesk-setup.exe TheDesk-setup-ia32.exe;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then mv *$VERSION.exe TheDesk-ia32.exe;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../app;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then electron-builder --win --x64 -p never;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../build;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then ls;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then mv ../build/TheDesk-setup.exe ../build/TheDesk-setup.exe;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then mv ../build/*$VERSION.exe ../build/TheDesk.exe;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../app;else :;fi
- cd ../ - cd ../
- ls - ls build
after_deploy: ls
deploy: deploy:
skip_cleanup: true
provider: releases provider: releases
# GitHub にリリースするための API KEY を暗号化した値
api_key: api_key:
secure: jndR02p5KRTtcJk18b3YsXL2cC+yzEf1AOqXdpWciF8f3lO5oY01jlxd17xdHIcK7VywSsLVZpLToSdqAoIEhJ5OxEQ/FmA3FlmbwwD6ou13gLa4VGIvsBHveCmKGjVu0Z++atIy76tZYU1SOWFWv4B0ZhnVz2ca2VZynvLgw3YNsPJH7rHO966GXgRkGYJAJ4UvLg3sj/iztVh2FSfbUj5IGO1e/JHJO63wAo1MSQtRjkutVgl/djnBLC6vbL4YHkM3Ynpkx/YQEcxwrmeY0Ra8D5yYDq4MNIDMmZahWC+k4u2eA2Cj2ifBFNxbZvTN75vLwRBp6DsTNHsiqkXrSPDBdNeet31RbwTQ6LtsK8jqmL4S/59dmLcj7uCU2WxyBLPbJdbdZWlqW2ZQvfQY8QVAYy7S3MiHQWQN0oP5wqXk89jcgR42ig/zsqFNPpXHM4mExR7l/gDLPg0j9c3XEF6sWtk3FmJN1i4+B+9kn09b6UKlV7EFPKp8XcFNrz4ZcE9/I8lKwsqLVG2jAXIk7Z9LwDRcAmK5eG348X5zwFtOY6raKIvRw2cn92bPnEI+55v8A4WANS2647GFTgxHj30D0d/sOZmJ5BS34zpdWTgE0AlKg7sOqkncjqoW5J5zCh5Ow7b3KXvEvlAts44mAag8tZTectxMP4iguXvTnv4= secure: jndR02p5KRTtcJk18b3YsXL2cC+yzEf1AOqXdpWciF8f3lO5oY01jlxd17xdHIcK7VywSsLVZpLToSdqAoIEhJ5OxEQ/FmA3FlmbwwD6ou13gLa4VGIvsBHveCmKGjVu0Z++atIy76tZYU1SOWFWv4B0ZhnVz2ca2VZynvLgw3YNsPJH7rHO966GXgRkGYJAJ4UvLg3sj/iztVh2FSfbUj5IGO1e/JHJO63wAo1MSQtRjkutVgl/djnBLC6vbL4YHkM3Ynpkx/YQEcxwrmeY0Ra8D5yYDq4MNIDMmZahWC+k4u2eA2Cj2ifBFNxbZvTN75vLwRBp6DsTNHsiqkXrSPDBdNeet31RbwTQ6LtsK8jqmL4S/59dmLcj7uCU2WxyBLPbJdbdZWlqW2ZQvfQY8QVAYy7S3MiHQWQN0oP5wqXk89jcgR42ig/zsqFNPpXHM4mExR7l/gDLPg0j9c3XEF6sWtk3FmJN1i4+B+9kn09b6UKlV7EFPKp8XcFNrz4ZcE9/I8lKwsqLVG2jAXIk7Z9LwDRcAmK5eG348X5zwFtOY6raKIvRw2cn92bPnEI+55v8A4WANS2647GFTgxHj30D0d/sOZmJ5BS34zpdWTgE0AlKg7sOqkncjqoW5J5zCh5Ow7b3KXvEvlAts44mAag8tZTectxMP4iguXvTnv4=
# Releases ページにアップロードするファイル
file_glob: true
file: file:
- TheDesk.exe - build/*
- TheDesk-setup.exe skip_cleanup: true
- TheDesk-ia32.exe
- TheDesk-setup-ia32.exe
on: on:
repo: cutls/TheDesk repo: cutls/TheDesk
branches: tags: true
only: all_branches: true
- master

104
README.md
View File

@@ -1,25 +1,26 @@
<img src="https://thedesk.top/img/top.png" width="300" align="left">
<img src="https://thedesk.top/img/desk.png" width="150" align="right">
# TheDesk # TheDesk
[![Build Status](https://travis-ci.org/cutls/TheDesk.svg?branch=master)](https://travis-ci.org/cutls/TheDesk) [![Build Status](https://travis-ci.org/cutls/TheDesk.svg?branch=master)](https://travis-ci.org/cutls/TheDesk)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/thedesk/localized.svg)](https://translate.thedesk.top/project/thedesk) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/thedesk/localized.svg)](https://translate.thedesk.top/project/thedesk)
[![Version](https://flat.badgen.net/github/release/cutls/TheDesk)](https://github.com/cutls/TheDesk/releases)
[![Download](https://flat.badgen.net/github/assets-dl/cutls/TheDesk)](https://github.com/cutls/TheDesk/releases)
![Contributors](https://flat.badgen.net/github/contributors/cutls/TheDesk)
Mastodon/Misskey client for PC(Windows/Linux/macOS) Mastodon/Misskey client for PC(Windows/Linux/macOS)
オープンソースSNSマストドン/MisskeyのWindows/Linuxクライアント オープンソースSNSマストドン/MisskeyのPC向けクライアント[日本語はこちら](README_ja.md)
Download:[TheDesk](https://thedesk.top)
Contact me(bug report...):GitHub Issues, mention to [Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls) or toot with #Desk Download:[TheDesk](https://thedesk.top) [![check](https://status.cutls.com/badge/?site=thedesk.top)](https://status.cutls.com)
バグレポートなど:GitHub Issuesや[Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls)へのリプ,または#Deskでトゥートして下さい. <a href="https://www.patreon.com/cutls"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160"></a>
![Screenshots1](https://thedesk.top/img/scr1.png)
### Contribute/コントリビュート ## License
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/)で提供されています。 The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/)
[Press Kit](https://dl.thedesk.top/press/TheDesk+PressKit.zip) [Press Kit](https://dl.thedesk.top/press/TheDesk+PressKit.zip)
* [PNG](https://dl.thedesk.top/press/TheDesk.png) * [PNG](https://dl.thedesk.top/press/TheDesk.png)
@@ -27,25 +28,25 @@ The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.o
* [ico](https://dl.thedesk.top/press/TheDesk.ico) * [ico](https://dl.thedesk.top/press/TheDesk.ico)
* [icns](https://dl.thedesk.top/press/TheDesk.icns) * [icns](https://dl.thedesk.top/press/TheDesk.icns)
## Terms of Use/利用規約 The default sounds of notifications is provided [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/)
## Terms of Use
* [利用規約(Terms of Use(ja))](https://thedesk.top/tos.html) * [利用規約(Terms of Use(ja))](https://thedesk.top/tos.html)
* [プライバシーポリシー(Privacy Policy(ja))](https://thedesk.top/priv.html) * [プライバシーポリシー(Privacy Policy(ja))](https://thedesk.top/priv.html)
## Language/言語 ## Language
* 日本語(Japanese) * 日本語(Japanese)
* English(英語) * English
### Translation/翻訳 ### Translation
Crowdin project is available! Visit: https://translate.thedesk.top Crowdin project is available! Visit: https://translate.thedesk.top
Crowdinから翻訳に参加してみませんか: https://translate.thedesk.top ## Requirement and development
## Requirement/環境 * Electron 4.2 or above(install yourself)
* Electron 3.0.10(install yourself)
* electron-dl(in package.json) * electron-dl(in package.json)
* Jimp(in package.json) * Jimp(in package.json)
* font-manager(in package.json) * font-manager(in package.json)
@@ -56,28 +57,51 @@ Crowdinから翻訳に参加してみませんか: https://translate.thedesk.
* sumchecker(in package.json) * sumchecker(in package.json)
* Ability to read unformated files!(install yourself) * Ability to read unformated files!(install yourself)
## Contributors/主なコントリビューター ### Run on developer mode
macOSビルダー `npm run dev` on `app` folder.
* [とねぢ](https://minohdon.jp/@toneji) ## Contributors
Linuxビルダー Build for macOS
* [ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja) * [toneji](https://minohdon.jp/@toneji)
iTunes NowPlayingにアルバムアートワークを付けてくれた人 Build for Linux
* [popn_ja](https://popon.pptdn.jp/@popn_ja)
Fellow coder
* [kPherox](https://www.kr-kp.com/) * [kPherox](https://www.kr-kp.com/)
## Build/ビルド ## Build
Misskey(misskey.xyz) application token is not in cutls/TheDesk ```sh
Misskey(misskey.xyz)のトークンは含まれておりません。 git clone https://github.com/cutls/TheDesk
`git clone https://github.com/cutls/TheDesk` cd TheDesk/app
`npm install electron -g` npm install
`cd TheDesk/app` npm install --only=dev
`npm install` ```
### electron-builder(Recommended)
Use npm scripts.
```sh
# Build for current platform
npm run build
# Select build target
## Windows
npm run build:win
## Windows and Linux (The macOS target should run on macOS. So, this option hasn't include the build for macOS)
npm run build:all
```
Config is all on package.json
### electron-packager
`npm install --save-dev electron-rebuild` `npm install --save-dev electron-rebuild`
Linux/macOS Linux/macOS
@@ -86,13 +110,8 @@ Windows
`.\node_modules\.bin\electron-rebuild.cmd` `.\node_modules\.bin\electron-rebuild.cmd`
To install Python 2.x and Visual C++ for Windows, before running `npm install --save-dev electron-rebuild` 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` `npm install --global windows-build-tools`
日本語話者向けですが、macOSビルドにはXCodeが要るとの情報があります。([とねぢ](https://minohdon.jp/@toneji)氏談)
### electron-packager
Windows 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` `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 Linux
@@ -100,19 +119,8 @@ Linux
macOS 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=4.0.5 --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 ## Pleroma support
Did you find a bug with Pleroma accounts? Did you find a bug with Pleroma accounts?
Pleroma **does not** follow Mastodon API rules completely although Pleroma developers say so. Pleroma **does not** follow Mastodon API rules completely although Pleroma developers say so.
Please write issues to improve TheDesk affinity with Pleroma. Please write issues to improve TheDesk affinity with Pleroma.
Pleromaは、Mastodon APIとの互換性を謳っていますが、実際には様々な差異があり、TheDeskで不具合が発生することがあります。
Issuesに書いてある問題についてはなるべく対処しますので、ぜひお知らせください。
## See also/詳しく
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)

132
README_ja.md Normal file
View File

@@ -0,0 +1,132 @@
<img src="https://thedesk.top/img/top.png" width="300" align="left">
<img src="https://thedesk.top/img/desk.png" width="150" align="right">
# 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)
[![Version](https://flat.badgen.net/github/release/cutls/TheDesk)](https://github.com/cutls/TheDesk/releases)
[![Download](https://flat.badgen.net/github/assets-dl/cutls/TheDesk)](https://github.com/cutls/TheDesk/releases)
![Contributors](https://flat.badgen.net/github/contributors/cutls/TheDesk)
Mastodon/Misskey client for PC(Windows/Linux/macOS)
オープンソースSNSマストドン/MisskeyのPC向けクライアント
Download:[TheDesk](https://thedesk.top) [![check](https://status.cutls.com/badge/?site=thedesk.top)](https://status.cutls.com)
[Pixiv FANBOX](https://www.pixiv.net/fanbox/creator/28105985)
![Screenshots1](https://thedesk.top/img/scr1.png)
## ライセンス
[GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)
アイコンは[クリエイティブ・コモンズ 表示-非営利-継承](https://creativecommons.org/licenses/by-nc-sa/4.0/)で提供されています。
[プレスキット](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)
標準の通知音は [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/) で提供されています。
## 利用規約
* [利用規約](https://thedesk.top/tos.html)
* [プライバシーポリシー](https://thedesk.top/priv.html)
## 言語
* 日本語
* English(英語)
### 翻訳
Crowdinから翻訳に参加してみませんか: https://translate.thedesk.top
## 環境
* Electron 4.2以上(自分で入れて)
* electron-dl(in package.json)
* Jimp(in package.json)
* font-manager(in package.json)
* Python 2.x(自分で入れて)
* VisualC++(Windows)(自分で入れて)
* itunes-nowplaying-mac(macOS向け)(in package.json)
* node-notifier(in package.json)
* sumchecker(in package.json)
* Ability to read unformated files!(自分で入れて)
### デベロッパーモード
`npm run dev``app`フォルダ内で実行
## 主なコントリビューター
macOSビルダー
* [とねぢ](https://minohdon.jp/@toneji)
Linuxビルダー
* [ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja)
iTunes NowPlayingにアルバムアートワークを付けてくれた人
* [kPherox](https://www.kr-kp.com/)
## ビルド
```sh
git clone https://github.com/cutls/TheDesk
cd TheDesk/app
npm install
npm install --only=dev
```
### electron-builder(推奨)
npm scriptsを利用します
```sh
# 実行している環境向けにビルド
npm run build
# ターゲットを指定してビルド
## Windows
npm run build:win
## macOS向けのビルドにはmacOSで実行する必要があるためこのコマンドではビルドされません
npm run build:all
```
ビルド設定はすべてpackage.jsonに記載しています。
### electron-packager(非推奨)
`npm install --save-dev electron-rebuild`
Linux/macOS
`./node_modules/.bin/electron-rebuild`
Windows
`.\node_modules\.bin\electron-rebuild.cmd`
WindowsでPython 2.xやVisualC++を一発でインストールできるツールもあります(`npm install --save-dev electron-rebuild`の前に)
`npm install --global windows-build-tools`
日本語話者向けですが、macOSビルドにはXCodeが要るとの情報があります。([とねぢ](https://minohdon.jp/@toneji)氏談)
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=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=4.0.5 --icon=./app/icon.icns --overwrite`
## Pleromaのサポート
Pleromaは、Mastodon APIとの互換性を謳っていますが、実際には様々な差異があり、TheDeskで不具合が発生することがあります。
Issuesに書いてある問題についてはなるべく対処しますので、ぜひお知らせください。
## 詳しく
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)

View File

@@ -1,5 +1,6 @@
<!doctype html> <!doctype html>
<html lang="ja"> <html lang="ja">
<head> <head>
<title>TheDesk</title> <title>TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport"> <meta content="width=device-width,initial-scale=1.0" name="viewport">
@@ -15,9 +16,12 @@ body{
-webkit-app-region: drag; -webkit-app-region: drag;
cursor: move; cursor: move;
} }
a,button{
a,
button {
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
} }
.container { .container {
width: 100%; width: 100%;
display: grid; display: grid;
@@ -69,41 +73,50 @@ a,button{
} }
</style> </style>
</head> </head>
<body class="center " style="overflow:hidden"> <body class="center " style="overflow:hidden">
<script type="text/javascript" src="./js/common/jquery.js"></script> <script type="text/javascript" src="./js/common/jquery.js"></script>
<script type="text/javascript" src="./js/platform/first-not-view.js"></script> <script type="text/javascript" src="./js/platform/first-not-view.js"></script>
<script type="text/javascript" src="./js/common/materialize.js"></script> <script type="text/javascript" src="./js/common/materialize.js"></script>
<img src="./img/desk.png" style="max-width:70%;"> <img src="./img/desk.png" style="max-width:62%;">
<h5>TheDesk</h5> <h5>TheDesk</h5>
<div class='container'> <div class="container">
<div class='area-name1'>バージョン</div> <div class="area-name1">Display version</div>
<div class='area-data1' id="now"></div> <div class="area-data1" id="now"></div>
<div class='area-name2'>Internal version</div> <div class="area-name2">Internal version</div>
<div class='area-data2' id="ver"></div> <div class="area-data2" id="ver"></div>
<div class='area-name3'>Chromium</div> <div class="area-name3">Chromium</div>
<div class='area-data3' id="chrome"></div> <div class="area-data3" id="chrome"></div>
<div class='area-name4'>Electron</div> <div class="area-name4">Electron</div>
<div class='area-data4' id="electron"></div> <div class="area-data4" id="electron"></div>
<div class='area-name5'>Node.js</div> <div class="area-name5">Node.js</div>
<div class='area-data5' id="node"></div> <div class="area-data5" id="node"></div>
</div> </div>
<div class="cp">Copyright &copy; TheDesk 2018 All rights reserved.<br><a href="https://thedesk.top" target="_blank">Web site</a></div> <div class="cp">Copyright &copy; TheDesk 2018<br>
<button onclick="window.close()" class="btn waves-effect indigo" style="width:calc(100% - 10px);"><i class="material-icons left">close</i>Close</button> Main developer(author): <a href="https://cutls.com/@Cutls" target="_blank">Cutls P</a><br>
Thanks:<a href="https://minohdon.jp/@toneji" target="_blank">toneji</a>/<a
href="https://popon.pptdn.jp/@popn_ja" target="_blank">popn_ja</a>/<a href="https://pawoo.net/@kPherox"
target="_blank">kPherox</a> and all users
<img draggable="false" style="width:0.8rem;top: 1px;margin-left: 1px;position: relative;" alt="❤️"
title=":heart:" src="https://twemoji.maxcdn.com/2/72x72/2764.png">
<br><a href="https://thedesk.top" target="_blank">Web site</a></div>
<button onclick="window.close()" class="btn waves-effect indigo" style="width:calc(100% - 10px);"><i
class="material-icons left">close</i>Close</button>
<script type="text/javascript" src="./js/ui/theme.js"></script> <script type="text/javascript" src="./js/ui/theme.js"></script>
<script> <script>
var about = JSON.parse(localStorage.getItem("about"));
$("#now").text(localStorage.getItem("ver")); $("#now").text(localStorage.getItem("ver"));
var electron = require("electron"); $("#node").text(about[0]);
var remote=electron.remote; $("#chrome").text(about[1]);
//JSON.parse(fs.readFileSync(info_path, 'utf8')); $("#electron").text(about[2]);
console.log(process.versions);
$("#node").text(process.version);
$("#chrome").text(process.versions.chrome);
$("#electron").text(process.versions.electron);
if (location.search) { if (location.search) {
var m = location.search.match(/\?ver=([a-zA-Z-0-9.]+)/); var m = location.search.match(/\?ver=([a-zA-Z-0-9.]+)/);
var ver = m[1]; var ver = m[1];
$("#ver").text(ver); $("#ver").text(ver);
} }
$(document).on('click', 'a', e => {
var url = $(e.target).attr('href');
postMessage(["openUrl", url], "*")
return false;
});
</script> </script>
<script type="text/javascript" src="./js/platform/end.js"></script>

View File

@@ -1,260 +0,0 @@
<!doctype html>
<html lang="ja">
<head>
<title>Adobe Photo Editor - 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/auth.css" type="text/css" rel="stylesheet">
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
<link href='./css/tl.css' rel='stylesheet' type='text/css'>
<link href='./css/userdata.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
<style>
#cb-drag {
margin-bottom: 8px;
padding: 24px 0;
text-align: center;
}
#cb-drag p {
font-weight: bold;
text-align: center;
}
#cb-file {
cursor: pointer;
}
#cb-display {
margin-bottom: 0;
}
#cb-display p {
margin-top: 8px;
margin-bottom: 0;
line-height: 1.4;
}
.cb-div {
padding: 16px;
margin-bottom: 8px;
}
.cb-image {
cursor: pointer;
}
</style>
<meta charset="utf-8">
</head>
<body id="mainView">
<script type="text/javascript" src="./js/common/jquery.js"></script>
<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
<script type="text/javascript" src="./js/common/materialize.js"></script>
<script type="text/javascript" src="./js/ui/tips.js"></script>
<script type="text/javascript" src="./js/common/time.js"></script>
<script type="text/javascript" src="./js/common/modal.js"></script>
<div>
<div id="cb-drag">
<p>ここに画像ファイルをドラッグし、画像をクリックしてください。</p>
<input type="file" id="cb-file">
</div>
<div id="cb-display"></div>
</div>
<script type="text/javascript" src="https://dme0ih8comzn4.cloudfront.net/imaging/v2/editor.js"></script>
<script type="text/javascript">
var dragAndDrop = (function (window, document) {
"use strict";
var drag = document.getElementById("mainView");
var disp = document.getElementById("cb-display");
var file = document.getElementById("cb-file");
function makeView(data) {
var div, img, customEvent;
var metaData = "<p>■ファイル名: <b>" + data.name + "</b><br>■容量: <b>" + data.size + "</b>バイト</p>";
div = document.createElement("div");
div.setAttribute("class", "cb-div");
img = document.createElement("img");
img.src = data.url;
img.setAttribute("class", "cb-image");
img.style.maxWidth = "100%";
img.style.height = "auto";
div.appendChild(img);
img.insertAdjacentHTML("afterend", metaData);
disp.appendChild(div);
customEvent = document.createEvent("HTMLEvents");
customEvent.initEvent("makeView", true, false);
div.dispatchEvent(customEvent);
}
function readImage(e) {
var f = (e.dataTransfer) ? e.dataTransfer.files : e.target.files;
for (var i = 0, l = f.length; i < l; i++) {
var reader = new FileReader();
reader.onload = (function (f) {
var imageData = {};
return function (evt) {
if (f.type === "image/gif" || f.type === "image/png" || f.type === "image/jpeg") {
imageData.type = f.type;
imageData.name = f.name;
imageData.size = f.size;
imageData.date = f.lastModifiedDate.toLocaleDateString();
imageData.url = evt.target.result;
makeView(imageData);
} else {
return;
}
};
})(f[i]);
reader.readAsDataURL(f[i]);
}
}
function dragFiles() {
drag.addEventListener("drop", function (e) {
e.stopPropagation();
e.preventDefault();
readImage(e);
}, false);
drag.addEventListener("dragover", function (e) {
e.stopPropagation();
e.preventDefault();
}, false);
}
function uploadFiles() {
file.addEventListener("change", function(e) {
readImage(e);
}, false);
}
return {
init: function () {
dragFiles();
uploadFiles();
}
};
})(this, this.document);
var photoEditor = (function (window, document) {
"use strict";
var featherEditor = new Aviary.Feather({
apiKey: "ffee425017ab44b18ce95dab98a5cdc1",
onSave: function(imageID, newURL) {
var img1 = document.getElementById(imageID);
img1.src = newURL;
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('bmp-image', [newURL,0]);
window.close();
}
});
function clearImage() {
this.parentNode.style.display = "none";
}
function launchEditor(id, src) {
featherEditor.launch({
image: id,
url: src
});
return false;
}
function editPhoto() {
//console.log(this);
var id = this.getAttribute("id");
var src = this.getAttribute("src");
launchEditor(id, src);
}
function makeButton() {
var button = document.createElement("button");
button.setAttribute("style",
"width: 64px;"
+ " line-height: 24px;"
+ " background-color: #37474F;"
+ " color: #fff;"
+ " border: none;"
+ " cursor: pointer;"
+ " border-radius: 2px;"
+ " font-size: 14px;"
+ " position: absolute;"
+ " text-align: center;"
+ " top: 16px;"
+ " right: 8px;"
+ " padding: 0;"
+ " z-index: 1000;"
);
button.innerHTML = "削除";
return button;
}
function listener() {
var disp = document.getElementById("cb-display");
disp.addEventListener("makeView", function () {
var image = document.querySelectorAll(".cb-image");
var button = [];
for (var i = 0, l = image.length; i < l; i++) {
button[i] = makeButton();
image[i].setAttribute("id", "cb-image_" + i);
image[i].parentNode.style.position = "relative";
image[i].parentNode.appendChild(button[i]);
button[i].addEventListener("click", clearImage, false);
image[i].addEventListener("click", editPhoto, false);
}
}, false);
}
return {
init: function () {
listener();
}
};
})(this, this.document);
dragAndDrop.init();
photoEditor.init();
</script>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>
</body>
</html>

112
app/build.js Normal file
View File

@@ -0,0 +1,112 @@
const builder = require("electron-builder");
const fs = require('fs');
const os = process.platform;
const Platform = builder.Platform
const Arch = builder.Arch
const targets = new Map();
const archToType = new Map();
const pref = {
productName: "TheDesk",
appId: "top.thedesk",
asarUnpack: [
"node_modules/itunes-nowplaying-mac"
],
directories: {
output: "../build/"
},
win: {
icon: "build/thedesk.ico",
target: [
"nsis",
"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
},
linux: {
icon: "build/icons",
target: [
"zip",
"snap"
],
category: "Network"
},
mac: {
target: [
"dmg",
"zip"
]
},
electronDownload: {
version: "5.0.1"
},
electronVersion: "5.0.1"
}
const json = JSON.parse(fs.readFileSync("package.json", 'utf8'));
const version = json.version;
if (os == "win32") {
archToType.set(Arch.ia32, []);
targets.set(Platform.WINDOWS, archToType);
} else if (os == "linux") {
archToType.set(Arch.x64, []);
archToType.set(Arch.ia32, []);
targets.set(Platform.LINUX, archToType);
} else if (os == "darwin") {
archToType.set(Arch.x64, []);
targets.set(Platform.MAC, archToType);
} else {
return false
}
builder.build({
targets: targets,
config: pref
})
.then(() => {
console.log("Done on "+os)
if (os == "win32") {
console.log("Windows")
fs.renameSync('../build/TheDesk ' + version + '.exe', '../build/TheDesk-ia32.exe');
fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup-ia32.exe');
retry()
}else if (os == "linux") {
console.log("Linux")
fs.renameSync('../build/thedesk-' + version + '.zip', '../build/TheDesk.zip');
fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup-ia32.exe');
}
})
.catch((error) => {
// handle error
})
function retry(){
console.log("Windows x64")
const targetsAlt = new Map();
const archToTypeAlt = new Map();
targetsAlt.set(Platform.WINDOWS, archToTypeAlt);
archToTypeAlt.set(Arch.x64, []);
builder.build({
targets: targetsAlt,
config: pref
})
.then(() => {
fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup.exe');
fs.renameSync('../build/TheDesk ' + version + '.exe', '../build/TheDesk.exe');
})
.catch((error) => {
// handle error
})
}

View File

@@ -1,2 +1,4 @@
/*このソフトについてを押した時に読み込まれます*/ /*このソフトについてを押した時に読み込まれます*/
body{font-family:Open Sans;} body {
font-family: Open Sans;
}

View File

@@ -5,9 +5,15 @@
/* FONT PATH /* FONT PATH
* -------------------------- */ * -------------------------- */
@font-face { @font-face {
font-family: 'FontAwesome'; font-family: "FontAwesome";
src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); src: url("../fonts/fontawesome-webfont.eot?v=4.7.0");
src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0")
format("embedded-opentype"),
url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),
url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),
url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),
url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular")
format("svg");
font-weight: normal; font-weight: normal;
font-style: normal; font-style: normal;
} }
@@ -60,9 +66,9 @@
left: -1.85714286em; left: -1.85714286em;
} }
.fa-border { .fa-border {
padding: .2em .25em .15em; padding: 0.2em 0.25em 0.15em;
border: solid 0.08em #eeeeee; border: solid 0.08em #eeeeee;
border-radius: .1em; border-radius: 0.1em;
} }
.fa-pull-left { .fa-pull-left {
float: left; float: left;
@@ -71,10 +77,10 @@
float: right; float: right;
} }
.fa.fa-pull-left { .fa.fa-pull-left {
margin-right: .3em; margin-right: 0.3em;
} }
.fa.fa-pull-right { .fa.fa-pull-right {
margin-left: .3em; margin-left: 0.3em;
} }
/* Deprecated as of 4.4.0 */ /* Deprecated as of 4.4.0 */
.pull-right { .pull-right {
@@ -84,10 +90,10 @@
float: left; float: left;
} }
.fa.pull-left { .fa.pull-left {
margin-right: .3em; margin-right: 0.3em;
} }
.fa.pull-right { .fa.pull-right {
margin-left: .3em; margin-left: 0.3em;
} }
.fa-spin { .fa-spin {
-webkit-animation: fa-spin 2s infinite linear; -webkit-animation: fa-spin 2s infinite linear;

View File

@@ -1,5 +1,6 @@
/*共通CSS*/ /*共通CSS*/
html,body{ html,
body {
/*transform: translate3d(0,0,0);*/ /*transform: translate3d(0,0,0);*/
overflow: hidden; overflow: hidden;
user-select: none; user-select: none;
@@ -30,6 +31,8 @@ option {
} }
#mainView { #mainView {
padding: 10px; padding: 10px;
overflow: scroll;
height: auto;
} }
#message { #message {
display: none; display: none;
@@ -40,14 +43,17 @@ option {
color: white; color: white;
z-index: 9999; z-index: 9999;
} }
#imagemodal, #videomodal { #imagemodal,
#videomodal {
display: none; display: none;
max-width: 100vw; max-width: 100vw;
max-height: 100vh; max-height: 100vh;
position: fixed; position: fixed;
z-index: 9; z-index: 9;
top: 0 !important;
} }
#videomodal, #tootmodal { #videomodal,
#tootmodal {
background-color: var(--modal); background-color: var(--modal);
} }
#imagemodal .modal-content { #imagemodal .modal-content {
@@ -70,7 +76,9 @@ option {
min-width: 0 !important; min-width: 0 !important;
margin-left: 5px !important; margin-left: 5px !important;
} }
.bbcode-pulse-loadings, .bbcode-pulse-loading, .fa-pulse { .bbcode-pulse-loadings,
.bbcode-pulse-loading,
.fa-pulse {
display: inline-block; display: inline-block;
animation-duration: 3s; animation-duration: 3s;
animation-fill-mode: both; animation-fill-mode: both;
@@ -78,10 +86,13 @@ option {
animation-name: pulse; animation-name: pulse;
} }
@keyframes pulse { @keyframes pulse {
from, 50%, to { from,
50%,
to {
opacity: 1; opacity: 1;
} }
25%, 75% { 25%,
75% {
opacity: 0; opacity: 0;
} }
} }
@@ -117,7 +128,8 @@ option {
animation-iteration-count: infinite; animation-iteration-count: infinite;
animation-name: shake; animation-name: shake;
} }
code:before, .pre:before { code:before,
.pre:before {
content: "Code"; content: "Code";
font-size: 1.8rem; font-size: 1.8rem;
line-height: 1em; line-height: 1em;
@@ -127,7 +139,8 @@ code:before, .pre:before {
right: 0; right: 0;
top: 0; top: 0;
} }
code, pre { code,
pre {
color: white; color: white;
display: block; display: block;
border-left: 5px solid; border-left: 5px solid;
@@ -143,10 +156,12 @@ code, pre {
border-bottom-right-radius: 10px; border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px; border-bottom-left-radius: 10px;
} }
blockquote, .quote p { blockquote,
.quote p {
margin: 0; margin: 0;
} }
blockquote, .quote { blockquote,
.quote {
color: black; color: black;
background-color: #ddd; background-color: #ddd;
padding: 1em 1em 1em; padding: 1em 1em 1em;
@@ -155,7 +170,8 @@ blockquote, .quote {
border-bottom-right-radius: 10px; border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px; border-bottom-left-radius: 10px;
} }
blockquote:before, .quote:before { blockquote:before,
.quote:before {
content: "Quote"; content: "Quote";
font-size: 1.8rem; font-size: 1.8rem;
line-height: 1em; line-height: 1em;
@@ -220,7 +236,7 @@ blockquote:before, .quote:before {
font-size: 2rem; font-size: 2rem;
} }
.radio { .radio {
font-family:'Baloo Bhai' font-family: "Baloo Bhai";
} }
#pip { #pip {
z-index: 504; z-index: 504;
@@ -250,7 +266,7 @@ blockquote:before, .quote:before {
background-color: var(--modal); background-color: var(--modal);
} }
#releasenote li { #releasenote li {
list-style-type: disc list-style-type: disc;
} }
@media only screen and (min-width: 993px) { @media only screen and (min-width: 993px) {
#toast-container { #toast-container {
@@ -284,7 +300,8 @@ blockquote:before, .quote:before {
opacity: 0; opacity: 0;
} }
} }
.collapsible-header,.tabs{ .collapsible-header,
.tabs {
background-color: var(--subcolor); background-color: var(--subcolor);
} }
.modal-footer { .modal-footer {
@@ -351,7 +368,6 @@ blockquote:before, .quote:before {
#tltype { #tltype {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
#tltype .type { #tltype .type {
display: flex; display: flex;
@@ -375,7 +391,6 @@ blockquote:before, .quote:before {
position: relative; position: relative;
color: var(--beforehover); color: var(--beforehover);
left: -15px; left: -15px;
} }
.drag-bar { .drag-bar {
cursor: move; cursor: move;
@@ -389,6 +404,48 @@ blockquote:before, .quote:before {
font-size: 16px; font-size: 16px;
padding: 4px; padding: 4px;
} }
#something-wrong {
flex-direction: column;
width: 100%;
height: 100%;
position: absolute;
display: flex;
justify-content: center;
align-items: center;
}
#support-btm {
position: fixed;
bottom: -300px;
width: 100vw;
background-color: var(--box);
z-index: 9999;
padding: 10px;
display: grid;
grid-template-columns: 3fr 1fr 1fr;
grid-template-rows: 1fr 36px;
grid-template-areas: "note middle right" "note close close";
}
#support-btm-en,
#support-btm-ja {
grid-area: note;
}
#support-btm-middle {
grid-area: middle;
}
#support-btm-right {
grid-area: right;
}
#support-btm-close {
grid-area: close;
}
.select-wrapper .dropdown-content {
width: 250px !important;
}
input, textarea {
color: var(--color);
font-size: 1rem !important;
font-family: inherit;
}
/*スクロールバー*/ /*スクロールバー*/
::-webkit-scrollbar { ::-webkit-scrollbar {

2876
app/css/materialize.css vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -12,6 +12,10 @@
padding: 5px; padding: 5px;
border-radius: 5px; border-radius: 5px;
} }
textarea{
min-height: 100px !important;
font-family: inherit;
}
.cancel { .cancel {
font-size: 0.5rem; font-size: 0.5rem;
@@ -20,7 +24,6 @@
position: absolute; position: absolute;
right: 2px; right: 2px;
top: 4px; top: 4px;
} }
.more-show { .more-show {
display: none; display: none;
@@ -44,7 +47,9 @@
#sch-box input { #sch-box input {
width: auto; width: auto;
} }
.picker__close, .picker__today, .picker__clear { .picker__close,
.picker__today,
.picker__clear {
color: #26a69a !important; color: #26a69a !important;
} }
.cw { .cw {
@@ -54,7 +59,6 @@
filter: blur(50px); filter: blur(50px);
} }
#emoji { #emoji {
} }
#suggest { #suggest {
max-height: 300px; max-height: 300px;
@@ -78,7 +82,7 @@
max-height: 100px; max-height: 100px;
} }
#default-emoji a { #default-emoji a {
color:white; color: var(--color);
margin-right: 2px; margin-right: 2px;
} }
.character-counter { .character-counter {
@@ -93,10 +97,14 @@
display: flex; display: flex;
} }
#toot-post-btn { #toot-post-btn {
width:calc(100% - 10px); padding:0; margin-top:10px; width: calc(100% - 10px);
padding: 0;
margin-top: 10px;
} }
#toot-sec-btn { #toot-sec-btn {
width:30px; padding:0; margin-top:10px; width: 30px;
padding: 0;
margin-top: 10px;
} }
#left-side { #left-side {
float: left; float: left;
@@ -109,7 +117,6 @@
padding: 5px; padding: 5px;
} }
#poll { #poll {
} }
.poll-provider { .poll-provider {
position: absolute; position: absolute;

View File

@@ -1,4 +1,3 @@
.drag-content { .drag-content {
text-overflow: ellipsis; text-overflow: ellipsis;
cursor: move; cursor: move;
@@ -10,7 +9,7 @@
padding: 3px; padding: 3px;
display: grid; display: grid;
grid-template-columns: 43px 1fr 60px; grid-template-columns: 43px 1fr 60px;
grid-template-areas: 'sorticon sorttitle sorttitle' 'sorticon sortacct sortaction'; grid-template-areas: "sorticon sorttitle sorttitle" "sorticon sortacct sortaction";
} }
.sorticon { .sorticon {
grid-area: sorticon; grid-area: sorticon;

View File

@@ -1,14 +1,13 @@
/*TL CSS(ただしBBCode pulse:master.css/spin:font-awesome*/ /*TL CSS(ただしBBCode pulse:master.css/spin:font-awesome*/
#main { #main {
display:flex;
width: 100vw; width: 100vw;
height: calc(100vh - 40px);
} }
#timeline-container { #timeline-container {
overflow-x: scroll; overflow-x: scroll;
overflow-y: hidden; overflow-y: hidden;
display: flex; display: flex;
height: calc(100vh - 40px); height: 100%;
flex-grow:4;
} }
#bottom { #bottom {
position: absolute; position: absolute;
@@ -87,8 +86,13 @@
font-size: 15px; font-size: 15px;
} }
@media screen and (max-width: 890px) { @media screen and (max-width: 890px) {
.btnsgroup .grouptitle{ display: none; } .btnsgroup .grouptitle {
#tips,#tips-menu{ display: none; } display: none;
}
#tips,
#tips-menu {
display: none;
}
} }
iframe { iframe {
max-width: 100%; max-width: 100%;
@@ -112,35 +116,75 @@ iframe {
border-top: none; border-top: none;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin-bottom: -10px;
}
.img_FTL {
display: none;
}
.bbcode_FTL {
display: none;
}
.marquee {
width: 100%;
padding: .5em 0;
overflow: hidden;
margin-bottom: 0;
position: relative;
}
.marquee .bbcode-marq-lateral {
margin: 0;
padding-left: 100%;
display: inline-block;
white-space: nowrap;
animation-name: marquee;
animation-timing-function: linear;
animation-duration: 10s;
animation-iteration-count: infinite;
}
@keyframes marquee {
0% {
-webkit-transform: translate(0);
transform: translate(0);
}
99%, 100% {
-webkit-transform: translate(-100%);
transform: translate(-100%);
}
} }
.boxIn { .boxIn {
display: flex;
flex-direction: column;
height: 100%; height: 100%;
border: thin solid gray; border: thin solid gray;
overflow: hidden; overflow: hidden;
} }
.box .pin,#his-data .pin{ .box .pin,
#his-data .pin {
display: none; display: none;
} }
.user { .user {
cursor: text; cursor: text;
font-size: 1.1rem; font-size: 1.1rem;
} }
.emoji,.emoji-img{ .emoji,
.emoji-img {
width: 15px; width: 15px;
} }
.area-toot .emoji,.area-toot .emoji-img{ .area-toot .emoji,
.area-toot .emoji-img {
width: 20px; width: 20px;
vertical-align: middle; vertical-align: middle;
margin: -3px 0 0; margin: -1px 0;
} }
.faicon_FTL { .faicon_FTL {
display: none; display: none;
} }
.tl-box { .tl-box {
position: relative; position: relative;
height:calc(100% - 40px); flex: 1;
overflow-y: scroll; overflow-y: scroll;
overflow-x:hidden } overflow-x: hidden;
}
.additional { .additional {
overflow-x: scroll; overflow-x: scroll;
width: 100%; width: 100%;
@@ -163,9 +207,14 @@ iframe {
width: 100%; width: 100%;
display: grid; display: grid;
grid-template-columns: 43px 2fr 1fr; grid-template-columns: 43px 2fr 1fr;
grid-template-areas: 'notice notice notice' 'icon display_name display_name' 'icon toot toot' 'vis additional additional' 'actions actions side'; grid-template-areas: "notice notice notice" "icon display_name display_name" "icon toot toot" "vis additional additional" "actions actions side";
} }
.cvo h1,.cvo h2,.cvo h3,.cvo h4,.cvo h5,.cvo h6{ .cvo h1,
.cvo h2,
.cvo h3,
.cvo h4,
.cvo h5,
.cvo h6 {
margin: 0; margin: 0;
} }
@@ -192,7 +241,7 @@ text-overflow: ellipsis;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
width: 100%; width: 100%;
flex-wrap:nowrap flex-wrap: nowrap;
} }
.flex-name { .flex-name {
max-width: calc(100% - 60px); max-width: calc(100% - 60px);
@@ -217,6 +266,9 @@ grid-area: toot;
cursor: text; cursor: text;
user-select: auto; user-select: auto;
grid-area: additional; grid-area: additional;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
} }
.area-actions { .area-actions {
@@ -239,6 +291,29 @@ grid-area: toot;
margin: 2px; margin: 2px;
grid-area: side; grid-area: side;
} }
.quote-renote {
display: grid;
grid-template-columns: 43px 2fr 1fr;
grid-template-areas: "ricon ruser" "ricon rtext";
border: 1px solid;
margin-top: 3px;
padding: 1px;
border-radius: 3px;
}
.renote-icon {
grid-area: ricon;
}
.renote-icon img {
width: 43px;
}
.renote-user {
grid-area: ruser;
}
.renote-text {
grid-area: rtext;
}
.btn-flat { .btn-flat {
color: var(--color); color: var(--color);
} }
@@ -275,7 +350,6 @@ grid-area: toot;
.toot-img { .toot-img {
object-fit: cover; object-fit: cover;
width: 100%; width: 100%;
margin-right:1px;
} }
.toot img:not(.emoji-img) { .toot img:not(.emoji-img) {
max-width: 100%; max-width: 100%;
@@ -311,6 +385,7 @@ grid-area: toot;
p { p {
margin: 0; margin: 0;
margin-bottom: 0px; margin-bottom: 0px;
line-height: 20px;
} }
p:not(:last-child) { p:not(:last-child) {
margin-bottom: 10px; margin-bottom: 10px;
@@ -327,6 +402,7 @@ p:not(:last-child){
.notice-box { .notice-box {
top: 0; top: 0;
background-color: var(--notfbox); background-color: var(--notfbox);
filter: brightness(110%);
position: relative; position: relative;
margin-right: 10px; margin-right: 10px;
width: 100%; width: 100%;
@@ -336,7 +412,7 @@ p:not(:last-child){
display: grid; display: grid;
grid-template-columns: 40px 48px 1fr 24px; grid-template-columns: 40px 48px 1fr 24px;
grid-template-rows: 30px 30px; grid-template-rows: 30px 30px;
grid-template-areas: 'notice notice_name notice_name a2' 'notice a1 sta a3' 'notf-box notf-box notf-box notf-box'; grid-template-areas: "notice notice_name notice_name a2" "notice a1 sta a3" "notf-box notf-box notf-box notf-box";
} }
.emp { .emp {
font-weight: bold; font-weight: bold;
@@ -422,7 +498,9 @@ p:not(:last-child){
border: thin solid gray; border: thin solid gray;
border-bottom: 2px solid white; border-bottom: 2px solid white;
grid-area: notf-box; grid-area: notf-box;
box-shadow:0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.3), 0px -10px 10px 0px rgba(0,0,0,0.3) inset; box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14),
0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.3),
0px -10px 10px 0px rgba(0, 0, 0, 0.3) inset;
} }
#src-contents { #src-contents {
min-height: 100px; min-height: 100px;
@@ -445,7 +523,7 @@ p:not(:last-child){
content: "..."; content: "...";
} }
.toot a:not(.mention) span:last-of-type { .toot a:not(.mention) span:last-of-type {
display:none; /*display: none;*/
} }
.tl-box .via-hide { .tl-box .via-hide {
display: none; display: none;
@@ -459,19 +537,19 @@ p:not(:last-child){
} }
.fa-2x > .emoji-img { .fa-2x > .emoji-img {
width: 36px !important; width: 36px !important;
height: 36px!important height: 36px !important;
} }
.fa-3x > .emoji-img { .fa-3x > .emoji-img {
width: 54px !important; width: 54px !important;
height: 54px!important height: 54px !important;
} }
.fa-4x > .emoji-img { .fa-4x > .emoji-img {
width: 72px !important; width: 72px !important;
height: 72px!important height: 72px !important;
} }
.fa-5x > .emoji-img { .fa-5x > .emoji-img {
width: 90px !important; width: 90px !important;
height: 90px!important height: 90px !important;
} }
#lists-user { #lists-user {
overflow-y: scroll; overflow-y: scroll;
@@ -494,7 +572,45 @@ p:not(:last-child){
.votebtn:hover { .votebtn:hover {
background-color: var(--color); background-color: var(--color);
} }
.jump {
display: inline-block;
animation: jump 0.75s linear infinite;
}
.img-link {
position: relative;
display: block;
margin-right: 1px;
float: left;
}
.nsfw-media {
position: absolute;
top: 0;
right: 0;
background-color: black;
color: white;
}
.img-link img {
display: block;
width: 100%;
height: 100%;
}
@keyframes jump {
0% {
transform: translateY(0);
}
25% {
transform: translateY(-16px);
}
50% {
transform: translateY(0);
}
75% {
transform: translateY(-8px);
}
100% {
transform: translateY(0);
}
}
@keyframes fadeInDown { @keyframes fadeInDown {
from { from {
opacity: 0; opacity: 0;
@@ -530,4 +646,3 @@ p:not(:last-child){
animation-duration: 0.1s; animation-duration: 0.1s;
animation-name: fadeInDown; animation-name: fadeInDown;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
/*アイコンをクリックした時とかにでてくるユーザーデータ*/ /*アイコンをクリックした時とかにでてくるユーザーデータ*/
#his-data { #his-data {
background-repeat: no-repeat; background-repeat: no-repeat;
background-image: url('../../loading.svg'); background-image: url("../../loading.svg");
overflow-y: hidden; overflow-y: hidden;
} }
#his-name { #his-name {
@@ -42,12 +42,18 @@
height: 1.5rem; height: 1.5rem;
} }
.his-field-title { .his-field-title {
height:1.5rem; padding:0; background-color:#757575; text-align:center; height: 1.5rem;
padding: 0;
background-color: #757575;
text-align: center;
padding: 5px; padding: 5px;
margin-bottom: 1px; margin-bottom: 1px;
width: 30%;
} }
.his-field-content { .his-field-content {
height:1.5rem; padding:0; padding-left:5px; height: 1.5rem;
padding: 0;
padding-left: 5px;
} }
#his-data a span.ellipsis:after { #his-data a span.ellipsis:after {
content: "..."; content: "...";
@@ -66,7 +72,7 @@
.tab-content { .tab-content {
overflow-y: scroll; overflow-y: scroll;
overflow-x: hidden; overflow-x: hidden;
height: calc(100% - 240px) height: calc(100% - 240px);
} }
.my-data-width { .my-data-width {
width: 10%; width: 10%;
@@ -74,19 +80,29 @@
.active-back { .active-back {
background-color: var(--active); background-color: var(--active);
} }
#his-name .emojione,#his-name .emoji-img{ #his-name .emojione,
#his-name .emoji-img {
width: 20px; width: 20px;
} }
#his-plus-action .btn { #his-plus-action .btn {
width:170px width: 170px;
} }
.custom-tabs{ .tabs {
display: flex; display: flex;
} }
.custom-tabs .custom-tab a{ .tabs .tab a {
padding: 8px 12px; padding: 8px 12px;
} }
#his-des .mention { #his-des .mention {
color: #039be5; color: #039be5;
cursor: pointer; cursor: pointer;
} }
#his-float-blocked {
display: flex;
justify-content: center;
align-items: center;
font-size: 2rem;
width: 90%;
height: 100%;
position: absolute;
}

View File

@@ -0,0 +1,4 @@
directories:
output: dist
buildResources: build
electronVersion: 1.4.13

BIN
app/img/thinkingdesk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

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

@@ -1,6 +1,4 @@
//このソフトについて //このソフトについて
function about() { function about() {
var electron = require("electron"); postMessage(["sendSinmpleIpc", "about"], "*")
var ipc = electron.ipcRenderer;
ipc.send('about', 'go');
} }

119
app/js/common/blurhash.js Normal file
View File

@@ -0,0 +1,119 @@
var digitCharacters = [
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d",
"e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u", "v", "w", "x",
"y", "z", "#", "$", "%", "*", "+", ",", "-", ".",
":", ";", "=", "?", "@", "[", "]", "^", "_", "{",
"|", "}", "~",
];
function decode83(str) {
var value = 0;
for (var i = 0; i < str.length; i++) {
var c = str[i];
var digit = digitCharacters.indexOf(c);
value = value * 83 + digit;
}
return value;
}
function linearTosRGB(value) {
var v = Math.max(0, Math.min(1, value));
if (v <= 0.0031308) {
return Math.round(v * 12.92 * 255 + 0.5);
}
else {
return Math.round((1.055 * Math.pow(v, 1 / 2.4) - 0.055) * 255 + 0.5);
}
}
function sRGBToLinear(value) {
var v = value / 255;
if (v <= 0.04045) {
return v / 12.92;
}
else {
return Math.pow((v + 0.055) / 1.055, 2.4);
}
}
function decodeDC(value) {
var intR = value >> 16;
var intG = (value >> 8) & 255;
var intB = value & 255;
return [sRGBToLinear(intR), sRGBToLinear(intG), sRGBToLinear(intB)];
};
function sign(n) { return (n < 0 ? -1 : 1); }
function signPow(val, exp) { return sign(val) * Math.pow(Math.abs(val), exp); }
function decodeDC2(value, maximumValue) {
var quantR = Math.floor(value / (19 * 19));
var quantG = Math.floor(value / 19) % 19;
var quantB = value % 19;
var rgb = [
signPow((quantR - 9) / 9, 2.0) * maximumValue,
signPow((quantG - 9) / 9, 2.0) * maximumValue,
signPow((quantB - 9) / 9, 2.0) * maximumValue,
];
return rgb;
};
function decodeblur(blurhash, width, height, punch) {
punch = punch | 1;
if (blurhash.length < 6) {
console.error('too short blurhash');
return null;
}
var sizeFlag = decode83(blurhash[0]);
var numY = Math.floor(sizeFlag / 9) + 1;
var numX = (sizeFlag % 9) + 1;
var quantisedMaximumValue = decode83(blurhash[1]);
var maximumValue = (quantisedMaximumValue + 1) / 166;
if (blurhash.length !== 4 + 2 * numX * numY) {
console.error('blurhash length mismatch', blurhash.length, 4 + 2 * numX * numY);
return null;
}
var colors = new Array(numX * numY);
for (var i = 0; i < colors.length; i++) {
if (i === 0) {
var value = decode83(blurhash.substring(2, 6));
colors[i] = decodeDC(value);
}
else {
var value = decode83(blurhash.substring(4 + i * 2, 6 + i * 2));
colors[i] = decodeDC2(value, maximumValue * punch);
}
}
var bytesPerRow = width * 4;
var pixels = new Uint8ClampedArray(bytesPerRow * height);
for (var y = 0; y < height; y++) {
for (var x = 0; x < width; x++) {
var r = 0;
var g = 0;
var b = 0;
for (var j = 0; j < numY; j++) {
for (var i = 0; i < numX; i++) {
var basis = Math.cos(Math.PI * x * i / width) * Math.cos(Math.PI * y * j / height);
var color = colors[i + j * numX];
r += color[0] * basis;
g += color[1] * basis;
b += color[2] * basis;
}
}
var intR = linearTosRGB(r);
var intG = linearTosRGB(g);
var intB = linearTosRGB(b);
pixels[4 * x + 0 + y * bytesPerRow] = intR;
pixels[4 * x + 1 + y * bytesPerRow] = intG;
pixels[4 * x + 2 + y * bytesPerRow] = intB;
pixels[4 * x + 3 + y * bytesPerRow] = 255; // alpha
}
}
return pixels;
}
function parseBlur(blur) {
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var pixels = decodeblur(blur, 32, 32)
const imageData = new ImageData(pixels, 32, 32);
ctx.putImageData(imageData, 0, 0);
return canvas.toDataURL()
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,17 @@
//モーダル・ドロップダウンの各種設定 //モーダル・ドロップダウンの各種設定
$(document).ready(function () { $(document).ready(function () {
// the "href" attribute of the modal trigger must specify the modal ID that wants to be triggered // the "href" attribute of the modal trigger must specify the modal ID that wants to be triggered
$('.modal').modal(); $('.modal').modal({
$('.dropdown-button').dropdown({ inDuration: 300,
outDuration: 225,
constrainWidth: false, // Does not change width of dropdown to that of the activator
hover: false, // Activate on hover
gutter: 0, // Spacing from edge
belowOrigin: false, // Displays dropdown below the button
alignment: 'left', // Displays dropdown with edge aligned to the left of button
stopPropagation: false
});
$('.dropdown-trigger').dropdown({
inDuration: 300, inDuration: 300,
outDuration: 225, outDuration: 225,
constrainWidth: false, // Does not change width of dropdown to that of the activator constrainWidth: false, // Does not change width of dropdown to that of the activator
@@ -13,5 +22,5 @@ $(document).ready(function(){
stopPropagation: false // Stops event propagation stopPropagation: false // Stops event propagation
} }
); );
$('.collapsible').collapsible();
}); });

View File

@@ -1,33 +1,96 @@
/* var sha256 = function sha256(ascii) {
A JavaScript implementation of the SHA family of hashes, as function rightRotate(value, amount) {
defined in FIPS PUB 180-4 and FIPS PUB 202, as well as the corresponding return (value >>> amount) | (value << (32 - amount));
HMAC implementation as defined in FIPS PUB 198a };
Copyright 2008-2018 Brian Turek, 1998-2009 Paul Johnston & Contributors var mathPow = Math.pow;
Distributed under the BSD License var maxWord = mathPow(2, 32);
See http://caligatio.github.com/jsSHA/ for more information var lengthProperty = 'length'
*/ var i, j; // Used as a counter across the whole file
'use strict';(function(I){function w(c,a,d){var l=0,b=[],g=0,f,n,k,e,h,q,y,p,m=!1,t=[],r=[],u,z=!1;d=d||{};f=d.encoding||"UTF8";u=d.numRounds||1;if(u!==parseInt(u,10)||1>u)throw Error("numRounds must a integer >= 1");if(0===c.lastIndexOf("SHA-",0))if(q=function(b,a){return A(b,a,c)},y=function(b,a,l,f){var g,e;if("SHA-224"===c||"SHA-256"===c)g=(a+65>>>9<<4)+15,e=16;else throw Error("Unexpected error in SHA-2 implementation");for(;b.length<=g;)b.push(0);b[a>>>5]|=128<<24-a%32;a=a+l;b[g]=a&4294967295; var result = ''
b[g-1]=a/4294967296|0;l=b.length;for(a=0;a<l;a+=e)f=A(b.slice(a,a+e),f,c);if("SHA-224"===c)b=[f[0],f[1],f[2],f[3],f[4],f[5],f[6]];else if("SHA-256"===c)b=f;else throw Error("Unexpected error in SHA-2 implementation");return b},p=function(b){return b.slice()},"SHA-224"===c)h=512,e=224;else if("SHA-256"===c)h=512,e=256;else throw Error("Chosen SHA variant is not supported");else throw Error("Chosen SHA variant is not supported");k=B(a,f);n=x(c);this.setHMACKey=function(b,a,g){var e;if(!0===m)throw Error("HMAC key already set");
if(!0===z)throw Error("Cannot set HMAC key after calling update");f=(g||{}).encoding||"UTF8";a=B(a,f)(b);b=a.binLen;a=a.value;e=h>>>3;g=e/4-1;if(e<b/8){for(a=y(a,b,0,x(c));a.length<=g;)a.push(0);a[g]&=4294967040}else if(e>b/8){for(;a.length<=g;)a.push(0);a[g]&=4294967040}for(b=0;b<=g;b+=1)t[b]=a[b]^909522486,r[b]=a[b]^1549556828;n=q(t,n);l=h;m=!0};this.update=function(a){var c,f,e,d=0,p=h>>>5;c=k(a,b,g);a=c.binLen;f=c.value;c=a>>>5;for(e=0;e<c;e+=p)d+h<=a&&(n=q(f.slice(e,e+p),n),d+=h);l+=d;b=f.slice(d>>> var words = [];
5);g=a%h;z=!0};this.getHash=function(a,f){var d,h,k,q;if(!0===m)throw Error("Cannot call getHash after setting HMAC key");k=C(f);switch(a){case "HEX":d=function(a){return D(a,e,k)};break;case "B64":d=function(a){return E(a,e,k)};break;case "BYTES":d=function(a){return F(a,e)};break;case "ARRAYBUFFER":try{h=new ArrayBuffer(0)}catch(v){throw Error("ARRAYBUFFER not supported by this environment");}d=function(a){return G(a,e)};break;default:throw Error("format must be HEX, B64, BYTES, or ARRAYBUFFER"); var asciiBitLength = ascii[lengthProperty] * 8;
}q=y(b.slice(),g,l,p(n));for(h=1;h<u;h+=1)q=y(q,e,0,x(c));return d(q)};this.getHMAC=function(a,f){var d,k,t,u;if(!1===m)throw Error("Cannot call getHMAC without first setting HMAC key");t=C(f);switch(a){case "HEX":d=function(a){return D(a,e,t)};break;case "B64":d=function(a){return E(a,e,t)};break;case "BYTES":d=function(a){return F(a,e)};break;case "ARRAYBUFFER":try{d=new ArrayBuffer(0)}catch(v){throw Error("ARRAYBUFFER not supported by this environment");}d=function(a){return G(a,e)};break;default:throw Error("outputFormat must be HEX, B64, BYTES, or ARRAYBUFFER");
}k=y(b.slice(),g,l,p(n));u=q(r,x(c));u=y(k,e,h,u);return d(u)}}function m(){}function D(c,a,d){var l="";a/=8;var b,g;for(b=0;b<a;b+=1)g=c[b>>>2]>>>8*(3+b%4*-1),l+="0123456789abcdef".charAt(g>>>4&15)+"0123456789abcdef".charAt(g&15);return d.outputUpper?l.toUpperCase():l}function E(c,a,d){var l="",b=a/8,g,f,n;for(g=0;g<b;g+=3)for(f=g+1<b?c[g+1>>>2]:0,n=g+2<b?c[g+2>>>2]:0,n=(c[g>>>2]>>>8*(3+g%4*-1)&255)<<16|(f>>>8*(3+(g+1)%4*-1)&255)<<8|n>>>8*(3+(g+2)%4*-1)&255,f=0;4>f;f+=1)8*g+6*f<=a?l+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(n>>> //* caching results is optional - remove/add slash from front of this line to toggle
6*(3-f)&63):l+=d.b64Pad;return l}function F(c,a){var d="",l=a/8,b,g;for(b=0;b<l;b+=1)g=c[b>>>2]>>>8*(3+b%4*-1)&255,d+=String.fromCharCode(g);return d}function G(c,a){var d=a/8,l,b=new ArrayBuffer(d),g;g=new Uint8Array(b);for(l=0;l<d;l+=1)g[l]=c[l>>>2]>>>8*(3+l%4*-1)&255;return b}function C(c){var a={outputUpper:!1,b64Pad:"=",shakeLen:-1};c=c||{};a.outputUpper=c.outputUpper||!1;!0===c.hasOwnProperty("b64Pad")&&(a.b64Pad=c.b64Pad);if("boolean"!==typeof a.outputUpper)throw Error("Invalid outputUpper formatting option"); // Initial hash value: first 32 bits of the fractional parts of the square roots of the first 8 primes
if("string"!==typeof a.b64Pad)throw Error("Invalid b64Pad formatting option");return a}function B(c,a){var d;switch(a){case "UTF8":case "UTF16BE":case "UTF16LE":break;default:throw Error("encoding must be UTF8, UTF16BE, or UTF16LE");}switch(c){case "HEX":d=function(a,b,c){var f=a.length,d,k,e,h,q;if(0!==f%2)throw Error("String of HEX type must be in byte increments");b=b||[0];c=c||0;q=c>>>3;for(d=0;d<f;d+=2){k=parseInt(a.substr(d,2),16);if(isNaN(k))throw Error("String of HEX type contains invalid characters"); // (we actually calculate the first 64, but extra values are just ignored)
h=(d>>>1)+q;for(e=h>>>2;b.length<=e;)b.push(0);b[e]|=k<<8*(3+h%4*-1)}return{value:b,binLen:4*f+c}};break;case "TEXT":d=function(c,b,d){var f,n,k=0,e,h,q,m,p,r;b=b||[0];d=d||0;q=d>>>3;if("UTF8"===a)for(r=3,e=0;e<c.length;e+=1)for(f=c.charCodeAt(e),n=[],128>f?n.push(f):2048>f?(n.push(192|f>>>6),n.push(128|f&63)):55296>f||57344<=f?n.push(224|f>>>12,128|f>>>6&63,128|f&63):(e+=1,f=65536+((f&1023)<<10|c.charCodeAt(e)&1023),n.push(240|f>>>18,128|f>>>12&63,128|f>>>6&63,128|f&63)),h=0;h<n.length;h+=1){p=k+ var hash = sha256.h = sha256.h || [];
q;for(m=p>>>2;b.length<=m;)b.push(0);b[m]|=n[h]<<8*(r+p%4*-1);k+=1}else if("UTF16BE"===a||"UTF16LE"===a)for(r=2,n="UTF16LE"===a&&!0||"UTF16LE"!==a&&!1,e=0;e<c.length;e+=1){f=c.charCodeAt(e);!0===n&&(h=f&255,f=h<<8|f>>>8);p=k+q;for(m=p>>>2;b.length<=m;)b.push(0);b[m]|=f<<8*(r+p%4*-1);k+=2}return{value:b,binLen:8*k+d}};break;case "B64":d=function(a,b,c){var f=0,d,k,e,h,q,m,p;if(-1===a.search(/^[a-zA-Z0-9=+\/]+$/))throw Error("Invalid character in base-64 string");k=a.indexOf("=");a=a.replace(/\=/g, // Round constants: first 32 bits of the fractional parts of the cube roots of the first 64 primes
"");if(-1!==k&&k<a.length)throw Error("Invalid '=' found in base-64 string");b=b||[0];c=c||0;m=c>>>3;for(k=0;k<a.length;k+=4){q=a.substr(k,4);for(e=h=0;e<q.length;e+=1)d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(q[e]),h|=d<<18-6*e;for(e=0;e<q.length-1;e+=1){p=f+m;for(d=p>>>2;b.length<=d;)b.push(0);b[d]|=(h>>>16-8*e&255)<<8*(3+p%4*-1);f+=1}}return{value:b,binLen:8*f+c}};break;case "BYTES":d=function(a,b,c){var d,n,k,e,h;b=b||[0];c=c||0;k=c>>>3;for(n=0;n<a.length;n+= var k = sha256.k = sha256.k || [];
1)d=a.charCodeAt(n),h=n+k,e=h>>>2,b.length<=e&&b.push(0),b[e]|=d<<8*(3+h%4*-1);return{value:b,binLen:8*a.length+c}};break;case "ARRAYBUFFER":try{d=new ArrayBuffer(0)}catch(l){throw Error("ARRAYBUFFER not supported by this environment");}d=function(a,b,c){var d,n,k,e,h;b=b||[0];c=c||0;n=c>>>3;h=new Uint8Array(a);for(d=0;d<a.byteLength;d+=1)e=d+n,k=e>>>2,b.length<=k&&b.push(0),b[k]|=h[d]<<8*(3+e%4*-1);return{value:b,binLen:8*a.byteLength+c}};break;default:throw Error("format must be HEX, TEXT, B64, BYTES, or ARRAYBUFFER"); var primeCounter = k[lengthProperty];
}return d}function r(c,a){return c>>>a|c<<32-a}function J(c,a,d){return c&a^~c&d}function K(c,a,d){return c&a^c&d^a&d}function L(c){return r(c,2)^r(c,13)^r(c,22)}function M(c){return r(c,6)^r(c,11)^r(c,25)}function N(c){return r(c,7)^r(c,18)^c>>>3}function O(c){return r(c,17)^r(c,19)^c>>>10}function P(c,a){var d=(c&65535)+(a&65535);return((c>>>16)+(a>>>16)+(d>>>16)&65535)<<16|d&65535}function Q(c,a,d,l){var b=(c&65535)+(a&65535)+(d&65535)+(l&65535);return((c>>>16)+(a>>>16)+(d>>>16)+(l>>>16)+(b>>> /*/
16)&65535)<<16|b&65535}function R(c,a,d,l,b){var g=(c&65535)+(a&65535)+(d&65535)+(l&65535)+(b&65535);return((c>>>16)+(a>>>16)+(d>>>16)+(l>>>16)+(b>>>16)+(g>>>16)&65535)<<16|g&65535}function x(c){var a=[],d;if(0===c.lastIndexOf("SHA-",0))switch(a=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428],d=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],c){case "SHA-224":break;case "SHA-256":a=d;break;case "SHA-384":a=[new m,new m, var hash = [], k = [];
new m,new m,new m,new m,new m,new m];break;case "SHA-512":a=[new m,new m,new m,new m,new m,new m,new m,new m];break;default:throw Error("Unknown SHA variant");}else throw Error("No SHA variants supported");return a}function A(c,a,d){var l,b,g,f,n,k,e,h,m,r,p,w,t,x,u,z,A,B,C,D,E,F,v=[],G;if("SHA-224"===d||"SHA-256"===d)r=64,w=1,F=Number,t=P,x=Q,u=R,z=N,A=O,B=L,C=M,E=K,D=J,G=H;else throw Error("Unexpected error in SHA-2 implementation");d=a[0];l=a[1];b=a[2];g=a[3];f=a[4];n=a[5];k=a[6];e=a[7];for(p= var primeCounter = 0;
0;p<r;p+=1)16>p?(m=p*w,h=c.length<=m?0:c[m],m=c.length<=m+1?0:c[m+1],v[p]=new F(h,m)):v[p]=x(A(v[p-2]),v[p-7],z(v[p-15]),v[p-16]),h=u(e,C(f),D(f,n,k),G[p],v[p]),m=t(B(d),E(d,l,b)),e=k,k=n,n=f,f=t(g,h),g=b,b=l,l=d,d=t(h,m);a[0]=t(d,a[0]);a[1]=t(l,a[1]);a[2]=t(b,a[2]);a[3]=t(g,a[3]);a[4]=t(f,a[4]);a[5]=t(n,a[5]);a[6]=t(k,a[6]);a[7]=t(e,a[7]);return a}var H;H=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206, //*/
2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,
2756734187,3204031479,3329325298];"function"===typeof define&&define.amd?define(function(){return w}):"undefined"!==typeof exports?("undefined"!==typeof module&&module.exports&&(module.exports=w),exports=w):I.jsSHA=w})(this); var isComposite = {};
function sha256(token){ for (var candidate = 2; primeCounter < 64; candidate++) {
var shaObj = new jsSHA("SHA-256", "TEXT"); if (!isComposite[candidate]) {
shaObj.update(token); for (i = 0; i < 313; i += candidate) {
var hash = shaObj.getHash("HEX"); isComposite[i] = candidate;
return hash;
} }
hash[primeCounter] = (mathPow(candidate, .5) * maxWord) | 0;
k[primeCounter++] = (mathPow(candidate, 1 / 3) * maxWord) | 0;
}
}
ascii += '\x80' // Append Ƈ' bit (plus zero padding)
while (ascii[lengthProperty] % 64 - 56) ascii += '\x00' // More zero padding
for (i = 0; i < ascii[lengthProperty]; i++) {
j = ascii.charCodeAt(i);
if (j >> 8) return; // ASCII check: only accept characters in range 0-255
words[i >> 2] |= j << ((3 - i) % 4) * 8;
}
words[words[lengthProperty]] = ((asciiBitLength / maxWord) | 0);
words[words[lengthProperty]] = (asciiBitLength)
// process each chunk
for (j = 0; j < words[lengthProperty];) {
var w = words.slice(j, j += 16); // The message is expanded into 64 words as part of the iteration
var oldHash = hash;
// This is now the undefinedworking hash", often labelled as variables a...g
// (we have to truncate as well, otherwise extra entries at the end accumulate
hash = hash.slice(0, 8);
for (i = 0; i < 64; i++) {
var i2 = i + j;
// Expand the message into 64 words
// Used below if
var w15 = w[i - 15], w2 = w[i - 2];
// Iterate
var a = hash[0], e = hash[4];
var temp1 = hash[7]
+ (rightRotate(e, 6) ^ rightRotate(e, 11) ^ rightRotate(e, 25)) // S1
+ ((e & hash[5]) ^ ((~e) & hash[6])) // ch
+ k[i]
// Expand the message schedule if needed
+ (w[i] = (i < 16) ? w[i] : (
w[i - 16]
+ (rightRotate(w15, 7) ^ rightRotate(w15, 18) ^ (w15 >>> 3)) // s0
+ w[i - 7]
+ (rightRotate(w2, 17) ^ rightRotate(w2, 19) ^ (w2 >>> 10)) // s1
) | 0
);
// This is only used once, so *could* be moved below, but it only saves 4 bytes and makes things unreadble
var temp2 = (rightRotate(a, 2) ^ rightRotate(a, 13) ^ rightRotate(a, 22)) // S0
+ ((a & hash[1]) ^ (a & hash[2]) ^ (hash[1] & hash[2])); // maj
hash = [(temp1 + temp2) | 0].concat(hash); // We don't bother trimming off the extra ones, they're harmless as long as we're truncating when we do the slice()
hash[4] = (hash[4] + temp1) | 0;
}
for (i = 0; i < 8; i++) {
hash[i] = (hash[i] + oldHash[i]) | 0;
}
}
for (i = 0; i < 8; i++) {
for (j = 3; j + 1; j--) {
var b = (hash[i] >> (j * 8)) & 255;
result += ((b < 16) ? 0 : '') + b.toString(16);
}
}
return result;
};

View File

@@ -1,9 +1,12 @@
//バージョンチェッカー //バージョンチェッカー
function verck(ver) { function verck(ver) {
console.log("Welcome") console.log("%c Welcome😊", "color: red;font-size:200%;")
var date = new Date();
var show = false
if (localStorage.getItem("ver") != ver) { if (localStorage.getItem("ver") != ver) {
localStorage.setItem("ver", ver); localStorage.setItem("ver", ver);
console.log("Thank you for your update"); show = true
console.log("%c Thank you for your update🎉", "color: red;font-size:200%;");
$(document).ready(function () { $(document).ready(function () {
$('#releasenote').modal('open'); $('#releasenote').modal('open');
verp = ver.replace('(', ''); verp = ver.replace('(', '');
@@ -13,7 +16,7 @@ function verck(ver) {
verp = verp.replace(']', ''); verp = verp.replace(']', '');
verp = verp.replace(')', ''); verp = verp.replace(')', '');
verp = verp.replace(' ', '_'); verp = verp.replace(' ', '_');
console.log(verp); console.log("%c " + verp, "color: red;font-size:200%;");
if (lang.language == "ja") { if (lang.language == "ja") {
$("#release-" + verp).show(); $("#release-" + verp).show();
} else { } else {
@@ -22,10 +25,29 @@ function verck(ver) {
}); });
} }
var electron = require("electron"); if (!show) {
var remote=electron.remote; console.log(show)
var dialog=remote.dialog; if (date.getMonth() + 1 >= localStorage.getItem("showSupportMe") || !localStorage.getItem("showSupportMe")) {
var platform=remote.process.platform; if (date.getMonth() == 11) {
var nextmonth = 1
} else {
var nextmonth = date.getMonth() + 2
}
if (lang.language != "ja") {
$("#support-btm-ja").addClass("hide");
$("#support-btm-en").removeClass("hide");
}
localStorage.setItem("showSupportMe", nextmonth)
$("#support-btm").removeClass("hide")
$("#support-btm").animate({
'bottom': '0'
}, {
'duration': 300
});
}
}
var platform = localStorage.getItem("platform");
console.log("Your platform:" + platform)
if (platform == "win32") { if (platform == "win32") {
const options = { const options = {
type: 'info', type: 'info',
@@ -34,14 +56,7 @@ function verck(ver) {
buttons: [lang.lang_no, lang.lang_yesno] buttons: [lang.lang_no, lang.lang_yesno]
} }
if (!localStorage.getItem("winstore")) { if (!localStorage.getItem("winstore")) {
postMessage(["dialogStore", options], "*")
dialog.showMessageBox(options, function(arg) {
if(arg==1){
localStorage.setItem("winstore","winstore")
}else{
localStorage.setItem("winstore","localinstall")
}
});
} }
} else if (platform == "linux") { } else if (platform == "linux") {
if (localStorage.getItem("winstore") == "unix") { if (localStorage.getItem("winstore") == "unix") {
@@ -54,13 +69,9 @@ function verck(ver) {
message: lang.lang_version_platform_linux, message: lang.lang_version_platform_linux,
buttons: [lang.lang_no, lang.lang_yesno] buttons: [lang.lang_no, lang.lang_yesno]
} }
dialog.showMessageBox(options, function(arg) { if (!localStorage.getItem("winstore")) {
if(arg==1){ postMessage(["dialogStore", options], "*")
localStorage.setItem("winstore","snapcraft")
}else{
localStorage.setItem("winstore","localinstall")
} }
});
} }
} else if (platform == "darwin") { } else if (platform == "darwin") {
if (localStorage.getItem("winstore") == "unix") { if (localStorage.getItem("winstore") == "unix") {
@@ -73,13 +84,9 @@ function verck(ver) {
message: lang.lang_version_platform_mac, message: lang.lang_version_platform_mac,
buttons: [lang.lang_no, lang.lang_yesno] buttons: [lang.lang_no, lang.lang_yesno]
} }
dialog.showMessageBox(options, function(arg) { if (!localStorage.getItem("winstore")) {
if(arg==1){ postMessage(["dialogStore", options], "*")
localStorage.setItem("winstore","brewcask")
}else{
localStorage.setItem("winstore","localinstall")
} }
});
} }
} else { } else {
localStorage.setItem("winstore", "unix") localStorage.setItem("winstore", "unix")
@@ -106,11 +113,9 @@ function verck(ver) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (mess) { }).then(function (mess) {
console.log(mess); console.table(mess);
if (mess) { if (mess) {
var electron = require("electron"); var platform = localStorage.getItem("platform");
var remote=electron.remote;
var platform=remote.process.platform;
if (platform == "darwin") { if (platform == "darwin") {
var newest = mess.desk_mac; var newest = mess.desk_mac;
} else { } else {
@@ -125,15 +130,13 @@ function verck(ver) {
localStorage.removeItem("instance") localStorage.removeItem("instance")
if (localStorage.getItem("new-ver-skip")) { if (localStorage.getItem("new-ver-skip")) {
if (localStorage.getItem("next-ver") != newest) { if (localStorage.getItem("next-ver") != newest) {
var ipc = electron.ipcRenderer; postMessage(["sendSinmpleIpc", "update"], "*")
ipc.send('update', "true");
} else { } else {
console.log(lang.lang_version_skipver); console.warn(lang.lang_version_skipver);
todo(lang.lang_version_skipver); todo(lang.lang_version_skipver);
} }
} else { } else {
var ipc = electron.ipcRenderer; postMessage(["sendSinmpleIpc", "update"], "*")
ipc.send('update', "true");
} }
} }
} }
@@ -141,9 +144,7 @@ function verck(ver) {
if (!localStorage.getItem("last-notice-id")) { if (!localStorage.getItem("last-notice-id")) {
localStorage.setItem("last-notice-id", 0) localStorage.setItem("last-notice-id", 0)
} }
console.log(localStorage.getItem("last-notice-id"))
var start = "https://thedesk.top/notice?since_id=" + localStorage.getItem("last-notice-id"); var start = "https://thedesk.top/notice?since_id=" + localStorage.getItem("last-notice-id");
console.log(start);
fetch(start, { fetch(start, {
method: 'GET' method: 'GET'
}).then(function (response) { }).then(function (response) {
@@ -152,7 +153,6 @@ function verck(ver) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (mess) { }).then(function (mess) {
console.log(mess.length);
if (mess.length < 1) { if (mess.length < 1) {
return false; return false;
} else { } else {
@@ -164,33 +164,33 @@ function verck(ver) {
break; break;
} else { } else {
var show = true; var show = true;
if(obj.Toot!=""){ if (obj.toot != "") {
var toot='<button class="btn-flat toast-action" onclick="detEx(\''+obj.Toot+'\',\'main\')">Show</button>'; var toot = '<button class="btn-flat toast-action" onclick="detEx(\'' + obj.toot + '\',\'main\')">Show</button>';
} else { } else {
var toot = ""; var toot = "";
} }
if(obj.Ver!=""){ if (obj.ver != "") {
if(obj.Ver==ver){ if (obj.ver == ver) {
show = true; show = true;
} else { } else {
show = false; show = false;
} }
} }
if(obj.Domain!=""){ if (obj.domain != "") {
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
if (multi) { if (multi) {
show = false; show = false;
var accts = JSON.parse(multi); var accts = JSON.parse(multi);
Object.keys(accts).forEach(function (key) { Object.keys(accts).forEach(function (key) {
var acct = accts[key]; var acct = accts[key];
if(acct.domain==obj.Domain){ if (acct.domain == obj.domain) {
show = true; show = true;
} }
}); });
} }
} }
if (show) { if (show) {
Materialize.toast(obj.Text+toot+'<span class="sml grey-text">(スライドして消去)</span>', 86400); M.toast({ html: escapeHTML(obj.text) + toot + '<span class="sml grey-text">(スライドして消去)</span>', displayLength: 86400 })
} }
} }
@@ -202,18 +202,13 @@ var infostreaming=false;
function infowebsocket() { function infowebsocket() {
infows = new WebSocket("wss://thedesk.top/ws/"); infows = new WebSocket("wss://thedesk.top/ws/");
infows.onopen = function (mess) { infows.onopen = function (mess) {
console.log(tlid + ":Connect Streaming Info:"); console.log([tlid, ":Connect Streaming Info:", mess]);
console.log(mess);
infostreaming = true; infostreaming = true;
} }
infows.onmessage = function (mess) { infows.onmessage = function (mess) {
console.log(":Receive Streaming:"); console.log([tlid, ":Receive Streaming:", JSON.parse(mess.data)]);
console.log(JSON.parse(mess.data));
var obj = JSON.parse(mess.data); var obj = JSON.parse(mess.data);
if (obj.type != "counter") { if (obj.type != "counter") {
if(obj.id*1<=localStorage.getItem("last-notice-id")){
}else{
localStorage.setItem("last-notice-id", obj.id) localStorage.setItem("last-notice-id", obj.id)
var show = true; var show = true;
if (obj.toot != "") { if (obj.toot != "") {
@@ -242,8 +237,7 @@ function infowebsocket(){
} }
} }
if (show) { if (show) {
Materialize.toast(obj.text+toot+'<span class="sml grey-text">(スライドして消去)</span>', 86400); M.toast({ html: escapeHTML(obj.Text) + toot + '<span class="sml grey-text">(スライドして消去)</span>', displayLength: 86400 })
}
} }
} else { } else {
$("#persons").text(obj.text); $("#persons").text(obj.text);
@@ -262,7 +256,32 @@ function infowebsocket(){
} }
setInterval(function () { setInterval(function () {
if (!infostreaming) { if (!infostreaming) {
console.log("try to connect") console.log("try to connect to base-streaming")
infowebsocket(); infowebsocket();
} }
}, 10000); }, 10000);
function openRN() {
$('#releasenote').modal('open');
if (lang.language == "ja") {
verp = ver.replace('(', '');
verp = verp.replace('.', '-');
verp = verp.replace('.', '-');
verp = verp.replace('[', '-');
verp = verp.replace(']', '');
verp = verp.replace(')', '');
verp = verp.replace(' ', '_');
$("#release-" + verp).show();
} else {
$("#release-en").show();
}
}
function closeSupport() {
$("#support-btm").animate({
'bottom': '-300px'
}, {
'duration': 300,
'complete': function () {
$("#support-btm").addClass("hide")
}
});
}

View File

@@ -42,7 +42,6 @@ function defaultEmoji(target){
}); });
$("#emoji-list").html(emojis); $("#emoji-list").html(emojis);
$("#now-emoji").text(lang.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"); $(".emoji-control").addClass("hide");
} }
function customEmoji() { function customEmoji() {
@@ -54,7 +53,12 @@ function defEmoji(target){
var emojiraw = newpack.filter(function (item, index) { var emojiraw = newpack.filter(function (item, index) {
if (item.short_name == target) return true; if (item.short_name == target) return true;
}); });
emoji=twemoji.convert.fromCodePoint(emojiraw[0].unified); var hex = emojiraw[0].unified.split("-");
if (hex.length === 2) {
emoji = twemoji.convert.fromCodePoint(hex[0]) + twemoji.convert.fromCodePoint(hex[1]);
} else {
emoji = twemoji.convert.fromCodePoint(hex[0]);
}
var now = $("#textarea").val(); var now = $("#textarea").val();
var selin = localStorage.getItem("cursor"); var selin = localStorage.getItem("cursor");
var now = $("#textarea").val(); var now = $("#textarea").val();
@@ -65,7 +69,6 @@ function defEmoji(target){
} else { } else {
newt = emoji + now; newt = emoji + now;
} }
console.log(emoji);
$("#textarea").val(newt); $("#textarea").val(newt);
$("#textarea").focus(); $("#textarea").focus();
var selin = $("#textarea").prop('selectionStart'); var selin = $("#textarea").prop('selectionStart');
@@ -76,7 +79,6 @@ function defEmoji(target){
} }
function faicon() { function faicon() {
var json = faicons; var json = faicons;
console.log(json);
var emojis = ""; var emojis = "";
Object.keys(json).forEach(function (key) { Object.keys(json).forEach(function (key) {
var emoji = json[key]; var emoji = json[key];

View File

@@ -91,6 +91,7 @@ var lang={
"lang_list_users": "Users list", "lang_list_users": "Users list",
"lang_list_nouser": "No users in this list.", "lang_list_nouser": "No users in this list.",
"lang_list_add": "Add to the 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", "lang_list_remove": "Remove from the list",
//tl/notification.js //tl/notification.js
"lang_notf_new": " new notifications", "lang_notf_new": " new notifications",
@@ -140,6 +141,7 @@ var lang={
"lang_hisdata_frcwarn": "Unfollow accounts will be shown.", "lang_hisdata_frcwarn": "Unfollow accounts will be shown.",
"lang_hisdata_taketime": "It will take 30s ~ several minutes", "lang_hisdata_taketime": "It will take 30s ~ several minutes",
"lang_hisdata_notonmisskey": "Misskey is unable to request.", "lang_hisdata_notonmisskey": "Misskey is unable to request.",
"lang_hisdata_key": "This user is proofed by {{set}}",
//userdata/showOnTL.js //userdata/showOnTL.js
"lang_showontl_movetxt": "This account was moved", "lang_showontl_movetxt": "This account was moved",
"lang_showontl_movebtn": "Continue on the new account", "lang_showontl_movebtn": "Continue on the new account",
@@ -148,11 +150,13 @@ var lang={
"lang_showontl_notf": "Notification ", "lang_showontl_notf": "Notification ",
"lang_showontl_domain": "Domain ", "lang_showontl_domain": "Domain ",
"lang_showontl_listwarn": "Follow to add this user to lists.", "lang_showontl_listwarn": "Follow to add this user to lists.",
"lang_showontl_verified": "This website is verified by owner at ",
//parse //parse
"lang_parse_mentioned": " replied to you", "lang_parse_mentioned": " replied to you",
"lang_parse_faved": " favourited your toot", "lang_parse_faved": " favourited your toot",
"lang_parse_bted": " boosted your toot", "lang_parse_bted": " boosted your toot",
"lang_parse_btedsimple": " boosted", "lang_parse_btedsimple": " boosted",
"lang_parse_polled": "'s poll",
"lang_parse_notftime": "Actioned at", "lang_parse_notftime": "Actioned at",
"lang_parse_cwshow": "Show", "lang_parse_cwshow": "Show",
"lang_parse_fulltext": "Full size text:", "lang_parse_fulltext": "Full size text:",
@@ -185,10 +189,13 @@ var lang={
"lang_parse_clientmute": "muted", "lang_parse_clientmute": "muted",
"lang_parse_mute": " will be muted. You can remove on preferences.", "lang_parse_mute": " will be muted. You can remove on preferences.",
"lang_parse_voted": "Voted", "lang_parse_voted": "Voted",
"lang_parse_vote":"Voted", "lang_parse_vote": "Vote",
"lang_parse_unvoted": "Show the result without voting", "lang_parse_unvoted": "Show the result without voting",
"lang_parse_endedvote": "Expired", "lang_parse_endedvote": "Expired",
"lang_parse_thread": "Show thread", "lang_parse_thread": "Show thread",
"lang_parse_unknown": "Attached file",
"lang_parse_nsfw": "NSFW media",
"lang_parse_notffilter":"Show this user's notifications",
//misskey //misskey
"lang_misskeyparse_renote": "Repost", "lang_misskeyparse_renote": "Repost",
"lang_misskeyparse_renoteqt": "Renote", "lang_misskeyparse_renoteqt": "Renote",

View File

@@ -91,6 +91,7 @@ var lang={
"lang_list_users": "ユーザー一覧", "lang_list_users": "ユーザー一覧",
"lang_list_nouser": "ユーザーはいません", "lang_list_nouser": "ユーザーはいません",
"lang_list_add": "リストに追加", "lang_list_add": "リストに追加",
"lang_list_add_misskey": "(重複追加の可能性があります)",
"lang_list_remove": "リストから削除", "lang_list_remove": "リストから削除",
//tl/notification.js //tl/notification.js
"lang_notf_new": "件の新しい通知", "lang_notf_new": "件の新しい通知",
@@ -108,6 +109,8 @@ var lang={
//tl/tl.js //tl/tl.js
"lang_tl_media": "メディア", "lang_tl_media": "メディア",
"lang_tl_reconnect": "Streamingに再接続しました", "lang_tl_reconnect": "Streamingに再接続しました",
//ui/img.js
"lang_img_DLDone": "ダウンロード先:",
//ui/layout.js //ui/layout.js
"lang_layout_gotop": "一番上へ。アイコンが赤のときはストリーミングに接続できていません。F5等で再読込をお試し下さい。", "lang_layout_gotop": "一番上へ。アイコンが赤のときはストリーミングに接続できていません。F5等で再読込をお試し下さい。",
"lang_layout_thisacct": "このアカウントの{{notf}}", "lang_layout_thisacct": "このアカウントの{{notf}}",
@@ -140,6 +143,7 @@ var lang={
"lang_hisdata_frcwarn": "非フォローだけど絡みがある時に表示されます。", "lang_hisdata_frcwarn": "非フォローだけど絡みがある時に表示されます。",
"lang_hisdata_taketime": "30秒から数分かかります", "lang_hisdata_taketime": "30秒から数分かかります",
"lang_hisdata_notonmisskey": "このシステムはMisskeyにはありません。", "lang_hisdata_notonmisskey": "このシステムはMisskeyにはありません。",
"lang_hisdata_key": "このユーザーの信頼性は{{set}}によって示されています",
//userdata/showOnTL.js //userdata/showOnTL.js
"lang_showontl_movetxt": "このアカウントは移行しています", "lang_showontl_movetxt": "このアカウントは移行しています",
"lang_showontl_movebtn": "移行先を見る", "lang_showontl_movebtn": "移行先を見る",
@@ -148,11 +152,13 @@ var lang={
"lang_showontl_notf": "通知", "lang_showontl_notf": "通知",
"lang_showontl_domain": "ドメイン", "lang_showontl_domain": "ドメイン",
"lang_showontl_listwarn": "リストに追加するためにはフォローが必要です。", "lang_showontl_listwarn": "リストに追加するためにはフォローが必要です。",
"lang_showontl_verified": "このユーザーの所持するWebサイトであると証明されています。",
//parse //parse
"lang_parse_mentioned": "が返信しました", "lang_parse_mentioned": "が返信しました",
"lang_parse_faved": "がお気に入り登録しました", "lang_parse_faved": "がお気に入り登録しました",
"lang_parse_bted": "がブーストしました", "lang_parse_bted": "がブーストしました",
"lang_parse_btedsimple": "がブースト", "lang_parse_btedsimple": "がブースト",
"lang_parse_polled": "のアンケート",
"lang_parse_notftime": "通知された時間", "lang_parse_notftime": "通知された時間",
"lang_parse_cwshow": "見る", "lang_parse_cwshow": "見る",
"lang_parse_fulltext": "以下全文", "lang_parse_fulltext": "以下全文",
@@ -189,6 +195,9 @@ var lang={
"lang_parse_unvoted": "結果だけ見る", "lang_parse_unvoted": "結果だけ見る",
"lang_parse_endedvote": "終了済み", "lang_parse_endedvote": "終了済み",
"lang_parse_thread": "会話を表示", "lang_parse_thread": "会話を表示",
"lang_parse_unknown": "添付ファイル",
"lang_parse_nsfw": "閲覧注意",
"lang_parse_notffilter":"このユーザーの通知のみを表示",
//misskey //misskey
"lang_misskeyparse_renote": "再投稿", "lang_misskeyparse_renote": "再投稿",
"lang_misskeyparse_renoteqt": "引用", "lang_misskeyparse_renoteqt": "引用",

View File

@@ -8,17 +8,17 @@ var idata={
"kirishima.cloud_glitch": "enabled", "kirishima.cloud_glitch": "enabled",
"kirishima.cloud_public": "パブリックタイムライン", "kirishima.cloud_public": "パブリックタイムライン",
"minohdon.jp": "instance", "minohdon.jp": "instance",
"minohdon.jp_name":"箕面", "minohdon.jp_name": "箕面どん",
"minohdon.jp_letters": "500", "minohdon.jp_letters": "500",
"minohdon.jp_bbcode": "disabled", "minohdon.jp_bbcode": "disabled",
"minohdon.jp_markdown": "disabled", "minohdon.jp_markdown": "disabled",
"minohdon.jp_glitch": "disabled", "minohdon.jp_glitch": "disabled",
"knzk.me": "instance", "knzk.me": "instance",
"knzk.me_name":"神崎丼", "knzk.me_name": "Knzk",
"knzk.me_letters": "5000", "knzk.me_letters": "5000",
"knzk.me_bbcode": "disabled", "knzk.me_bbcode": "disabled",
"knzk.me_markdown": "disabled", "knzk.me_markdown": "disabled",
"knzk.me_glitch":"enabled", "knzk.me_glitch": "disabled",
"mastodos.com": "instance", "mastodos.com": "instance",
"mastodos.com_name": "マストどす", "mastodos.com_name": "マストどす",
"mastodos.com_letters": "500", "mastodos.com_letters": "500",
@@ -32,7 +32,7 @@ var idata={
"dev.kirishima.cloud_markdown": "enabled", "dev.kirishima.cloud_markdown": "enabled",
"dev.kirishima.cloud_glitch": "enabled", "dev.kirishima.cloud_glitch": "enabled",
"mstdn.y-zu.org": "instance", "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_letters": "500",
"mstdn.y-zu.org_bbcode": "disabled", "mstdn.y-zu.org_bbcode": "disabled",
"mstdn.y-zu.org_markdown": "enabled", "mstdn.y-zu.org_markdown": "enabled",
@@ -84,20 +84,14 @@ var idata={
"itabashi.0j0.jp_bbcode": "disabled", "itabashi.0j0.jp_bbcode": "disabled",
"itabashi.0j0.jp_markdown": "disabled", "itabashi.0j0.jp_markdown": "disabled",
"itabashi.0j0.jp_glitch": "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": "instance",
"dtp-mstdn.jp_name": "DTP鯖", "dtp-mstdn.jp_name": "DTP鯖",
"dtp-mstdn.jp_letters": "500", "dtp-mstdn.jp_letters": "500",
"dtp-mstdn.jp_bbcode": "disabled", "dtp-mstdn.jp_bbcode": "disabled",
"dtp-mstdn.jp_markdown": "disabled", "dtp-mstdn.jp_markdown": "disabled",
"dtp-mstdn.jp_glitch": "disabled", "dtp-mstdn.jp_glitch": "disabled",
"misskey.xyz":"instance", "misskey.xyz": "misskey",
"misskey.xyz_name":"Misskey", "misskey.xyz_name": "misskey.xyz",
"misskey.xyz_letters": "1000", "misskey.xyz_letters": "1000",
"misskey.xyz_bbcode": "disabled", "misskey.xyz_bbcode": "disabled",
"misskey.xyz_markdown": "enabled", "misskey.xyz_markdown": "enabled",
@@ -105,6 +99,28 @@ var idata={
"misskey.xyz_post": "Post", "misskey.xyz_post": "Post",
"misskey.xyz_fav": " reacted your post.", "misskey.xyz_fav": " reacted your post.",
"misskey.xyz_bt": " reposted 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)); localStorage.setItem("instance", JSON.stringify(idata));

View File

@@ -14,23 +14,6 @@ function ck() {
} }
var domainz = localStorage.getItem("domain_0"); var domainz = localStorage.getItem("domain_0");
var at = localStorage.getItem("acct_0_at"); var at = localStorage.getItem("acct_0_at");
var oldat = localStorage.getItem(domainz + "_at");
if(oldat){
console.log("Move to New Account Management System")
var multi = localStorage.getItem("multi");
if (!multi) {
var acctlen=1;
} else {
var obj = JSON.parse(multi);
var acctlen=obj.length;
}
for(i=0;acctlen>i;i++){
var domain = localStorage.getItem("domain_"+i);
var oldat = localStorage.getItem(domain + "_at");
var newat = localStorage.setItem("acct_"+ i + "_at",oldat);
localStorage.removeItem(domain + "_at");
}
}
//コード受信 //コード受信
if (location.search) { if (location.search) {
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/); var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
@@ -42,30 +25,30 @@ function ck() {
} }
} }
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
if (!multi) { if (!multi || multi == "[]") {
var obj = []; var date = new Date();
var json = JSON.stringify(obj); localStorage.setItem("showSupportMe", date.getMonth() + 2)
localStorage.setItem("multi", json); location.href = "acct.html?mode=first&code=true"
} else { } else {
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
}
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
var acct = obj[key]; var acct = obj[key];
if (acct.domain) { if (acct.domain) {
refresh(key, true) refresh(key, true)
} }
}); });
console.log(obj);
if (obj[0].domain) { if (obj[0].domain) {
$("#tl").show(); $("#tl").show();
ticker(); ticker();
multiSelector(); multiSelector();
} else { verck(ver);
$("#tl").show(); $("#something-wrong img").attr("src", "../../img/thinkingdesk.png")
$("#post-box").hide(); }
} }
} }
ck(); ck();
//ログインポップアップ //ログインポップアップ
function login(url) { function login(url) {
if ($('#linux:checked').val() == "on") { if ($('#linux:checked').val() == "on") {
@@ -88,7 +71,6 @@ function login(url) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json);
var auth = "https://" + url + "/oauth/authorize?client_id=" + json[ var auth = "https://" + url + "/oauth/authorize?client_id=" + json[
"client_id"] + "&client_secret=" + json["client_secret"] + "client_id"] + "&client_secret=" + json["client_secret"] +
"&response_type=code&redirect_uri=" + red + "&scope=read+write+follow"; "&response_type=code&redirect_uri=" + red + "&scope=read+write+follow";
@@ -97,15 +79,11 @@ function login(url) {
localStorage.setItem("client_secret", json["client_secret"]); localStorage.setItem("client_secret", json["client_secret"]);
$("#auth").show(); $("#auth").show();
$("#masara").hide(); $("#masara").hide();
const { shell } = require('electron'); postMessage(["openUrl", auth], "*")
shell.openExternal(auth);
if ($('#linux:checked').val() == "on") { if ($('#linux:checked').val() == "on") {
} else { } else {
var electron = require("electron"); postMessage(["sendSinmpleIpc", "quit"], "*")
var ipc = electron.ipcRenderer;
ipc.send('quit', 'go');
} }
} }
} }
@@ -182,11 +160,9 @@ function getdata() {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (json.error) { if (json.error) {
console.error("Error:" + json.error); console.error("Error:" + json.error);
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error, M.toast({ html: lang.lang_fatalerroroccured + "Error:" + json.error, displayLength: 5000 })
5000);
return; return;
} }
var avatar = json["avatar"]; var avatar = json["avatar"];
@@ -204,7 +180,6 @@ function getdata() {
vis: json["source"]["privacy"] vis: json["source"]["privacy"]
}]; }];
var json = JSON.stringify(obj); var json = JSON.stringify(obj);
console.log(obj);
localStorage.setItem("multi", json); localStorage.setItem("multi", json);
localStorage.setItem("name_" + acct_id, json["display_name"]); localStorage.setItem("name_" + acct_id, json["display_name"]);
localStorage.setItem("user_" + acct_id, json["acct"]); localStorage.setItem("user_" + acct_id, json["acct"]);
@@ -232,11 +207,9 @@ function getdataAdv(domain, at) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (json.error) { if (json.error) {
console.error("Error:" + json.error); console.error("Error:" + json.error);
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error, M.toast({ html: lang.lang_fatalerroroccured + "Error:" + json.error, displayLength: 5000 })
5000);
return; return;
} }
var avatar = json["avatar"]; var avatar = json["avatar"];
@@ -266,7 +239,6 @@ function getdataAdv(domain, at) {
localStorage.setItem("user_" + target, json["acct"]); localStorage.setItem("user_" + target, json["acct"]);
localStorage.setItem("user-id_" + target, json["id"]); localStorage.setItem("user-id_" + target, json["id"]);
localStorage.setItem("prof_" + target, avatar); localStorage.setItem("prof_" + target, avatar);
console.log(obj);
var json = JSON.stringify(obj); var json = JSON.stringify(obj);
localStorage.setItem("multi", json); localStorage.setItem("multi", json);
location.href = "index.html"; location.href = "index.html";
@@ -281,7 +253,6 @@ function refresh(target,loadskip) {
} }
var start = "https://" + obj[target].domain + var start = "https://" + obj[target].domain +
"/api/v1/accounts/verify_credentials"; "/api/v1/accounts/verify_credentials";
console.log(start);
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -294,11 +265,9 @@ function refresh(target,loadskip) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (json.error) { if (json.error) {
console.error("Error:" + json.error); console.error("Error:" + json.error);
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error, M.toast({ html: lang.lang_fatalerroroccured + "Error:" + json.error, displayLength: 5000 })
5000);
return; return;
} }
var avatar = json["avatar"]; var avatar = json["avatar"];
@@ -318,8 +287,6 @@ function refresh(target,loadskip) {
localStorage.setItem("name_" + target, json["display_name"]); localStorage.setItem("name_" + target, json["display_name"]);
localStorage.setItem("user_" + target, json["acct"]); localStorage.setItem("user_" + target, json["acct"]);
localStorage.setItem("user-id_" + target, json["id"]); localStorage.setItem("user-id_" + target, json["id"]);
console.log("user-id_" + target+":"+json["id"])
console.log(localStorage.getItem("user-id_"+target));
localStorage.setItem("prof_" + target, avatar); localStorage.setItem("prof_" + target, avatar);
localStorage.setItem("follow_" + target, json["following_count"]); localStorage.setItem("follow_" + target, json["following_count"]);
obj[target] = ref; obj[target] = ref;
@@ -379,7 +346,6 @@ function ckdb(acct_id) {
localStorage.removeItem("bb_" + acct_id); localStorage.removeItem("bb_" + acct_id);
} }
if (json[domain + "_home"]) { if (json[domain + "_home"]) {
console.log("unique name:"+json[domain + "_home"]);
localStorage.setItem("home_" + acct_id, json[domain + "_home"]); localStorage.setItem("home_" + acct_id, json[domain + "_home"]);
} }
if (json[domain + "_local"]) { if (json[domain + "_local"]) {
@@ -416,8 +382,8 @@ function ckdb(acct_id) {
}).catch(function (error) { }).catch(function (error) {
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (json.error) { if (json.error) {
console.error(json.error);
return; return;
} }
if (json) { if (json) {
@@ -451,9 +417,13 @@ function multiSelector() {
var last = localStorage.getItem("main"); var last = localStorage.getItem("main");
} else if (localStorage.getItem("last-use")) { } else if (localStorage.getItem("last-use")) {
var last = localStorage.getItem("last-use"); var last = localStorage.getItem("last-use");
}else{ if (last == "webview" || last == "noauth") {
var last=0; last = "0";
} }
} else {
var last = "0";
}
last = last + "";
var sel; var sel;
if (obj.length < 1) { if (obj.length < 1) {
$("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>'); $("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
@@ -462,7 +432,7 @@ function multiSelector() {
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
var acct = obj[key]; var acct = obj[key];
var list = key * 1 + 1; var list = key * 1 + 1;
if (key == last) { if (key+"" === last) {
sel = "selected"; sel = "selected";
var domain = acct.domain; var domain = acct.domain;
localStorage.setItem("domain_" + key, domain); localStorage.setItem("domain_" + key, domain);
@@ -481,12 +451,10 @@ function multiSelector() {
} }
var profimg = acct.prof; var profimg = acct.prof;
localStorage.setItem("prof_" + key, profimg); localStorage.setItem("prof_" + key, profimg);
console.log(profimg);
if (!profimg) { if (!profimg) {
profimg = "../../img/missing.svg"; profimg = "../../img/missing.svg";
} }
$("#acct-sel-prof").attr("src", profimg); $("#acct-sel-prof").attr("src", profimg);
console.log(domain);
if (domain) { if (domain) {
var cc = "(" + domain + ")"; var cc = "(" + domain + ")";
} else { } else {
@@ -521,8 +489,8 @@ function multiSelector() {
$("#src-acct-sel").append('<option value="tootsearch">Tootsearch</option>'); $("#src-acct-sel").append('<option value="tootsearch">Tootsearch</option>');
$("#add-acct-sel").append('<option value="noauth">' + lang.lang_login_noauth + '</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'); $('select').formSelect();
parseColumn(); parseColumn(true);
} }
//バージョンエンコ //バージョンエンコ

View File

@@ -2,6 +2,15 @@
//最初に読むやつ //最初に読むやつ
function load() { function load() {
$("#acct-list").html(""); $("#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"); var prof = localStorage.getItem("prof");
$(".my-prof").attr("src", prof); $(".my-prof").attr("src", prof);
var name = localStorage.getItem("name"); var name = localStorage.getItem("name");
@@ -23,7 +32,7 @@ function load() {
} }
} }
console.log(obj); console.table(obj);
var templete; var templete;
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
var acct = obj[key]; var acct = obj[key];
@@ -57,14 +66,8 @@ function load() {
localStorage.setItem("acct", 0); localStorage.setItem("acct", 0);
var acctN = 0; var acctN = 0;
} }
var electron = require("electron"); //全部チェックアリでいいと思うの
var remote=electron.remote;
var platform=remote.process.platform;
if(localStorage.getItem("winstore")!="localinstall"){
$("#linux").prop("checked", false);
}else{
$("#linux").prop("checked", true); $("#linux").prop("checked", true);
}
} }
//最初に読む //最初に読む
@@ -96,7 +99,6 @@ function data(domain) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (!json.error) { if (!json.error) {
$("#ins-name").text(json.name); $("#ins-name").text(json.name);
$("#ins-upd").text(date(json.checked_at, 'full')); $("#ins-upd").text(date(json.checked_at, 'full'));
@@ -107,6 +109,8 @@ function data(domain) {
$("#ins-per").text(json.uptime * 100); $("#ins-per").text(json.uptime * 100);
$("#ins-user").text(json.users); $("#ins-user").text(json.users);
$("#ins-ver").text(json.version); $("#ins-ver").text(json.version);
} else {
console.error(json.error);
} }
}); });
var start = "https://" + domain + "/api/v1/instance"; var start = "https://" + domain + "/api/v1/instance";
@@ -121,7 +125,6 @@ function data(domain) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (!json.error) { if (!json.error) {
$("#ins-title").text(json.title); $("#ins-title").text(json.title);
$("#ins-desc").html(json.description); $("#ins-desc").html(json.description);
@@ -132,6 +135,8 @@ function data(domain) {
$("#ins-prof").attr('src', json.thumbnail); $("#ins-prof").attr('src', json.thumbnail);
$("#ins-admin").text(escapeHTML(json.contact_account.display_name) + "(" + json.contact_account.acct + ")"); $("#ins-admin").text(escapeHTML(json.contact_account.display_name) + "(" + json.contact_account.acct + ")");
$("#ins-admin").attr("href", "index.html?mode=user&code=" + json.contact_account.username + "@" + domain); $("#ins-admin").attr("href", "index.html?mode=user&code=" + json.contact_account.username + "@" + domain);
} else {
console.error(json.error);
} }
}); });
} }
@@ -147,7 +152,6 @@ function multiDel(target) {
//公開範囲(差分のみ) //公開範囲(差分のみ)
if (key >= target) { if (key >= target) {
var oldvis = localStorage.getItem("vis-memory-" + key); var oldvis = localStorage.getItem("vis-memory-" + key);
console.log(oldvis);
if (oldvis) { if (oldvis) {
localStorage.setItem("vis-memory-" + nk, oldvis); localStorage.setItem("vis-memory-" + nk, oldvis);
} }
@@ -172,7 +176,6 @@ function multiDel(target) {
}); });
//とりあえず消す //とりあえず消す
obj.splice(target, 1); obj.splice(target, 1);
console.log(obj);
var json = JSON.stringify(obj); var json = JSON.stringify(obj);
localStorage.setItem("multi", json); localStorage.setItem("multi", json);
load(); load();
@@ -213,7 +216,6 @@ function multiDel2(target) {
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
if (key >= target) { if (key >= target) {
var oldvis = localStorage.getItem("vis-memory-" + key); var oldvis = localStorage.getItem("vis-memory-" + key);
console.log(oldvis);
if (oldvis) { if (oldvis) {
var nk = key - 1; var nk = key - 1;
localStorage.setItem("vis-memory-" + nk, oldvis); localStorage.setItem("vis-memory-" + nk, oldvis);
@@ -262,6 +264,10 @@ function support() {
templete = '<a onclick="login(\'' + key + templete = '<a onclick="login(\'' + key +
'\')" class="collection-item pointer transparent">' + idata[key + "_name"] + '(' + key + ')</a>'; '\')" class="collection-item pointer transparent">' + idata[key + "_name"] + '(' + key + ')</a>';
$("#support").append(templete); $("#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);
} }
}); });
} }
@@ -270,7 +276,7 @@ function support() {
function login(url) { function login(url) {
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
if($('#misskey:checked').val()=="on" || url=="misskey.xyz"){ if ($('#misskey:checked').val() == "on") {
$("#misskey").prop("checked", true); $("#misskey").prop("checked", true);
misskeyLogin(url); misskeyLogin(url);
return; return;
@@ -280,7 +286,6 @@ function login(url) {
} else { } else {
var red = 'thedesk://manager'; var red = 'thedesk://manager';
} }
console.log(red);
localStorage.setItem("redirect", red); localStorage.setItem("redirect", red);
var start = "https://" + url + "/api/v1/apps"; var start = "https://" + url + "/api/v1/apps";
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
@@ -296,7 +301,6 @@ function login(url) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json);
localStorage.setItem("msky", "false"); localStorage.setItem("msky", "false");
var auth = "https://" + url + "/oauth/authorize?client_id=" + json[ var auth = "https://" + url + "/oauth/authorize?client_id=" + json[
"client_id"] + "&client_secret=" + json["client_secret"] + "client_id"] + "&client_secret=" + json["client_secret"] +
@@ -306,15 +310,9 @@ function login(url) {
localStorage.setItem("client_secret", json["client_secret"]); localStorage.setItem("client_secret", json["client_secret"]);
$("#auth").show(); $("#auth").show();
$("#add").hide(); $("#add").hide();
const { postMessage(["openUrl", auth], "*")
shell
} = require('electron');
shell.openExternal(auth);
var electron = require("electron");
var ipc = electron.ipcRenderer;
if ($('#linux:checked').val() == "on") { } else { if ($('#linux:checked').val() == "on") { } else {
ipc.send('quit', 'go'); postMessage(["sendSinmpleIpc", "quit"], "*")
} }
} }
} }
@@ -356,13 +354,32 @@ function misskeyLogin(url) {
"reaction-read", "reaction-read",
"reaction-write", "reaction-write",
"vote-read", "vote-read",
"vote-write" "vote-write",
"read:account",
"write:account",
"read:drive",
"write:drive",
"read:blocks",
"write:blocks",
"read:favorites",
"write:favorites",
"read:following",
"write:following",
"read:messaging",
"write:messaging",
"read:mutes",
"write:mutes",
"write:notes",
"read:notifications",
"write:notifications",
"read:reactions",
"write:reactions",
"write:votes"
] ]
})); }));
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json);
misskeyAuth(url, json.secret) misskeyAuth(url, json.secret)
} }
} }
@@ -384,17 +401,13 @@ function misskeyAuth(url, mkc){
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json);
const {
shell
} = require('electron');
var token = json.token; var token = json.token;
$("#auth").show(); $("#auth").show();
$("#code").val(token); $("#code").val(token);
$("#add").hide(); $("#add").hide();
$("#misskey").prop("checked", false); $("#misskey").prop("checked", false);
localStorage.setItem("domain_tmp", url); localStorage.setItem("domain_tmp", url);
shell.openExternal(json.url); postMessage(["openUrl", json.url], "*")
} }
} }
} }
@@ -418,7 +431,6 @@ function code(code) {
} }
var url = localStorage.getItem("domain_tmp"); var url = localStorage.getItem("domain_tmp");
localStorage.removeItem("domain_tmp"); localStorage.removeItem("domain_tmp");
console.log(localStorage.getItem("msky"));
if (localStorage.getItem("msky") == "true") { if (localStorage.getItem("msky") == "true") {
var start = "https://" + url + "/api/auth/session/userkey"; var start = "https://" + url + "/api/auth/session/userkey";
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
@@ -433,7 +445,6 @@ function code(code) {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
var i = sha256(json.accessToken + localStorage.getItem("mkc")); var i = sha256(json.accessToken + localStorage.getItem("mkc"));
console.log(json);
var avatar = json["user"]["avatarUrl"]; var avatar = json["user"]["avatarUrl"];
var priv = "public"; var priv = "public";
var add = { var add = {
@@ -455,10 +466,11 @@ function code(code) {
localStorage.setItem("user_" + target, json["user"]["username"]); localStorage.setItem("user_" + target, json["user"]["username"]);
localStorage.setItem("user-id_" + target, json["user"]["id"]); localStorage.setItem("user-id_" + target, json["user"]["id"]);
localStorage.setItem("prof_" + target, avatar); localStorage.setItem("prof_" + target, avatar);
console.log(obj);
var json = JSON.stringify(obj); var json = JSON.stringify(obj);
localStorage.setItem("multi", json); localStorage.setItem("multi", json);
if ($("body").hasClass("first")) {
location.href = "index.html"
}
load(); load();
return; return;
} }
@@ -482,7 +494,6 @@ function code(code) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json);
if (json["access_token"]) { if (json["access_token"]) {
$("#auth").hide(); $("#auth").hide();
$("#add").show(); $("#add").show();
@@ -508,11 +519,9 @@ function getdata(domain, at) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (json.error) { if (json.error) {
console.error("Error:" + json.error); console.error("Error:" + json.error);
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error, M.toast({ html: lang.lang_fatalerroroccured + "Error:" + json.error, displayLength: 5000 })
5000);
return; return;
} }
var avatar = json["avatar"]; var avatar = json["avatar"];
@@ -543,9 +552,11 @@ function getdata(domain, at) {
localStorage.setItem("user_" + target, json["acct"]); localStorage.setItem("user_" + target, json["acct"]);
localStorage.setItem("user-id_" + target, json["id"]); localStorage.setItem("user-id_" + target, json["id"]);
localStorage.setItem("prof_" + target, avatar); localStorage.setItem("prof_" + target, avatar);
console.log(obj);
var json = JSON.stringify(obj); var json = JSON.stringify(obj);
localStorage.setItem("multi", json); localStorage.setItem("multi", json);
if ($("body").hasClass("first")) {
location.href = "index.html"
}
load(); load();
}); });
} }
@@ -560,7 +571,6 @@ function refresh(target) {
} }
var start = "https://" + obj[target].domain + var start = "https://" + obj[target].domain +
"/api/v1/accounts/verify_credentials"; "/api/v1/accounts/verify_credentials";
console.log(start);
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -573,11 +583,9 @@ function refresh(target) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (json.error) { if (json.error) {
console.error("Error:" + json.error); console.error("Error:" + json.error);
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error, M.toast({ html: lang.lang_fatalerroroccured + "Error:" + json.error, displayLength: 5000 })
5000);
return; return;
} }
var avatar = json["avatar"]; var avatar = json["avatar"];
@@ -597,8 +605,6 @@ function refresh(target) {
localStorage.setItem("name_" + target, json["display_name"]); localStorage.setItem("name_" + target, json["display_name"]);
localStorage.setItem("user_" + target, json["acct"]); localStorage.setItem("user_" + target, json["acct"]);
localStorage.setItem("user-id_" + target, json["id"]); localStorage.setItem("user-id_" + target, json["id"]);
console.log("user-id_" + target+":"+json["id"])
console.log(localStorage.getItem("user-id_"+target));
localStorage.setItem("prof_" + target, avatar); localStorage.setItem("prof_" + target, avatar);
obj[target] = ref; obj[target] = ref;
var json = JSON.stringify(obj); var json = JSON.stringify(obj);
@@ -620,7 +626,6 @@ function misskeyRefresh(obj,target,url){
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json);
return; return;
var avatar = json["user"]["avatarURL"]; var avatar = json["user"]["avatarURL"];
var priv = "public"; var priv = "public";
@@ -641,7 +646,6 @@ function misskeyRefresh(obj,target,url){
localStorage.setItem("user_" + target, json["user"]["username"]); localStorage.setItem("user_" + target, json["user"]["username"]);
localStorage.setItem("user-id_" + target, json["user"]["id"]); localStorage.setItem("user-id_" + target, json["user"]["id"]);
localStorage.setItem("prof_" + target, avatar); localStorage.setItem("prof_" + target, avatar);
console.log(obj);
var json = JSON.stringify(obj); var json = JSON.stringify(obj);
localStorage.setItem("multi", json); localStorage.setItem("multi", json);
load(); load();
@@ -662,7 +666,6 @@ function multisel() {
var templete; var templete;
var last = localStorage.getItem("main"); var last = localStorage.getItem("main");
var sel; var sel;
console.log(obj.length)
if (obj.length < 1) { if (obj.length < 1) {
$("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>'); $("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
$("#add-acct-sel").html('<option value="noauth">' + lang.lang_login_noauth + '</option>'); $("#add-acct-sel").html('<option value="noauth">' + lang.lang_login_noauth + '</option>');
@@ -690,12 +693,12 @@ function multisel() {
}); });
} }
$('select').material_select('update'); $('select').formSelect();
} }
function mainacct() { function mainacct() {
var acct_id = $("#main-acct-sel").val(); var acct_id = $("#main-acct-sel").val();
localStorage.setItem("main", acct_id); localStorage.setItem("main", acct_id);
Materialize.toast(lang.lang_manager_mainAcct, 3000); M.toast({ html: lang.lang_manager_mainAcct, displayLength: 3000 })
} }
function colorpicker(key) { function colorpicker(key) {
temp = temp =
@@ -776,16 +779,16 @@ input.addEventListener("focus", function() {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (!json.error) { if (!json.error) {
var urls = "Suggest:"; var urls = "Suggest:";
Object.keys(json.instances).forEach(function (key) { Object.keys(json.instances).forEach(function (key) {
var url = json.instances[key]; var url = json.instances[key];
urls = urls + ' <a onclick="login(\'' + url.name + urls = urls + ' <a onclick="login(\'' + url.name +
'\')" class="pointer">' + url.name + '</a> '; '\')" class="pointer">' + escapeHTML(url.name) + '</a> ';
}); });
$("#ins-suggest").html(urls); $("#ins-suggest").html(urls);
} else {
console.error(json.error);
} }
}); });
} }

View File

@@ -19,9 +19,8 @@
//メンションっぽかったら //メンションっぽかったら
var ats = []; var ats = [];
ats = url.match( 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) { if (toot) {
if (toot[1]) { if (toot[1]) {
var acct_id = $a.parent().attr("data-acct"); var acct_id = $a.parent().attr("data-acct");
@@ -35,21 +34,20 @@
} else if (tags) { } else if (tags) {
if (tags[2]) { if (tags[2]) {
tagShow(tags[2]); var acct_id = $a.parent().attr("data-acct");
Materialize.toast('<a class="btn-flat toast-action" href="detEx(\''+url+'\')">Open in browser</a>', 86400); if (!acct_id) {
acct_id = 0;
}
tl('tag', decodeURI(tags[2]), acct_id, 'add')
} }
} else if (ats) { } else if (ats) {
console.log(ats);
if (ats[2]) { if (ats[2]) {
if(ats[1]!="quesdon.rinsuki.net"){ //Quesdon判定
if (!~ats[2].indexOf("@")) {
udgEx(ats[2] + "@" + ats[1], "main"); udgEx(ats[2] + "@" + ats[1], "main");
return false return false
} else { } else {
const { postMessage(["openUrl", url], "*")
shell
} = require('electron');
shell.openExternal(url);
} }
@@ -58,12 +56,11 @@
//hrefがhttp/httpsならブラウザで //hrefがhttp/httpsならブラウザで
if (urls) { if (urls) {
if (urls[0]) { if (urls[0]) {
const {shell} = require('electron');
if (~url.indexOf("thedeks.top")) { if (~url.indexOf("thedeks.top")) {
//alert("If you recieve this alert, let the developer(Cutls@kirishima.cloud) know it with a screenshot."); //alert("If you recieve this alert, let the developer(Cutls@kirishima.cloud) know it with a screenshot.");
url = "https://thedesk.top"; url = "https://thedesk.top";
} }
shell.openExternal(url); postMessage(["openUrl", url], "*")
} else { } else {
location.href = url; location.href = url;
@@ -77,39 +74,6 @@
}); });
//よく使うライブラリ //よく使うライブラリ
/*マルチバイト用切り出し*/
$.isSurrogatePear = function(upper, lower) {
return 0xD800 <= upper && upper <= 0xDBFF && 0xDC00 <= lower && lower <= 0xDFFF;
};
$.mb_strlen = function(str) {
var ret = 0;
for (var i = 0; i < str.length; i++, ret++) {
var upper = str.charCodeAt(i);
var lower = str.length > (i + 1) ? str.charCodeAt(i + 1) : 0;
if ($.isSurrogatePear(upper, lower)) {
i++;
}
}
return ret;
};
$.mb_substr = function(str, begin, end) {
var ret = '';
for (var i = 0, len = 0; i < str.length; i++, len++) {
var upper = str.charCodeAt(i);
var lower = str.length > (i + 1) ? str.charCodeAt(i + 1) : 0;
var s = '';
if ($.isSurrogatePear(upper, lower)) {
i++;
s = String.fromCharCode(upper, lower);
} else {
s = String.fromCharCode(upper);
}
if (begin <= len && len < end) {
ret += s;
}
}
return ret;
};
//コピー //コピー
function execCopy(string) { function execCopy(string) {
@@ -119,16 +83,10 @@
var result = document.execCommand('copy'); var result = document.execCommand('copy');
return result; return result;
} }
//Nano
function nano(){
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('nano', "");
}
function progshow(e) { function progshow(e) {
if (e.lengthComputable) { if (e.lengthComputable) {
var percent = e.loaded / e.total; var percent = e.loaded / e.total;
console.log(percent * 100); console.log("Progress: " + percent * 100);
$("#imgsel").hide(); $("#imgsel").hide();
if (percent < 1) { if (percent < 1) {
$("#imgup").text(Math.floor(percent * 100) + "%"); $("#imgup").text(Math.floor(percent * 100) + "%");
@@ -137,30 +95,6 @@ function progshow(e) {
} }
} }
} }
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.on('reload', function (event, arg) {
location.reload();
})
ipc.on('mess', function (event, arg) {
if(arg=="unzip"){
if(lang=="ja"){
$("body").text("アップデートを展開中です。");
}else{
$("body").text("Unzipping...");
}
}
})
//Native Notf
ipc.on('shownotf', function (event, args) {
if(args["type"]=="toot"){
details(id, acct_id)
}else if(args["type"]=="userdata"){
udg(user, acct_id)
}
})
function opendev() { function opendev() {
var webview = document.getElementById("webview"); var webview = document.getElementById("webview");
webview.openDevTools(); webview.openDevTools();
@@ -170,11 +104,66 @@ function opendev(){
}); });
*/ */
} }
function playSound() {
var webviewDom = document.getElementById('webview'); window.AudioContext = window.AudioContext || window.webkitAudioContext;
const { context = new AudioContext();
shell context.createBufferSource().start(0);
} = require('electron'); context.decodeAudioData(request.response, function (buf) {
webviewDom.addEventListener('new-window', function(e) { console.log("Playing:" + source)
shell.openExternal(e.url); source.buffer = buf;
source.loop = false;
}); });
source = context.createBufferSource();
volumeControl = context.createGain();
source.connect(volumeControl);
volumeControl.connect(context.destination);
volumeControl.gain.value = 0.8
source.start(0);
}
onmessage = function (e) {
if (e.data[0] == "details") {
details(e.data[1][0], e.data[1][1])
} else if (e.data[0] == "udg") {
udg(e.data[1][0], e.data[1][1])
} else if (e.data[0] == "media") {
media(e.data[1][0], e.data[1][1], e.data[1][2])
} else if (e.data[0] == "post") {
post("pass")
} else if (e.data[0] == "toastSaved") {
M.toast({ html: lang.lang_img_DLDone + e.data[1][0] + '<button class="btn-flat toast-action" onclick="openFinder(\'' + e.data[1][1] + '\')">Show</button>', displayLength: 5000 })
} else if (e.data[0] == "toastMute") {
M.toast({ html: escapeHTML(e.data[1]) + lang.lang_parse_mute, displayLength: 2000 })
} else if (e.data[0] == "toastEmp") {
M.toast({ html: escapeHTML(e.data[1]) + lang.lang_status_emphas, displayLength: 2000 })
} else if (e.data[0] == "toastUnEmp") {
M.toast({ html: escapeHTML(e.data[1]) + lang.lang_status_unemphas, displayLength: 2000 })
} else if (e.data[0] == "parseColumn") {
parseColumn()
} else if (e.data[0] == "sortload") {
sortload()
} else if (e.data[0] == "exportSettingsCore") {
exportSettingsCore()
} else if (e.data[0] == "fontList") {
fontList(e.data[1])
} else if (e.data[0] == "customSoundSave") {
customSoundSave(e.data[1][0], e.data[1][1])
} else if (e.data[0] == "ctLoadCore") {
ctLoadCore(e.data[1])
} else if (e.data[0] == "ctLoad") {
ctLoad()
} else if (e.data[0] == "customConnect") {
customConnect(e.data[1])
} else if (e.data[0] == "clearCustomImport") {
clearCustomImport()
} else if (e.data[0] == "npCore") {
npCore(e.data[1]);
} else if (e.data[0] == "renderMem") {
renderMem(e.data[1][0], e.data[1][1], e.data[1][2])
} else if (e.data[0] == "updateProg") {
updateProg(e.data[1]);
} else if (e.data[0] == "updateMess") {
updateMess(e.data[1]);
} else if (e.data[0] == "renderAbout") {
renderAbout(e.data[1]);
}
}

View File

@@ -1,3 +1 @@
//jQuery読む //jQuery読む
window.jQuery = window.$ = require('./js/common/jquery.js');
var Hammer = require('./js/common/hammer.min.js');

View File

@@ -1,6 +1,3 @@
//jQuery読む
window.jQuery = window.$ = require('../../js/common/jquery.js');
var Hammer = require('../../js/common/hammer.min.js');
$.strip_tags = function (str, allowed) { $.strip_tags = function (str, allowed) {
if (!str) { if (!str) {
return ""; return "";
@@ -32,6 +29,13 @@ function nl2br(str) {
str = str.replace(/(\n|\r)/g, "<br />"); str = str.replace(/(\n|\r)/g, "<br />");
return str; return str;
} }
function br2nl(str) {
if (!str) {
return "";
}
str = str.replace(/<br \/>/g, "\r\n");
return str;
}
function formattime(date) { function formattime(date) {
var str = date.getFullYear() + "-"; var str = date.getFullYear() + "-";
if (date.getMonth() + 1 < 10) { if (date.getMonth() + 1 < 10) {
@@ -55,7 +59,7 @@ function formattime(date){
} else { } else {
str = str + date.getMinutes() str = str + date.getMinutes()
} }
return str; return escapeHTML(str);
} }
function formattimeutc(date) { function formattimeutc(date) {
var str = date.getUTCFullYear() + "-"; var str = date.getUTCFullYear() + "-";
@@ -80,29 +84,9 @@ function formattimeutc(date){
} else { } else {
str = str + date.getUTCMinutes() str = str + date.getUTCMinutes()
} }
return str; return escapeHTML(str);
} }
var electron = require("electron"); postMessage(["sendSinmpleIpc", "custom-css-request"], "*")
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() { function makeCID() {
return randomStr(8) + "-" + randomStr(4) + "-" + randomStr(4) + "-" + randomStr(4) + "-" + randomStr(12); return randomStr(8) + "-" + randomStr(4) + "-" + randomStr(4) + "-" + randomStr(4) + "-" + randomStr(12);
} }
@@ -116,15 +100,13 @@ function randomStr(l){
} }
return r; return r;
} }
function rgbToHex(color) function rgbToHex(color) {
{
// HEXに変換したものを代入する変数 // HEXに変換したものを代入する変数
var hex = ''; var hex = '';
// 第1引数がHEXのとき変換処理は必要ないのでそのままreturn // 第1引数がHEXのとき変換処理は必要ないのでそのままreturn
// IE8の場合はjQueryのcss()関数でHEXを返すので除外 // IE8の場合はjQueryのcss()関数でHEXを返すので除外
if (color.match(/^#[a-f\d]{3}$|^#[a-f\d]{6}$/i)) if (color.match(/^#[a-f\d]{3}$|^#[a-f\d]{6}$/i)) {
{
return color; return color;
} }
@@ -132,8 +114,7 @@ function rgbToHex(color)
var regex = color.match(/^rgb\(([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\)$/); var regex = color.match(/^rgb\(([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\)$/);
// 正規表現でマッチしたとき // 正規表現でマッチしたとき
if (regex) if (regex) {
{
var rgb = var rgb =
[ [
// RGBからHEXへ変換 // RGBからHEXへ変換
@@ -142,12 +123,10 @@ function rgbToHex(color)
parseInt(regex[3]).toString(16) parseInt(regex[3]).toString(16)
]; ];
for (var i = 0; i < rgb.length; ++i) for (var i = 0; i < rgb.length; ++i) {
{
// rgb(1,1,1)のようなときHEXに変換すると1桁になる // rgb(1,1,1)のようなときHEXに変換すると1桁になる
// 1桁のときは前に0を足す // 1桁のときは前に0を足す
if (rgb[i].length == 1) if (rgb[i].length == 1) {
{
rgb[i] = '0' + rgb[i]; rgb[i] = '0' + rgb[i];
} }
hex += rgb[i]; hex += rgb[i];
@@ -158,3 +137,37 @@ function rgbToHex(color)
console.error(color + ':第1引数はRGB形式で入力'); console.error(color + ':第1引数はRGB形式で入力');
} }
/*マルチバイト用切り出し*/
$.isSurrogatePear = function (upper, lower) {
return 0xD800 <= upper && upper <= 0xDBFF && 0xDC00 <= lower && lower <= 0xDFFF;
};
$.mb_strlen = function (str) {
var ret = 0;
for (var i = 0; i < str.length; i++ , ret++) {
var upper = str.charCodeAt(i);
var lower = str.length > (i + 1) ? str.charCodeAt(i + 1) : 0;
if ($.isSurrogatePear(upper, lower)) {
i++;
}
}
return ret;
};
$.mb_substr = function (str, begin, end) {
var ret = '';
for (var i = 0, len = 0; i < str.length; i++ , len++) {
var upper = str.charCodeAt(i);
var lower = str.length > (i + 1) ? str.charCodeAt(i + 1) : 0;
var s = '';
if ($.isSurrogatePear(upper, lower)) {
i++;
s = String.fromCharCode(upper, lower);
} else {
s = String.fromCharCode(upper);
}
if (begin <= len && len < end) {
ret += s;
}
}
return ret;
};
localStorage.removeItem("errors");

View File

@@ -14,7 +14,6 @@ function tl(data) {
$("#notice_nano").text(cap(type, data) + " TL(" + localStorage.getItem( $("#notice_nano").text(cap(type, data) + " TL(" + localStorage.getItem(
"user_" + acct_id) + "@" + domain + ")"); "user_" + acct_id) + "@" + domain + ")");
var start = "https://" + domain + "/api/v1/timelines/" + com(type, data); var start = "https://" + domain + "/api/v1/timelines/" + com(type, data);
console.log(start);
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -46,17 +45,12 @@ var websocket=[];
var start = "wss://" + domain + var start = "wss://" + domain +
"/api/v1/streaming/?stream=hashtag&tag=" + data + "&access_token=" + at; "/api/v1/streaming/?stream=hashtag&tag=" + data + "&access_token=" + at;
} }
console.log(start);
var wsid = websocket.length; var wsid = websocket.length;
websocket[wsid] = new WebSocket(start); websocket[wsid] = new WebSocket(start);
websocket[wsid].onopen = function (mess) { websocket[wsid].onopen = function (mess) {
console.log(tlid + ":Connect Streaming API:" + type);
console.log(mess);
$("#notice_icon_" + tlid).removeClass("red-text"); $("#notice_icon_" + tlid).removeClass("red-text");
} }
websocket[wsid].onmessage = function (mess) { websocket[wsid].onmessage = function (mess) {
console.log(tlid + ":Receive Streaming API:");
console.log(websocket[wsid]);
var typeA = JSON.parse(mess.data).event; var typeA = JSON.parse(mess.data).event;
if (typeA == "delete") { if (typeA == "delete") {
var obj = JSON.parse(mess.data).payload; var obj = JSON.parse(mess.data).payload;
@@ -64,12 +58,11 @@ var websocket=[];
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove(); $("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
} else if (typeA == "update") { } else if (typeA == "update") {
var obj = JSON.parse(JSON.parse(mess.data).payload); var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
var templete = parse([obj], '', acct_id, tlid); var templete = parse([obj], '', acct_id, tlid);
$("#timeline_nano").html(templete); $("#timeline_nano").html(templete);
} }
websocket[wsid].onclose = function (mess) { websocket[wsid].onclose = function (mess) {
console.log("Close Streaming API:" + type); console.error("Close Streaming API:" + type);
} }
} }
websocket[wsid].onerror = function (error) { websocket[wsid].onerror = function (error) {

250
app/js/platform/preload.js Normal file
View File

@@ -0,0 +1,250 @@
var electron = require("electron");
const shell = electron.shell;
var ipc = electron.ipcRenderer;
onmessage = function (e) {
if (e.data[0] == "openUrl") {
urls = e.data[1].match(/https?:\/\/(.+)/);
if (urls) {
shell.openExternal(e.data[1]);
}
} else if (e.data[0] == "sendSinmpleIpc") {
ipc.send(e.data[1], "")
} else if (e.data[0] == "dialogStore") {
ipc.send("dialogStore", e.data[1])
} else if (e.data[0] == "bmpImage") {
ipc.send('bmp-image', e.data[1]);
} else if (e.data[0] == "dialogCW") {
ipc.send("dialogCW", e.data[1])
} else if (e.data[0] == "nativeNotf") {
console.log(e.data[1])
ipc.send('native-notf', e.data[1]);
} else if (e.data[0] == "dialogClient") {
ipc.send("dialogClient", e.data[1])
} else if (e.data[0] == "generalDL") {
ipc.send('general-dl', e.data[1]);
} else if (e.data[0] == "openFinder") {
ipc.send('open-finder', e.data[1]);
} else if (e.data[0] == "columnDel") {
ipc.send('column-del', e.data[1]);
} else if (e.data[0] == "lang") {
ipc.send('lang', e.data[1]);
} else if (e.data[0] == "exportSettings") {
ipc.send('exportSettings', e.data[1]);
} else if (e.data[0] == "importSettings") {
ipc.send('importSettings', e.data[1]);
} else if (e.data[0] == "customSound") {
ipc.send('customSound', e.data[1]);
} else if (e.data[0] == "themeJsonDelete") {
ipc.send('theme-json-delete', e.data[1]);
} else if (e.data[0] == "themeJsonCreate") {
ipc.send('theme-json-create', e.data[1]);
} else if (e.data[0] == "themeJsonRequest") {
ipc.send('theme-json-request', e.data[1]);
} else if (e.data[0] == "ha") {
ipc.send('ha', e.data[1]);
} else if (e.data[0] == "aboutData") {
ipc.send('aboutData', "");
} else if (e.data[0] == "itunes") {
console.log("NowPlaying" + ipc.listenerCount('itunes-np'))
if (ipc.listenerCount('itunes-np') > 1) {
return false;
} else {
ipc.send("itunes", e.data[1])
}
} else if (e.data[0] == "themeCSSRequest") {
ipc.send('theme-css-request', e.data[1]);
} else if (e.data[0] == "downloadButton") {
ipc.send('download-btn', e.data[1]);
}
}
//version.js
ipc.send("getPlatform", "")
ipc.on('platform', function (event, args) {
localStorage.setItem("platform", args[0])
localStorage.setItem("bit", args[1])
localStorage.setItem("about", JSON.stringify([args[2], args[3], args[4]]))
})
ipc.on('winstore', function (event, arg) {
localStorage.setItem("winstore", arg)
})
ipc.on('reload', function (event, arg) {
location.reload();
})
//Native Notf
ipc.on('shownotf', function (event, args) {
if (args["type"] == "toot") {
postMessage(["details", [id, acct_id]], "*")
} else if (args["type"] == "userdata") {
postMessage(["udg", [user, acct_id]], "*")
}
})
function nano() {
ipc.send('nano', "");
}
//first.js
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)
})
//img.js
ipc.on('bmp-img-comp', function (event, b64) {
postMessage(["media", [b64[0], "image/png", b64[1]]], "*")
});
//post.js
ipc.on('dialogCWRender', function (event, arg) {
if (arg === 1) {
$("#cw-text").show();
$("#cw").addClass("yellow-text");
$("#cw").addClass("cw-avail");
$("#cw-text").val(plus);
postMessage(["post", ""], "*")
} else if (arg === 2) {
postMessage(["post", ""], "*")
}
});
//parse.js
ipc.on('dialogClientRender', function (event, arg) {
if (arg === 1) {
var cli = localStorage.getItem("client_emp");
var obj = JSON.parse(cli);
if (!obj) {
var obj = [];
obj.push(name);
postMessage(["toastEmp", name], "*")
} else {
var can;
Object.keys(obj).forEach(function (key) {
var cliT = obj[key];
if (cliT != name && !can) {
can = false;
} else {
can = true;
obj.splice(key, 1);
postMessage(["toastUnEmp", name], "*")
}
});
if (!can) {
obj.push(name);
postMessage(["toastEmp", name], "*")
} else {
}
}
var json = JSON.stringify(obj);
localStorage.setItem("client_emp", json);
} else if (arg === 2) {
var cli = localStorage.getItem("client_mute");
var obj = JSON.parse(cli);
if (!obj) {
obj = [];
}
obj.push(name);
var json = JSON.stringify(obj);
localStorage.setItem("client_mute", json);
postMessage(["toastMute", name], "*")
} else {
return;
}
parseColumn();
});
//ui,img.js
ipc.on('general-dl-prog', function (event, arg) {
console.log("Progress: " + arg);
})
ipc.on('general-dl-message', function (event, arg) {
var argC = arg.replace(/\\/g, "\\\\") + "\\\\.";
console.log("saved")
postMessage(["toastSaved", [arg, argC]], "*")
})
//layout.js
ipc.on('column-del-reply', function (event, args) {
if (args[0] === 1) {
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
localStorage.removeItem("card_" + args[1]);
obj.splice(args[1], 1);
for (var i = 0; i < obj.length; i++) {
localStorage.setItem("card_" + i, "true");
localStorage.removeItem("catch_" + i);
}
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
postMessage(["parseColumn", ""], "*")
postMessage(["sortload", ""], "*")
}
})
//setting.js
ipc.on('langres', function (event, arg) {
location.href = "../" + lang + "/setting.html"
});
ipc.on('exportSettingsFile', function (event, savedFiles) {
var exp = exportSettingsCore()
ipc.send('export', [savedFiles, JSON.stringify(exp)]);
alert("Done.")
//cards
//lang
});
ipc.on('config', function (event, arg) {
postMessage(["importSettingsCore", arg], "*")
});
ipc.on('savefolder', function (event, arg) {
localStorage.setItem("savefolder", arg);
});
ipc.on('font-list', function (event, arg) {
postMessage(["fontList", arg], "*")
});
ipc.on('customSoundRender', function (event, args) {
postMessage(["customSoundSave", [args[0], args[1]]], "*")
});
ipc.on('theme-json-list-response', function (event, args) {
postMessage(["ctLoadCore", args], "*")
});
ipc.on('theme-json-delete-complete', function (event, args) {
postMessage(["ctLoad", ""], "*")
});
ipc.on('theme-json-response', function (event, args) {
postMessage(["customConnect", args], "*")
});
ipc.on('theme-json-create-complete', function (event, args) {
postMessage(["clearCustomImport", ""], "*")
postMessage(["ctLoad", ""], "*")
});
//spotify.js
ipc.once('itunes-np', function (event, arg) {
postMessage(["npCore", arg], "*")
})
//tips.js
ipc.on('memory', function (event, arg) {
var use = arg[0];
var cpu = arg[1];
var total = arg[2]
postMessage(["renderMem", [use, cpu, total]], "*")
})
//update.html
ipc.on('prog', function (event, arg) {
postMessage(["updateProg", arg], "*")
})
ipc.on('mess', function (event, arg) {
postMessage(["updateMess", arg], "*")
})
var webviewDom = document.getElementById('webview');
if (webviewDom) {
webviewDom.addEventListener('new-window', function (e) {
shell.openExternal(e.url);
});
}

View File

@@ -1,51 +0,0 @@
var electron = require("electron");
const fs = require("fs");
const os = require('os')
const shell = electron.shell;
const path = require('path')
function shot(){
//screenshotMsg.textContent = 'Gathering screens...'
$(window).height
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(location.search){
var m = location.search.match(/\?id=([a-zA-Z-0-9]+)/);
var title=m[1];
}else{
var title="screenshot";
}
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;
var h = $(window).height()-150;
var w = $(window).width();
ipc.send('shot', ['file://' + screenshotPath,w,h,b64[1],title]);
if($(".img-parsed").length>0){
for(i=0;i<$(".img-parsed").length;i++){
var url=$(".img-parsed").eq(i).attr("data-url");
ipc.send('shot-img-dl', [url,title+"_img"+i+".png"]);
}
}
window.close();
return;
const message = `Saved screenshot to: ${screenshotPath}`
//screenshotMsg.textContent = message
}
})
})
}

View File

@@ -40,7 +40,7 @@ function mdCheck(){
$("#trendtag").html(""); $("#trendtag").html("");
} }
if (localStorage.getItem("mode_" + domain) == "misskey") { if (localStorage.getItem("mode_" + domain) == "misskey") {
Materialize.toast(lang.lang_bbmd_misskey, 5000); M.toast({ html: lang.lang_bbmd_misskey, displayLength: 5000 })
} }
if (idata[domain + "_letters"]) { if (idata[domain + "_letters"]) {
$("#textarea").attr("data-length", idata[domain + "_letters"]) $("#textarea").attr("data-length", idata[domain + "_letters"])

View File

@@ -4,7 +4,7 @@ $("#emoji-before").addClass("disabled");
$("#emoji-next").addClass("disabled"); $("#emoji-next").addClass("disabled");
//絵文字ボタンのトグル //絵文字ボタンのトグル
function emojiToggle() { function emojiToggle(reaction) {
var acct_id = $("#post-acct-sel").val(); var acct_id = $("#post-acct-sel").val();
var selin = $("#textarea").prop('selectionStart'); var selin = $("#textarea").prop('selectionStart');
if (!selin) { if (!selin) {
@@ -21,7 +21,7 @@ function emojiToggle() {
'<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet(\'true\');">' + lang.lang_emoji_get + '</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); $("#emoji-list").html(html);
} else { } else {
emojiList('home'); emojiList('home', reaction);
} }
} else { } else {
$("#poll").addClass("hide") $("#poll").addClass("hide")
@@ -34,10 +34,11 @@ function emojiToggle() {
} }
//絵文字リスト挿入 //絵文字リスト挿入
function emojiGet(parse) { function emojiGet(parse, started) {
$('#emoji-list').html('Loading...'); $('#emoji-list').text('Loading...');
var acct_id = $("#post-acct-sel").val(); var acct_id = $("#post-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
if (localStorage.getItem("mode_" + domain) != "misskey") {
var start = "https://" + domain + "/api/v1/custom_emojis"; var start = "https://" + domain + "/api/v1/custom_emojis";
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
@@ -51,7 +52,7 @@ function emojiGet(parse) {
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
if (parse == "true") { if (parse == "true") {
$('#emoji-list').html('Parsing...'); $('#emoji-list').text('Parsing...');
//絵文字をマストドン公式と同順にソート //絵文字をマストドン公式と同順にソート
json.sort(function (a, b) { json.sort(function (a, b) {
if (a.shortcode < b.shortcode) return -1; if (a.shortcode < b.shortcode) return -1;
@@ -63,14 +64,67 @@ function emojiGet(parse) {
localStorage.setItem("emoji_" + acct_id, JSON.stringify(json)); localStorage.setItem("emoji_" + acct_id, JSON.stringify(json));
} }
localStorage.setItem("emojiseek", 0); localStorage.setItem("emojiseek", 0);
if (!started) {
emojiList('home') 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
})
});
if (parse == "true") {
$('#emoji-list').text('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) { function emojiList(target, reaction) {
$("#now-emoji").text(lang.lang_emoji_custom); $("#now-emoji").text(lang.lang_emoji_custom);
var acct_id = $("#post-acct-sel").val(); 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"); var start = localStorage.getItem("emojiseek");
if (target == "next") { if (target == "next") {
var start = start * 1 + 127; var start = start * 1 + 127;
@@ -103,9 +157,15 @@ function emojiList(target) {
for (i = start; i < start + 126; i++) { for (i = start; i < start + 126; i++) {
var emoji = obj[i]; var emoji = obj[i];
if (emoji) { if (emoji) {
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 + html = html + '<a onclick="emojiInsert(\':' + emoji.shortcode +
':\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>'; ':\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
} }
}
} }
$("#emoji-list").html(html); $("#emoji-list").html(html);
} }
@@ -114,22 +174,26 @@ function emojiList(target) {
function emojiInsert(code, del) { function emojiInsert(code, del) {
var now = $("#textarea").val(); var now = $("#textarea").val();
var selin = localStorage.getItem("cursor"); var selin = localStorage.getItem("cursor");
console.log(selin); if (localStorage.getItem("emoji-zero-width") == "yes") {
var brank = "";
} else {
var brank = " ";
}
var now = $("#textarea").val(); var now = $("#textarea").val();
if (selin > 0) { if (selin > 0) {
var before = now.substr(0, selin); var before = now.substr(0, selin);
var after = now.substr(selin, now.length); var after = now.substr(selin, now.length);
newt = before + " "+ code+" " + after; newt = before + brank + code + brank + after;
} else { } else {
newt = code+" "; newt = code + brank;
} }
if (!del) { if (!del) {
$("#textarea").val(newt); $("#textarea").val(newt);
//emoji(); //emoji();
} else { } else {
var regExp = new RegExp(del, "g"); var regExp = new RegExp(del.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
var now = now.replace(regExp, ""); var now = now.replace(regExp, "");
$("#textarea").val(now + " " + code); $("#textarea").val(now + brank + code);
} }
$("#textarea").focus(); $("#textarea").focus();

View File

@@ -36,13 +36,11 @@ $("#drag").on('dragleave', function(e) {
//複数アップ //複数アップ
function pimg(files) { function pimg(files) {
console.log(files); console.table(files);
for (i = 0; i < files.length; i++) { for (i = 0; i < files.length; i++) {
var dot = files[i].path.match(/\.(.+)$/)[1]; var dot = files[i].path.match(/\.(.+)$/)[1];
if (dot == "bmp" || dot == "BMP") { if (dot == "bmp" || dot == "BMP") {
var electron = require("electron"); postMessage(["bmpImage", [files[i].path, i]], "*")
var ipc = electron.ipcRenderer;
ipc.send('bmp-image', [files[i].path,i]);
todo(lang.lang_progress); todo(lang.lang_progress);
} else { } else {
@@ -50,18 +48,13 @@ function pimg(files) {
} }
} }
} }
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.on('bmp-img-comp', function (event, b64) {
media(b64[0],"image/png",b64[1]);
});
//ドラッグ・アンド・ドロップを終了 //ドラッグ・アンド・ドロップを終了
function closedrop() { function closedrop() {
$("#drag").css('display', 'none'); $("#drag").css('display', 'none');
} }
//ファイル選択 //ファイル選択
function fileselect() { function fileselect() {
ipc.send('file-select', ""); postMessage(["sendSinmpleIpc", "file-select"], "*")
} }
//ファイル読み込み //ファイル読み込み
@@ -95,7 +88,6 @@ function media(b64, type, no) {
localStorage.setItem("image", "busy"); localStorage.setItem("image", "busy");
todo("Image Upload..."); todo("Image Upload...");
var media = toBlob(b64, type); var media = toBlob(b64, type);
console.log(media);
var fd = new FormData(); var fd = new FormData();
fd.append('file', media); fd.append('file', media);
var acct_id = $("#post-acct-sel").val(); var acct_id = $("#post-acct-sel").val();
@@ -128,7 +120,6 @@ function media(b64, type, no) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json);
var img = localStorage.getItem("img"); var img = localStorage.getItem("img");
if (json.type.indexOf("image") != -1) { if (json.type.indexOf("image") != -1) {
var html = '<img src="' + json[previewer] + '" class="preview-img pointer" data-media="' + json["id"] + '" onclick="deleteImage(\'' + json["id"] + '\')" title="' + lang.lang_postimg_delete + '">'; var html = '<img src="' + json[previewer] + '" class="preview-img pointer" data-media="' + json["id"] + '" onclick="deleteImage(\'' + json["id"] + '\')" title="' + lang.lang_postimg_delete + '">';
@@ -151,9 +142,9 @@ function media(b64, type, no) {
} }
todc(); todc();
$(".toot-btn-group").prop("disabled", false); $(".toot-btn-group").prop("disabled", false);
$('select').material_select(); $('select').formSelect();
$("#mec").text(lang.lang_there); $("#mec").text(lang.lang_there);
Materialize.toast(lang.lang_postimg_aftupload, 1000); M.toast({ html: lang.lang_postimg_aftupload, displayLength: 1000 })
$("#imgup").text(""); $("#imgup").text("");
$("#imgsel").show(); $("#imgsel").show();
localStorage.removeItem("image"); localStorage.removeItem("image");
@@ -182,23 +173,20 @@ function toBlob(base64, type) {
//画像を貼り付けたら… //画像を貼り付けたら…
var element = document.querySelector("#textarea"); var element = document.querySelector("#textarea");
element.addEventListener("paste", function (e) { element.addEventListener("paste", function (e) {
console.log(e) if (!e.clipboardData || !e.clipboardData.items) {
// 画像の場合 return true;
// e.clipboardData.types.length == 0 }
// かつ // DataTransferItemList に画像が含まれいない場合は終了する
// e.clipboardData.types[0] == "Files" var imageItems = [...e.clipboardData.items].filter(i => i.type.startsWith('image'));
// となっているので、それ以外を弾く if (imageItems.length == 0) {
if (!e.clipboardData console.warn("it is not image")
|| !e.clipboardData.types
|| (e.clipboardData.types.length != 1)
|| (e.clipboardData.types[0] != "Files")) {
console.log("not image")
return true; return true;
} }
// ファイルとして得る // ファイルとして得る
// (なぜかgetAsStringでは上手くいかなかった) // DataTransferItem の kind は file なので getAsString ではなく getAsFile を呼ぶ
var imageFile = e.clipboardData.items[0].getAsFile(); var imageFile = imageItems[0].getAsFile();
var imageType = imageItems[0].type;
// FileReaderで読み込む // FileReaderで読み込む
var fr = new FileReader(); var fr = new FileReader();
@@ -209,22 +197,14 @@ element.addEventListener("paste", function(e){
if (mediav) { if (mediav) {
var i = mediav.split(",").length; var i = mediav.split(",").length;
} }
media(base64, "image/png", i) // DataTransferItem の type に mime tipes があるのでそれを使う
media(base64, imageType, i)
}; };
fr.readAsDataURL(imageFile); fr.readAsDataURL(imageFile);
// 画像以外がペーストされたときのために、元に戻しておく // 画像以外がペーストされたときのために、元に戻しておく
}); });
//Adobeフォトエディタ
function adobe(){
var agree = localStorage.getItem("adobeagree");
ipc.send('adobe', agree);
}
ipc.on('adobeagree', function (event, arg) {
localStorage.setItem("adobeagree",arg);
});
function deleteImage(key) { function deleteImage(key) {
console.log(key);
if (!confirm(lang.lang_postimg_delete)) { if (!confirm(lang.lang_postimg_delete)) {
return false; return false;
} }

View File

@@ -17,7 +17,7 @@ function renote(id, acct_id, remote) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json); console.log(["Success: renote", json]);
$("[toot-id=" + id + "]").addClass("rted"); $("[toot-id=" + id + "]").addClass("rted");
$(".rt_" + id).toggleClass("teal-text"); $(".rt_" + id).toggleClass("teal-text");
} }
@@ -31,7 +31,7 @@ function renoteqt(id, acct_id) {
$("#rec").text("Renote"); $("#rec").text("Renote");
$("#post-acct-sel").val(acct_id); $("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true); $("#post-acct-sel").prop("disabled", true);
$('select').material_select(); $('select').formSelect();
$("#textarea").attr("placeholder", lang.lang_misskeyparse_qt); $("#textarea").attr("placeholder", lang.lang_misskeyparse_qt);
$("#textarea").focus(); $("#textarea").focus();
} }
@@ -43,7 +43,7 @@ function misskeyreply(id, acct_id) {
$("#rec").text("Renote"); $("#rec").text("Renote");
$("#post-acct-sel").val(acct_id); $("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true); $("#post-acct-sel").prop("disabled", true);
$('select').material_select(); $('select').formSelect();
$("#textarea").attr("placeholder", lang.lang_misskeyparse_qt); $("#textarea").attr("placeholder", lang.lang_misskeyparse_qt);
$("#textarea").focus(); $("#textarea").focus();
} }
@@ -63,12 +63,12 @@ function reactiontoggle(id,acct_id,tlid){
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json); console.log(["Success: reaction", json]);
if(json.reactionCounts){ if (json.reactions) {
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"]; var reactions = ["like", "love", "laugh", "hmm", "surprise", "congrats", "angry", "confused", "pudding", "rip"];
for (var i = 0; i < reactions.length; i++) { for (var i = 0; i < reactions.length; i++) {
if(json.reactionCounts[reactions[i]]){ if (json.reactions[reactions[i]]) {
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]]) $("#pub_" + id + " .re-" + reactions[i] + "ct").text(json.reactions[reactions[i]])
$("#pub_" + id + " .re-" + reactions[i]).removeClass("hide") $("#pub_" + id + " .re-" + reactions[i]).removeClass("hide")
} else { } else {
$("#pub_" + id + " .re-" + reactions[i] + "ct").text(0) $("#pub_" + id + " .re-" + reactions[i] + "ct").text(0)
@@ -77,7 +77,7 @@ function reactiontoggle(id,acct_id,tlid){
} else { } else {
$("#pub_" + id + " .re-" + reactions[i]).removeClass("hide") $("#pub_" + id + " .re-" + reactions[i]).removeClass("hide")
} }
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]]) $("#pub_" + id + " .re-" + reactions[i] + "ct").text(json.reactions[reactions[i]])
} }
} }
$("#pub_" + id + " .reactions").removeClass("hide"); $("#pub_" + id + " .reactions").removeClass("hide");
@@ -94,6 +94,20 @@ 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').formSelect();
localStorage.setItem("nohide", true);
show()
emojiToggle(true)
$("#left-side").hide();
$("#default-emoji").hide();
} }
function reactRefresh(acct_id, id) { function reactRefresh(acct_id, id) {
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
@@ -107,7 +121,6 @@ function reactRefresh(acct_id,id){
method: "POST", method: "POST",
body: JSON.stringify(req), body: JSON.stringify(req),
} }
console.log(req)
fetch(start, i, fetch(start, i,
).then(function (response) { ).then(function (response) {
return response.json(); return response.json();
@@ -119,29 +132,40 @@ function reactRefresh(acct_id,id){
return false; return false;
} }
var poll = ""; var poll = "";
console.log(json); if (json.error) {
$("[toot-id=" + id + "]").hide();
$("[toot-id=" + id + "]").remove();
} else {
reactRefreshCore(json) reactRefreshCore(json)
}
}); });
} }
function reactRefreshCore(json) { function reactRefreshCore(json) {
var id = json.id; var id = json.id;
if(json.reactionCounts){ if (json.reactions) {
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
$("#pub_" + id + " .reactions").removeClass("hide") $("#pub_" + id + " .reactions").removeClass("hide")
for(var i=0;i<reactions.length;i++){ var regExp = new RegExp(":", "g");
if(json.reactionCounts[reactions[i]]){ Object.keys(json.reactions).forEach(function (keye) {
console.log(json.reactionCounts[reactions[i]]) keyeClass = keye.replace(regExp, '');
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]]) if (json.reactions[keye]) {
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide") $("#pub_" + id + " .re-" + keyeClass + "ct").text(json.reactions[keye])
$("#pub_" + id + " .re-" + keyeClass).removeClass("hide")
} else { } else {
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(0) $("#pub_" + id + " .re-" + keyeClass + "ct").text(0)
if ($("#pub_" + id + " .reactions").hasClass("fullreact")) { 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.reactions[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) { function reaction(mode, id, acct_id, tlid) {
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
@@ -208,7 +232,7 @@ function voterefresh(acct_id,id){
} else { } else {
var myvote = ""; var myvote = "";
} }
poll=poll+'<div class="pointer vote" onclick="vote(\''+acct_id+'\',\''+json.id+'\','+choice.id+')">'+choice.text+'('+choice.votes+''+myvote+')</div>'; poll = poll + '<div class="pointer vote" onclick="vote(\'' + acct_id + '\',\'' + json.id + '\',' + choice.id + ')">' + escapeHTML(choice.text) + '(' + choice.votes + '' + myvote + ')</div>';
}); });
$(".vote_" + json.id).html(poll) $(".vote_" + json.id).html(poll)
} }

View File

@@ -47,9 +47,6 @@ function post(mode,postvis) {
} }
if (domain != "kirishima.cloud") { if (domain != "kirishima.cloud") {
if (mode != "pass" && !$("#cw").hasClass("cw-avail") && (str.length > cw_sent || (str.split("\n").length - 1) > cw_ltres)) { 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;
var dialog=remote.dialog;
var plus = str.replace(/\n/g, "").slice(0, 10) + "..."; var plus = str.replace(/\n/g, "").slice(0, 10) + "...";
const options = { const options = {
type: 'info', type: 'info',
@@ -57,17 +54,7 @@ function post(mode,postvis) {
message: lang.lang_post_cwtxt + plus, message: lang.lang_post_cwtxt + plus,
buttons: [lang.lang_post_btn1, lang.lang_post_btn2, lang.lang_post_btn3] buttons: [lang.lang_post_btn1, lang.lang_post_btn2, lang.lang_post_btn3]
} }
dialog.showMessageBox(options, function(arg) { postMessage(["dialogCW", options], "*")
if(arg===1){
$("#cw-text").show();
$("#cw").addClass("yellow-text");
$("#cw").addClass("cw-avail");
$("#cw-text").val(plus);
post("pass");
}else if(arg===2){
post("pass");
}
})
return false; return false;
} }
} }
@@ -129,7 +116,7 @@ function post(mode,postvis) {
} }
if ($("#sch-box").hasClass("sch-avail")) { if ($("#sch-box").hasClass("sch-avail")) {
var scheduled = formattimeutc(new Date(Date.parse($("#sch-date").val()))) var scheduled = formattimeutc(new Date(Date.parse($("#sch-date").val())))
console.log(scheduled) console.log("This toot will be posted at:" + scheduled)
schedule(); schedule();
toot.scheduled_at = scheduled; toot.scheduled_at = scheduled;
} else { } else {
@@ -164,7 +151,7 @@ function post(mode,postvis) {
hide_totals: htt hide_totals: htt
} }
} }
console.log(toot); console.table(toot);
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true); httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json'); httpreq.setRequestHeader('Content-Type', 'application/json');
@@ -218,9 +205,9 @@ function misskeyPost(){
} }
var vis = $("#vis").text(); var vis = $("#vis").text();
if (vis == "unlisted") { if (vis == "unlisted") {
vis=="home" vis = "home"
} else if (vis == "direct") { } else if (vis == "direct") {
vis=="specified"; vis = "specified";
toot.visibleUserIds = str.match(/@([a-zA-Z0-9_@.-]+)(\s|$)/g).join('').split("@"); toot.visibleUserIds = str.match(/@([a-zA-Z0-9_@.-]+)(\s|$)/g).join('').split("@");
} }
if (vis != "inherit") { if (vis != "inherit") {
@@ -245,7 +232,7 @@ function misskeyPost(){
localStorage.removeItem("stable") localStorage.removeItem("stable")
} }
var json = httpreq.response; var json = httpreq.response;
console.log(json); console.log(["Success: toot", json]);
var box = localStorage.getItem("box"); var box = localStorage.getItem("box");
if (box == "yes") { if (box == "yes") {
hide(); hide();
@@ -298,7 +285,7 @@ function clear() {
$("#post-acct-sel").prop("disabled", false); $("#post-acct-sel").prop("disabled", false);
$("#days_poll").val(0); $("#days_poll").val(0);
$("#hours_poll").val(0); $("#hours_poll").val(0);
$("#mins_poll").val(0); $("#mins_poll").val(6);
$(".mastodon-choice").map(function () { $(".mastodon-choice").map(function () {
$(this).val(""); $(this).val("");
}); });
@@ -306,5 +293,9 @@ function clear() {
if (localStorage.getItem("mainuse") == "main") { if (localStorage.getItem("mainuse") == "main") {
$("#post-acct-sel").val(localStorage.getItem("main")); $("#post-acct-sel").val(localStorage.getItem("main"));
} }
$('select').material_select(); $('select').formSelect();
$("#left-side").show();
$("#default-emoji").show();
$("#unreact").show();
$("#addreact").addClass("hide");
} }

View File

@@ -45,11 +45,13 @@ function vis(set){
var acct_id = $("#post-acct-sel").val(); var acct_id = $("#post-acct-sel").val();
localStorage.setItem("vis-memory-" + acct_id, set); localStorage.setItem("vis-memory-" + acct_id, set);
} }
$('.dropdown-button').dropdown('close'); var ins = M.Dropdown.getInstance($('#dropdown1'))
if(ins){
ins.close();
}
} }
function loadVis() { function loadVis() {
var vist = localStorage.getItem("vis"); var vist = localStorage.getItem("vis");
console.log(vist);
if (!vist) { if (!vist) {
vis("public"); vis("public");
} else { } else {
@@ -123,7 +125,6 @@ function schedule(){
$("#sch-box").show(); $("#sch-box").show();
$("#sch-date").val(formattime(date)); $("#sch-date").val(formattime(date));
console.log(formattime(date));
$("#sch-box").addClass("sch-avail"); $("#sch-box").addClass("sch-avail");
} }
} }

View File

@@ -43,7 +43,7 @@ function fav(id, acct_id, remote) {
$(".fav_" + id).addClass("yellow-text"); $(".fav_" + id).addClass("yellow-text");
} }
} else { } else {
Materialize.toast(lang.lang_status_favWarn, 1000); M.toast({ html: lang.lang_status_favWarn, displayLength: 1000 })
} }
} }
} }
@@ -68,7 +68,7 @@ function rt(id, acct_id, remote) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json); console.log(["Success: boost", json]);
if (remote != "remote") { if (remote != "remote") {
$("[toot-id=" + id + "] .fav_ct").text(json.favourites_count); $("[toot-id=" + id + "] .fav_ct").text(json.favourites_count);
if (!json.reblog) { if (!json.reblog) {
@@ -90,7 +90,7 @@ function rt(id, acct_id, remote) {
$(".rt_" + id).addClass("teal-text"); $(".rt_" + id).addClass("teal-text");
} }
} else { } else {
Materialize.toast(lang.lang_status_btWarn, 1000); M.toast({ html: lang.lang_status_btWarn, displayLength: 1000 })
} }
} }
} }
@@ -128,7 +128,6 @@ function follow(acct_id,remote) {
var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag; var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
var ent = {} var ent = {}
} }
console.log(ent);
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true); httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json'); httpreq.setRequestHeader('Content-Type', 'application/json');
@@ -138,7 +137,7 @@ function follow(acct_id,remote) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json); console.log(["Success: folllow", json]);
if ($("#his-data").hasClass("following")) { if ($("#his-data").hasClass("following")) {
$("#his-data").removeClass("following"); $("#his-data").removeClass("following");
$("#his-follow-btn").text(lang.lang_status_follow); $("#his-follow-btn").text(lang.lang_status_follow);
@@ -236,6 +235,8 @@ function del(id, acct_id) {
httpreq.setRequestHeader('Content-Type', 'application/json'); httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = "json"; httpreq.responseType = "json";
httpreq.send(JSON.stringify({ i: at, noteId: id })); httpreq.send(JSON.stringify({ i: at, noteId: id }));
$("[toot-id=" + id + "]").hide();
$("[toot-id=" + id + "]").remove();
} else { } else {
var start = "https://" + domain + "/api/v1/statuses/" + id; var start = "https://" + domain + "/api/v1/statuses/" + id;
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
@@ -264,7 +265,7 @@ function redraft(id, acct_id){
$("[toot-id=" + id + "] img.toot-img").each(function (i, elem) { $("[toot-id=" + id + "] img.toot-img").each(function (i, elem) {
if (i < ct) { if (i < ct) {
var url = $(elem).attr("src"); var url = $(elem).attr("src");
console.log(url); console.log("Play back image data:" + url);
$('#preview').append('<img src="' + url + '" style="width:50px; max-height:100px;">'); $('#preview').append('<img src="' + url + '" style="width:50px; max-height:100px;">');
} }
}); });
@@ -305,7 +306,7 @@ function pin(id, acct_id) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json); console.log(["Success: pinned", json]);
if ($("[toot-id=" + id + "]").hasClass("pined")) { if ($("[toot-id=" + id + "]").hasClass("pined")) {
$("[toot-id=" + id + "]").removeClass("pined"); $("[toot-id=" + id + "]").removeClass("pined");
$(".pin_" + id).removeClass("blue-text"); $(".pin_" + id).removeClass("blue-text");
@@ -331,7 +332,7 @@ function request(id, flag, acct_id) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json); console.log(["Success: request", "type:" + flag, json]);
showReq(); showReq();
} }
} }
@@ -354,7 +355,7 @@ function domainblock(add, flag, acct_id) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json); console.log(["Success: domain block", json]);
showDom(); showDom();
} }
} }
@@ -369,11 +370,10 @@ function empUser(){
var usr = localStorage.getItem("user_emp"); var usr = localStorage.getItem("user_emp");
var obj = JSON.parse(usr); var obj = JSON.parse(usr);
var id = $("#his-acct").attr("fullname"); var id = $("#his-acct").attr("fullname");
console.log(id);
if (!obj) { if (!obj) {
var obj = []; var obj = [];
obj.push(id); obj.push(id);
Materialize.toast(id+lang.lang_status_emphas, 4000); M.toast({ html: id + lang.lang_status_emphas, displayLength: 4000 })
} else { } else {
var can; var can;
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
@@ -383,7 +383,7 @@ function empUser(){
} else { } else {
can = true; can = true;
obj.splice(key, 1); obj.splice(key, 1);
Materialize.toast(id+lang.lang_status_unemphas, 4000); M.toast({ html: id + lang.lang_status_unemphas, displayLength: 4000 })
} }
}); });
} }
@@ -411,7 +411,6 @@ function pinUser(){
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json);
if ($("#his-end-btn").hasClass("endorsed")) { if ($("#his-end-btn").hasClass("endorsed")) {
$("#his-end-btn").removeClass("endorsed") $("#his-end-btn").removeClass("endorsed")
$("#his-end-btn").text(lang.lang_status_endorse) $("#his-end-btn").text(lang.lang_status_endorse)
@@ -426,7 +425,7 @@ function pinUser(){
//URLコピー //URLコピー
function tootUriCopy(url) { function tootUriCopy(url) {
execCopy(url); execCopy(url);
Materialize.toast(lang.lang_details_url, 1500); M.toast({ html: lang.lang_details_url, displayLength: 1500 })
} }
//他のアカウントで… //他のアカウントで…

View File

@@ -53,16 +53,7 @@ input.addEventListener("focus", function() {
var tag = new_val.match(/#(\S{3,})/); var tag = new_val.match(/#(\S{3,})/);
var acct = new_val.match(/@(\S{3,})/); var acct = new_val.match(/@(\S{3,})/);
if(localStorage.getItem("imas")){ if (tag && tag[1]) {
//セルフ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]) {
var q = tag[1]; var q = tag[1];
} else if (acct && acct[1]) { } else if (acct && acct[1]) {
var q = acct[1]; var q = acct[1];
@@ -77,7 +68,7 @@ input.addEventListener("focus", function() {
var at = localStorage.getItem("acct_" + acct_id + "_at"); var at = localStorage.getItem("acct_" + acct_id + "_at");
suggest = "https://" + domain + "/api/v1/search?q=" + q suggest = "https://" + domain + "/api/v1/search?q=" + q
if (suggest != oldSuggest) { if (suggest != oldSuggest) {
console.log(suggest) console.log("Try to get suggest at " + suggest)
fetch(suggest, { fetch(suggest, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -140,7 +131,7 @@ function tagInsert(code, del) {
var selin = $("#textarea").prop('selectionStart'); var selin = $("#textarea").prop('selectionStart');
if (!del) { if (!del) {
} else { } else {
var regExp = new RegExp(del, "g"); var regExp = new RegExp(del.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
var now = now.replace(regExp, ""); var now = now.replace(regExp, "");
selin = selin - del.length; selin = selin - del.length;
} }
@@ -161,7 +152,7 @@ function tagInsert(code, del) {
function cgNPs(q) { function cgNPs(q) {
suggest = "https://cg.toot.app/api/v1/search/light?q=" + q suggest = "https://cg.toot.app/api/v1/search/light?q=" + q
if (suggest != oldSuggest) { if (suggest != oldSuggest) {
console.log(suggest) console.log("Try to get suggest at " + suggest)
fetch(suggest, { fetch(suggest, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -173,12 +164,11 @@ function cgNPs(q){
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (json[0]) { if (json[0]) {
var tags = ""; var tags = "";
Object.keys(json).forEach(function (key4) { Object.keys(json).forEach(function (key4) {
var tag = json[key4]; var tag = json[key4];
tags = tags + '<a onclick="cgNP(\''+json[key4]+'\')" class="pointer">' + json[key4] + '</a> '; tags = tags + '<a onclick="cgNP(\'' + json[key4] + '\')" class="pointer">' + escapeHTML(json[key4]) + '</a> ';
}); });
$("#suggest").html("Cinderella NowPlaying:" + tags); $("#suggest").html("Cinderella NowPlaying:" + tags);
} else { } else {

View File

@@ -15,7 +15,7 @@ function re(id,ats_cm,acct_id,mode){
$("#rec").text(lang.lang_yesno); $("#rec").text(lang.lang_yesno);
$("#post-acct-sel").val(acct_id); $("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true); $("#post-acct-sel").prop("disabled", true);
$('select').material_select(); $('select').formSelect();
$("#textarea").attr("placeholder", lang.lang_usetxtbox_reply); $("#textarea").attr("placeholder", lang.lang_usetxtbox_reply);
$("#textarea").focus(); $("#textarea").focus();
var profimg = localStorage.getItem("prof_" + acct_id); var profimg = localStorage.getItem("prof_" + acct_id);
@@ -60,5 +60,5 @@ function qt(id,acct_id,at,url){
} }
$("#textarea").focus(); $("#textarea").focus();
$("#post-acct-sel").val(acct_id); $("#post-acct-sel").val(acct_id);
$('select').material_select(); $('select').formSelect();
} }

View File

@@ -4,9 +4,9 @@ function additional(acct_id, tlid) {
//メンション系 //メンション系
//$(".mention").attr("href", ""); //$(".mention").attr("href", "");
$(".mention").addClass("parsed"); $("#timeline-container .mention").addClass("parsed");
$(".hashtag").each(function(i, elem) { $("#timeline-container .hashtag").each(function (i, elem) {
var tags = $(this).attr("href").match( var tags = $(this).attr("href").match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/ /https?:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
); );
@@ -17,8 +17,6 @@ function additional(acct_id, tlid) {
} }
} }
}); });
//トゥートサムネ //トゥートサムネ
@@ -34,6 +32,7 @@ function additional(acct_id, tlid) {
); );
} }
} else { } else {
text = ""
var urls = [] var urls = []
} }
@@ -64,8 +63,8 @@ function additional(acct_id, tlid) {
}).then(function (json) { }).then(function (json) {
if (json.title) { if (json.title) {
$("[toot-id=" + id + "] .additional").html( $("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + json.title + "<br>" + "<span class=\"gray\">URL" + lang.lang_cards_check + ":<br>Title:" + escapeHTML(json.title) + "<br>" +
json.description + "</span>"); escapeHTML(json.description) + "</span>");
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed"); $("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
$("[toot-id=" + id + "]").addClass("parsed"); $("[toot-id=" + id + "]").addClass("parsed");
} }
@@ -81,8 +80,7 @@ function additional(acct_id, tlid) {
var dom = $(this); var dom = $(this);
var start = "./js/emoji/emoji-map.json"; var start = "./js/emoji/emoji-map.json";
var xmlHttpRequest = new XMLHttpRequest(); var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.onreadystatechange = function() xmlHttpRequest.onreadystatechange = function () {
{
if (this.readyState === 4 && this.status === 200) { if (this.readyState === 4 && this.status === 200) {
if (this.response) { if (this.response) {
var json = this.response; var json = this.response;
@@ -149,8 +147,8 @@ function additionalIndv(tlid, acct_id, id) {
}).then(function (json) { }).then(function (json) {
if (json.title) { if (json.title) {
$("[toot-id=" + id + "] .additional").html( $("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + json.title + "<br>" + "<span class=\"gray\">URL" + lang.lang_cards_check + ":<br>Title:" + escapeHTML(json.title) + "<br>" +
json.description + "</span>"); escapeHTML(json.description) + "</span>");
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed"); $("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
$("[toot-id=" + id + "]").addClass("parsed"); $("[toot-id=" + id + "]").addClass("parsed");
} }
@@ -171,9 +169,7 @@ function additionalIndv(tlid, acct_id, id) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
//このリンク鳥やんけ、ってとき //このリンク鳥やんけ、ってとき
console.log(json.provider_name);
if (json.provider_name == "Twitter") { if (json.provider_name == "Twitter") {
if (json.image) { if (json.image) {
var twiImg = '<br><img src="' + json.image + '" style="max-width:100%" onclick="imgv(\'twi_' + id + '\', 0, \'twitter\');" id="twi_' + id + '-image-0" data-url="' + json.image + '" data-type="image">'; var twiImg = '<br><img src="' + json.image + '" style="max-width:100%" onclick="imgv(\'twi_' + id + '\', 0, \'twitter\');" id="twi_' + id + '-image-0" data-url="' + json.image + '" data-type="image">';
@@ -244,7 +240,6 @@ function mov(id,tlid,type){
} else { } else {
var tlide = "[tlid=" + tlid + "]"; var tlide = "[tlid=" + tlid + "]";
} }
console.log(tlid)
var mouseover = localStorage.getItem("mouseover"); var mouseover = localStorage.getItem("mouseover");
if (!mouseover) { if (!mouseover) {
mouseover = ""; mouseover = "";

View File

@@ -40,7 +40,7 @@ function details(id, acct_id, tlid, mode) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json); console.log(["Toot data:", json]);
if (!$("#timeline_" + tlid + " #pub_" + id).length) { if (!$("#timeline_" + tlid + " #pub_" + id).length) {
var html = parse([json], '', acct_id); var html = parse([json], '', acct_id);
$("#toot-this").html(html); $("#toot-this").html(html);
@@ -91,6 +91,9 @@ function details(id, acct_id, tlid, mode) {
} }
beforeToot(id, acct_id, dom); beforeToot(id, acct_id, dom);
userToot(id, acct_id, uid); userToot(id, acct_id, uid);
afterToot(id, acct_id, dom);
afterUserToot(id, acct_id, uid);
afterFTLToot(id, acct_id, dom);
faved(id, acct_id); faved(id, acct_id);
rted(id, acct_id); rted(id, acct_id);
if ($("#toot-this div").hasClass("cvo")) { if ($("#toot-this div").hasClass("cvo")) {
@@ -99,7 +102,7 @@ function details(id, acct_id, tlid, mode) {
$("#toot-this").addClass("cvo"); $("#toot-this").addClass("cvo");
} }
if (!$("#activator").hasClass("active")) { if (!$("#activator").hasClass("active")) {
$('#det-col').collapsible('open', 1); $('#det-col').collapsible('open', 4);
} }
}); });
@@ -205,7 +208,6 @@ function context(id, acct_id) {
}).then(function (json) { }).then(function (json) {
if (localStorage.getItem("mode_" + domain) == "misskey") { if (localStorage.getItem("mode_" + domain) == "misskey") {
json.reverse(); json.reverse();
console.log(json);
var templete = misskeyParse(json, '', acct_id, "", "", []); var templete = misskeyParse(json, '', acct_id, "", "", []);
$("#toot-reply").html(templete); $("#toot-reply").html(templete);
$("#toot-reply .hide").html(lang.lang_details_filtered); $("#toot-reply .hide").html(lang.lang_details_filtered);
@@ -332,6 +334,81 @@ function userToot(id, acct_id, user) {
} }
} }
//後のLTL
function afterToot(id, acct_id, domain) {
//var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain +
"/api/v1/timelines/public?local=true&min_id=" + id;
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) {
var templete = parse(json, 'noauth', acct_id);
if (templete != "") {
$("#ltl-after .no-data").hide();
}
$("#ltl-after").html(templete);
jQuery("time.timeago").timeago();
});
}
//後のUTL
function afterUserToot(id, acct_id, user) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses?min_id=" + id;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
var templete = parse(json, '', acct_id);
if (templete != "") {
$("#user-after .no-data").hide();
}
$("#user-after").html(templete);
jQuery("time.timeago").timeago();
});
}
//後のFTL
function afterFTLToot(id, acct_id, domain) {
//var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain +
"/api/v1/timelines/public?min_id=" + id;
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) {
var templete = parse(json, 'noauth', acct_id);
if (templete != "") {
$("#ftl-after .no-data").hide();
}
$("#ftl-after").html(templete);
jQuery("time.timeago").timeago();
});
}
//ふぁぼ一覧 //ふぁぼ一覧
function faved(id, acct_id) { function faved(id, acct_id) {
@@ -389,10 +466,10 @@ function cbCopy(mode){
if (mode == "emb") { 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>'; 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) execCopy(emb)
Materialize.toast(lang.lang_details_embed, 1500); M.toast({ html: lang.lang_details_embed, displayLength: 1500 })
} else { } else {
if (execCopy(url)) { if (execCopy(url)) {
Materialize.toast(lang.lang_details_url, 1500); M.toast({ html: lang.lang_details_url, displayLength: 1500 })
} }
} }
@@ -404,70 +481,14 @@ function staCopy(id){
html = html.replace(/<br\s?\/?>/, "\n"); html = html.replace(/<br\s?\/?>/, "\n");
html = html.replace(/<p>/, "\n"); html = html.replace(/<p>/, "\n");
html = html.replace(/<\/p>/, "\n"); html = html.replace(/<\/p>/, "\n");
console.log(html); console.log("Copy it:\n" + html);
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1"); html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
html = $.strip_tags(html); html = $.strip_tags(html);
if (execCopy(html)) { if (execCopy(html)) {
Materialize.toast(lang.lang_details_txt, 1500); M.toast({ html: lang.lang_details_txt, displayLength: 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, to) { function trans(tar, to) {
var html = $("#toot-this .toot").html(); var html = $("#toot-this .toot").html();
@@ -483,7 +504,7 @@ function trans(tar,to){
} }
$("#toot-this .additional").text("Loading...(Powered by Google Translate)"); $("#toot-this .additional").text("Loading...(Powered by Google Translate)");
var exec = 'https://script.google.com/macros/s/AKfycbxhwW5tjjop9Irg-y1zr_WsXlCKEzwWG6KuoOt_vVRDfEbRv0c/exec?format=json&text=' + encodeURIComponent(html) + '&source=' + tar + '&target=' + to 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); console.log("Try to translate from " + tar + " to " + to + " at " + exec);
fetch(exec, { fetch(exec, {
method: 'GET', method: 'GET',
}).then(function (response) { }).then(function (response) {
@@ -498,11 +519,7 @@ function trans(tar,to){
//ブラウザで開く //ブラウザで開く
function brws() { function brws() {
var url = $("#tootmodal").attr("data-url"); var url = $("#tootmodal").attr("data-url");
const { postMessage(["openUrl", url], "*")
shell
} = require('electron');
shell.openExternal(url);
} }
//外部からトゥート開く //外部からトゥート開く
function detEx(url, acct_id) { function detEx(url, acct_id) {
@@ -525,11 +542,7 @@ function detEx(url,acct_id){
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
if (!json.statuses) { if (!json.statuses) {
const { postMessage(["openUrl", url], "*")
shell
} = require('electron');
shell.openExternal(url);
} else { } else {
var id = json.statuses[0].id; var id = json.statuses[0].id;
$(".loadp").text($(".loadp").attr("href")); $(".loadp").text($(".loadp").attr("href"));

View File

@@ -57,7 +57,6 @@ function dmmore(tlid){
} }
//DMオブジェクトパーサー(トゥート) //DMオブジェクトパーサー(トゥート)
function dmListParse(obj, mix, acct_id, tlid, popup, mutefilter) { function dmListParse(obj, mix, acct_id, tlid, popup, mutefilter) {
console.log(obj);
var templete = ''; var templete = '';
if (obj[0]) { if (obj[0]) {
localStorage.setItem("lastunix_" + tlid, date(obj[0].created_at, 'unix')); localStorage.setItem("lastunix_" + tlid, date(obj[0].created_at, 'unix'));
@@ -243,7 +242,7 @@ function dmListParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var id = toot.id; var id = toot.id;
var home = ""; var home = "";
if (toot.account.locked) { if (toot.account.locked) {
var locked = ' <i class="fa fa-lock red-text"></i>'; var locked = ' <i class="fas fa-lock red-text"></i>';
} else { } else {
var locked = ""; var locked = "";
} }
@@ -251,7 +250,7 @@ function dmListParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var via = ''; var via = '';
viashow = "hide"; viashow = "hide";
} else { } else {
var via = toot.application.name; var via = escapeHTML(toot.application.name);
//強調チェック //強調チェック
Object.keys(emp).forEach(function (key6) { Object.keys(emp).forEach(function (key6) {
var cli = emp[key6]; var cli = emp[key6];
@@ -432,7 +431,7 @@ function dmListParse(obj, mix, acct_id, tlid, popup, mutefilter) {
if (word) { if (word) {
var word = word.tag; var word = word.tag;
var regExp = new RegExp(word, "g"); var regExp = new RegExp(word, "g");
content=content.replace(regExp,'<span class="emp">'+word+"</span>"); content = content.replace(regExp, '<span class="emp">' + escapeHTML(word) + "</span>");
} }
}); });
} }
@@ -483,7 +482,7 @@ function dmListParse(obj, mix, acct_id, tlid, popup, mutefilter) {
for (var i = 0; i < tickerdata.length; i++) { for (var i = 0; i < tickerdata.length; i++) {
var value = tickerdata[i]; var value = tickerdata[i];
if (value.domain == thisdomain) { if (value.domain == thisdomain) {
var tickerdom='<div style="background:linear-gradient(to left,transparent, '+value.bg+' 96%) !important; color:'+value.text+';width:100%; height:0.9rem; font-size:0.8rem;"><img src="'+value.image+'" style="height:100%;"><span style="position:relative; top:-0.2rem;"> '+value.name+'</span></div>'; var tickerdom = '<div style="background:linear-gradient(to left,transparent, ' + value.bg + ' 96%) !important; color:' + value.text + ';width:100%; height:0.9rem; font-size:0.8rem;"><img src="' + value.image + '" style="height:100%;"><span style="position:relative; top:-0.2rem;"> ' + escapeHTML(value.name) + '</span></div>';
break; break;
} }
} }
@@ -506,7 +505,7 @@ function dmListParse(obj, mix, acct_id, tlid, popup, mutefilter) {
toot.account.acct + locked + '</span></div>' + toot.account.acct + locked + '</span></div>' +
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'' + '<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'' +
toot.url + '\');" title="' + date(toot.created_at, 'absolute') + toot.url + '\');" title="' + date(toot.created_at, 'absolute') +
'('+lang.lang_parse_clickcopyurl+')"><i class="fa fa-clock-o"></i>' + '(' + lang.lang_parse_clickcopyurl + ')"><i class="far fa-clock-o"></i>' +
date(toot.created_at, datetype) + '</span>' + date(toot.created_at, datetype) + '</span>' +
'</div></div>' + '</div></div>' +
'<div class="area-toot">' + tickerdom + '<span class="' + '<div class="area-toot">' + tickerdom + '<span class="' +

View File

@@ -114,7 +114,6 @@ function filter(){
var domain = localStorage.getItem("domain_" + 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");
var start = "https://" + domain + "/api/v1/filters" var start = "https://" + domain + "/api/v1/filters"
console.log(start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -127,7 +126,6 @@ function filter(){
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (json) { if (json) {
var filters = ""; var filters = "";
Object.keys(json).forEach(function (key) { Object.keys(json).forEach(function (key) {
@@ -146,6 +144,11 @@ function filter(){
} }
}); });
} }
function filterTime(day, hour, min) {
$("#days_filter").val(day)
$("#hours_filter").val(hour)
$("#mins_filter").val(min)
}
function makeNewFilter() { function makeNewFilter() {
var acct_id = $("#filter-acct-sel").val(); var acct_id = $("#filter-acct-sel").val();
var phr = $("#filter-add-word").val(); var phr = $("#filter-add-word").val();
@@ -162,7 +165,6 @@ function makeNewFilter(){
if ($("#conv_filter:checked").val()) { if ($("#conv_filter:checked").val()) {
cont.push("thread"); cont.push("thread");
} }
console.log(cont);
if (!cont.length) { if (!cont.length) {
$("#filtered-words").html('Error:' + lang.lang_filter_errordegree); $("#filtered-words").html('Error:' + lang.lang_filter_errordegree);
} }
@@ -230,7 +232,6 @@ function filterEdit(id,acct_id){
var domain = localStorage.getItem("domain_" + 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");
var start = "https://" + domain + "/api/v1/filters/" + id var start = "https://" + domain + "/api/v1/filters/" + id
console.log(start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -243,7 +244,6 @@ function filterEdit(id,acct_id){
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (json) { if (json) {
var now = new Date(); var now = new Date();
now = now.getTime(); now = now.getTime();
@@ -292,7 +292,6 @@ function getFilter(acct_id){
var at = localStorage.getItem("acct_" + acct_id + "_at"); var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem("mode_" + domain) != "misskey") { if (localStorage.getItem("mode_" + domain) != "misskey") {
var start = "https://" + domain + "/api/v1/filters" var start = "https://" + domain + "/api/v1/filters"
console.log(start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -336,7 +335,6 @@ function filterUpdate(acct_id){
var domain = localStorage.getItem("domain_" + 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");
var start = "https://" + domain + "/api/v1/filters" var start = "https://" + domain + "/api/v1/filters"
console.log(start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -372,7 +370,7 @@ function filterUpdateInternal(json,type){
var text = $(elem).find('.toot').html(); var text = $(elem).find('.toot').html();
Object.keys(home).forEach(function (key8) { Object.keys(home).forEach(function (key8) {
var word = home[key8]; var word = home[key8];
var regExp = new RegExp( word, "g" ); var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
if ($.strip_tags(text).match(regExp)) { if ($.strip_tags(text).match(regExp)) {
$("[toot-id=" + id + "]").addClass("hide"); $("[toot-id=" + id + "]").addClass("hide");
} }
@@ -388,39 +386,38 @@ function filterUpdateInternal(json,type){
*/ */
//通知フィルター //通知フィルター
function exclude(key) { function exclude(key) {
var excludetxt=""; localStorage.setItem("exclude-" + key, "")
var excludetxt = localStorage.getItem("exclude-" + key);
if ($('#exc-reply-' + key + ':checked').val()) { if ($('#exc-reply-' + key + ':checked').val()) {
excludetxt = "?exclude_types[]=mention" excludetxt = "?exclude_types[]=mention"
var reply=true
}else{
var reply=false;
} }
if ($('#exc-fav-' + key + ':checked').val()) { if ($('#exc-fav-' + key + ':checked').val()) {
if(reply){ if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + "&exclude_types[]=favourite" excludetxt = excludetxt + "&exclude_types[]=favourite"
} else { } else {
excludetxt = "?exclude_types[]=favourite" excludetxt = "?exclude_types[]=favourite"
} }
var fav=true
}else{
var fav=false;
} }
if ($('#exc-bt-' + key + ':checked').val()) { if ($('#exc-bt-' + key + ':checked').val()) {
if(reply || fav){ if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + "&exclude_types[]=reblog" excludetxt = excludetxt + "&exclude_types[]=reblog"
} else { } else {
excludetxt = "?exclude_types[]=reblog" excludetxt = "?exclude_types[]=reblog"
} }
var bt=true
}else{
var bt=false;
} }
if ($('#exc-follow-' + key + ':checked').val()) { if ($('#exc-follow-' + key + ':checked').val()) {
if(reply || bt || fav){ if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + "&exclude_types[]=follow" excludetxt = excludetxt + "&exclude_types[]=follow"
} else { } else {
excludetxt = "?exclude_types[]=follow" excludetxt = "?exclude_types[]=follow"
} }
}
if ($('#exc-poll-' + key + ':checked').val()) {
if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + "&exclude_types[]=poll"
} else {
excludetxt = "?exclude_types[]=poll"
}
} else { } else {
} }
localStorage.setItem("exclude-" + key, excludetxt) localStorage.setItem("exclude-" + key, excludetxt)
@@ -437,3 +434,25 @@ function excludeCk(key,target){
return ""; return "";
} }
} }
function checkNotfFilter(tlid){
var excludetxt = localStorage.getItem("exclude-" + tlid);
if(!excludetxt || excludetxt != ""){
return true;
}else{
return false;
}
}
function resetNotfFilter(tlid){
localStorage.setItem("exclude-" + tlid, "")
parseColumn();
}
function notfFilter(id,tlid,acct_id){
var excludetxt = localStorage.getItem("exclude-" + tlid);
if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + "&account_id="+id
} else {
excludetxt = "?account_id="+id
}
localStorage.setItem("exclude-" + tlid, excludetxt)
parseColumn();
}

View File

@@ -13,8 +13,33 @@ function list(){
var acct_id = $("#list-acct-sel").val(); var acct_id = $("#list-acct-sel").val();
var domain = localStorage.getItem("domain_" + 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/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 + escapeHTML(list.title) + ':<a onclick="listShow(\'' + list.id + '\',\'' + escapeHTML(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" var start = "https://" + domain + "/api/v1/lists"
console.log(start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -31,8 +56,8 @@ function list(){
var lists = ""; var lists = "";
Object.keys(json).forEach(function (key) { Object.keys(json).forEach(function (key) {
var list = json[key]; var list = json[key];
lists = lists + list.title+':<a onclick="listShow(' + list.id + ',\'' + list.title + '\',\'' + acct_id + lists = lists + escapeHTML(list.title) + ':<a onclick="listShow(\'' + list.id + '\',\'' + escapeHTML(list.title) + '\',\'' + acct_id +
'\')" class="pointer">'+lang.lang_list_show+'</a>/<a onclick="listUser(' + list.id + ',' + acct_id + '\')" class="pointer">' + lang.lang_list_show + '</a>/<a onclick="listUser(\'' + list.id + '\',' + acct_id +
')" class="pointer">' + lang.lang_list_users + '</a><br>'; ')" class="pointer">' + lang.lang_list_users + '</a><br>';
}); });
$("#lists").html(lists); $("#lists").html(lists);
@@ -41,13 +66,14 @@ function list(){
} }
}); });
} }
}
function makeNewList() { function makeNewList() {
var acct_id = $("#list-acct-sel").val(); var acct_id = $("#list-acct-sel").val();
var text = $("#list-add").val(); var text = $("#list-add").val();
var domain = localStorage.getItem("domain_" + 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" var start = "https://" + domain + "/api/v1/lists"
console.log(start)
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true); httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json'); httpreq.setRequestHeader('Content-Type', 'application/json');
@@ -63,6 +89,24 @@ function makeNewList(){
$("#list-add").val("") $("#list-add").val("")
} }
} }
} else {
var start = "https://" + domain + "/api/users/lists/create"
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) { function listShow(id, title, acct_id) {
localStorage.setItem("list_" + id + "_" + acct_id, title); localStorage.setItem("list_" + id + "_" + acct_id, title);
@@ -72,7 +116,6 @@ function listUser(id,acct_id){
var domain = localStorage.getItem("domain_" + 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");
var start = "https://" + domain + "/api/v1/lists/" + id + "/accounts" var start = "https://" + domain + "/api/v1/lists/" + id + "/accounts"
console.log(start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -100,8 +143,8 @@ function listUser(id,acct_id){
function hisList(user, acct_id) { function hisList(user, acct_id) {
var domain = localStorage.getItem("domain_" + 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" var start = "https://" + domain + "/api/v1/lists"
console.log(start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -118,7 +161,7 @@ function hisList(user,acct_id){
var lists = lang.lang_list_add + "<br>"; var lists = lang.lang_list_add + "<br>";
Object.keys(json).forEach(function (key) { Object.keys(json).forEach(function (key) {
var list = json[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> '; '\')" class="pointer">' + escapeHTML(list.title) + '</a><br> ';
}); });
$("#his-lists-a").html(lists); $("#his-lists-a").html(lists);
@@ -127,7 +170,6 @@ function hisList(user,acct_id){
} }
}); });
var start = "https://" + domain + "/api/v1/accounts/" + user + "/lists" var start = "https://" + domain + "/api/v1/accounts/" + user + "/lists"
console.log(start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -144,28 +186,65 @@ function hisList(user,acct_id){
var lists = lang.lang_list_remove + "<br>"; var lists = lang.lang_list_remove + "<br>";
Object.keys(json).forEach(function (key) { Object.keys(json).forEach(function (key) {
var list = json[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> '; '\')" class="pointer">' + escapeHTML(list.title) + '</a><br> ';
}); });
$("#his-lists-b").html(lists); $("#his-lists-b").html(lists);
} else { } else {
$("#his-lists-b").html(lang.lang_list_nodata); $("#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 + '\',\'' + escapeHTML(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) { function listAdd(id, user, acct_id) {
var domain = localStorage.getItem("domain_" + 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/users/lists/push"
var i = {
i: at,
listId: id,
userId: user
}
} else {
var start = "https://" + domain + "/api/v1/lists/" + id + "/accounts" var start = "https://" + domain + "/api/v1/lists/" + id + "/accounts"
console.log(start) var i = {
account_ids: [user]
}
}
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true); httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json'); httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at); httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = "json"; httpreq.responseType = "json";
httpreq.send(JSON.stringify({ httpreq.send(JSON.stringify(i));
account_ids: [user]
}));
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
@@ -176,16 +255,27 @@ function listAdd(id,user,acct_id){
function listRemove(id, user, acct_id) { function listRemove(id, user, acct_id) {
var domain = localStorage.getItem("domain_" + 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/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 start = "https://" + domain + "/api/v1/lists/" + id + "/accounts"
console.log(start) var method = 'DELETE'
var i = {
account_ids: [user]
}
}
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
httpreq.open('DELETE', start, true); httpreq.open(method, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json'); httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at); httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = "json"; httpreq.responseType = "json";
httpreq.send(JSON.stringify({ httpreq.send(JSON.stringify(i));
account_ids: [user]
}));
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;

View File

@@ -160,6 +160,17 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
} else { } else {
disname = ""; disname = "";
} }
//絵文字があれば
if (toot.user.emojis) {
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 (mix == "notf") {
if (gif == "yes") { if (gif == "yes") {
noticeavatar = toot.user.avatarUrl; noticeavatar = toot.user.avatarUrl;
@@ -173,14 +184,14 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
'"></a>'; '"></a>';
if (toot.type == "reply") { if (toot.type == "reply") {
var what = lang.lang_parse_mentioned; var what = lang.lang_parse_mentioned;
var icon = '<i class="big-text fa fa-share teal-text"></i>'; var icon = '<i class="big-text fas fa-share teal-text"></i>';
noticeavatar = ""; noticeavatar = "";
} else if (toot.type == "renote") { } else if (toot.type == "renote") {
var what = lang.lang_misskeyparse_renoted; var what = lang.lang_misskeyparse_renoted;
var icon = '<i class="big-text fa fa-retweet light-blue-text"></i>'; var icon = '<i class="big-text fas fa-retweet light-blue-text"></i>';
} else if (toot.type == "quote") { } else if (toot.type == "quote") {
var what = lang.lang_misskeyparse_quoted; var what = lang.lang_misskeyparse_quoted;
var icon = '<i class="big-text fa fa-quote-right orange-text"></i>'; var icon = '<i class="big-text fas fa-quote-right orange-text"></i>';
} else if (toot.type == "reaction") { } else if (toot.type == "reaction") {
var what = lang.lang_misskeyparse_reacted; var what = lang.lang_misskeyparse_reacted;
var reactions = { var reactions = {
@@ -192,29 +203,29 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
"congrats": "🎉", "congrats": "🎉",
"amgry": "💢", "amgry": "💢",
"confused": "😥", "confused": "😥",
"pudding":"🍮" "rip": "😇"
} }
var icon = reactions[toot.reaction]; var icon = reactions[toot.reaction];
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"]; var emojisData = JSON.parse(localStorage.getItem("emoji_" + acct_id));
for(var i=0;i<reactions.length;i++){ if (!icon) {
if(toot.note.reactionCounts[reactions[i]]){ if (emojisData) {
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(toot.note.reactionCounts[reactions[i]]) var num = emojisData.length;
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide") var ehtml = "";
}else{ for (i = 0; i < num; i++) {
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(0) var emoji = emojisData[i];
if($("#pub_" + id +" .reactions").hasClass("fullreact")){ if (":" + emoji.shortcode + ":" == toot.reaction) {
$("#pub_" + id +" .re-"+reactions[i]).addClass("hide") if (emoji) {
}else{ icon = '<img src="' + emoji.url + '" style="width:1rem">';
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide") }
}
} }
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(toot.note.reactionCounts[reactions[i]])
} }
} }
} else { } else {
var icon = '<i class="big-text material-icons indigo-text" style="font-size:17px">info</i>'; 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, var noticetext = '<span class="cbadge cbadge-hover"title="' + date(toot.createdAt,
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.createdAt, 'absolute') + '(' + lang.lang_parse_notftime + ')"><i class="far fa-clock"></i>' + date(toot.createdAt,
datetype) + datetype) +
'</span>' + icon + '<a onclick="udg(\'' + toot.user.username + '</span>' + icon + '<a onclick="udg(\'' + toot.user.username +
'\',\'' + acct_id + '\')" class="pointer grey-text">' + dis_name + '\',\'' + acct_id + '\')" class="pointer grey-text">' + dis_name +
@@ -243,27 +254,26 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
} }
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
if (popup > 0) { if (popup > 0) {
Materialize.toast("["+domain+"]"+escapeHTMLtemp(toot.user.name)+what, popup * 1000); M.toast({ html: "[" + domain + "]" + escapeHTMLtemp(toot.user.name) + what, displayLength: popup * 1000 })
} }
if (native == "yes") { if (native == "yes") {
var electron = require("electron"); var os = localStorage.getItem("platform");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = { var options = {
body: toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tagstemp(toot.status.content), body: toot.user.name + "(" + toot.user.username + ")" + what + "\n\n" + $.strip_tagstemp(toot.note.text),
icon: toot.account.avatar icon: toot.user.avatarUrl
}; };
if (os == "darwin") { if (os == "darwin") {
var n = new Notification('TheDesk:' + domain, options); var n = new Notification('TheDesk:' + domain, options);
} else { } else {
ipc.send('native-notf', [ var nativeNotfOpt=[
'TheDesk:' + domain, 'TheDesk:' + domain,
toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tagstemp(toot.status.content), toot.user.name + "(" + toot.user.username + ")" + what + "\n\n" + $.strip_tagstemp(toot.note.text),
toot.account.avatar, toot.user.avatarUrl,
"toot", "toot",
acct_id, acct_id,
toot.status.id toot.note.id
]); ]
postMessage(["nativeNotf", nativeNotfOpt], "*")
} }
} }
if (localStorage.getItem("hasNotfC_" + acct_id) != "true") { if (localStorage.getItem("hasNotfC_" + acct_id) != "true") {
@@ -274,18 +284,20 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
} }
var if_notf = 'data-notfIndv="' + acct_id + "_" + toot.id + '"'; var if_notf = 'data-notfIndv="' + acct_id + "_" + toot.id + '"';
var toot = toot.note; var toot = toot.note;
var dis_name=escapeHTMLtemp(toot.user.name); var dis_name = escapeHTML(toot.user.name);
} else { } else {
var if_notf = ""; var if_notf = "";
if (toot.renote) { if (toot.renote) {
var rebtxt = lang.lang_parse_btedsimple; var rebtxt = lang.lang_parse_btedsimple;
var rticon = "fa-retweet light-blue-text"; var rticon = "fa-retweet light-blue-text";
var notice = '<i class="big-text fa '+rticon+'"></i>'+ dis_name + "(@" + toot.user.username + var notice = '<i class="big-text fas ' + rticon + '"></i>' + dis_name + "(@" + toot.user.username +
")<br>"; ")<br>";
var boostback = "shared"; var boostback = "shared";
var uniqueid = toot.id; var uniqueid = toot.id;
if (!toot.text) {
var toot = toot.renote; var toot = toot.renote;
var dis_name=escapeHTMLtemp(toot.user.name); }
var dis_name = escapeHTML(toot.user.name);
var uniqueid = toot.id; var uniqueid = toot.id;
var actemojick = false var actemojick = false
} else { } else {
@@ -328,10 +340,14 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
if (toot.viaMobile) { if (toot.viaMobile) {
var via = '<span style="font-style: italic;">Mobile</span>'; var via = '<span style="font-style: italic;">Mobile</span>';
} else { } else {
var via = '<span style="font-style: italic;">Unknown</span>'; var via = '';
viashow = "via-hide";
} }
} else { } else {
var via = toot.app.name; var via = escapeHTML(toot.app.name);
if (!toot.app.name) {
viashow = "via-hide";
}
//強調チェック //強調チェック
Object.keys(emp).forEach(function (key6) { Object.keys(emp).forEach(function (key6) {
var cli = emp[key6]; var cli = emp[key6];
@@ -348,7 +364,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
}); });
} }
if ((toot.cw || toot.cw == "") && cw) { if ((toot.cw || toot.cw == "") && cw) {
var content = toot.text; var content = escapeHTML(toot.text);
var spoil = escapeHTMLtemp(toot.cw); var spoil = escapeHTMLtemp(toot.cw);
var spoiler = "cw cw_hide_" + toot.id; var spoiler = "cw cw_hide_" + toot.id;
var api_spoil = "gray"; var api_spoil = "gray";
@@ -403,17 +419,35 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
content = content.replace(/`(.+)`/gi, '<code>$1</code>') 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(/(http(s)?:\/\/[\x21-\x7e]+)/gi, '<a href="$1" target="_blank">$1</a>')
content = content.replace(/\(\(\((.+)\)\)\)/gi, '<span class="shake">$1</span>') 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, '<span class="shake" style="font-size:200%">$1</span>')
content = content.replace(/\*\*([^*]+)\*\*/gi, '<b>$1</b>') 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(/^(.+)\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(/\[(.+)\]\(<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); content = twemoji.parse(content);
} else { } else {
content = ""; 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) { if (dis_name) {
dis_name = twemoji.parse(dis_name); dis_name = twemoji.parse(dis_name);
} else { } else {
@@ -482,7 +516,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
mentions = '<div style="float:right"><a onclick="udg(\'' + menck.user.id + '\',' + mentions = '<div style="float:right"><a onclick="udg(\'' + menck.user.id + '\',' +
acct_id + ')" class="pointer">@' + menck.user.username + '</a></div>'; acct_id + ')" class="pointer">@' + menck.user.username + '</a></div>';
} }
var tagck = toot.tags[0]; var tagck = toot.tags;
var tags = ""; var tags = "";
//タグであれば //タグであれば
if (tagck) { if (tagck) {
@@ -556,7 +590,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
} else { } else {
var word = worde var word = worde
} }
var regExp = new RegExp( word, "g" ) ; var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
if ($.strip_tagstemp(content).match(regExp)) { if ($.strip_tagstemp(content).match(regExp)) {
boostback = "hide by_filter"; boostback = "hide by_filter";
} }
@@ -569,7 +603,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var word = wordemp[key9]; var word = wordemp[key9];
if (word) { if (word) {
var word = word.tag; var word = word.tag;
var regExp = new RegExp( word, "g" ) ; var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
content = content.replace(regExp, '<span class="emp">' + word + "</span>"); content = content.replace(regExp, '<span class="emp">' + word + "</span>");
} }
}); });
@@ -586,7 +620,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
for (var i = 0; i < tickerdata.length; i++) { for (var i = 0; i < tickerdata.length; i++) {
var value = tickerdata[i]; var value = tickerdata[i];
if (value.domain == thisdomain) { if (value.domain == thisdomain) {
var tickerdom='<div style="background:linear-gradient(to left,transparent, '+value.bg+' 96%) !important; color:'+value.text+';width:100%; height:0.9rem; font-size:0.8rem;"><img src="'+value.image+'" style="height:100%;"><span style="position:relative; top:-0.2rem;"> '+value.name+'</span></div>'; var tickerdom = '<div style="background:linear-gradient(to left,transparent, ' + value.bg + ' 96%) !important; color:' + value.text + ';width:100%; height:0.9rem; font-size:0.8rem;"><img src="' + value.image + '" style="height:100%;"><span style="position:relative; top:-0.2rem;"> ' + escapeHTML(value.name) + '</span></div>';
break; break;
} }
} }
@@ -602,79 +636,122 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
} else { } else {
var myvote = ""; var myvote = "";
} }
poll=poll+'<div class="pointer vote" onclick="vote(\''+acct_id+'\',\''+toot.id+'\','+choice.id+')">'+choice.text+'('+choice.votes+''+myvote+')</div>'; poll = poll + '<div class="pointer vote" onclick="vote(\'' + acct_id + '\',\'' + toot.id + '\',' + choice.id + ')">' + escapeHTML(choice.text) + '(' + choice.votes + '' + myvote + ')</div>';
}); });
poll = '<div class="vote_' + toot.id + '">' + poll + '</div>'; poll = '<div class="vote_' + toot.id + '">' + poll + '</div>';
} }
//引用Renote
if (toot.renote) {
poll = poll + '<div class="quote-renote"><div class="renote-icon"><a onclick="udg(\'' + toot.renote.user.id +
'\',' + acct_id + ');" user="' + toot.renote.user.username + '" class="udg"><img src="' + toot.renote.user.avatarUrl + '"></a></div><div class="renote-user">' + escapeHTML(toot.renote.user.name) + '</div><div class="renote-text">' + escapeHTML(toot.renote.text) + '</div></div>'
}
if (localStorage.getItem("emojiReaction_" + acct_id) == "disabled") {
var freeReact = "hide";
} else {
var freeReact = "";
}
//Reactions //Reactions
if(toot.reactionCounts){ var addReact = "";
if(toot.reactionCounts.like){ if (toot.reactions) {
var like=toot.reactionCounts.like; Object.keys(toot.reactions).forEach(function (keye) {
var thisReact = toot.reactions[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 == "star") { 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.reactions.like) {
var like = toot.reactions.like;
var likehide = ""; var likehide = "";
} else { } else {
var like = 0; var like = 0;
var likehide = "hide"; var likehide = "hide";
} }
if(toot.reactionCounts.love){ if (toot.reactions.love) {
var love=toot.reactionCounts.love; var love = toot.reactions.love;
var lovehide = ""; var lovehide = "";
} else { } else {
var love = 0; var love = 0;
var lovehide = "hide"; var lovehide = "hide";
} }
if(toot.reactionCounts.laugh){ if (toot.reactions.laugh) {
var laugh=toot.reactionCounts.laugh; var laugh = toot.reactions.laugh;
var laughhide = ""; var laughhide = "";
} else { } else {
var laugh = 0; var laugh = 0;
var laughhide = "hide"; var laughhide = "hide";
} }
if(toot.reactionCounts.hmm){ if (toot.reactions.hmm) {
var hmm=toot.reactionCounts.hmm; var hmm = toot.reactions.hmm;
var hmmhide = ""; var hmmhide = "";
} else { } else {
var hmm = 0; var hmm = 0;
var hmmhide = "hide"; var hmmhide = "hide";
} }
if(toot.reactionCounts.surprise){ if (toot.reactions.surprise) {
var surprise=toot.reactionCounts.surprise; var surprise = toot.reactions.surprise;
var suphide = ""; var suphide = "";
} else { } else {
var suphide = "hide"; var suphide = "hide";
var surprise = 0; var surprise = 0;
} }
if(toot.reactionCounts.congrats){ if (toot.reactions.congrats) {
var congrats=toot.reactionCounts.congrats; var congrats = toot.reactions.congrats;
var conghide = ""; var conghide = "";
} else { } else {
var congrats = 0; var congrats = 0;
var conghide = "hide"; var conghide = "hide";
} }
if(toot.reactionCounts.angry){ if (toot.reactions.angry) {
var angry=toot.reactionCounts.angry; var angry = toot.reactions.angry;
var anghide = ""; var anghide = "";
} else { } else {
var angry = 0; var angry = 0;
var anghide = "hide"; var anghide = "hide";
} }
if(toot.reactionCounts.confused){ if (toot.reactions.confused) {
var confhide = ""; var confhide = "";
var confused=toot.reactionCounts.confused; var confused = toot.reactions.confused;
} else { } else {
var confused = 0; var confused = 0;
var confhide = "hide"; var confhide = "hide";
} }
if(toot.reactionCounts.pudding){ if (toot.reactions.rip) {
var pudding=toot.reactionCounts.pudding; var riphide = "";
var pudhide=""; var rip = toot.reactions.rip;
} else { } else {
var pudding=0; var rip = 0;
var pudhide="hide"; var riphide = "hide";
} }
var fullhide = ""; var fullhide = "";
} else { } else {
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 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 likehide = "hide"; var lovehide = "hide"; var laughhide = "hide"; var hmmhide = "hide"; var suphide = "hide"; var conghide = "hide"; var anghide = "hide"; var confhide = "hide"; var riphide = "hide"
var fullhide = "hide";
}
if (!addReact && likehide == "hide" && lovehide == "hide" && laughhide == "hide" && hmmhide == "hide" && suphide == "hide" && conghide == "hide" && anghide == "hide" && confhide == "hide" && riphide == "hide") {
var fullhide = "hide"; var fullhide = "hide";
} }
if (toot.myReaction) { if (toot.myReaction) {
@@ -687,6 +764,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>'; content = '<span class="gray">This post has no content. It may be media-only, private or deleted.</span>';
} }
var trans = ""; 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 ' + 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[ 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 + '">' + key].created_at, 'unix') + '" ' + if_notf + ' onmouseover="mov(\'' + toot.id + '\',\'' + tlid + '\',\'mv\')" onclick="mov(\'' + toot.id + '\',\'' + tlid + '\',\'cl\')" onmouseout="resetmv(\'mv\')" reacted="' + reacted + '">' +
@@ -703,7 +785,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
toot.user.username + '</span></div>' + toot.user.username + '</span></div>' +
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'https://' + domain + "/notes/" + '<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'https://' + domain + "/notes/" +
toot.id + '\');" title="' + date(toot.createdAt, 'absolute') + toot.id + '\');" title="' + date(toot.createdAt, 'absolute') +
'('+lang.lang_parse_clickcopyurl+')"><i class="fa fa-clock-o"></i>' + '(' + lang.lang_parse_clickcopyurl + ')"><i class="far fa-clock"></i>' +
date(toot.createdAt, datetype) + '</span>' + date(toot.createdAt, datetype) + '</span>' +
'</div></div>' + '</div></div>' +
'<div class="area-toot">' + tickerdom + '<span class="toot ' + spoiler + '">' + content + '<div class="area-toot">' + tickerdom + '<span class="toot ' + spoiler + '">' + content +
@@ -728,9 +810,11 @@ 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-angryct">' + angry + ',\'' + tlid + '\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">' + twemoji.parse("💢") + '</a><span class="re-angryct">' + angry +
'</span></span><span class="' + confhide + ' reaction re-confused"><a onclick="reaction(\'confused\',\'' + toot.id + '\',' + acct_id + '</span></span><span class="' + confhide + ' reaction re-confused"><a onclick="reaction(\'confused\',\'' + 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-confusedct">' + confused + ',\'' + 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 + '</span></span><span class="' + riphide + ' reaction re-confused"><a onclick="reaction(\'confused\',\'' + 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+ ',\'' + tlid + '\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">' + twemoji.parse("😇") + '</a><span class="re-confusedct">' + rip +
'</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-vis"></div>' +
'<div class="area-actions ' + mouseover + '">' + '<div class="area-actions ' + mouseover + '">' +
'<div class="action">' + vis + '</div>' + '<div class="action">' + vis + '</div>' +
@@ -738,23 +822,23 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
'<div class="action ' + disp["re"] + ' ' + noauth + '"><a onclick="misskeyreply(\'' + toot.id + '<div class="action ' + disp["re"] + ' ' + noauth + '"><a onclick="misskeyreply(\'' + toot.id +
'\',\'' + acct_id + '\',' + '\',\'' + acct_id + '\',' +
acct_id + ',\'' + visen + acct_id + ',\'' + visen +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_replyto+'"><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="fas fa-share"></i></a></div>' +
'<div class="action ' + can_rt + ' ' + disp["rt"] + ' ' + noauth + '"><a onclick="renote(\'' + toot.id + '\',' + acct_id + '<div class="action ' + can_rt + ' ' + disp["rt"] + ' ' + noauth + '"><a onclick="renote(\'' + toot.id + '\',' + acct_id +
',\'' + tlid + ',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_misskeyparse_renote+'"><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 fas fa-retweet ' +
if_rt + ' rt_' + toot.id + '"></i><span class="rt_ct"></span></a></div>' + 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 + '<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.lang_misskeyparse_renoteqt+'"><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 fas fa-quote-right"></i></a></div>' +
'<div class="action ' + disp["fav"] + ' ' + noauth + '"><a onclick="reactiontoggle(\'' + toot.id + '\',' + acct_id + '<div class="action ' + disp["fav"] + ' ' + noauth + '"><a onclick="reactiontoggle(\'' + toot.id + '\',' + acct_id +
',\'' + tlid + ',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_misskeyparse_reaction+'"><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="fas text-darken-3 fa-plus' +
if_fav + ' fav_' + toot.id + '"></i></div>' + if_fav + ' fav_' + toot.id + '"></i></div>' +
'<div class="' + if_mine + ' action ' + disp["del"] + ' ' + noauth + '"><a onclick="del(\'' + toot.id + '\',' + '<div class="' + if_mine + ' action ' + disp["del"] + ' ' + noauth + '"><a onclick="del(\'' + toot.id + '\',' +
acct_id + acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_del+'"><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="fas fa-trash"></i></a></div>' +
'<div class="' + if_mine + ' action pin ' + disp["pin"] + ' ' + noauth + '"><a onclick="pin(\'' + toot.id + '\',' + '<div class="' + if_mine + ' action pin ' + disp["pin"] + ' ' + noauth + '"><a onclick="pin(\'' + toot.id + '\',' +
acct_id + acct_id +
')" 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>' ')" class="waves-effect waves-dark btn-flat" style="padding:0" title="' + lang.lang_parse_pin + '"><i class="fas fa-map-pin pin_' + toot.id + '"></i></a></div>'
+ '<div class="' + if_mine + ' action ' + disp["red"] + ' ' + noauth + '"><a onclick="redraft(\'' + toot.id + '\',' + + '<div class="' + if_mine + ' action ' + disp["red"] + ' ' + noauth + '"><a onclick="redraft(\'' + toot.id + '\',' +
acct_id + acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="' + lang.lang_parse_redraft + '"><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 +
@@ -772,15 +856,23 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
//オブジェクトパーサー(ユーザーデータ) //オブジェクトパーサー(ユーザーデータ)
function misskeyUserparse(obj, auth, acct_id, tlid, popup) { function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
console.log(["Parse them ", obj])
if (popup > 0 || popup == -1) { if (popup > 0 || popup == -1) {
} else { } else {
if (obj.users) {
var obj = obj.users; var obj = obj.users;
} }
}
var templete = ''; var templete = '';
var datetype = localStorage.getItem("datetype"); var datetype = localStorage.getItem("datetype");
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
var toot = obj[key]; var toot = obj[key];
if (toot.followee) {
toot = toot.followee
} else if (toot.follower) {
toot = toot.follower
}
var locked = ""; var locked = "";
if (auth) { if (auth) {
var auth = '<i class="material-icons gray pointer" onclick="misskeyRequest(\'' + var auth = '<i class="material-icons gray pointer" onclick="misskeyRequest(\'' +
@@ -791,7 +883,7 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
var ftxt = lang.lang_parse_followed; var ftxt = lang.lang_parse_followed;
if (popup > 0 || popup == -1) { if (popup > 0 || popup == -1) {
var notftext = '<span class="cbadge"title="' + date(toot.createdAt, var notftext = '<span class="cbadge"title="' + date(toot.createdAt,
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.createdAt, 'absolute') + '(' + lang.lang_parse_notftime + ')"><i class="far fa-clock"></i>' + date(toot.createdAt,
datetype) + datetype) +
'</span>' + ftxt + '<br>'; '</span>' + ftxt + '<br>';
var toot = toot.user; var toot = toot.user;
@@ -800,7 +892,7 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
} }
var memory = localStorage.getItem("notice-mem"); var memory = localStorage.getItem("notice-mem");
if (popup >= 0 && obj.length < 5 && notftext != memory) { if (popup >= 0 && obj.length < 5 && notftext != memory) {
Materialize.toast(escapeHTMLtemp(toot.name)+":"+ftxt, popup * 1000); M.toast({ html: escapeHTMLtemp(toot.name) + ":" + ftxt, displayLength: popup * 1000 })
$(".notf-icon_" + tlid).addClass("red-text"); $(".notf-icon_" + tlid).addClass("red-text");
localStorage.setItem("notice-mem", notftext); localStorage.setItem("notice-mem", notftext);
notftext = ""; notftext = "";
@@ -809,9 +901,7 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
native = "yes"; native = "yes";
} }
if (native == "yes") { if (native == "yes") {
var electron = require("electron"); var os = localStorage.getItem("platform");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = { var options = {
body: toot.display_name + "(" + toot.acct + ")" + ftxt, body: toot.display_name + "(" + toot.acct + ")" + ftxt,
icon: toot.avatar icon: toot.avatar
@@ -820,14 +910,15 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
if (os == "darwin") { if (os == "darwin") {
var n = new Notification('TheDesk:' + domain, options); var n = new Notification('TheDesk:' + domain, options);
} else { } else {
ipc.send('native-notf', [ var nativeNotfOpt=[
'TheDesk:' + domain, 'TheDesk:' + domain,
toot.display_name + "(" + toot.acct + ")" + ftxt, toot.display_name + "(" + toot.acct + ")" + ftxt,
toot.avatar, toot.avatar,
"userdata", "userdata",
acct_id, acct_id,
toot.id toot.id
]); ]
postMessage(["nativeNotf", nativeNotfOpt], "*")
} }
} }
} }
@@ -835,7 +926,17 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
var dis_name = escapeHTMLtemp(toot.name); var dis_name = escapeHTMLtemp(toot.name);
dis_name = twemoji.parse(dis_name); dis_name = twemoji.parse(dis_name);
} else { } else {
var dis_name=toot.name; var dis_name = toot.username;
}
if (toot.followersCount) {
var ferct = toot.followersCount
} else {
var ferct = "unknown"
}
if (toot.followingCount) {
var fingct = toot.followingCount
} else {
var fingct = "unknown"
} }
templete = templete + templete = templete +
'<div class="cvo" style="padding-top:5px;" user-id="' + toot.id + '"><div class="area-notice">' + '<div class="cvo" style="padding-top:5px;" user-id="' + toot.id + '"><div class="area-notice">' +
@@ -851,8 +952,8 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
'</div>' + '</div>' +
'</div>' + '</div>' +
'<div style="justify-content:space-around" class="area-toot"> <div class="cbadge" style="width:100px;">Follows:' + '<div style="justify-content:space-around" class="area-toot"> <div class="cbadge" style="width:100px;">Follows:' +
toot.followingCount + fingct +
'</div><div class="cbadge" style="width:100px;">Followers:' + toot.followersCount + '</div><div class="cbadge" style="width:100px;">Followers:' + ferct +
'</div>' + '</div>' +
'</div>' + '</div>' +
'</div>' + '</div>' +
@@ -864,9 +965,102 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
function goGoogle(id) { function goGoogle(id) {
var val = $("#srcbox_" + id).val(); var val = $("#srcbox_" + id).val();
var url = "https://google.com/search?q=" + val; var url = "https://google.com/search?q=" + val;
const { postMessage(["openUrl", url], "*")
shell }
} = require('electron'); var misskeyws = []
var misskeywsstate = []
shell.openExternal(url); function connectMisskey(acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "wss://" + domain +
"/streaming?i=" + at;
var wsid = misskeyws.length;
localStorage.setItem("misskey_wss_" + acct_id, wsid);
misskeyws[wsid] = new WebSocket(start);
misskeyws[wsid].onopen = function (mess) {
console.table({ "tlid": tlid, "type": "Connect Streaming API", "domain": domain, "message": [mess] })
misskeywsstate[wsid] = true
//$("#notice_icon_" + tlid).removeClass("red-text");
var send = '{"type":"connect","body":{"channel":"main","id":"notf:' + acct_id + '"}}'
misskeyws[wsid].send(send)
}
misskeyws[wsid].onmessage = function (mess) {
console.log([domain + ":Receive Streaming API:", data]);
var data = JSON.parse(mess.data)
var obj = data.body.body
if (data.body.id.indexOf("notf:") !== -1) {
var obj = JSON.parse(mess.data).body;
console.log(obj);
var popup = localStorage.getItem("popup");
if (!popup) {
popup = 0;
}
if (JSON.parse(mess.data).body.type != "follow") {
templete = misskeyParse([obj.body], 'notf', acct_id, 'notf', popup);
} else {
templete = misskeyUserparse([obj.body], 'notf', acct_id, 'notf', popup);
}
if (JSON.parse(mess.data).body.type == "reaction") {
console.log("reaction refresh")
reactRefresh(acct_id, obj.body.note.id)
}
if (!$("div[data-notfIndv=" + acct_id + "_" + obj.body.id + "]").length) {
$("div[data-notf=" + acct_id + "]").prepend(templete);
$("div[data-const=notf_" + acct_id + "]").prepend(templete);
}
jQuery("time.timeago").timeago();
} else if (data.body.type == "note") {
var tlid = data.body.id * 1
var multi = localStorage.getItem("column");
var col = JSON.parse(multi)[tlid];
if (localStorage.getItem("voice_" + tlid)) {
var voice = true;
} else {
var voice = false;
}
if (voice) {
say(obj.text)
}
var templete = misskeyParse([obj], col.type, acct_id, tlid, "", mute);
misskeyws[wsid].send(JSON.stringify({
type: 'sn',
body: {
id: obj.id
}
}))
var pool = localStorage.getItem("pool_" + tlid);
if (pool) {
pool = templete + pool;
} else {
pool = templete
}
localStorage.setItem("pool_" + tlid, pool);
scrollck();
jQuery("time.timeago").timeago();
} else if (data.type == "noteUpdated") {
if (data.body.type == "reacted") {
reactRefresh(acct_id, data.body.id)
} else if (data.body.type == "deleted") {
$("#pub_" + data.body.id).hide();
$("#pub_" + data.body.id).remove();
}
}
}
misskeyws[wsid].onerror = function (error) {
console.error("Error closing " + tlid);
console.error(error);
misskeywsstate[wsid] = false
connectMisskey(acct_id)
return false;
};
misskeyws[wsid].onclose = function () {
console.warn("Closing " + tlid);
misskeywsstate[wsid] = false
connectMisskey(acct_id)
return false;
};
} }

View File

@@ -1,6 +1,5 @@
//Integrated TL //Integrated TL
function mixtl(acct_id, tlid, type, delc, voice) { function mixtl(acct_id, tlid, type, delc, voice) {
console.log(delc);
localStorage.removeItem("morelock") localStorage.removeItem("morelock")
localStorage.setItem("now", type); localStorage.setItem("now", type);
todo("Integrated TL Loading...(Local)"); todo("Integrated TL Loading...(Local)");
@@ -94,19 +93,18 @@ function mixre(acct_id, tlid, TLtype, mute,delc,voice,mode) {
websocketLocal[wslid] = new WebSocket(startLocal); websocketLocal[wslid] = new WebSocket(startLocal);
websocketHome[wshid].onopen = function (mess) { websocketHome[wshid].onopen = function (mess) {
localStorage.setItem("wssH_" + tlid, wshid); localStorage.setItem("wssH_" + tlid, wshid);
console.log("Connect Streaming API(Integrated:Home)"); console.table({ "tlid": tlid, "type": "Connect Streaming API(Integrated:Home)", "domain": domain, "message": mess })
$("#notice_icon_" + tlid).removeClass("red-text"); $("#notice_icon_" + tlid).removeClass("red-text");
} }
websocketLocal[wslid].onopen = function (mess) { websocketLocal[wslid].onopen = function (mess) {
localStorage.setItem("wssL_" + tlid, wslid); localStorage.setItem("wssL_" + tlid, wslid);
console.log("Connect Streaming API(Integrated:Local)"); console.table({ "tlid": tlid, "type": "Connect Streaming API(Integrated:Local)", "domain": domain, "message": mess })
$("#notice_icon_" + tlid).removeClass("red-text"); $("#notice_icon_" + tlid).removeClass("red-text");
} }
websocketLocal[wslid].onmessage = function (mess) { websocketLocal[wslid].onmessage = function (mess) {
console.log("Receive Streaming API:(Integrated:Local)"); console.log(["Receive Streaming API:(Integrated:Local)", obj]);
var obj = JSON.parse(JSON.parse(mess.data).payload); var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
var type = JSON.parse(mess.data).event; var type = JSON.parse(mess.data).event;
if (type == "delete") { if (type == "delete") {
if (delc == "true") { if (delc == "true") {
@@ -143,10 +141,8 @@ function mixre(acct_id, tlid, TLtype, mute,delc,voice,mode) {
} }
} }
websocketHome[wshid].onmessage = function (mess) { websocketHome[wshid].onmessage = function (mess) {
console.log("Receive Streaming API:(Integrated:Home)"); console.log(["Receive Streaming API:(Integrated:Home)", obj]);
var obj = JSON.parse(JSON.parse(mess.data).payload); var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
var type = JSON.parse(mess.data).event; var type = JSON.parse(mess.data).event;
if (type == "delete") { if (type == "delete") {
if (del > 10) { if (del > 10) {
@@ -195,40 +191,57 @@ function mixre(acct_id, tlid, TLtype, mute,delc,voice,mode) {
} }
} }
websocketLocal[wslid].onerror = function (error) { websocketLocal[wslid].onerror = function (error) {
console.error('WebSocket Error ' + error); console.error('WebSocketLocal Error')
console.error(error);
if (mode == "error") { if (mode == "error") {
$("#notice_icon_" + tlid).addClass("red-text"); $("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Error ' + error); todo('WebSocket Error ' + error);
} else { } else {
var errorct = localStorage.getItem("wserror_" + tlid) * 1 + 1;
localStorage.setItem("wserror_" + tlid, errorct);
if (errorct < 3) {
reconnector(tlid, TLtype, acct_id, "", "error"); reconnector(tlid, TLtype, acct_id, "", "error");
} }
}
}; };
websocketLocal[wslid].onclose = function () { websocketLocal[wslid].onclose = function () {
console.error('WebSocketLocal Closing by error:' + tlid); console.warn('WebSocketLocal Closing:' + tlid);
if (mode == "error") { if (mode == "error") {
$("#notice_icon_" + tlid).addClass("red-text"); $("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Closed'); todo('WebSocket Closed');
} else { } else {
var errorct = localStorage.getItem("wserror_" + tlid) * 1 + 1;
localStorage.setItem("wserror_" + tlid, errorct);
if (errorct < 3) {
reconnector(tlid, TLtype, acct_id, "", "error"); reconnector(tlid, TLtype, acct_id, "", "error");
} }
}
}; };
websocketHome[wshid].onerror = function (error) { websocketHome[wshid].onerror = function (error) {
console.error('WebSocket Error ' + error); console.error(['WebSocketHome Error', error])
if (mode == "error") { if (mode == "error") {
$("#notice_icon_" + tlid).addClass("red-text"); $("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Error ' + error); todo('WebSocket Error ' + error);
} else { } else {
var errorct = localStorage.getItem("wserror_" + tlid) * 1 + 1;
localStorage.setItem("wserror_" + tlid, errorct);
if (errorct < 3) {
reconnector(tlid, TLtype, acct_id, "", "error"); reconnector(tlid, TLtype, acct_id, "", "error");
} }
}
}; };
websocketHome[wshid].onclose = function () { websocketHome[wshid].onclose = function () {
console.error('WebSocketHome Closing by error:' + tlid); console.warn('WebSocketHome Closing:' + tlid);
if (mode == "error") { if (mode == "error") {
$("#notice_icon_" + tlid).addClass("red-text"); $("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Closed'); todo('WebSocket Closed');
} else { } else {
var errorct = localStorage.getItem("wserror_" + tlid) * 1 + 1;
localStorage.setItem("wserror_" + tlid, errorct);
if (errorct < 3) {
reconnector(tlid, TLtype, acct_id, "", "error"); reconnector(tlid, TLtype, acct_id, "", "error");
} }
}
}; };

View File

@@ -15,12 +15,11 @@ function notfColumn(acct_id, tlid, sys){
native = "yes"; native = "yes";
} }
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
console.log(start)
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest();
if (localStorage.getItem("mode_" + domain) == "misskey") { if (localStorage.getItem("mode_" + domain) == "misskey") {
var misskey = true; var misskey = true;
var start = "https://" + domain + "/api/i/notifications"; var start = "https://" + domain + "/api/i/notifications";
httpreq.open(POST, start, true); httpreq.open("POST", start, true);
httpreq.setRequestHeader('Content-Type', 'application/json'); httpreq.setRequestHeader('Content-Type', 'application/json');
var body = JSON.stringify({ var body = JSON.stringify({
i: at i: at
@@ -44,7 +43,10 @@ function notfColumn(acct_id, tlid, sys){
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
var max_id = httpreq.getResponseHeader("link").match(/[?&]{1}max_id=([0-9]+)/)[1]; var max_id = httpreq.getResponseHeader("link");
if (max_id) {
max_id = max_id.match(/[?&]{1}max_id=([0-9]+)/)[1]
}
if (json[0]) { if (json[0]) {
var templete = ""; var templete = "";
var lastnotf = localStorage.getItem("lastnotf_" + acct_id); var lastnotf = localStorage.getItem("lastnotf_" + acct_id);
@@ -56,17 +58,16 @@ function notfColumn(acct_id, tlid, sys){
if (key > 14) { if (key > 14) {
ct = "15+"; ct = "15+";
} }
var electron = require("electron"); var os = localStorage.getItem("platform");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = { var options = {
body: ct+lang_notf_new[lang], body: ct + lang.lang_notf_new,
icon: localStorage.getItem("prof_" + acct_id) icon: localStorage.getItem("prof_" + acct_id)
}; };
if (os == "darwin") { if (os == "darwin") {
var n = new Notification('TheDesk:' + domain, options); var n = new Notification('TheDesk:' + domain, options);
} else { } else {
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]); var nativeNotfOpt=['TheDesk:' + domain, ct + lang.lang_notf_new, localStorage.getItem("prof_" + acct_id)]
postMessage(["nativeNotf", nativeNotfOpt], "*")
} }
} }
@@ -77,15 +78,15 @@ function notfColumn(acct_id, tlid, sys){
} }
if (obj.type != "follow") { if (obj.type != "follow") {
if (misskey) { if (misskey) {
templete = templete+misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute); templete = templete + misskeyParse([obj], 'notf', acct_id, tlid, -1, mute);
} else { } else {
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1, mute); templete = templete + parse([obj], 'notf', acct_id, tlid, -1, mute);
} }
} else { } else {
if (misskey) { if (misskey) {
templete = templete+misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute); templete = templete + misskeyUserparse([obj], 'notf', acct_id, tlid, -1, mute);
} else { } else {
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1); templete = templete + userparse([obj.account], 'notf', acct_id, tlid, -1);
} }
} }
@@ -112,73 +113,6 @@ function notfColumn(acct_id, tlid, sys){
at; 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) { function notfCommon(acct_id, tlid, sys) {
todo("Notifications Loading..."); todo("Notifications Loading...");
@@ -212,7 +146,7 @@ function notfCommon(acct_id, tlid, sys) {
} }
} }
fetch(start, i).then(function (response) { fetch(start, i).then(function (response) {
console.log(response.headers.get('link')); console.log("header to get param:" + response.headers.get('link'));
return response.json(); return response.json();
}).catch(function (error) { }).catch(function (error) {
todo(error); todo(error);
@@ -229,17 +163,16 @@ function notfCommon(acct_id, tlid, sys) {
if (key > 14) { if (key > 14) {
ct = "15+"; ct = "15+";
} }
var electron = require("electron"); var os = localStorage.getItem("platform");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = { var options = {
body: ct+lang_notf_new[lang], body: ct + lang.lang_notf_new,
icon: localStorage.getItem("prof_" + acct_id) icon: localStorage.getItem("prof_" + acct_id)
}; };
if (os == "darwin") { if (os == "darwin") {
var n = new Notification('TheDesk:' + domain, options); var n = new Notification('TheDesk:' + domain, options);
} else { } else {
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]); var nativeNotfOpt=['TheDesk:' + domain, ct + lang.lang_notf_new, localStorage.getItem("prof_" + acct_id)]
postMessage(["nativeNotf", nativeNotfOpt], "*")
} }
} }
@@ -269,7 +202,11 @@ function notfCommon(acct_id, tlid, sys) {
} }
$("#notf-box").addClass("fetched"); $("#notf-box").addClass("fetched");
todc(); todc();
notfWS(misskey, acct_id, tlid, domain, at)
}); });
}
function notfWS(misskey, acct_id, tlid, domain, at) {
if (!misskey) { if (!misskey) {
if (localStorage.getItem("streaming_" + acct_id)) { if (localStorage.getItem("streaming_" + acct_id)) {
var wss = localStorage.getItem("streaming_" + acct_id) var wss = localStorage.getItem("streaming_" + acct_id)
@@ -278,55 +215,21 @@ function notfCommon(acct_id, tlid, sys) {
} }
var start = wss + "/api/v1/streaming/?stream=user&access_token=" + var start = wss + "/api/v1/streaming/?stream=user&access_token=" +
at; at;
}else{
var start = "wss://" + domain + "/?i=" +
at;
}
console.log(start);
var wsid = websocketNotf.length; var wsid = websocketNotf.length;
websocketNotf[acct_id] = new WebSocket(start); websocketNotf[acct_id] = new WebSocket(start);
console.log(websocketNotf);
websocketNotf[acct_id].onopen = function (mess) { websocketNotf[acct_id].onopen = function (mess) {
console.log("Connect Streaming API(Notf):"); console.table({ "acct_id": acct_id, "type": "Connect Streaming API(Notf)", "domain": domain, "message": [mess] })
console.log(mess);
$("i[data-notf=" + acct_id + "]").removeClass("red-text"); $("i[data-notf=" + acct_id + "]").removeClass("red-text");
} }
websocketNotf[acct_id].onmessage = function (mess) { websocketNotf[acct_id].onmessage = function (mess) {
console.log("Receive Streaming API(Notf):"+acct_id); console.log(["Receive Streaming API(Notf):" + acct_id + "(" + domain + ")", JSON.parse(JSON.parse(mess.data).payload)]);
var popup = localStorage.getItem("popup"); var popup = localStorage.getItem("popup");
if (!popup) { if (!popup) {
popup = 0; 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); var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
var type = JSON.parse(mess.data).event; var type = JSON.parse(mess.data).event;
if (type == "notification") { if (type == "notification") {
var templete = ""; var templete = "";
@@ -338,6 +241,7 @@ function notfCommon(acct_id, tlid, sys) {
} }
if (!$("div[data-notfIndv=" + acct_id + "_" + obj.id + "]").length) { if (!$("div[data-notfIndv=" + acct_id + "_" + obj.id + "]").length) {
$("div[data-notf=" + acct_id + "]").prepend(templete); $("div[data-notf=" + acct_id + "]").prepend(templete);
$("div[data-const=notf_" + acct_id + "]").prepend(templete);
} }
jQuery("time.timeago").timeago(); jQuery("time.timeago").timeago();
} else if (type == "delete") { } else if (type == "delete") {
@@ -345,15 +249,15 @@ function notfCommon(acct_id, tlid, sys) {
$("[toot-id=" + obj + "]").remove(); $("[toot-id=" + obj + "]").remove();
} }
} }
}
websocketNotf[acct_id].onerror = function (error) { websocketNotf[acct_id].onerror = function (error) {
console.error('WebSocket Error ' + error); console.error('WebSocket Error ' + error);
notfWS(misskey, acct_id, tlid, domain, at)
}; };
} }
}
//一定のスクロールで発火 //一定のスクロールで発火
function notfmore(tlid) { function notfmore(tlid) {
console.log(moreloading); console.log({ "status": "kicked", "status": moreloading });
console.log("kicked");
var multi = localStorage.getItem("column"); var multi = localStorage.getItem("column");
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
var acct_id = obj[tlid].domain; var acct_id = obj[tlid].domain;
@@ -396,7 +300,7 @@ function notfmore(tlid) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json); console.log(["More notifications on " + tlid, json]);
var max_id = httpreq.getResponseHeader("link").match(/[?&]{1}max_id=([0-9]+)/)[1]; var max_id = httpreq.getResponseHeader("link").match(/[?&]{1}max_id=([0-9]+)/)[1];
if (json[0]) { if (json[0]) {
var templete = ""; var templete = "";
@@ -480,25 +384,12 @@ function notfCanceler(acct){
$(".notf-icon_" + acct).removeClass("red-text"); $(".notf-icon_" + acct).removeClass("red-text");
} }
function allNotfRead() { function allNotfRead() {
console.log(localStorage.getItem("notf-fav_2"));
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
if (!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 {
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
}
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
console.log(key);
notfCanceler(key) notfCanceler(key)
}); });
} }
}
allNotfRead() allNotfRead()

View File

@@ -3,7 +3,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var templete = ''; var templete = '';
if (obj[0]) { 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')); localStorage.setItem("lastunix_" + tlid, date(obj[0].created_at, 'unix'));
} }
@@ -33,6 +33,9 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var ltr = localStorage.getItem("letters"); var ltr = localStorage.getItem("letters");
var gif = localStorage.getItem("gif"); var gif = localStorage.getItem("gif");
var imh = localStorage.getItem("img-height"); var imh = localStorage.getItem("img-height");
if (!imh) {
imh = 200;
}
if (imh == "full") { if (imh == "full") {
imh = "auto"; imh = "auto";
} else { } else {
@@ -228,11 +231,20 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
if (!locale && localStorage.getItem("fav_" + acct_id)) { if (!locale && localStorage.getItem("fav_" + acct_id)) {
what = 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, if (tlid == "notf") {
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.created_at, var notfFilHide = "hide"
} else {
var notfFilHide = ""
}
var noticetext = '<i class="fas fa-filter pointer big-text ' + notfFilHide + '" onclick="notfFilter(\'' + toot.account.id +
'\',\'' + tlid + '\');" title="' + lang.lang_parse_notffilter + '"></i><span class="cbadge cbadge-hover"title="' + date(toot.created_at,
'absolute') + '(' + lang.lang_parse_notftime + ')"><i class="far fa-clock"></i>' + date(toot.created_at,
datetype) + datetype) +
'</span><i class="big-text fa '+icon+'"></i><a onclick="udg(\'' + toot.account.id + '</span><i class="big-text fas ' + icon + '"></i><a onclick="udg(\'' + toot.account.id +
'\',\'' + acct_id + '\')" class="pointer grey-text">' + dis_name + '\',\'' + acct_id + '\')" class="pointer grey-text">' + dis_name +
"(@" + toot.account.acct + "(@" + toot.account.acct +
")</a>"; ")</a>";
@@ -245,27 +257,54 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
$(".notf-reply_" + acct_id).text(replyct * 1 - (-1)); $(".notf-reply_" + acct_id).text(replyct * 1 - (-1));
localStorage.setItem("notf-reply_" + acct_id, replyct * 1 - (-1)) localStorage.setItem("notf-reply_" + acct_id, replyct * 1 - (-1))
$(".notf-reply_" + acct_id).removeClass("hide") $(".notf-reply_" + acct_id).removeClass("hide")
var sound = localStorage.getItem("replySound");
if (sound == "default") {
var file = "../../source/notif3.wav"
}
} else if (toot.type == "reblog") { } else if (toot.type == "reblog") {
var btct = localStorage.getItem("notf-bt_" + acct_id) var btct = localStorage.getItem("notf-bt_" + acct_id)
$(".notf-bt_" + acct_id).text(btct * 1 - (-1)); $(".notf-bt_" + acct_id).text(btct * 1 - (-1));
localStorage.setItem("notf-bt_" + acct_id, btct * 1 - (-1)) localStorage.setItem("notf-bt_" + acct_id, btct * 1 - (-1))
$(".notf-bt_" + acct_id).removeClass("hide") $(".notf-bt_" + acct_id).removeClass("hide")
var sound = localStorage.getItem("btSound");
if (sound == "default") {
var file = "../../source/notif2.wav"
}
} else if (toot.type == "favourite") { } else if (toot.type == "favourite") {
var favct = localStorage.getItem("notf-fav_" + acct_id) var favct = localStorage.getItem("notf-fav_" + acct_id)
$(".notf-fav_" + acct_id).text(favct * 1 - (-1)); $(".notf-fav_" + acct_id).text(favct * 1 - (-1));
localStorage.setItem("notf-fav_" + acct_id, favct * 1 - (-1)) localStorage.setItem("notf-fav_" + acct_id, favct * 1 - (-1))
$(".notf-fav_" + acct_id).removeClass("hide") $(".notf-fav_" + acct_id).removeClass("hide")
var sound = localStorage.getItem("favSound");
if (sound == "default") {
var file = "../../source/notif.wav"
}
} }
} }
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
if (popup > 0) { if (popup > 0) {
Materialize.toast("["+domain+"]"+escapeHTML(toot.account.display_name)+what, popup * 1000); M.toast({ html: "[" + domain + "]" + escapeHTML(toot.account.display_name) + what, displayLength: popup * 1000 })
}
//通知音
if (sound == "c1") {
var file = localStorage.getItem("custom1");
} else if (sound == "c2") {
var file = localStorage.getItem("custom2");
} else if (sound == "c3") {
var file = localStorage.getItem("custom3");
} else if (sound == "c4") {
var file = localStorage.getItem("custom4");
}
if (file) {
request = new XMLHttpRequest();
request.open("GET", file, true);
request.responseType = "arraybuffer";
request.onload = playSound;
request.send();
} }
if (native == "yes") { if (native == "yes") {
var electron = require("electron"); var os = localStorage.getItem("platform");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = { var options = {
body: toot.account.display_name + "(" + toot.account.acct + ")" + what + "\n\n" + $.strip_tags(toot.status.content), body: toot.account.display_name + "(" + toot.account.acct + ")" + what + "\n\n" + $.strip_tags(toot.status.content),
icon: toot.account.avatar icon: toot.account.avatar
@@ -273,14 +312,15 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
if (os == "darwin") { if (os == "darwin") {
var n = new Notification('TheDesk:' + domain, options); var n = new Notification('TheDesk:' + domain, options);
} else { } else {
ipc.send('native-notf', [ var nativeNotfOpt = [
'TheDesk:' + domain, 'TheDesk:' + domain,
toot.account.display_name + "(" + toot.account.acct + ")" + what + "\n\n" + $.strip_tags(toot.status.content), toot.account.display_name + "(" + toot.account.acct + ")" + what + "\n\n" + $.strip_tags(toot.status.content),
toot.account.avatar, toot.account.avatar,
"toot", "toot",
acct_id, acct_id,
toot.status.id toot.status.id
]); ]
postMessage(["nativeNotf", nativeNotfOpt], "*")
} }
} }
if (localStorage.getItem("hasNotfC_" + acct_id) != "true") { if (localStorage.getItem("hasNotfC_" + acct_id) != "true") {
@@ -328,7 +368,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} else if (localStorage.getItem("domain_" + acct_id) == "mstdn.osaka" && !locale) { } else if (localStorage.getItem("domain_" + acct_id) == "mstdn.osaka" && !locale) {
rebtxt = "がしばいた"; rebtxt = "がしばいた";
} }
var notice = '<i class="big-text fa '+rticon+'"></i>'+ dis_name + "(@" + toot.account.acct + var notice = '<i class="big-text fas ' + rticon + '"></i>' + dis_name + "(@" + toot.account.acct +
")<br>"; ")<br>";
var boostback = "shared"; var boostback = "shared";
var uniqueid = toot.id; var uniqueid = toot.id;
@@ -381,7 +421,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var divider = '<div class="divider"></div>'; var divider = '<div class="divider"></div>';
} }
if (toot.account.locked) { if (toot.account.locked) {
var locked = ' <i class="fa fa-lock red-text"></i>'; var locked = ' <i class="fas fa-lock red-text"></i>';
} else { } else {
var locked = ""; var locked = "";
} }
@@ -389,7 +429,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var via = ''; var via = '';
viashow = "hide"; viashow = "hide";
} else { } else {
var via = toot.application.name; var via = escapeHTML(toot.application.name);
//強調チェック //強調チェック
Object.keys(emp).forEach(function (key6) { Object.keys(emp).forEach(function (key6) {
var cli = emp[key6]; var cli = emp[key6];
@@ -446,6 +486,39 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var viewer = ""; var viewer = "";
var hasmedia = ""; var hasmedia = "";
var youtube = ""; var youtube = "";
//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 if (toot.poll.expired) {
var myvote = lang.lang_parse_endedvote;
var result_hide = "";
} else {
var 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";
}
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="far fa-calendar-times"></i>' +
ended + '</span></div>';
}
if (toot.emojis) { if (toot.emojis) {
var emojick = toot.emojis[0]; var emojick = toot.emojis[0];
} else { } else {
@@ -461,6 +534,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var regExp = new RegExp(":" + shortcode + ":", "g"); var regExp = new RegExp(":" + shortcode + ":", "g");
content = content.replace(regExp, emoji_url); content = content.replace(regExp, emoji_url);
spoil = spoil.replace(regExp, emoji_url); spoil = spoil.replace(regExp, emoji_url);
poll = poll.replace(regExp, emoji_url);
}); });
} }
//ニコフレ絵文字 //ニコフレ絵文字
@@ -469,7 +543,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} else { } else {
var nicoemojick = false; var nicoemojick = false;
} }
//絵文字があれば //絵文字があれば(nico)
if (nicoemojick) { if (nicoemojick) {
Object.keys(toot.profile_emojis).forEach(function (keynico) { Object.keys(toot.profile_emojis).forEach(function (keynico) {
var emoji = toot.profile_emojis[keynico]; var emoji = toot.profile_emojis[keynico];
@@ -479,6 +553,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var regExp = new RegExp(":" + shortcode + ":", "g"); var regExp = new RegExp(":" + shortcode + ":", "g");
content = content.replace(regExp, emoji_url); content = content.replace(regExp, emoji_url);
spoil = spoil.replace(regExp, emoji_url); spoil = spoil.replace(regExp, emoji_url);
poll = poll.replace(regExp, emoji_url);
}); });
} }
//デフォ絵文字 //デフォ絵文字
@@ -495,6 +570,9 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
if (notice) { if (notice) {
notice = twemoji.parse(notice); notice = twemoji.parse(notice);
} }
if (poll) {
poll = twemoji.parse(poll);
}
var mediack = toot.media_attachments[0]; var mediack = toot.media_attachments[0];
//メディアがあれば //メディアがあれば
var media_ids = ""; var media_ids = "";
@@ -506,16 +584,37 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var purl = media.preview_url; var purl = media.preview_url;
media_ids = media_ids + media.id + ","; media_ids = media_ids + media.id + ",";
var url = media.url; var url = media.url;
var nsfwmes = ""
if (toot.sensitive && nsfw) { if (toot.sensitive && nsfw) {
var sense = "sensitive" var sense = "sensitive"
} else { var blur = media.blurhash
if (blur) {
nsfwmes = '<div class="nsfw-media">' + lang.lang_parse_nsfw + '</div>'
purl = parseBlur(blur)
var sense = "" var sense = ""
} }
} else {
var sense = ""
var blur = null
}
if (media.pleroma && media.pleroma.mime_type.indexOf("video") !== -1) {
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',' +
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%;"></a></span>';
} else {
if (media.type == "unknown") {
viewer = viewer + '<a href="' + media.remote_url + '" title="' + media.remote_url + '">[' + lang.lang_parse_unknown + ']</a> '
} else {
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',\'' + viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',\'' +
acct_id + '\')" id="' + id + '-image-' + key2 + '" data-url="' + url + acct_id + '\')" id="' + id + '-image-' + key2 + '" data-url="' + url +
'" data-type="' + media.type + '" class="img-parsed"><img draggable="false" src="' + '" data-type="' + media.type + '" class="img-parsed img-link" style="width:calc(' + cwdt + '% - 1px); height:' + imh + ';"><img draggable="false" src="' +
purl + '" class="' + sense + purl + '" class="' + sense +
' toot-img pointer" style="width:calc(' + cwdt + '% - 1px); height:'+imh+';"></a></span>'; ' toot-img pointer">' + nsfwmes + '</a>';
}
}
}); });
media_ids = media_ids.slice(0, -1); media_ids = media_ids.slice(0, -1);
} else { } else {
@@ -613,7 +712,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} }
if (toot.pinned) { if (toot.pinned) {
var if_pin = "blue-text"; var if_pin = "blue-text";
var pin_app = "pinned"; var pin_app = "pinnedToot";
} else { } else {
var if_pin = ""; var if_pin = "";
var pin_app = ""; var pin_app = "";
@@ -634,7 +733,8 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} else { } else {
var word = worde var word = worde
} }
var regExp = new RegExp( word, "g" ) ; var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
console.log(regExp)
if ($.strip_tags(content).match(regExp)) { if ($.strip_tags(content).match(regExp)) {
boostback = "hide by_filter"; boostback = "hide by_filter";
} }
@@ -647,7 +747,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var word = wordemp[key9]; var word = wordemp[key9];
if (word) { if (word) {
var word = word.tag; var word = word.tag;
var regExp = new RegExp( word, "g" ) ; var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
content = content.replace(regExp, '<span class="emp">' + word + "</span>"); content = content.replace(regExp, '<span class="emp">' + word + "</span>");
} }
}); });
@@ -692,45 +792,15 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
for (var i = 0; i < tickerdata.length; i++) { for (var i = 0; i < tickerdata.length; i++) {
var value = tickerdata[i]; var value = tickerdata[i];
if (value.domain == thisdomain) { 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>'; 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;"> ' + escapeHTML(value.name) + '</span></div>';
break; break;
} }
} }
} }
} }
//Poll //Quote
var poll=""; if (toot.quote) {
if(toot.poll){ poll = poll + '<div class="quote-renote"><div class="renote-icon"><img src="' + toot.quote.account.avatar + '"></div><div class="renote-user">' + escapeHTML(toot.quote.account.display_name) + '</div><div class="renote-text">' + toot.quote.content + '</div></div>'
var choices=toot.poll.options;
if(toot.poll.voted){
var myvote=lang.lang_parse_voted;
var result_hide="";
}else{
myvote='<a onclick="voteMastodon(\''+acct_id+'\',\''+toot.poll.id+'\')" class="votebtn">'+lang.lang_parse_vote+'</a><br>';
if(choices[0].votes_count===0 || choices[0].votes_count>0){
myvote=myvote+'<a onclick="showResult(\''+acct_id+'\',\''+toot.poll.id+'\')" class="pointer">'+lang.lang_parse_unvoted+"</a>";
}
var result_hide="hide";
}
if(toot.poll.expired){
var ended=lang.lang_parse_endedvote;
}else{
var ended=date(toot.poll.expires_at, datetype);
}
Object.keys(choices).forEach(function(keyc) {
var choice = choices[keyc];
if(!toot.poll.voted && !toot.poll.expired){
var votesel='voteSelMastodon(\''+acct_id+'\',\''+toot.poll.id+'\','+keyc+','+toot.poll.multiple+')';
var voteclass="pointer waves-effect waves-light";
}else{
var votesel="";
var voteclass="";
}
poll=poll+'<div class="'+voteclass+' vote vote_'+acct_id+'_'+toot.poll.id+'_'+keyc+'" onclick="'+votesel+'">'+choice.title+'<span class="vote_'+acct_id+'_'+toot.poll.id+'_result '+result_hide+'">('+choice.votes_count+')</span></div>';
});
poll='<div class="vote_'+acct_id+'_'+toot.poll.id+'">'+poll+myvote+'<span class="cbadge cbadge-hover" title="' + date(toot.poll.expires_at, 'absolute') +
'"><i class="fa fa-calendar-times-o"></i>' +
ended+ '</span></div>';
} }
templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' + templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' +
boostback + ' ' + fav_app + ' ' + rt_app + ' ' + pin_app + boostback + ' ' + fav_app + ' ' + rt_app + ' ' + pin_app +
@@ -749,17 +819,17 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
toot.account.acct + locked + '</span></div>' + toot.account.acct + locked + '</span></div>' +
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'' + '<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'' +
toot.url + '\');" title="' + date(toot.created_at, 'absolute') + toot.url + '\');" title="' + date(toot.created_at, 'absolute') +
'('+lang.lang_parse_clickcopyurl+')"><i class="fa fa-clock-o"></i>' + '(' + lang.lang_parse_clickcopyurl + ')"><i class="far fa-clock"></i>' +
date(toot.created_at, datetype) + '</span>' + date(toot.created_at, datetype) + '</span>' +
'</div></div>' + '</div></div>' +
'<div class="area-toot">' + tickerdom + '<span class="' + '<div class="area-toot">' + tickerdom + '<span class="' +
api_spoil + ' cw_text_' + toot.id + '"><span class="cw_text">' + spoil + "</span>" + spoiler_show + api_spoil + ' cw_text_' + toot.id + '"><span class="cw_text">' + spoil + "</span>" + spoiler_show +
'</span><span class="toot ' + spoiler + '">' + content + '</span><span class="toot ' + spoiler + '">' + content +
'</span>' + '</span>' + poll +
'' + viewer + '' + '' + viewer + '' +
'</div><div class="area-additional"><span class="additional">' + analyze + '</div><div class="area-additional"><span class="additional">' + analyze +
'</span>' + '</span>' +
'' +poll+ mentions + tags + '</div>' + '' + mentions + tags + '</div>' +
'<div class="area-vis"></div>' + '<div class="area-vis"></div>' +
'<div class="area-actions ' + mouseover + '">' + '<div class="area-actions ' + mouseover + '">' +
'<div class="action">' + vis + '</div>' + '<div class="action">' + vis + '</div>' +
@@ -768,27 +838,27 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
'<div class="action ' + disp["re"] + ' ' + noauth + '"><a onclick="re(\'' + toot.id + '<div class="action ' + disp["re"] + ' ' + noauth + '"><a onclick="re(\'' + toot.id +
'\',\'' + to_mention + '\',' + '\',\'' + to_mention + '\',' +
acct_id + ',\'' + visen + acct_id + ',\'' + visen +
'\')" 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 + '\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_replyto + '"><i class="fas fa-share"></i><span class="rep_ct">' + replyct +
'</a></span></a></div>' + '</a></span></a></div>' +
'<div class="action ' + can_rt + ' ' + disp["rt"] + ' ' + noauth + '"><a onclick="rt(\'' + toot.id + '\',' + acct_id + '<div class="action ' + can_rt + ' ' + disp["rt"] + ' ' + noauth + '"><a onclick="rt(\'' + toot.id + '\',' + acct_id +
',\'' + tlid + ',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="'+lang.lang_parse_bt+'"><i class="fa fa-retweet ' + '\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_bt + '"><i class="fas fa-retweet ' +
if_rt + ' rt_' + toot.id + '"></i><span class="rt_ct">' + toot.reblogs_count + if_rt + ' rt_' + toot.id + '"></i><span class="rt_ct">' + toot.reblogs_count +
'</span></a></div>' + '</span></a></div>' +
'<div class="action ' + can_rt + ' ' + disp["qt"] + ' ' + noauth + ' ' + qtClass + '"><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 + ',\'' + toot.account.acct + '\',\'' + toot.url +
'\')" 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>' + '\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_quote + '"><i class="text-darken-3 fas fa-quote-right"></i></a></div>' +
'<div class="action ' + disp["fav"] + ' ' + noauth + '"><a onclick="fav(\'' + toot.id + '\',' + acct_id + '<div class="action ' + disp["fav"] + ' ' + noauth + '"><a onclick="fav(\'' + toot.id + '\',' + acct_id +
',\'' + tlid + ',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="'+lang.lang_parse_fav+'"><i class="fa text-darken-3 fa-star' + '\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_fav + '"><i class="fas text-darken-3 fa-star' +
if_fav + ' fav_' + toot.id + '"></i><span class="fav_ct">' + toot.favourites_count + if_fav + ' fav_' + toot.id + '"></i><span class="fav_ct">' + toot.favourites_count +
'</a></span></div>' + '</a></span></div>' +
'<div class="' + if_mine + ' action ' + disp["del"] + ' ' + noauth + '"><a onclick="del(\'' + toot.id + '\',' + '<div class="' + if_mine + ' action ' + disp["del"] + ' ' + noauth + '"><a onclick="del(\'' + toot.id + '\',' +
acct_id + acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_del+'"><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="fas fa-trash"></i></a></div>' +
'<div class="' + if_mine + ' action pin ' + disp["pin"] + ' ' + noauth + '"><a onclick="pin(\'' + toot.id + '\',' + '<div class="' + if_mine + ' action pin ' + disp["pin"] + ' ' + noauth + '"><a onclick="pin(\'' + toot.id + '\',' +
acct_id + acct_id +
')" 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>' ')" class="waves-effect waves-dark btn-flat" style="padding:0" title="' + lang.lang_parse_pin + '"><i class="fas fa-map-pin pin_' + toot.id + ' ' + if_pin + '"></i></a></div>'
+ '<div class="' + if_mine + ' action ' + disp["red"] + ' ' + noauth + '"><a onclick="redraft(\'' + toot.id + '\',' + + '<div class="' + if_mine + ' action ' + disp["red"] + ' ' + noauth + '"><a onclick="redraft(\'' + toot.id + '\',' +
acct_id + acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="' + lang.lang_parse_redraft + '"><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 +
@@ -819,6 +889,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
var datetype = localStorage.getItem("datetype"); var datetype = localStorage.getItem("datetype");
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
var toot = obj[key]; var toot = obj[key];
console.log(["Parsing", toot])
if (!toot.username) { if (!toot.username) {
var raw = toot; var raw = toot;
toot = toot.account; toot = toot.account;
@@ -827,15 +898,16 @@ function userparse(obj, auth, acct_id, tlid, popup) {
var notf = false; var notf = false;
} }
if (toot.locked) { if (toot.locked) {
var locked = ' <i class="fa fa-lock red-text"></i>'; var locked = ' <i class="fas fa-lock red-text"></i>';
} else { } else {
var locked = ""; var locked = "";
} }
if (auth) { if (auth == "request") {
var auth = '<i class="material-icons gray pointer" onclick="request(\'' + var authhtml = '<i class="material-icons gray pointer" onclick="request(\'' +
toot.id + '\',\'authorize\',' + acct_id + ')">person_add</i>'; toot.id + '\',\'authorize\',' + acct_id + ')" title="Accept">person_add</i> <i class="material-icons gray pointer" onclick="request(\'' +
toot.id + '\',\'reject\',' + acct_id + ')" title="Reject">person_add_disabled</i>';
} else { } else {
var auth = ""; var authhtml = "";
} }
var ftxt = lang.lang_parse_followed; var ftxt = lang.lang_parse_followed;
if (!locale && localStorage.getItem("followlocale_" + acct_id)) { if (!locale && localStorage.getItem("followlocale_" + acct_id)) {
@@ -848,7 +920,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
} }
var memory = localStorage.getItem("notice-mem"); var memory = localStorage.getItem("notice-mem");
if (popup >= 0 && obj.length < 5 && notftext != memory) { if (popup >= 0 && obj.length < 5 && notftext != memory) {
Materialize.toast(escapeHTML(toot.display_name)+":"+ftxt, popup * 1000); M.toast({ html: escapeHTML(toot.display_name) + ":" + ftxt, displayLength: popup * 1000 })
$(".notf-icon_" + tlid).addClass("red-text"); $(".notf-icon_" + tlid).addClass("red-text");
localStorage.setItem("notice-mem", notftext); localStorage.setItem("notice-mem", notftext);
notftext = ""; notftext = "";
@@ -857,9 +929,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
native = "yes"; native = "yes";
} }
if (native == "yes") { if (native == "yes") {
var electron = require("electron"); var os = localStorage.getItem("platform");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = { var options = {
body: toot.display_name + "(" + toot.acct + ")" + ftxt, body: toot.display_name + "(" + toot.acct + ")" + ftxt,
icon: toot.avatar icon: toot.avatar
@@ -868,14 +938,15 @@ function userparse(obj, auth, acct_id, tlid, popup) {
if (os == "darwin") { if (os == "darwin") {
var n = new Notification('TheDesk:' + domain, options); var n = new Notification('TheDesk:' + domain, options);
} else { } else {
ipc.send('native-notf', [ var nativeNotfOpt = [
'TheDesk:' + domain, 'TheDesk:' + domain,
toot.display_name + "(" + toot.acct + ")" + ftxt, toot.display_name + "(" + toot.acct + ")" + ftxt,
toot.avatar, toot.avatar,
"userdata", "userdata",
acct_id, acct_id,
toot.id toot.id
]); ]
postMessage(["nativeNotf", nativeNotfOpt], "*")
} }
} }
} }
@@ -921,13 +992,13 @@ function userparse(obj, auth, acct_id, tlid, popup) {
'<div class="area-display_name"><div class="flex-name"><span class="user">' + '<div class="area-display_name"><div class="flex-name"><span class="user">' +
dis_name + '</span>' + dis_name + '</span>' +
'<span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' + '<span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
toot.acct + locked + auth +'</span>' + toot.acct + locked + '</span>' +
'</div>' + '</div>' +
'</div>' + '</div>' +
'<div style="justify-content:space-around" class="area-toot"> <div class="cbadge" style="width:100px;">Follows:' + '<div style="justify-content:space-around" class="area-toot"> <div class="cbadge" style="width:100px;">Follows:' +
toot.following_count + toot.following_count +
'</div><div class="cbadge" style="width:100px;">Followers:' + toot.followers_count + '</div><div class="cbadge" style="width:100px;">Followers:' + toot.followers_count +
'</div>' + '</div>' + authhtml +
'</div>' + '</div>' +
'</div>' + '</div>' +
'</div>'; '</div>';
@@ -939,60 +1010,13 @@ function userparse(obj, auth, acct_id, tlid, popup) {
function client(name) { function client(name) {
if (name != "Unknown") { if (name != "Unknown") {
//聞く //聞く
localStorage.removeItem("client_mute");
var electron = require("electron");
var remote=electron.remote;
var dialog=remote.dialog;
const options = { const options = {
type: 'info', type: 'info',
title: lang.lang_parse_clientop, title: lang.lang_parse_clientop,
message: name + lang.lang_parse_clienttxt, message: name + lang.lang_parse_clienttxt,
buttons: [lang.lang_parse_clientno, lang.lang_parse_clientemp, lang.lang_parse_clientmute] buttons: [lang.lang_parse_clientno, lang.lang_parse_clientemp, lang.lang_parse_clientmute]
} }
dialog.showMessageBox(options, function(arg) { postMessage(["dialogClient", options], "*")
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.lang_status_emphas, 2000);
}else{
var can;
Object.keys(obj).forEach(function(key) {
var cliT = obj[key];
if(cliT!=name && !can){
can=false;
}else{
can=true;
obj.splice(key, 1);
Materialize.toast(name+lang.lang_status_unemphas, 2000);
}
});
if(!can){
obj.push(name);
Materialize.toast(name+lang.lang_status_emphas, 2000);
}else{
}
}
var json = JSON.stringify(obj);
localStorage.setItem("client_emp", json);
}else if(arg===2){
var cli = localStorage.getItem("client_mute");
var obj = JSON.parse(cli);
if(!obj){
var obj=[];
}
obj.push(name);
var json = JSON.stringify(obj);
localStorage.setItem("client_mute", json);
Materialize.toast(name+lang.lang_parse_mute, 2000);
}else{
return;
}
parseColumn();
})
} }
} }

View File

@@ -25,13 +25,12 @@ function pollCalc(){
var days = $("#days_poll").val(); var days = $("#days_poll").val();
var hrs = $("#hours_poll").val(); var hrs = $("#hours_poll").val();
var mins = $("#mins_poll").val(); var mins = $("#mins_poll").val();
console.log(days*86400+hrs*3600+mins*60) console.log("Poll calc:" + days * 86400 + hrs * 3600 + mins * 60)
return days * 86400 + hrs * 3600 + mins * 60; return days * 86400 + hrs * 3600 + mins * 60;
} }
//Vote //Vote
function voteSelMastodon(acct_id, id, to, mul) { function voteSelMastodon(acct_id, id, to, mul) {
console.log('.vote_'+acct_id+'_'+id+'_'+to);
if ($('.vote_' + acct_id + '_' + id + '_' + to).hasClass("sel")) { if ($('.vote_' + acct_id + '_' + id + '_' + to).hasClass("sel")) {
$('.vote_' + acct_id + '_' + id + '_' + to).css("background-color", "transparent") $('.vote_' + acct_id + '_' + id + '_' + to).css("background-color", "transparent")
$('.vote_' + acct_id + '_' + id + '_' + to).removeClass("sel"); $('.vote_' + acct_id + '_' + id + '_' + to).removeClass("sel");
@@ -95,7 +94,7 @@ function voteMastodonrefresh(acct_id,id){
httpreqd.onreadystatechange = function () { httpreqd.onreadystatechange = function () {
if (httpreqd.readyState == 4) { if (httpreqd.readyState == 4) {
var json = httpreqd.response; var json = httpreqd.response;
console.log(json); console.log(["Refresh vote", json]);
if (!json) { if (!json) {
return false; return false;
} }
@@ -108,10 +107,10 @@ function voteMastodonrefresh(acct_id,id){
if (!json.voted) { if (!json.voted) {
votesel = 'voteSelMastodon(\'' + acct_id + '\',\'' + json.id + '\',' + keyc + ',' + json.multiple + ')'; 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 + '<div class="pointer vote vote_' + acct_id + '_' + json.id + '_' + keyc + '" onclick="' + votesel + '">' + escapeHTML(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') + poll = poll + myvote + '<span class="cbadge cbadge-hover" title="' + date(json.expires_at, 'absolute') +
'"><i class="fa fa-calendar-times-o"></i>' + '"><i class="far fa-calendar-times"></i>' +
date(json.expires_at, datetype) + '</span>'; date(json.expires_at, datetype) + '</span>';
$('.vote_' + acct_id + '_' + json.id).html(poll) $('.vote_' + acct_id + '_' + json.id).html(poll)
} }

View File

@@ -33,7 +33,6 @@ $repeat = setInterval(function() {
var obj = JSON.parse(voice); var obj = JSON.parse(voice);
if (obj[0]) { if (obj[0]) {
$synthes.text = obj[0]; $synthes.text = obj[0];
console.log($synthes);
speechSynthesis.speak($synthes); speechSynthesis.speak($synthes);
obj.splice(0, 1); obj.splice(0, 1);
var json = JSON.stringify(obj); var json = JSON.stringify(obj);
@@ -91,7 +90,7 @@ function voiceSettings(){
localStorage.setItem("voice_speed", $("#voicespeed").val() / 10); localStorage.setItem("voice_speed", $("#voicespeed").val() / 10);
localStorage.setItem("voice_pitch", $("#voicepitch").val() / 50); localStorage.setItem("voice_pitch", $("#voicepitch").val() / 50);
localStorage.setItem("voice_vol", $("#voicevol").val() / 100); localStorage.setItem("voice_vol", $("#voicevol").val() / 100);
Materialize.toast(lang.lang_speech_refresh, 3000); M.toast({ html: lang.lang_speech_refresh, displayLength: 3000 })
} }
function voiceSettingLoad() { function voiceSettingLoad() {
var speed = localStorage.getItem("voice_speed"); var speed = localStorage.getItem("voice_speed");

View File

@@ -15,7 +15,7 @@ function src(mode) {
var q = $("#src").val(); var q = $("#src").val();
var acct_id = $("#src-acct-sel").val(); var acct_id = $("#src-acct-sel").val();
if (acct_id == "tootsearch") { if (acct_id == "tootsearch") {
tootsearch(q); tsAdd(q)
return false; return false;
} }
localStorage.setItem("last-use", acct_id); localStorage.setItem("last-use", acct_id);
@@ -31,7 +31,7 @@ function src(mode) {
} else { } else {
var start = "https://" + domain + "/api/v1/search?q=" + q var start = "https://" + domain + "/api/v1/search?q=" + q
} }
console.log(start) console.log("Try to search at " + start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -44,7 +44,7 @@ function src(mode) {
src("v1") src("v1")
return false; return false;
}).then(function (json) { }).then(function (json) {
console.log(json); console.log(["Search", json]);
//ハッシュタグ //ハッシュタグ
if (json.hashtags[0]) { if (json.hashtags[0]) {
var tags = ""; var tags = "";
@@ -52,7 +52,7 @@ function src(mode) {
var tag = json.hashtags[key4]; var tag = json.hashtags[key4];
if (mode) { if (mode) {
tags = tags + '<a onclick="tl(\'tag\',\'' + tag + '\',\'' + acct_id + tags = tags + '<a onclick="tl(\'tag\',\'' + tag + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag + '</a><br> '; '\',\'add\')" class="pointer">#' + escapeHTML(tag) + '</a><br> ';
} else { } else {
tags = tags + graphDraw(tag); tags = tags + graphDraw(tag);
} }
@@ -73,9 +73,25 @@ function src(mode) {
jQuery("time.timeago").timeago(); 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);
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 var start = "https://tootsearch.chotto.moe/api/v1/search?from=0&sort=created_at%3Adesc&q=" + q
console.log(start) console.log("Toot srrach at " + start)
$("#notice_" + tlid).text("tootsearch(" + q + ")");
$("#notice_icon_" + tlid).text("search");
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -89,25 +105,68 @@ function tootsearch(q){
}).then(function (raw) { }).then(function (raw) {
var templete = ""; var templete = "";
var json = raw.hits.hits; var json = raw.hits.hits;
console.log(json); var max_id = raw["hits"].length;
Object.keys(json).forEach(function(key5) { for (var i = 0; i < json.length; i++) {
var toot = json[key5]["_source"]; var toot = json[i]["_source"];
console.log(toot); if (lastid != toot.uri) {
if (toot && toot.account) { if (toot && toot.account) {
templete = templete+parse([toot],'noauth'); templete = templete + parse([toot], "noauth", null, tlid, 0, [], "tootsearch")
}
}
var lastid = toot.uri;
} }
});
if (!templete) { if (!templete) {
templete = lang.lang_details_nodata; templete = lang.lang_details_nodata;
} else {
templete = templete + '<div class="hide ts-marker" data-maxid="' + max_id + '"></div>';
} }
$("#src-contents").html("Tootsearch("+lang.lang_src_ts+")<br>" + templete); $("#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
$("#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;
var max_id = raw["hits"].length;
for (var i = 0; i < json.length; i++) {
var toot = json[i]["_source"];
if (lastid != toot.uri) {
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(); jQuery("time.timeago").timeago();
}); });
} }
function graphDraw(tag) { function graphDraw(tag) {
var tags = ""; var tags = "";
var his = tag.history; var his = tag.history;
console.log(his);
var max = Math.max.apply(null, [his[0].uses, his[1].uses, his[2].uses, his[3].uses, his[4].uses, his[5].uses, his[6].uses]); var max = Math.max.apply(null, [his[0].uses, his[1].uses, his[2].uses, his[3].uses, his[4].uses, his[5].uses, his[6].uses]);
var six = 50 - (his[6].uses / max * 50); var six = 50 - (his[6].uses / max * 50);
var five = 50 - (his[5].uses / max * 50); var five = 50 - (his[5].uses / max * 50);
@@ -118,13 +177,13 @@ function graphDraw(tag){
var zero = 50 - (his[0].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">' + 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 + '</svg><span style="font-size:200%">' + his[0].uses + '</span>toots&nbsp;<a onclick="tl(\'tag\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+lang.lang_src_people; '\',\'add\')" class="pointer">#' + escapeHTML(tag.name) + '</a>&nbsp;' + his[0].accounts + lang.lang_src_people;
} else { } else {
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">' + 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>' + '<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 + '</svg><span style="font-size:200%">' + his[0].uses + '</span>toots&nbsp;<a onclick="tl(\'tag\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+lang.lang_src_people; '\',\'add\')" class="pointer">#' + escapeHTML(tag.name) + '</a>&nbsp;' + his[0].accounts + lang.lang_src_people;
} }
return tags; return tags;

View File

@@ -58,13 +58,14 @@ function favTag(){
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
var tag = obj[key]; var tag = obj[key];
if (nowPT != tag) { if (nowPT != tag) {
console.log(nowPT+"/"+tag); console.log("stable tags:" + nowPT + "/" + tag);
var ptt = lang.lang_tags_realtime; var ptt = lang.lang_tags_realtime;
var nowon = ""; var nowon = "";
} else { } else {
var ptt = lang.lang_tags_unrealtime; var ptt = lang.lang_tags_unrealtime;
var nowon = "(" + lang.lang_tags_realtime + ")"; var nowon = "(" + lang.lang_tags_realtime + ")";
} }
tag = escapeHTML(tag);
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> ' + 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> '; '<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> ';
}); });
@@ -79,7 +80,6 @@ function trendTag(){
var domain = "imastodon.net" var domain = "imastodon.net"
var at = localStorage.getItem("acct_" + acct_id + "_at"); var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/v1/trend_tags" var start = "https://" + domain + "/api/v1/trend_tags"
console.log(start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -96,6 +96,7 @@ function trendTag(){
var tags = ""; var tags = "";
json = json.score; json = json.score;
Object.keys(json).forEach(function (tag) { Object.keys(json).forEach(function (tag) {
tag = escapeHTML(tag);
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="#' + tag + 'のタイムライン">TL</a> <a onclick="show();brInsert(\'#' + tag + '\')" class="pointer" title="#' + tag + 'でトゥート">Toot</a></span> '; 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="#' + tag + 'のタイムライン">TL</a> <a onclick="show();brInsert(\'#' + tag + '\')" class="pointer" title="#' + tag + 'でトゥート">Toot</a></span> ';
}); });
$("#taglist").append('<div class="trendtag">アイマストドントレンドタグ<i class="material-icons pointer" onclick="trendTag()" style="font-size:12px">refresh</i>:' + tags + '</div>'); $("#taglist").append('<div class="trendtag">アイマストドントレンドタグ<i class="material-icons pointer" onclick="trendTag()" style="font-size:12px">refresh</i>:' + tags + '</div>');
@@ -115,13 +116,14 @@ function tagTL(a,b,c,d){
tl(a, b, acct_id, d); tl(a, b, acct_id, d);
} }
function autoToot(tag) { function autoToot(tag) {
tag = escapeHTML(tag)
var nowPT = localStorage.getItem("stable") var nowPT = localStorage.getItem("stable")
if (nowPT == tag) { if (nowPT == tag) {
localStorage.removeItem("stable"); localStorage.removeItem("stable");
Materialize.toast(lang.lang_tags_unrealtime,3000); M.toast({ html: lang.lang_tags_unrealtime, displayLength: 3000 })
} else { } else {
localStorage.setItem("stable", tag); localStorage.setItem("stable", tag);
Materialize.toast(lang.lang_tags_tagwarn.replace("{{tag}}" ,tag).replace("{{tag}}" ,tag),3000); M.toast({ html: lang.lang_tags_tagwarn.replace("{{tag}}", tag).replace("{{tag}}", tag), displayLength: 3000 })
brInsert('#' + tag + " ") brInsert('#' + tag + " ")
} }
favTag(); favTag();

View File

@@ -7,7 +7,7 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
//タグとかの場合はカラム追加して描画 //タグとかの場合はカラム追加して描画
if (tlid == "add") { if (tlid == "add") {
console.log("add"); console.log("add new column");
var newtab = $(".box").length; var newtab = $(".box").length;
var add = { var add = {
domain: acct_id, domain: acct_id,
@@ -18,7 +18,6 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
localStorage.setItem("card_" + obj.length, "true"); localStorage.setItem("card_" + obj.length, "true");
obj.push(add); obj.push(add);
console.log(obj);
var json = JSON.stringify(obj); var json = JSON.stringify(obj);
localStorage.setItem("column", json); localStorage.setItem("column", json);
parseColumn(); parseColumn();
@@ -125,14 +124,14 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
}; };
} }
console.log(start); console.log(["Try to get timeline of " + tlid, start])
fetch(start, i).then(function (response) { fetch(start, i).then(function (response) {
return response.json(); return response.json();
}).catch(function (error) { }).catch(function (error) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json) console.log(["Result of getting timeline of " + tlid, json])
$("#landing_" + tlid).hide(); $("#landing_" + tlid).hide();
if (localStorage.getItem("filter_" + acct_id) != "undefined") { if (localStorage.getItem("filter_" + acct_id) != "undefined") {
var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), type); var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), type);
@@ -164,32 +163,14 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
localStorage.setItem("now", type); localStorage.setItem("now", type);
if (localStorage.getItem("mode_" + domain) == "misskey") { if (localStorage.getItem("mode_" + domain) == "misskey") {
var misskey = true; var misskey = true;
if (type == "home") { var key = localStorage.getItem("misskey_wss_" + acct_id)
var start = "wss://" + domain + var send = '{"type":"connect","body":{"channel":"' + typePs(type) + '","id":"' + tlid + '"}}'
"/?i=" + at; var mskyset = setInterval(function () {
} else if (type == "pub") { if (misskeywsstate[key]) {
var start = "wss://" + domain + misskeyws[key].send(send)
"/global-timeline?i=" + at; clearInterval(mskyset)
} else if (type == "pub-media") {
var start = "wss://" + domain +
"/global-timeline?i=" + at;
} else if (type == "local") {
var start = "wss://" + domain +
"/local-timeline?i=" + at;
} else if (type == "local-media") {
var start = "wss://" + domain +
"/local-timeline?i=" + at;
} else if (type == "mix") {
var start = "wss://" + domain +
"/hybrid-timeline?i=" + at;
} else if (type == "tag") {
Materialize.toast(lang_misskeyparse_tagnostr[lang], 1000);
} else if (type == "noauth") {
var start = "wss://" + acct_id +
"/local-timeline?i=" + at;
} else if (type=="list"){
Materialize.toast(lang_misskeyparse_listnostr[lang], 1000);
} }
}, 100);
} else { } else {
var misskey = false; var misskey = false;
if (localStorage.getItem("streaming_" + acct_id)) { if (localStorage.getItem("streaming_" + acct_id)) {
@@ -231,20 +212,15 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
var start = wss + var start = wss +
"/api/v1/streaming/?stream=direct&access_token=" + at; "/api/v1/streaming/?stream=direct&access_token=" + at;
} }
}
console.log(start);
var wsid = websocket.length; var wsid = websocket.length;
localStorage.setItem("wss_" + tlid, wsid); localStorage.setItem("wss_" + tlid, wsid);
websocket[wsid] = new WebSocket(start); websocket[wsid] = new WebSocket(start);
websocket[wsid].onopen = function (mess) { websocket[wsid].onopen = function (mess) {
console.log(tlid + ":Connect Streaming API:" + type); console.table({ "tlid": tlid, "type": "Connect Streaming API" + type, "domain": domain, "message": [mess] })
console.log(mess);
$("#notice_icon_" + tlid).removeClass("red-text"); $("#notice_icon_" + tlid).removeClass("red-text");
} }
websocket[wsid].onmessage = function (mess) { websocket[wsid].onmessage = function (mess) {
console.log(tlid + ":Receive Streaming API:"); console.log([tlid + ":Receive Streaming API:", JSON.parse(mess.data)]);
console.log(JSON.parse(mess.data));
if (misskey) { if (misskey) {
if (JSON.parse(mess.data).type == "note") { if (JSON.parse(mess.data).type == "note") {
var obj = JSON.parse(mess.data).body; var obj = JSON.parse(mess.data).body;
@@ -287,7 +263,6 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
} else if (typeA == "update" || typeA == "conversation") { } else if (typeA == "update" || typeA == "conversation") {
localStorage.removeItem("delete"); localStorage.removeItem("delete");
var obj = JSON.parse(JSON.parse(mess.data).payload); var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
if ($("#timeline_" + tlid + " [toot-id=" + obj.id + "]").length < 1) { if ($("#timeline_" + tlid + " [toot-id=" + obj.id + "]").length < 1) {
if (voice) { if (voice) {
say(obj.content) say(obj.content)
@@ -335,8 +310,7 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
return false; return false;
}; };
websocket[wsid].onclose = function () { websocket[wsid].onclose = function () {
console.error("Closing"); console.warn("Closing " + tlid);
console.error(tlid);
if (mode == "error") { if (mode == "error") {
$("#notice_icon_" + tlid).addClass("red-text"); $("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Closed'); todo('WebSocket Closed');
@@ -349,7 +323,7 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
} }
return false; return false;
}; };
}
} }
//一定のスクロールで発火 //一定のスクロールで発火
@@ -382,6 +356,10 @@ function moreload(type, tlid) {
} else if (type == "notf") { } else if (type == "notf") {
notfmore(tlid); notfmore(tlid);
return; return;
} else if (type == "tootsearch") {
var data = obj[tlid].data;
moreTs(tlid, data);
return;
} }
moreloading = true; moreloading = true;
localStorage.setItem("now", type); localStorage.setItem("now", type);
@@ -441,15 +419,12 @@ function moreload(type, tlid) {
headers: hdr headers: hdr
}; };
} }
fetch(start, i).then(function (response) { fetch(start, i).then(function (response) {
return response.json(); return response.json();
}).catch(function (error) { }).catch(function (error) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (misskey) { if (misskey) {
var templete = misskeyParse(json, '', acct_id, tlid, "", mute); var templete = misskeyParse(json, '', acct_id, tlid, "", mute);
} else { } else {
@@ -463,18 +438,131 @@ function moreload(type, tlid) {
}); });
} }
} }
//TL差分取得
function tlDiff(type, data, acct_id, tlid, delc, voice, mode) {
console.log("Get diff of TL" + tlid)
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,
headers: hdr
};
}
fetch(start, i).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(["Result diff of TL" + tlid, json]);
if (misskey) {
var templete = misskeyParse(json, '', acct_id, tlid, "", mute);
} else {
var templete = parse(json, '', acct_id, tlid, "", mute, type);
}
$("#timeline_" + tlid).prepend(templete);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
moreloading = false;
todc();
});
}
}
//TL再取得
function reloadTL(type, data, acct_id, key, delc, voice) {
tl(type, data, acct_id, key, delc, voice, "");
}
//WebSocket切断 //WebSocket切断
function tlCloser() { function tlCloser() {
Object.keys(websocket).forEach(function (tlid) { Object.keys(websocket).forEach(function (tlid) {
if (websocketOld[tlid]) { if (websocketOld[tlid]) {
websocketOld[tlid].close(); websocketOld[tlid].close();
console.log("Close Streaming API: Old" + tlid); console.log("%c Close Streaming API: Old" + tlid, "color:blue");
} }
if (websocket[0]) { if (websocket[0]) {
console.log(websocket[0]); console.log(websocket[0]);
websocket[tlid].close(); websocket[tlid].close();
console.log("Close Streaming API:" + tlid); console.log("%c Close Streaming API:" + tlid, "color:blue");
} }
}); });
@@ -482,7 +570,7 @@ function tlCloser() {
Object.keys(websocketHome).forEach(function (tlid) { Object.keys(websocketHome).forEach(function (tlid) {
if (websocketHome[tlid]) { if (websocketHome[tlid]) {
websocketHome[tlid].close(); websocketHome[tlid].close();
console.log("Close Streaming API:MixHome" + tlid); console.log("%c Close Streaming API:Integrated Home" + tlid, "color:blue");
} }
}); });
@@ -490,7 +578,7 @@ function tlCloser() {
Object.keys(websocketLocal).forEach(function (tlid) { Object.keys(websocketLocal).forEach(function (tlid) {
if (websocketLocal[tlid]) { if (websocketLocal[tlid]) {
websocketLocal[tlid].close(); websocketLocal[tlid].close();
console.log("Close Streaming API:MixLocal" + tlid); console.log("%c Close Streaming API:Integrated Local" + tlid, "color:blue");
} }
}); });
@@ -498,11 +586,17 @@ function tlCloser() {
Object.keys(websocketNotf).forEach(function (tlid) { Object.keys(websocketNotf).forEach(function (tlid) {
if (websocketNotf[tlid]) { if (websocketNotf[tlid]) {
websocketNotf[tlid].close(); websocketNotf[tlid].close();
console.log("Close Streaming API:Notf" + tlid); console.log("%c Close Streaming API:Notf" + tlid, "color:blue");
} }
}); });
websocketNotf = []; Object.keys(misskeyws).forEach(function (tlid) {
if (misskeyws[tlid]) {
misskeyws[tlid].close();
console.log("%c Close Streaming API:Misskey" + tlid, "color:blue");
}
});
misskeyws = {}
} }
//TLのタイトル //TLのタイトル
@@ -543,7 +637,7 @@ function cap(type, data, acct_id) {
var response = "Federated TL(Media)"; var response = "Federated TL(Media)";
} }
} else if (type == "tag") { } else if (type == "tag") {
var response= "#" + data var response = "#" + escapeHTML(data)
} else if (type == "list") { } else if (type == "list") {
var ltitle = localStorage.getItem("list_" + data + "_" + acct_id); var ltitle = localStorage.getItem("list_" + data + "_" + acct_id);
var response = "List(" + ltitle + ")" var response = "List(" + ltitle + ")"
@@ -567,6 +661,8 @@ function cap(type, data, acct_id) {
var response = "Local+" var response = "Local+"
} else if (type == "webview") { } else if (type == "webview") {
var response = "Twitter" var response = "Twitter"
} else if (type == "tootsearch") {
var response = "tootsearch(" + escapeHTML(data) + ")";
} }
return response; return response;
} }
@@ -591,6 +687,24 @@ function com(type, data) {
return "direct?" return "direct?"
} }
} }
//Misskey
function typePs(type) {
if (type == "home") {
return "homeTimeline"
} else if (type == "local" || type == "noauth") {
return "localTimeline"
} else if (type == "local-media") {
return "localTimeline"
} else if (type == "pub") {
return "globalTimeline"
} else if (type == "mix") {
return "hybridTimeline"
} else if (type == "tag") {
return "hashtag"
} else if (type == "list") {
return "userList"
}
}
function misskeycom(type, data) { function misskeycom(type, data) {
if (type == "home") { if (type == "home") {
return "timeline" return "timeline"
@@ -624,7 +738,7 @@ function icon(type) {
} else if (type == "pub-media") { } else if (type == "pub-media") {
var response = "language"; var response = "language";
} else if (type == "tag") { } else if (type == "tag") {
var response="search"; var response = "whatshot";
} else if (type == "list") { } else if (type == "list") {
var response = "view_headline"; var response = "view_headline";
} else if (type == "notf") { } else if (type == "notf") {
@@ -639,6 +753,8 @@ function icon(type) {
var response = "merge_type"; var response = "merge_type";
} else if (type == "webview") { } else if (type == "webview") {
var response = "language"; var response = "language";
} else if (type == "tootsearch") {
var response = "search";
} }
return response; return response;
} }
@@ -666,8 +782,8 @@ function strAliveInt(){
setTimeout(strAlive, 10000); setTimeout(strAlive, 10000);
} }
function reconnector(tlid, type, acct_id, data, mode) { function reconnector(tlid, type, acct_id, data, mode) {
console.log("Reconnector:"+mode) console.log("%c Reconnector:" + mode + "(timeline" + tlid + ")", "color:pink")
if(type=="mix" || type=="plus"){ if (type == "mix" || type == "integrated" || type == "plus") {
if (localStorage.getItem("voice_" + tlid)) { if (localStorage.getItem("voice_" + tlid)) {
var voice = true; var voice = true;
} else { } else {
@@ -680,10 +796,11 @@ function reconnector(tlid,type,acct_id,data,mode){
} }
var wssh = localStorage.getItem("wssH_" + tlid); var wssh = localStorage.getItem("wssH_" + tlid);
websocketHome[wssh].close(); websocketHome[wssh].close();
var wssh=localStorage.getItem("wssL_" + tlid); var wssl = localStorage.getItem("wssL_" + tlid);
websocketLocal[wssl].close(); websocketLocal[wssl].close();
mixre(acct_id, tlid, type, mute, "", voice, mode); mixre(acct_id, tlid, type, mute, "", voice, mode);
} else if (type == "notf") { } else if (type == "notf") {
notfColumn(acct_id, tlid, "")
} else { } else {
var wss = localStorage.getItem("wss_" + tlid); var wss = localStorage.getItem("wss_" + tlid);
websocket[wss].close(); websocket[wss].close();
@@ -699,6 +816,7 @@ function reconnector(tlid,type,acct_id,data,mode){
} }
reload(type, '', acct_id, tlid, data, mute, "", voice, mode); reload(type, '', acct_id, tlid, data, mute, "", voice, mode);
} }
Materialize.toast(lang.lang_tl_reconnect, 2000); M.toast({ html: lang.lang_tl_reconnect, displayLength: 2000 })
} }
strAliveInt() strAliveInt()

View File

@@ -59,7 +59,6 @@ function imgv(id, key, acct_id) {
$("#imagemodal").css("width", width + "px") $("#imagemodal").css("width", width + "px")
} }
} else { } else {
console.log("long")
$("#imagemodal img").css("width", "auto") $("#imagemodal img").css("width", "auto")
var widthS = windowH / height * width; var widthS = windowH / height * width;
if (widthS < windowW) { if (widthS < windowW) {
@@ -149,7 +148,6 @@ function imgCont(type) {
$("#imagemodal").css("width", width + "px") $("#imagemodal").css("width", width + "px")
} }
} else { } else {
console.log("long")
$("#imagemodal img").css("width", "auto") $("#imagemodal img").css("width", "auto")
var widthS = windowH / height * width; var widthS = windowH / height * width;
if (widthS < windowW) { if (widthS < windowW) {
@@ -167,7 +165,6 @@ function imgCont(type) {
} else { } else {
$("#image-next").prop("disabled", false); $("#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); $("#image-prev").prop("disabled", true);
} else { } else {
@@ -231,7 +228,6 @@ function zoom(z) {
$(this).on('touchmove', function (event) { $(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') - target.scrollLeft($(target).data('scrollLeft') + $(target).data('x') -
getX(event)); getX(event));
target.scrollTop($(target).data('scrollTop') + $(target).data('y') - target.scrollTop($(target).data('scrollTop') + $(target).data('y') -
@@ -275,18 +271,14 @@ function detFromImg(){
//画像保存 //画像保存
function dlImg() { function dlImg() {
var url = $("#imgmodal").attr("src"); var url = $("#imgmodal").attr("src");
var electron = require("electron");
var ipc = electron.ipcRenderer;
if (localStorage.getItem("savefolder")) { if (localStorage.getItem("savefolder")) {
var save = localStorage.getItem("savefolder"); var save = localStorage.getItem("savefolder");
} else { } else {
var save = ""; var save = "";
} }
ipc.send('general-dl', [url,save,false]); postMessage(["generalDL", [url, save, false]], "*")
ipc.on('general-dl-prog', function (event, arg) {
console.log(arg); }
}) function openFinder(dir) {
ipc.on('general-dl-message', function (event, arg) { postMessage(["openFinder", dir], "*")
console.log(arg);
})
} }

View File

@@ -20,21 +20,23 @@ $('.type').click(function() {
$("#type-sel").val($(this).attr("data-type")) $("#type-sel").val($(this).attr("data-type"))
}) })
//最初、カラム変更時に発火 //最初、カラム変更時に発火
function parseColumn() { function parseColumn(dontclose) {
console.log("parse"); console.log("%c Parse column", "color:red;font-size:125%");
var size = localStorage.getItem("size"); var size = localStorage.getItem("size");
if (size) { if (size) {
$("#timeline-container").css("font-size", size + "px"); $("#timeline-container").css("font-size", size + "px");
$(".toot-reset").css("font-size", size + "px"); $(".toot-reset").css("font-size", size + "px");
$(".cont-series").css("font-size", size + "px"); $(".cont-series").css("font-size", size + "px");
} }
if (localStorage.getItem("menu-done")) {
$("#fukidashi").addClass("hide")
}
if (!dontclose) {
tlCloser(); tlCloser();
}
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
if (!multi) { if (multi) {
var obj = [];
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
} else {
var obj = JSON.parse(multi); var obj = JSON.parse(multi);
var templete; var templete;
@@ -50,10 +52,15 @@ function parseColumn() {
ckdb(key); ckdb(key);
//フィルターデータ読もう //フィルターデータ読もう
getFilter(key); getFilter(key);
var domain = localStorage.getItem("domain_" + key);
if (localStorage.getItem("mode_" + domain) == "misskey") {
localStorage.removeItem("misskey_wss_" + key)
connectMisskey(key)
}
}); });
} }
var acctlist = obj; var acctlist = obj;
console.log(obj); console.table(obj);
/*var xed=localStorage.getItem("xed"); /*var xed=localStorage.getItem("xed");
if(xed){ if(xed){
xpand(); xpand();
@@ -130,6 +137,21 @@ function parseColumn() {
} }
var html = webviewParse("https://tweetdeck.twitter.com", key, insert, icnsert, css); var html = webviewParse("https://tweetdeck.twitter.com", key, insert, icnsert, css);
$("#timeline-container").append(html); $("#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 { } else {
var width = localStorage.getItem("width"); var width = localStorage.getItem("width");
if (width) { if (width) {
@@ -142,14 +164,19 @@ function parseColumn() {
var animecss = ""; var animecss = "";
} }
if (acct.type == "notf") { 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> '+ var exclude = lang.lang_excluded + ':<br><label><input type="checkbox" class="filled-in" id="exc-reply-' + key + '" ' + excludeCk(key, "mention") + ' /><span><i class="fas fa-share exc-icons"></i></span></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> '+ '<label><input type="checkbox" class="filled-in" id="exc-fav-' + key + '" ' + excludeCk(key, "favourite") + ' /><span><i class="fas fa-star exc-icons"></i></span></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> '+ '<label><input type="checkbox" class="filled-in" id="exc-bt-' + key + '" ' + excludeCk(key, "reblog") + ' /><span><i class="fas fa-retweet exc-icons"></i></span></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> '+ '<label><input type="checkbox" class="filled-in" id="exc-follow-' + key + '" ' + excludeCk(key, "follow") + ' /><span><i class="fas fa-users exc-icons"></i></span></label> ' +
'<button class="btn waves-effect" style="width:60px; padding:0;" onclick="exclude('+key+')">Filter</button><br>'; '<label><input type="checkbox" class="filled-in" id="exc-poll-' + key + '" ' + excludeCk(key, "poll") + ' /><span><i class="fas fa-tasks exc-icons"></i></span></label> ' +
'<button class="btn waves-effect" style="width:60px; padding:0;" onclick="exclude(' + key + ')">Filter</button>';
if (checkNotfFilter(key)) {
exclude = exclude + '<button class="btn red waves-effect" style="width:60px; padding:0;" onclick="resetNotfFilter(' + key + ')">Clear all</button>'
}
exclude = exclude + "<br>";
} else if (acct.type == "home") { } else if (acct.type == "home") {
var exclude = '<a onclick="ebtToggle(' + key + 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-' + ')" class="setting nex"><i class="fas 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>'; key + '">Off</span></a>' + lang.lang_layout_excludingbt + '<br>';
} else { } else {
var exclude = ""; var exclude = "";
@@ -165,9 +192,17 @@ function parseColumn() {
if (key === 0) { if (key === 0) {
left_hold = ''; left_hold = '';
} }
if (localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct.domain)) == "misskey") {
var isMisRed = ""
exclude = ""
var if_misskey_hide = "hide"
} else {
var isMisRed = "red-text"
var if_misskey_hide = ""
}
var html = '<div class="boxIn" id="timeline_box_' + key + '_box" tlid="' + key + 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 + ' ">' + '" data-acct="' + acct.domain + '"><div class="notice-box z-depth-2" id="menu_' + key + '" style="' + insert + ' ">' +
'<div class="area-notice"><i class="material-icons waves-effect red-text" id="notice_icon_' + key + '"'+notf_attr+' style="font-size:40px; padding-top:25%;" onclick="goTop(' + key + ')" title="'+lang.lang_layout_gotop +'"></i></div>'+ '<div class="area-notice"><i class="material-icons waves-effect ' + isMisRed + '" 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-notice_name"><span id="notice_' + key + '" class="tl-title"></span></div>' +
'<div class="area-a1"><a onclick="notfToggle(' + acct.domain + ',' + key + '<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_' + ')" class="setting nex ' + if_notf + '" title="' + unique_notf + '"' + icnsert + '><i class="material-icons waves-effect nex notf-icon_' +
@@ -178,7 +213,7 @@ function parseColumn() {
')" class="setting nex" title="' + lang.lang_layout_setthis + '"' + 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 class="column-hide notf-indv-box z-depth-4" id="notf-box_' + key +
'"><div id="notifications_' + 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 + '" 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 + '" 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-' + ')" 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 + key + '">On</span></a>' + lang.lang_layout_mediafil + '<br><a onclick="cardToggle(' + key +
@@ -186,8 +221,8 @@ function parseColumn() {
key + '">On</span></a>' + lang.lang_layout_linkana + '<br><a onclick="voiceToggle(' + key + 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-' + ')" 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 + 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 + ',\'' + acct.type + '\',\'' + acct.domain + '\',\'' + escapeHTML(acct.data) + '\')" class="setting nex ' + if_notf + ' ' + if_misskey_hide + '"><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>' '" class="tl ' + acct.type + '-timeline " tlid="' + key + '" data-type="' + acct.type + '" data-acct="' + acct.domain + '" data-const="' + acct.type + '_' + acct.domain + '"><div id="landing_' + key + '" style="text-align:center">' + lang.lang_layout_nodata + '</div></div></div>'
$('#timeline_box_' + basekey + '_parentBox').append(html); $('#timeline_box_' + basekey + '_parentBox').append(html);
localStorage.removeItem("pool_" + key); localStorage.removeItem("pool_" + key);
if (acct.data) { if (acct.data) {
@@ -239,6 +274,14 @@ function parseColumn() {
} }
} }
} }
function checkStr(type, data, acct_id, key, delc, voice) {
if ($('#notice_icon_' + key).hasClass("red-text") && type != "notf" && type != "mix") {
goTop(key);
tlDiff(type, data, acct_id, key, delc, voice, "");
} else {
goTop(key);
}
}
//セカンダリートゥートボタン //セカンダリートゥートボタン
function secvis(set) { function secvis(set) {
if (set == "public") { if (set == "public") {
@@ -265,7 +308,9 @@ function secvis(set){
//カラム追加 //カラム追加
function addColumn() { function addColumn() {
var acct = $("#add-acct-sel").val(); var acct = $("#add-acct-sel").val();
if (acct != "webview" && acct != "noauth") {
localStorage.setItem("last-use", acct); localStorage.setItem("last-use", acct);
}
var type = $("#type-sel").val(); var type = $("#type-sel").val();
if (acct == "noauth") { if (acct == "noauth") {
acct = $("#noauth-url").val(); acct = $("#noauth-url").val();
@@ -319,27 +364,8 @@ function addselCk(){
function removeColumn(tlid) { function removeColumn(tlid) {
$("#sort-box").addClass("hide"); $("#sort-box").addClass("hide");
$("#sort-box").removeClass("show"); $("#sort-box").removeClass("show");
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
//聞く //聞く
var electron = require("electron"); postMessage(["columnDel", tlid], "*")
var ipc = electron.ipcRenderer;
ipc.send('column-del', "");
ipc.on('column-del-reply', function (event, arg) {
console.log(arg);
if(arg===1){
localStorage.removeItem("card_" + tlid);
obj.splice(tlid, 1);
for(var i=0;i<obj.length;i++){
localStorage.setItem("card_" + i,"true");
localStorage.removeItem("catch_" + i);
}
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
parseColumn();
sortload()
}
})
} }
//設定トグル //設定トグル
@@ -424,20 +450,50 @@ function coloradd(key,bg,txt){
function webviewParse(url, key, insert, icnsert, css) { function webviewParse(url, key, insert, icnsert, css) {
var html = '<div class="box" id="timeline_box_' + key + '_box" tlid="' + key + var html = '<div class="box" id="timeline_box_' + key + '_box" tlid="' + key +
'" style="' + css + '"><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"><i class="fab 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-notice_name tl-title">WebView(' + url + ')</div>' +
'<div class="area-sta"><input type="checkbox" id="webviewsel" value="true" class="filled-in"><label for="webviewsel">'+lang.lang_layout_webviewmode +'</label></div>'+ '<div class="area-sta"></div>' +
'<div class="area-a2"><a onclick="removeColumn(' + key + '<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>' + ')" 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 + '<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>' + ')" 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 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 + '"></div><div class="column-hide notf-indv-box" id="util-box_' + key +
'" style="padding:5px;">'+lang.lang_layout_headercolor +'<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '" style="width:100%;height:calc(100% - 110px);"><div id="timeline_' + key + '" style="padding:5px;">' + lang.lang_layout_headercolor + '<br><div id="picker_' + key + '" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '" style="width:100%;height:100%;"><div id="timeline_' + key +
'" class="tl" tlid="' + key + '" data-type="webview" style="width:100%;height:100%;"><webview src="' + url + '" style="width:100%;height:100%;" id="webview" preload="./js/platform/twitter.js"></webview></div></div></div>'; '" 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; 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) { function leftFoldSet(key) {
var multi = localStorage.getItem("column"); var multi = localStorage.getItem("column");
var obj = JSON.parse(multi); var obj = JSON.parse(multi);

View File

@@ -1,4 +1,6 @@
function menu() { function menu() {
localStorage.setItem("menu-done", true);
$("#fukidashi").addClass("hide")
if (!$("#menu").hasClass("appear")) { if (!$("#menu").hasClass("appear")) {
$("#menu").addClass("appear") $("#menu").addClass("appear")
var left = localStorage.getItem("menu-left"); var left = localStorage.getItem("menu-left");
@@ -19,6 +21,8 @@ function menu(){
$("#menu-bar").html("TheDesk " + localStorage.getItem("ver")); $("#menu-bar").html("TheDesk " + localStorage.getItem("ver"));
$(".menu-content").addClass("hide"); $(".menu-content").addClass("hide");
$("#add-box").removeClass("hide"); $("#add-box").removeClass("hide");
$("#left-menu div").removeClass("active");
$("#addColumnMenu").addClass("active");
} else { } else {
$('#menu').fadeOut() $('#menu').fadeOut()
$("#menu").removeClass("appear") $("#menu").removeClass("appear")
@@ -26,7 +30,8 @@ function menu(){
} }
$(function () { $(function () {
$( "#menu" ).draggable({handle: "#menu-bar", $("#menu").draggable({
handle: "#menu-bar",
stop: function () { stop: function () {
var left = $('#menu').offset().left; var left = $('#menu').offset().left;
if (left > $('body').width() - $('#menu').width()) { if (left > $('body').width() - $('#menu').width()) {
@@ -46,6 +51,5 @@ $(function() {
}); });
}); });
function help() { function help() {
const {shell} = require('electron'); postMessage(["openUrl", "https://docs.thedesk.top"], "*")
shell.openExternal("https://docs.thedesk.top");
} }

View File

@@ -5,6 +5,10 @@ function hide() {
$('#post-box').fadeOut() $('#post-box').fadeOut()
$("#post-box").removeClass("appear") $("#post-box").removeClass("appear")
$("#emoji").addClass("hide") $("#emoji").addClass("hide")
$("#left-side").show();
$("#default-emoji").show();
$("#unreact").show();
$("#addreact").addClass("hide");
} }
//最小化 //最小化
function mini() { function mini() {
@@ -38,7 +42,8 @@ function show() {
} }
$(function () { $(function () {
$( "#post-box" ).draggable({handle: "#post-bar", $("#post-box").draggable({
handle: "#post-bar",
stop: function () { stop: function () {
var left = $('#post-box').offset().left; var left = $('#post-box').offset().left;
if (left > $('body').width() - $('#post-box').width()) { if (left > $('body').width() - $('#post-box').width()) {

View File

@@ -28,7 +28,7 @@ function scrollck() {
var scrt = $(this).find(".tl").height() - $(window).height(); var scrt = $(this).find(".tl").height() - $(window).height();
var scr = $(this).scrollTop(); var scr = $(this).scrollTop();
if (scr > scrt) { if (scr > scrt) {
console.log("kicked"); console.log("kicked more loading:" + tlid);
moreload('', tlid); moreload('', tlid);
} }
}); });
@@ -44,7 +44,6 @@ function goColumn(key){
$("#sort-box").addClass("hide"); $("#sort-box").addClass("hide");
$("#sort-box").removeClass("show"); $("#sort-box").removeClass("show");
if ($('[tlid=' + key + ']').length) { if ($('[tlid=' + key + ']').length) {
console.log($('[tlid='+key+']').offset().left);
$("#timeline-container").animate({ scrollLeft: $("#timeline-container").scrollLeft() + $('[tlid=' + key + ']').offset().left }); $("#timeline-container").animate({ scrollLeft: $("#timeline-container").scrollLeft() + $('[tlid=' + key + ']').offset().left });
} }
} }

View File

@@ -5,7 +5,7 @@ var envView = new Vue({
methods: { methods: {
complete: function (i, val) { complete: function (i, val) {
var ls = envView.config[i].storage; var ls = envView.config[i].storage;
Materialize.toast("Complete", 3000); M.toast({ html: 'Complete', displayLength: 3000 })
if (!val) { if (!val) {
var id = envView.config[i].id; var id = envView.config[i].id;
var val = $("#" + id).val() var val = $("#" + id).val()
@@ -28,7 +28,7 @@ var tlView = new Vue({
var id = tlView.config[i].id; var id = tlView.config[i].id;
var val = $("#" + id).val() var val = $("#" + id).val()
} }
Materialize.toast("Complete", 3000); M.toast({ html: 'Complete', displayLength: 3000 })
localStorage.setItem(ls, val) localStorage.setItem(ls, val)
return true return true
} }
@@ -40,7 +40,7 @@ var postView = new Vue({
methods: { methods: {
complete: function (i, val) { complete: function (i, val) {
var ls = postView.config[i].storage; var ls = postView.config[i].storage;
Materialize.toast("Complete", 3000); M.toast({ html: 'Complete', displayLength: 3000 })
if (!val) { if (!val) {
var id = postView.config[i].id; var id = postView.config[i].id;
var val = $("#" + id).val() var val = $("#" + id).val()
@@ -62,7 +62,7 @@ function settings() {
$("#" + theme).prop("checked", true); $("#" + theme).prop("checked", true);
} else { } else {
if (cd != localStorage.getItem("theme")) { if (cd != localStorage.getItem("theme")) {
Materialize.toast(lang.lang_setting_theme.replace("{{set}}" ,ct), 3000); M.toast({ html: lang.lang_setting_theme.replace("{{set}}", ct), displayLength: 3000 })
} }
//テーマはこの場で設定 //テーマはこの場で設定
themes(cd); themes(cd);
@@ -71,14 +71,14 @@ function settings() {
var fontd = $("#font").val(); var fontd = $("#font").val();
if (fontd) { if (fontd) {
if (fontd != localStorage.getItem("font")) { if (fontd != localStorage.getItem("font")) {
Materialize.toast(lang.lang_setting_font.replace("{{set}}" ,fontd), 3000); M.toast({ html: lang.lang_setting_font.replace("{{set}}", ct), displayLength: 3000 })
} }
localStorage.setItem("font", fontd); localStorage.setItem("font", fontd);
themes(); themes();
} else { } else {
if (localStorage.getItem("font")) { if (localStorage.getItem("font")) {
localStorage.removeItem("font"); localStorage.removeItem("font");
Materialize.toast(lang.lang_setting_font.replace("{{set}}" ,lang.lang_setting_default), 3000); M.toast({ html: lang.lang_setting_font.replace("{{set}}", ct), displayLength: 3000 })
themes(); themes();
} }
} }
@@ -123,6 +123,11 @@ function load() {
var font = ""; var font = "";
} }
$("#font").val(font); $("#font").val(font);
$("#c1-file").text(localStorage.getItem("custom1"))
$("#c2-file").text(localStorage.getItem("custom2"));
$("#c3-file").text(localStorage.getItem("custom3"));
$("#c4-file").text(localStorage.getItem("custom4"));
//$("#log").val(localStorage.getItem("errors"))
} }
function climute() { function climute() {
@@ -142,7 +147,7 @@ function climute(){
var list = key * 1 + 1; var list = key * 1 + 1;
templete = '<div class="acct" id="acct_' + key + '">' + list + templete = '<div class="acct" id="acct_' + key + '">' + list +
'.' + '.' +
cli + '<button class="btn waves-effect red disTar" onclick="cliMuteDel(' + escapeHTML(cli) + '<button class="btn waves-effect red disTar" onclick="cliMuteDel(' +
key + ')">' + lang.lang_del + '</button><br></div>'; key + ')">' + lang.lang_del + '</button><br></div>';
$("#mute-cli").append(templete); $("#mute-cli").append(templete);
}); });
@@ -154,18 +159,19 @@ function cliMuteDel(key){
obj.splice(key, 1); obj.splice(key, 1);
var json = JSON.stringify(obj); var json = JSON.stringify(obj);
localStorage.setItem("client_mute", json); localStorage.setItem("client_mute", json);
mute(); climute();
} }
function wordmute() { function wordmute() {
var word = localStorage.getItem("word_mute"); var word = localStorage.getItem("word_mute");
var obj = JSON.parse(word); var obj = JSON.parse(word);
$('#wordmute').material_chip({ if (!obj) { obj = [] }
$('#wordmute').chips({
data: obj, data: obj,
}); });
} }
function wordmuteSave() { function wordmuteSave() {
var word=$('#wordmute').material_chip('data'); var word = M.Chips.getInstance($("#wordmute")).chipsData;
var json = JSON.stringify(word); var json = JSON.stringify(word);
localStorage.setItem("word_mute", json); localStorage.setItem("word_mute", json);
} }
@@ -173,19 +179,18 @@ function wordmuteSave(){
function wordemp() { function wordemp() {
var word = localStorage.getItem("word_emp"); var word = localStorage.getItem("word_emp");
var obj = JSON.parse(word); var obj = JSON.parse(word);
$('#wordemp').material_chip({ if (!obj) { obj = [] }
$('#wordemp').chips({
data: obj, data: obj,
}); });
} }
function wordempSave() { function wordempSave() {
var word=$('#wordemp').material_chip('data'); var word = M.Chips.getInstance($("#wordemp")).chipsData;
var json = JSON.stringify(word); var json = JSON.stringify(word);
localStorage.setItem("word_emp", json); localStorage.setItem("word_emp", json);
} }
function notftest() { function notftest() {
var electron = require("electron"); var os = localStorage.getItem("platform");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = { var options = {
body: lang.lang_setting_notftest + '(' + lang.lang_setting_notftestprof + ')', body: lang.lang_setting_notftest + '(' + lang.lang_setting_notftestprof + ')',
icon: localStorage.getItem("prof_0") icon: localStorage.getItem("prof_0")
@@ -193,14 +198,15 @@ function notftest(){
if (os == "darwin") { if (os == "darwin") {
var n = new Notification('TheDesk' + lang.lang_setting_notftest, options); var n = new Notification('TheDesk' + lang.lang_setting_notftest, options);
} else { } else {
ipc.send('native-notf', ['TheDesk'+lang.lang_setting_notftest,lang.lang_setting_notftest+'('+lang.lang_setting_notftestprof+')',localStorage.getItem('prof_0'),"",""]); var nativeNotfOpt = ['TheDesk' + lang.lang_setting_notftest, lang.lang_setting_notftest + '(' + lang.lang_setting_notftestprof + ')', localStorage.getItem('prof_0'), "", ""]
postMessage(["nativeNotf", nativeNotfOpt], "*")
} }
} }
function oks(no) { function oks(no) {
var txt = $("#oks-" + no).val(); var txt = $("#oks-" + no).val();
localStorage.setItem("oks-" + no, txt); localStorage.setItem("oks-" + no, txt);
Materialize.toast(lang.lang_setting_ksref, 3000); M.toast({ html: lang.lang_setting_ksref, displayLength: 3000 })
} }
function oksload() { function oksload() {
if (localStorage.getItem("oks-1")) { $("#oks-1").val(localStorage.getItem("oks-1")) } if (localStorage.getItem("oks-1")) { $("#oks-1").val(localStorage.getItem("oks-1")) }
@@ -208,30 +214,15 @@ function oksload(){
if (localStorage.getItem("oks-3")) { $("#oks-3").val(localStorage.getItem("oks-3")) } if (localStorage.getItem("oks-3")) { $("#oks-3").val(localStorage.getItem("oks-3")) }
} }
function changelang(lang) { function changelang(lang) {
var electron = require("electron"); postMessage(["lang", lang], "*")
var ipc = electron.ipcRenderer;
ipc.send('lang',lang);
ipc.on('langres', function (event, arg) {
location.href="../"+lang+"/setting.html"
});
} }
function exportSettings() { function exportSettings() {
if (!confirm(lang.lang_setting_exportwarn)) { if (!confirm(lang.lang_setting_exportwarn)) {
return false; return false;
} }
var electron = require("electron"); postMessage(["exportSettings", ""], "*")
var remote=electron.remote;
var dialog=remote.dialog;
var ipc = electron.ipcRenderer;
dialog.showSaveDialog(null, {
title: 'Export',
properties: ['openFile', 'createDirectory'],
defaultPath: "export.thedeskconfigv2"
}, (savedFiles) => {
console.log(savedFiles);
if(!savedFiles){
return false;
} }
function exportSettingsCore() {
var exp = {}; var exp = {};
//Accounts //Accounts
var multi = localStorage.getItem("multi"); var multi = localStorage.getItem("multi");
@@ -289,34 +280,15 @@ function exportSettings(){
var tagarr = localStorage.getItem("tag"); var tagarr = localStorage.getItem("tag");
var favtag = JSON.parse(tagarr); var favtag = JSON.parse(tagarr);
exp.favoriteTags = favtag; exp.favoriteTags = favtag;
console.log(exp); return exp;
ipc.send('export', [savedFiles,JSON.stringify(exp)]);
alert("Done.")
//cards
//lang
});
} }
function importSettings() { function importSettings() {
if (!confirm(lang.lang_setting_importwarn)) { if (!confirm(lang.lang_setting_importwarn)) {
return false; return false;
} }
var electron = require("electron"); postMessage(["importSettings", ""], "*")
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','thedeskconfigv2']},
]
}, (fileNames) => {
console.log(fileNames);
if(!fileNames){
return false;
} }
ipc.send('import', fileNames[0]); function importSettingsCore(arg) {
ipc.on('config', function (event, arg) {
var obj = JSON.parse(arg); var obj = JSON.parse(arg);
if (obj) { if (obj) {
localStorage.clear(); localStorage.clear();
@@ -358,7 +330,6 @@ function importSettings(){
//Version 1 //Version 1
localStorage.setItem("theme", obj.theme); localStorage.setItem("theme", obj.theme);
if (obj.width) { if (obj.width) {
console.log(obj.width)
localStorage.setItem("width", obj.width); localStorage.setItem("width", obj.width);
} }
if (obj.font) { if (obj.font) {
@@ -406,34 +377,20 @@ function importSettings(){
} else { } else {
alert("Error.") alert("Error.")
} }
})
//cards
//lang
});
} }
function savefolder() { function savefolder() {
var electron = require("electron"); postMessage(["sendSinmpleIpc", "savefolder"], "*")
var remote=electron.remote;
var dialog=remote.dialog;
dialog.showOpenDialog(null, {
title: 'Save folder',
properties: ['openDirectory'],
}, (fileNames) => {
localStorage.setItem("savefolder",fileNames[0]);
});
} }
function font() { function font() {
var electron = require("electron"); postMessage(["sendSinmpleIpc", "fonts"], "*")
var ipc = electron.ipcRenderer; }
ipc.send('fonts', []); function fontList(arg) {
ipc.on('font-list', function (event, arg) {
$("#fonts").removeClass("hide"); $("#fonts").removeClass("hide");
for (var i = 0; i < arg.length; i++) { for (var i = 0; i < arg.length; i++) {
var font = arg[i]; var font = arg[i];
$("#fonts").append('<div class="font pointer" style="font-family:' + font.family + '" onclick="insertFont(\'' + font.family + '\')">' + font.family + "</div>") $("#fonts").append('<div class="font pointer" style="font-family:' + font.family + '" onclick="insertFont(\'' + font.family + '\')">' + font.family + "</div>")
} }
});
} }
function insertFont(name) { function insertFont(name) {
$("#font").val(name); $("#font").val(name);
@@ -519,7 +476,7 @@ function customComp(){
pickerDefine(1, "fff"); pickerDefine(1, "fff");
pickerDefine(2, "fff"); pickerDefine(2, "fff");
pickerDefine(3, "fff"); pickerDefine(3, "fff");
ipc.send('theme-json-create', JSON.stringify(json)); postMessage(["themeJsonCreate", JSON.stringify(json)], "*")
} }
function deleteIt() { function deleteIt() {
var id = $("#custom-sel-sel").val(); var id = $("#custom-sel-sel").val();
@@ -539,15 +496,12 @@ function deleteIt(){
pickerDefine(1, "fff"); pickerDefine(1, "fff");
pickerDefine(2, "fff"); pickerDefine(2, "fff");
pickerDefine(3, "fff"); pickerDefine(3, "fff");
ipc.on('theme-json-delete-complete', function (event, args) { postMessage(["themeJsonDelete", id], "*")
ctLoad()
});
ipc.send('theme-json-delete', id);
} }
function ctLoad() { function ctLoad() {
ipc.send('theme-json-list', ""); postMessage(["sendSinmpleIpc", "theme-json-list"], "*")
ipc.on('theme-json-list-response', function (event, args) { }
console.log(args); function ctLoadCore(args) {
var templete = ""; var templete = "";
Object.keys(args).forEach(function (key) { Object.keys(args).forEach(function (key) {
var theme = args[key]; var theme = args[key];
@@ -560,8 +514,7 @@ function ctLoad(){
$("#custom-sel-sel").html(templete); $("#custom-sel-sel").html(templete);
templete = '<option value="add_new">' + $("#edit-selector").attr("data-add") + '</option>' + templete; templete = '<option value="add_new">' + $("#edit-selector").attr("data-add") + '</option>' + templete;
$("#custom-edit-sel").html(templete); $("#custom-edit-sel").html(templete);
$('select').material_select('update'); $('select').formSelect();
});
} }
function customSel() { function customSel() {
var id = $("#custom-sel-sel").val(); var id = $("#custom-sel-sel").val();
@@ -589,9 +542,10 @@ function custom(){
$("#delTheme").addClass("disabled") $("#delTheme").addClass("disabled")
} else { } else {
$("#delTheme").removeClass("disabled") $("#delTheme").removeClass("disabled")
ipc.send('theme-json-request', id); postMessage(["themeJsonRequest", id], "*")
ipc.on('theme-json-response', function (event, args) { }
console.log(args); }
function customConnect(args) {
$("#custom_name").val(args.name); $("#custom_name").val(args.name);
$("#custom_desc").val(args.desc); $("#custom_desc").val(args.desc);
$("#" + args.base).prop("checked", true); $("#" + args.base).prop("checked", true);
@@ -616,26 +570,28 @@ function custom(){
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>') $("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
pickerDefine(3, rgbToHex(accent)) pickerDefine(3, rgbToHex(accent))
$("#custom_json").val(JSON.stringify(args)); $("#custom_json").val(JSON.stringify(args));
});
}
} }
function customImp() { function customImp() {
var json = $("#custom_import").val(); var json = $("#custom_import").val();
if (JSON5.parse(json)) { if (JSON5.parse(json)) {
ipc.send('theme-json-create', json); postMessage(["themeJsonCreate", json], "*")
} else { } else {
alert("Error") alert("Error")
} }
} }
function hardwareAcceleration(had){ function clearCustomImport() {
console.log("ha");
ipc.send('ha', had);
}
ipc.on('theme-json-create-complete', function (event, args) {
$("#custom_import").val(""); $("#custom_import").val("");
ctLoad() }
}); function hardwareAcceleration(had) {
postMessage(["ha", had], "*")
}
function customSound(key) {
postMessage(["customSound", key], "*")
}
function customSoundSave(key, file) {
localStorage.setItem("custom" + key, file);
$("#c1-file").text(file)
}
window.onload = function () { window.onload = function () {
//最初に読む //最初に読む
load(); load();
@@ -648,3 +604,4 @@ oksload();
npprovider(); npprovider();
ctLoad() ctLoad()
}; };

View File

@@ -32,7 +32,7 @@ function sortload(){
var acctdata = user + "@" + domain; var acctdata = user + "@" + domain;
} }
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 + 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, escapeHTML(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="' + 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>'; ')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">cancel</i></a></div><div class="sortacct">' + acctdata + '</div></li>';
$("#sort").append(html); $("#sort").append(html);
@@ -58,8 +58,10 @@ function Scap(type, data) {
return "Integrated" return "Integrated"
} else if (type == "webview") { } else if (type == "webview") {
return "Twitter" return "Twitter"
} else if (type == "tootsearch") {
return "tootsearch(" + data + ")"
} else { } else {
console.log(type); console.error("unknown timeline type: " + type);
} }
} }
@@ -101,7 +103,7 @@ function sort(){
var json = JSON.stringify(newobj); var json = JSON.stringify(newobj);
localStorage.setItem("column", json); localStorage.setItem("column", json);
$("#sort").html(""); $("#sort").html("");
Materialize.toast("並べ替え完了。", 3000); M.toast({ html: "Sorted", displayLength: 3000 })
sortload(); sortload();
parseColumn(); parseColumn();
sortMenu() sortMenu()

View File

@@ -1,21 +1,13 @@
function spotifyConnect() { function spotifyConnect() {
var auth = "https://accounts.spotify.com/authorize?client_id=0f18e54abe0b4aedb4591e353d3aff69&redirect_uri=https://thedesk.top/spotify-connect&response_type=code&scope=user-read-currently-playing"; var auth = "https://accounts.spotify.com/authorize?client_id=0f18e54abe0b4aedb4591e353d3aff69&redirect_uri=https://thedesk.top/spotify-connect&response_type=code&scope=user-read-currently-playing";
const { var platform = localStorage.getItem("platform");
shell
} = require('electron');
var electron = require("electron");
var remote=electron.remote;
var platform=remote.process.platform;
if (platform == "win32") { if (platform == "win32") {
shell.openExternal(auth); postMessage(["openUrl", auth], "*")
var ipc = electron.ipcRenderer; postMessage(["sendSinmpleIpc", "quit"], "*")
ipc.send('quit', 'go');
} else { } else {
auth = auth + "&state=code"; auth = auth + "&state=code";
$("#spotify-code-show").removeClass("hide"); $("#spotify-code-show").removeClass("hide");
shell.openExternal(auth); postMessage(["openUrl", auth], "*")
} }
@@ -57,10 +49,10 @@ function spotifyFlagSave(){
var awk = $("[name=awk]:checked").val(); var awk = $("[name=awk]:checked").val();
if (awk == "yes") { if (awk == "yes") {
localStorage.setItem("artwork", "yes"); localStorage.setItem("artwork", "yes");
Materialize.toast(lang.lang_spotify_img, 3000); M.toast({ html: lang.lang_spotify_img, displayLength: 3000 })
} else { } else {
localStorage.removeItem("artwork"); localStorage.removeItem("artwork");
Materialize.toast(lang.lang_spotify_imgno, 3000); M.toast({ html: lang.lang_spotify_imgno, displayLength: 3000 })
} }
} }
function nowplaying(mode) { function nowplaying(mode) {
@@ -79,17 +71,15 @@ function nowplaying(mode){
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json); console.table(json);
if (json.length < 1) { if (json.length < 1) {
return false; return false;
} }
var item = json.item; var item = json.item;
var img = item.album.images[0].url; var img = item.album.images[0].url;
var electron = require("electron");
var ipc = electron.ipcRenderer;
var flag = localStorage.getItem("artwork"); var flag = localStorage.getItem("artwork");
if (flag) { if (flag) {
ipc.send('bmp-image', [img,0]); postMessage(["bmpImage", [img, 0]], "*")
} }
var content = localStorage.getItem("np-temp"); var content = localStorage.getItem("np-temp");
if (!content || content == "" || content == "null") { if (!content || content == "" || content == "null") {
@@ -121,29 +111,28 @@ function nowplaying(mode){
alert(lang.lang_spotify_acct); alert(lang.lang_spotify_acct);
} }
} else if (mode == "itunes") { } else if (mode == "itunes") {
var electron = require("electron"); postMessage(["itunes", ""], "*")
var ipc = electron.ipcRenderer;
if (ipc.listenerCount('itunes-np') > 0) {
return false;
} }
}
ipc.send('itunes', ""); function npCore(arg) {
ipc.once('itunes-np', function (event, arg) { if (arg.cmd) {
console.log(arg); console.error(arg);
return;
}
console.table(arg);
var content = localStorage.getItem("np-temp"); var content = localStorage.getItem("np-temp");
if (!content || content == "" || content == "null") { if (!content || content == "" || content == "null") {
var content = "#NowPlaying {song} / {album} / {artist}\n{url}"; var content = "#NowPlaying {song} / {album} / {artist}\n{url}";
} }
var flag = localStorage.getItem("artwork"); var flag = localStorage.getItem("artwork");
var remote=electron.remote; var platform = localStorage.getItem("platform");
var platform=remote.process.platform;
if (platform == "win32") { if (platform == "win32") {
if (flag && arg.path) { if (flag && arg.path) {
media(arg.path, "image/png", "new"); media(arg.path, "image/png", "new");
} }
} else if (platform == "darwin") { } else if (platform == "darwin") {
if(flag && arg.artworks[0]){ if (flag && arg.existsArtwork) {
ipc.send('bmp-image', [arg.artworks[0].path,0]); media(arg.artworks[0].data, "image/png", "new");
} }
} }
var regExp = new RegExp("{song}", "g"); var regExp = new RegExp("{song}", "g");
@@ -167,14 +156,11 @@ function nowplaying(mode){
var regExp = new RegExp("{genre}", "g"); var regExp = new RegExp("{genre}", "g");
content = content.replace(regExp, arg.genre); content = content.replace(regExp, arg.genre);
$("#textarea").val(content); $("#textarea").val(content);
})
}
} }
function spotifySave() { function spotifySave() {
var temp = $("#np-temp").val(); var temp = $("#np-temp").val();
localStorage.setItem("np-temp", temp); localStorage.setItem("np-temp", temp);
Materialize.toast(lang.lang_spotify_np, 3000); M.toast({ html: lang.lang_spotify_np, displayLength: 3000 })
} }
function npprovider() { function npprovider() {
var provd = $("[name=npp]:checked").val(); var provd = $("[name=npp]:checked").val();
@@ -187,12 +173,11 @@ function npprovider(){
} }
} else { } else {
if (provd != localStorage.getItem("np_provider")) { if (provd != localStorage.getItem("np_provider")) {
Materialize.toast(lang.lang_setting_npprovide.replace("{{set}}" ,provd), 3000); M.toast({ html: lang.lang_setting_npprovide.replace("{{set}}", provd), displayLength: 3000 })
} }
localStorage.setItem("np_provider", provd); localStorage.setItem("np_provider", provd);
var electron = require("electron"); postMessage(["itunes", ["set", provd]], "*")
var ipc = electron.ipcRenderer;
ipc.send('itunes', ["set",provd]);
} }
} }
if (location.search) { if (location.search) {
@@ -215,49 +200,3 @@ $("#npbtn").bind('contextmenu', function() {
nowplaying('itunes'); nowplaying('itunes');
return false; 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

@@ -21,7 +21,7 @@ function themes(theme) {
} }
if (theme == "custom") { if (theme == "custom") {
if (localStorage.getItem("customtheme-id")) { if (localStorage.getItem("customtheme-id")) {
ipc.send('theme-css-request', localStorage.getItem("customtheme-id")); postMessage(["themeCSSRequest", localStorage.getItem("customtheme-id")], "*")
} }
} }
} }

View File

@@ -20,9 +20,7 @@ function bottomReverse(){
} }
} }
function tips(mode) { function tips(mode) {
var electron = require("electron"); postMessage(["sendSinmpleIpc", "endmem"], "*")
var ipc = electron.ipcRenderer;
ipc.send('endmem', "");
clearInterval(clockint); clearInterval(clockint);
clearInterval(spotStart); clearInterval(spotStart);
if (mode == "ver") { if (mode == "ver") {
@@ -50,15 +48,10 @@ function tips(mode){
} }
//メモリ //メモリ
function startmem() { function startmem() {
var electron = require("electron"); postMessage(["sendSinmpleIpc", "startmem"], "*")
var ipc = electron.ipcRenderer; }
ipc.send('startmem', ""); function renderMem(use, cpu, total){
ipc.on('memory', function (event, arg) { $("#tips-text").html(escapeHTML(cpu) + "<br>Memory:" + Math.floor(use / 1024 / 1024 / 102.4) / 10 + "/" + Math.floor(total / 1024 / 1024 / 102.4) / 10 + "GB(" + Math.floor(use / total * 100) + "%)")
var use=arg[0];
var cpu=arg[1];
var total=arg[2]
$("#tips-text").html(cpu+"<br>Memory:"+Math.floor(use/1024/1024/102.4)/10+"/"+Math.floor(total/1024/1024/102.4)/10+"GB("+Math.floor(use/total*100)+"%)")
})
} }
//トレンドタグ //トレンドタグ
function trendTagonTip() { function trendTagonTip() {
@@ -66,7 +59,6 @@ function trendTagonTip(){
var domain = "imastodon.net" var domain = "imastodon.net"
var at = localStorage.getItem("acct_" + acct_id + "_at"); var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/v1/trend_tags" var start = "https://" + domain + "/api/v1/trend_tags"
console.log(start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -83,7 +75,7 @@ function trendTagonTip(){
var tags = ""; var tags = "";
json = json.score; json = json.score;
Object.keys(json).forEach(function (tag) { Object.keys(json).forEach(function (tag) {
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="#' + tag + 'のタイムライン">TL</a> <a onclick="show();brInsert(\'#' + tag + '\')" class="pointer" title="#' + tag + 'でトゥート">Toot</a></span><br>'; tags = tags + '<a onclick="tagShow(\'' + tag + '\')" class="pointer">#' + escapeHTML(tag) + '</a><span class="hide" data-tag="' + tag + '"> <a onclick="tagTL(\'tag\',\'' + tag + '\',false,\'add\')" class="pointer" title="#' + tag + 'のタイムライン">TL</a> <a onclick="show();brInsert(\'#' + tag + '\')" class="pointer" title="#' + tag + 'でトゥート">Toot</a></span><br>';
}); });
$("#tips-text").html('<div class="trendtag">トレンドタグ<i class="material-icons pointer" onclick="trendTagonTip()" style="font-size:12px">refresh</i>:<br>' + tags + '</div>'); $("#tips-text").html('<div class="trendtag">トレンドタグ<i class="material-icons pointer" onclick="trendTagonTip()" style="font-size:12px">refresh</i>:<br>' + tags + '</div>');
trendTagonTipInterval() trendTagonTipInterval()
@@ -109,7 +101,6 @@ function spotifytips(){
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
var ms = json.progress_ms; var ms = json.progress_ms;
var last = 1000 - ms % 1000; var last = 1000 - ms % 1000;
var item = json.item; var item = json.item;
@@ -200,4 +191,3 @@ function tipsToggle(){
if (localStorage.getItem("tips")) { if (localStorage.getItem("tips")) {
tips(localStorage.getItem("tips")); tips(localStorage.getItem("tips"));
} }

View File

@@ -438,10 +438,11 @@ function showReq(more, acct_id) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
if(localStorage.getItem("mode_" + domain)=="misskey"){
var templete = userparse(json, 'true',acct_id); if (localStorage.getItem("mode_" + domain) != "misskey") {
var templete = userparse(json, "request", acct_id);
} else { } else {
var templete = misskeyUserparse(json, 'true',acct_id); var templete = misskeyUserparse(json, true, acct_id);
} }
if (!json[0]) { if (!json[0]) {
@@ -537,9 +538,8 @@ function showFrl(more, acct_id) {
$("#his-follow-recom-contents").html(lang.lang_details_nodata + "(" + lang.lang_hisdata_frcreq + ")<br>"); $("#his-follow-recom-contents").html(lang.lang_details_nodata + "(" + lang.lang_hisdata_frcreq + ")<br>");
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (!json[0]) { if (!json[0]) {
console.log("No data"); console.warn("No suggestions(recommend) data");
templete = lang.lang_details_nodata + "(" + lang.lang_hisdata_frcwarn + ")<br>"; templete = lang.lang_details_nodata + "(" + lang.lang_hisdata_frcwarn + ")<br>";
} else { } else {
var templete = userparse(json, '', acct_id); var templete = userparse(json, '', acct_id);
@@ -553,6 +553,51 @@ function showFrl(more, acct_id) {
}); });
} }
//Keybase
function udAdd(start) {
fetch(start, {
method: 'GET',
headers: {
'Accept': 'application/json'
},
//body: JSON.stringify({})
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
var fields = json.attachment;
for (var i = 0; i < fields.length; i++) {
if (fields[i].type == "IdentityProof") {
if (fields[i].signatureAlgorithm == "keybase") {
var html = '<a href="https://keybase.io/' + fields[i].name + '" target="_blank" class="cbadge teal waves-effect" style="max-width:200px;" title="' + lang.lang_hisdata_key.replace("{{set}}", escapeHTML(fields[i].signatureAlgorithm)) + '"><i class="fas fa-key" aria-hidden="true"></i>' + escapeHTML(fields[i].signatureAlgorithm) + ':' + escapeHTML(fields[i].name) + '</a>';
} else {
var html = '<span class="cbadge teal" style="max-width:200px;" title="' + lang.lang_hisdata_key.replace("{{set}}", escapeHTML(fields[i].signatureAlgorithm)) + '"><i class="fas fa-key" aria-hidden="true"></i>' + escapeHTML(fields[i].signatureAlgorithm) + ':' + escapeHTML(fields[i].name) + '</span>';
}
$("#his-proof-prof").append(html)
}
}
});
fetch("https://notestock.osa-p.net/api/v1/isstock.json?id=" + start.replace("@", "users/"), {
method: 'GET',
headers: {
'Accept': 'application/json'
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
if (json.user.public_view) {
var html = '<a href="' + json.user.url + '" target="_blank" class="cbadge purple waves-effect" style="max-width:200px;" title="Notestock">Notestock</a>';
$("#his-proof-prof").append(html)
}
});
}
//ユーザーマッチングリスト //ユーザーマッチングリスト
function showMat() { function showMat() {
@@ -562,7 +607,6 @@ function showMat() {
var acct_id = $("#his-data").attr("use-acct"); var acct_id = $("#his-data").attr("use-acct");
full = full.split("@"); full = full.split("@");
var start = "https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-filtered-api.cgi?" + full[1] + "+" + full[0]; var start = "https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-filtered-api.cgi?" + full[1] + "+" + full[0];
console.log(start);
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -575,7 +619,6 @@ function showMat() {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
var templete = ""; var templete = "";
Object.keys(json).forEach(function (key) { Object.keys(json).forEach(function (key) {
var user = json[key]; var user = json[key];

View File

@@ -30,7 +30,7 @@ function imgChange(imgfile, target) {
var acct_id = $('#his-data').attr("use-acct"); var acct_id = $('#his-data').attr("use-acct");
todo("アップロードしています") todo("アップロードしています")
if (!imgfile.files.length) { if (!imgfile.files.length) {
console.log("No Img"); console.warn("No Image to upload");
return; return;
} }
var file = imgfile.files[0]; var file = imgfile.files[0];
@@ -52,7 +52,6 @@ function imgChange(imgfile, target) {
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response;
console.log(json);
$('#his-data').modal('close'); $('#his-data').modal('close');
todc(); todc();
localStorage.removeItem("image"); localStorage.removeItem("image");

View File

@@ -19,7 +19,7 @@ function udgEx(user,acct_id){
if (acct_id == "main") { if (acct_id == "main") {
acct_id = localStorage.getItem("main"); acct_id = localStorage.getItem("main");
} }
console.log(user); console.log("Get user data of " + user);
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
if (localStorage.getItem("mode_" + domain) == "misskey") { return false; } if (localStorage.getItem("mode_" + domain) == "misskey") { return false; }
var at = localStorage.getItem("acct_" + acct_id + "_at"); var at = localStorage.getItem("acct_" + acct_id + "_at");
@@ -36,14 +36,11 @@ function udgEx(user,acct_id){
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
if (json.accounts) { if (json.accounts) {
var id = json.accounts[0].id; var id = json.accounts[0].id;
udg(id, acct_id); udg(id, acct_id);
} else { } else {
var url="https://"+user.split('@')[1]+"/@"+user.split('@')[0]; postMessage(["openUrl", url], "*")
const {shell} = require('electron');
shell.openExternal(url);
} }
}); });
return true; return true;
@@ -52,7 +49,6 @@ function udg(user, acct_id) {
reset(); reset();
if (!user) { if (!user) {
user = localStorage.getItem("user-id_" + acct_id); user = localStorage.getItem("user-id_" + acct_id);
console.log(user);
} }
todo("User Data Loading..."); todo("User Data Loading...");
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
@@ -62,7 +58,6 @@ function udg(user, acct_id) {
} }
var at = localStorage.getItem("acct_" + acct_id + "_at"); var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/v1/accounts/" + user; var start = "https://" + domain + "/api/v1/accounts/" + user;
console.log(start);
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
@@ -75,7 +70,6 @@ function udg(user, acct_id) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
//一つ前のユーザーデータ //一つ前のユーザーデータ
if (!localStorage.getItem("history")) { if (!localStorage.getItem("history")) {
$("#his-history-btn").prop("disabled", true); $("#his-history-btn").prop("disabled", true);
@@ -85,9 +79,8 @@ function udg(user, acct_id) {
} }
//moved設定時 //moved設定時
if (json.moved) { if (json.moved) {
Materialize.toast( M.toast({ html: lang.lang_showontl_movetxt + '<button class="btn-flat toast-action" onclick="udg(\'' +
lang.lang_showontl_movetxt+'<button class="btn-flat toast-action" onclick="udg(\'' + json.moved.id + '\',\'' + acct_id + '\')">' + lang.lang_showontl_movebtn + '</button>', displayLength: 4000 })
json.moved.id + '\',\''+acct_id+'\')">'+lang.lang_showontl_movebtn+'</button>', 4000)
} }
$('#his-data').modal('open'); $('#his-data').modal('open');
$('#his-data').attr("user-id", user); $('#his-data').attr("user-id", user);
@@ -105,6 +98,7 @@ function udg(user, acct_id) {
fer(json.id, '', acct_id); fer(json.id, '', acct_id);
var dis_name = escapeHTML(json.display_name); var dis_name = escapeHTML(json.display_name);
dis_name = twemoji.parse(dis_name); dis_name = twemoji.parse(dis_name);
var note = json.note; var note = json.note;
if (json.emojis) { if (json.emojis) {
var actemojick = json.emojis[0]; var actemojick = json.emojis[0];
@@ -117,12 +111,17 @@ function udg(user, acct_id) {
var emoji = json.emojis[key5]; var emoji = json.emojis[key5];
var shortcode = emoji.shortcode; var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url + 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"); var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url); dis_name = dis_name.replace(regExp, emoji_url);
note = note.replace(regExp, emoji_url); note = note.replace(regExp, emoji_url);
}); });
} }
//noteの解析
//var tags = '<a onclick="tl(\'tag\',\'$1\',' + acct_id +',\'add\')" class="pointer parsed">#$1</a>';
//var mens = '<a onclick="udgEx(\'$1\',' + acct_id +')" class="pointer parsed">@$1</a>';
//note=note.replace(/#(\S+)/gi, tags)
//note=note.replace(/\s@([a-zA-Z_0-9@.-]+)/gi, mens)
$("#his-name").html(dis_name); $("#his-name").html(dis_name);
$("#his-acct").text(json.acct); $("#his-acct").text(json.acct);
$("#his-acct").attr("fullname", fullname); $("#his-acct").attr("fullname", fullname);
@@ -143,8 +142,14 @@ function udg(user, acct_id) {
for (var i = 0; i < json.fields.length; i++) { for (var i = 0; i < json.fields.length; i++) {
var fname = json.fields[i].name; var fname = json.fields[i].name;
var fval = json.fields[i].value; var fval = json.fields[i].value;
fval=twemoji.parse(fval); if (json.fields[i].verified_at) {
note=note+'<tr><td class="his-field-title">'+fname+'</td><td class="his-field-content">'+fval+'</td></tr>'; 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"
}
note = note + '<tr><td class="his-field-title">' + twemoji.parse(escapeHTML(fname)) + '</td><td class="his-field-content" title="' + when + '" style="background-color:' + color + '">' + twemoji.parse(fval) + '</td></tr>';
} }
note = note + '</table>' note = note + '</table>'
$("#his-des").html(twemoji.parse(note)); $("#his-des").html(twemoji.parse(note));
@@ -157,6 +162,7 @@ function udg(user, acct_id) {
if (json.bot) { if (json.bot) {
$("#his-bot").html(lang.lang_showontl_botacct); $("#his-bot").html(lang.lang_showontl_botacct);
} }
$("#his-des").attr("data-acct", acct_id);
$('#his-data').css('background-size', 'cover'); $('#his-data').css('background-size', 'cover');
$("#his-data .tab-content").css("height", $("#his-float-timeline").height() - 70 + "px") $("#his-data .tab-content").css("height", $("#his-float-timeline").height() - 70 + "px")
localStorage.setItem("history", user); localStorage.setItem("history", user);
@@ -170,10 +176,10 @@ function udg(user, acct_id) {
showFrl('', acct_id); showFrl('', acct_id);
$("#his-name-val").val(json.display_name); $("#his-name-val").val(json.display_name);
if (json.fields.length > 0) { if (json.fields.length > 0) {
$("#his-f1-name").val(json.fields[0].name); $("#his-f1-val").val($.strip_tags(json.fields[0].value)); if (json.fields[0]) { $("#his-f1-name").val(json.fields[0].name); $("#his-f1-val").val($.strip_tags(json.fields[0].value)); }
$("#his-f2-name").val(json.fields[1].name); $("#his-f2-val").val($.strip_tags(json.fields[1].value)); if (json.fields[1]) { $("#his-f2-name").val(json.fields[1].name); $("#his-f2-val").val($.strip_tags(json.fields[1].value)); }
$("#his-f3-name").val(json.fields[2].name); $("#his-f3-val").val($.strip_tags(json.fields[2].value)); if (json.fields[2]) { $("#his-f3-name").val(json.fields[2].name); $("#his-f3-val").val($.strip_tags(json.fields[2].value)); }
$("#his-f4-name").val(json.fields[3].name); $("#his-f4-val").val($.strip_tags(json.fields[3].value)); if (json.fields[3]) { $("#his-f4-name").val(json.fields[3].name); $("#his-f4-val").val($.strip_tags(json.fields[3].value)); }
} }
var des = json.note; var des = json.note;
des = des.replace(/<br \/>/g, "\n") des = des.replace(/<br \/>/g, "\n")
@@ -193,13 +199,14 @@ function udg(user, acct_id) {
$(".only-his-data").show(); $(".only-his-data").show();
} }
todc(); todc();
//外部データ取得(死かもしれないので)
udAdd(json.url);
}); });
} }
function misskeyUdg(user, acct_id) { function misskeyUdg(user, acct_id) {
reset(); reset();
if (!user) { if (!user) {
user = localStorage.getItem("user-id_" + acct_id); user = localStorage.getItem("user-id_" + acct_id);
console.log(user);
} }
todo("User Data Loading..."); todo("User Data Loading...");
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id);
@@ -209,7 +216,6 @@ function misskeyUdg(user, acct_id) {
} }
var at = localStorage.getItem("acct_" + acct_id + "_at"); var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/users/show"; var start = "https://" + domain + "/api/users/show";
console.log(user);
fetch(start, { fetch(start, {
method: 'POST', method: 'POST',
headers: { headers: {
@@ -225,7 +231,6 @@ function misskeyUdg(user, acct_id) {
todo(error); todo(error);
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json);
//一つ前のユーザーデータ //一つ前のユーザーデータ
if (!localStorage.getItem("history")) { if (!localStorage.getItem("history")) {
$("#his-history-btn").prop("disabled", true); $("#his-history-btn").prop("disabled", true);
@@ -262,7 +267,7 @@ function misskeyUdg(user, acct_id) {
$("#his-follow").text(json.followingCount); $("#his-follow").text(json.followingCount);
$("#his-follower").text(json.followersCount); $("#his-follower").text(json.followersCount);
$("#his-since").text(crat(json.createdAt)); $("#his-since").text(crat(json.createdAt));
var note=json.description; var note = escapeHTML(json.description);
$("#his-des").html(twemoji.parse(note)); $("#his-des").html(twemoji.parse(note));
if (json.isCat) { if (json.isCat) {
$("#his-bot").html("Cat" + twemoji.parse("😺")); $("#his-bot").html("Cat" + twemoji.parse("😺"));
@@ -324,7 +329,6 @@ function historyShow(){
function profShow() { function profShow() {
var acct_id = $("#post-acct-sel").val(); var acct_id = $("#post-acct-sel").val();
var user = localStorage.getItem("user-id_" + acct_id); var user = localStorage.getItem("user-id_" + acct_id);
console.log("user-id_"+acct_id+":"+user);
udg(user, acct_id) udg(user, acct_id)
hide(); hide();
} }
@@ -392,13 +396,18 @@ function relations(user, acct_id) {
$("#his-end-btn").removeClass("endorsed"); $("#his-end-btn").removeClass("endorsed");
$("#his-end-btn").text(lang.lang_status_endorse) $("#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()
}
}); });
} }
function profbrws() { function profbrws() {
const {shell} = require('electron');
var url = $("#his-openin").attr("data-href") var url = $("#his-openin").attr("data-href")
shell.openExternal(url); postMessage(["openUrl", url], "*")
} }
//オールリセット //オールリセット
function hisclose() { function hisclose() {
@@ -453,10 +462,13 @@ function reset(){
$("#his-f4-name").val(""); $("#his-f4-val").val(""); $("#his-f4-name").val(""); $("#his-f4-val").val("");
$("#his-endorse").html(""); $("#his-endorse").html("");
$("#his-openin").attr("data-href", ""); $("#his-openin").attr("data-href", "");
$("#his-float-timeline").show();
$("#his-float-blocked").hide();
$("#his-proof-prof").html("")
} }
$('#my-data-nav .custom-tab').on('click',function(){ $('#my-data-nav .tab').on('click', function () {
var target = $(this).find("a").attr("go"); var target = $(this).find("a").attr("go");
$("#my-data-nav .custom-tab").removeClass("active-back"); $("#my-data-nav .tab").removeClass("active-back");
$(this).addClass("active-back"); $(this).addClass("active-back");
$(target).show(); $(target).show();
$(".tab-content:not(" + target + ")").hide(); $(".tab-content:not(" + target + ")").hide();

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

View File

@@ -1,33 +1,26 @@
'use strict'; var dirname = __dirname;
var dir = 'file://' + __dirname;
var base = dir + '/view/';
// Electronのモジュール // Electronのモジュール
const electron = require("electron"); const electron = require("electron");
const fs = require("fs"); const fs = require("fs");
const dialog = require('electron').dialog; const language = require('./main/language.js');
var Jimp = require("jimp"); const css = require('./main/css.js');
const shell = electron.shell; const dl = require('./main/dl.js');
const os = require('os') const img = require('./main/img.js');
const path = require('path') const np = require('./main/np.js');
const fm = require('font-manager'); const systemFunc = require('./main/system.js');
const language = require('./language.js');
const Menu = electron.Menu const Menu = electron.Menu
var updatewin=null;
const join = require('path').join; const join = require('path').join;
var JSON5 = require('json5');
// アプリケーションをコントロールするモジュール // アプリケーションをコントロールするモジュール
const app = electron.app; const app = electron.app;
// ウィンドウを作成するモジュール // ウィンドウを作成するモジュール
const BrowserWindow = electron.BrowserWindow; const BrowserWindow = electron.BrowserWindow;
const {
download
} = require('electron-dl');
// メインウィンドウはGCされないようにグローバル宣言 // メインウィンドウはGCされないようにグローバル宣言
let mainWindow; let mainWindow;
var info_path = join(app.getPath("userData"), "window-size.json"); var info_path = join(app.getPath("userData"), "window-size.json");
var max_info_path = join(app.getPath("userData"), "max-window-size.json"); var max_info_path = join(app.getPath("userData"), "max-window-size.json");
var lang_path = join(app.getPath("userData"), "language"); var lang_path = join(app.getPath("userData"), "language");
var customcss=join(app.getPath("userData"), "custom.css");
var tmp_img = join(app.getPath("userData"), "tmp.png");
var ha_path = join(app.getPath("userData"), "hardwareAcceleration"); var ha_path = join(app.getPath("userData"), "hardwareAcceleration");
try { try {
fs.readFileSync(ha_path, 'utf8'); fs.readFileSync(ha_path, 'utf8');
@@ -57,19 +50,14 @@ try {
}; // デフォルトバリュー }; // デフォルトバリュー
} }
function isFile(file) {
try { try {
var lang = fs.readFileSync(lang_path, 'utf8'); fs.statSync(file);
} catch (e) { return true
var langs=app.getLocale(); } catch (err) {
if(~langs.indexOf("ja")){ if (err.code === 'ENOENT') return false
lang="ja";
}else{
lang="en";
} }
fs.writeFileSync(lang_path,lang);
} }
console.log(app.getLocale());
console.log("launch:"+lang);
// 全てのウィンドウが閉じたら終了 // 全てのウィンドウが閉じたら終了
app.on('window-all-closed', function () { app.on('window-all-closed', function () {
if (process.platform != 'darwin') { if (process.platform != 'darwin') {
@@ -77,17 +65,64 @@ app.on('window-all-closed', function() {
app.quit(); app.quit();
} }
}); });
// macOSでウィンドウを閉じた後に再度開けるようにする
app.on('activate', function () {
if (mainWindow == null) {
createWindow();
}
});
function createWindow() { function createWindow() {
if (isFile(lang_path)) {
console.log("exist");
var lang = fs.readFileSync(lang_path, 'utf8');
} else {
var langs = app.getLocale();
console.log(langs);
if (~langs.indexOf("ja")) {
lang = "ja";
} else {
lang = "en";
}
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 platform = process.platform;
var bit = process.arch; var bit = process.arch;
if (platform == "linux") { 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'} var arg = {
webPreferences: {
webviewTag: true,
nodeIntegration: false,
contextIsolation: true,
preload: join(__dirname, "js", "platform", "preload.js")
},
width: window_size.width, height: window_size.height, x: window_size.x, y: window_size.y, icon: __dirname + '/desk.png'
}
} else if (platform == "win32") { } else if (platform == "win32") {
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,simpleFullscreen:true} var arg = {
webPreferences: {
webviewTag: true,
nodeIntegration: false,
contextIsolation: true,
preload: join(__dirname, "js", "platform", "preload.js")
},
width: window_size.width, height: window_size.height, x: window_size.x, y: window_size.y, simpleFullscreen: true
}
} else if (platform == "darwin") { } else if (platform == "darwin") {
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,simpleFullscreen:true} var arg = {
webPreferences: {
webviewTag: true,
nodeIntegration: false,
contextIsolation: true,
preload: join(__dirname, "js", "platform", "preload.js")
},
width: window_size.width, height: window_size.height, x: window_size.x, y: window_size.y, simpleFullscreen: true
}
} }
mainWindow = new BrowserWindow(arg); mainWindow = new BrowserWindow(arg);
electron.session.defaultSession.clearCache(() => { }) electron.session.defaultSession.clearCache(() => { })
@@ -107,7 +142,7 @@ function createWindow() {
} else { } else {
var plus = ""; 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) { if (!window_size.x && !window_size.y) {
mainWindow.center(); mainWindow.center();
} }
@@ -116,6 +151,7 @@ function createWindow() {
} }
// ウィンドウが閉じられたらアプリも終了 // ウィンドウが閉じられたらアプリも終了
mainWindow.on('closed', function () { mainWindow.on('closed', function () {
electron.ipcMain.removeAllListeners();
mainWindow = null; mainWindow = null;
}); });
mainWindow.on('close', function () { mainWindow.on('close', function () {
@@ -137,530 +173,27 @@ function createWindow() {
var platform = process.platform; var platform = process.platform;
var bit = process.arch; var bit = process.arch;
if(platform=="darwin"){ if (process.argv.indexOf("--dev") === -1) {
Menu.setApplicationMenu(Menu.buildFromTemplate(language.template(lang,mainWindow,false))); packaged = true;
} else {
packaged = false;
} }
Menu.setApplicationMenu(Menu.buildFromTemplate(language.template(lang, mainWindow, packaged, dir)));
//CSS
css.css(mainWindow);
//アップデータとダウンロード
dl.dl(mainWindow, lang_path, base, dirname);
//画像選択と画像処理
img.img(mainWindow, dir);
//NowPlaying
np.TheDeskNowPlaying(mainWindow);
//その他system
systemFunc.system(mainWindow, dir, lang, dirname);
} }
// Electronの初期化完了後に実行 // Electronの初期化完了後に実行
app.on('ready', createWindow); app.on('ready', createWindow);
var onError = function (err, response) { var onError = function (err, response) {
console.error(err, response); console.error(err, response);
}; };
var ipc = electron.ipcMain;
ipc.on('minimize', function(e, args) {
mainWindow.minimize();
});
ipc.on('maximize', function(e, args) {
mainWindow.isMaximized() ? mainWindow.unmaximize() : mainWindow.maximize();
});
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', "");
})
//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);
});
})
//ハードウェアアクセラレーションの無効化
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('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('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) => {
//console.log(args[1]);
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];
}
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) => {
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);
}
}
});
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) => {
console.log(lang);
var options=language.delsel(lang)
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: 350, height: 200,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false });
nanowindow.loadURL('file://' + __dirname + '/nano.html');
nanowindow.setAlwaysOnTop(true);
nanowindow.setPosition(window_pos[0], window_pos[1]);
nanowindow.on('close', function() {
fs.writeFileSync(nano_info_path, JSON.stringify(nanowindow.getPosition()));
});
return true;
})
ipc.on('adobe', (e, arg) => {
if(!arg){
const options = {
type: 'info',
title: 'Adobeフォトエディタ',
message: "「許可」または「永続的に許可」をクリックするとTheDeskとAdobeで情報を共有します。\n次のウィンドウを開いている時以外は一切提供しません。",
buttons: ['拒否', '許可','永続的に許可']
}
dialog.showMessageBox(options, function(index) {
if(index===2){
mainWindow.webContents.send('adobeagree', "true");
}
if(index>0){
adobeWindow();
}
})
}else{
adobeWindow();
}
});
function adobeWindow(){
var window = new BrowserWindow({
width: 1000,
height: 750
});
window.loadURL('file://' + __dirname + '/adobe.html');
}
var cbTimer1;
ipc.on('startmem', (e, arg) => {
cbTimer1 = setInterval(mems, 1000);
});
ipc.on('endmem', (e, arg) => {
if(cbTimer1){
clearInterval(cbTimer1);
}
});
function mems(){
var mem=os.totalmem()-os.freemem();
if(mainWindow){
mainWindow.webContents.send('memory', [mem,os.cpus()[0].model,os.totalmem()]);
}
}
ipc.on('mkc', (e, arg) => {
var platform=process.platform;
if(platform=="linux" || platform=="win32" ){
var mkc = fs.readFileSync(__dirname + '/.tkn', 'utf8');
}else{
var mkc = "";
}
mainWindow.webContents.send('mkcr', mkc);
});
ipc.on('export', (e, args) => {
fs.writeFileSync(args[0], args[1]);
});
ipc.on('import', (e, arg) => {
mainWindow.webContents.send('config', fs.readFileSync(arg, 'utf8'));
});
//フォント
function object_array_sort(data,key,order,fn){
//デフォは降順(DESC)
var num_a = -1;
var num_b = 1;
if(order === 'asc'){//指定があれば昇順(ASC)
num_a = 1;
num_b = -1;
}
data = data.sort(function(a, b){
var x = a[key];
var y = b[key];
if (x > y) return num_a;
if (x < y) return num_b;
return 0;
});
//重複排除
var arrObj = {};
for (var i = 0; i < data.length; i++) {
arrObj[data[i]['family']] = data[i];
}
data = [];
for (var key in arrObj) {
data.push(arrObj[key]);
}
fn(data); // ソート後の配列を返す
}
ipc.on('fonts', (e, arg) => {
var fonts = fm.getAvailableFontsSync();
object_array_sort(fonts, 'family', 'asc', function(fonts_sorted){
mainWindow.webContents.send('font-list', fonts_sorted);
});
});
app.setAsDefaultProtocolClient('thedesk') 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);
e.sender.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 = "";
}
e.sender.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"]) {
e.sender.webContents.send('theme-json-create-complete', "");
} else {
e.sender.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) {
e.sender.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'));
e.sender.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\");}";
e.sender.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
})
}
e.sender.webContents.send('theme-json-list-response', themes);
});
})
}
exports.css = css;

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

@@ -0,0 +1,128 @@
function dl(mainWindow, lang_path, base, dirname) {
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({
webPreferences: {
webviewTag: false,
nodeIntegration: false,
contextIsolation: true,
preload: join(dirname,"js", "platform", "preload.js")
},
width: 600,
height: 400,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false
});
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) => {
function dl(url, file, dir, e) {
e.sender.webContents.send('mess', "ダウンロードを開始します。");
const opts = {
directory: dir,
openFolderWhenDone: true,
onProgress: function (event) {
e.sender.webContents.send('prog', e);
},
saveAs: false
};
download(updatewin,
url, opts)
.then(dl => {
e.sender.webContents.send('mess', "ダウンロードが完了しました。");
app.quit();
})
.catch(console.error);
}
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], e);
});
});
function isExistFile(file) {
try {
fs.statSync(file);
return true
} catch (err) {
if (err.code === 'ENOENT') return false
}
}
ipc.on('general-dl', (event, 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) {
event.sender.webContents.send('general-dl-prog', e);
},
saveAs: false
};
download(BrowserWindow.getFocusedWindow(),
args[0], opts)
.then(dl => {
event.sender.webContents.send('general-dl-message', dir);
})
.catch(console.error);
});
ipc.on('open-finder', (e, folder) => {
shell.showItemInFolder(folder)
});
}
exports.dl = dl;

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

@@ -0,0 +1,43 @@
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');
e.sender.webContents.send('bmp-img-comp', [bin, 'new']);
}
});
});
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) {
e.sender.webContents.send('bmp-img-comp', [src, args[1]]);
});
});
});
}
exports.img = img;

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

@@ -0,0 +1,178 @@
// 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"
}
}
if(packaged){
var ifDev = [
{
label: dict.reload[lang],
accelerator: 'CmdOrCtrl+R',
click: function () { mainWindow.reload(); }
}
]
}else{
var ifDev = [
{
label: 'Toggle Developer Tools',
accelerator: 'Alt+Command+I',
click: function () { if (!packaged) { mainWindow.toggleDevTools(); } }
},
{
label: dict.reload[lang],
accelerator: 'CmdOrCtrl+R',
click: function () { mainWindow.reload(); }
}
]
}
const menu = [{
label: dict.application[lang],
submenu: [
{
label: dict.about[lang], click: function () {
var ver = app.getVersion()
var window = new BrowserWindow({
webPreferences: {
webviewTag: false,
nodeIntegration: false,
contextIsolation: true,
preload: "../js/platform/preload.js"
},
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: ifDev
},
{
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;

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

@@ -0,0 +1,71 @@
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', async (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") {
try {
const nowplaying = require("itunes-nowplaying-mac");
const value = await nowplaying.getRawData();
e.sender.webContents.send('itunes-np', value);
} catch (error) {
// エラーを返す
console.error(error);
e.sender.webContents.send('itunes-np', 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
}
e.sender.webContents.send('itunes-np', value);
}
}
});
}
exports.TheDeskNowPlaying = np;

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

@@ -0,0 +1,261 @@
function system(mainWindow, dir, lang, dirname) {
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 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('getPlatform', function (e, arg) {
e.sender.webContents.send('platform', [process.platform, process.arch, process.version, process.versions.chrome, process.versions.electron]);
})
//言語
ipc.on('lang', function (e, arg) {
console.log("set:" + arg);
fs.writeFileSync(lang_path, arg);
e.sender.webContents.send('langres', "");
})
//ストアから入れたかダイアログ
ipc.on('dialogStore', function (e, args) {
dialog.showMessageBox(args, function (arg) {
if (arg == 1) {
e.sender.webContents.send('winstore', "winstore");
} else {
e.sender.webContents.send('winstore', "localinstall");
}
});
})
//CWのダイアログ
ipc.on('dialogCW', function (e, args) {
dialog.showMessageBox(args, function (arg) {
e.sender.webContents.send('dialogCWRender', arg);
});
})
//クライアントのダイアログ
ipc.on('dialogClient', function (e, args) {
dialog.showMessageBox(args, function (arg) {
e.sender.webContents.send('dialogClientRender', arg);
});
})
//エクスポートのダイアログ
ipc.on('exportSettings', function (e, args) {
dialog.showSaveDialog(null, {
title: 'Export',
properties: ['openFile', 'createDirectory'],
defaultPath: "export.thedeskconfigv2"
}, (savedFiles) => {
if (!savedFiles) {
return false;
}
e.sender.webContents.send('exportSettingsFile', savedFiles);
})
})
//インポートのダイアログ
ipc.on('importSettings', function (e, args) {
dialog.showOpenDialog(null, {
title: 'Import',
properties: ['openFile'],
filters: [
{ name: 'TheDesk Config', extensions: ['thedeskconfig', 'thedeskconfigv2'] },
]
}, (fileNames) => {
if (!fileNames) {
return false;
}
e.sender.webContents.send('config', fs.readFileSync(arg, 'utf8'));
})
})
//保存フォルダのダイアログ
ipc.on('savefolder', function (e, args) {
dialog.showOpenDialog(null, {
title: 'Save folder',
properties: ['openDirectory'],
}, (fileNames) => {
e.sender.webContents.send('savefolder', fileNames[0]);
});
})
//カスタムサウンドのダイアログ
ipc.on('customSound', function (e, arg) {
dialog.showOpenDialog(null, {
title: 'Custom sound',
properties: ['openFile'],
filters: [
{ name: 'Audio', extensions: ['mp3', 'aac', 'wav', 'flac', 'm4a'] },
{ name: 'All', extensions: ['*'] },
]
}, (fileNames) => {
e.sender.webContents.send('customSoundRender', [arg, fileNames[0]]);
});
})
//ハードウェアアクセラレーションの無効化
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({
webPreferences: {
webviewTag: false,
nodeIntegration: false
},
width: 300,
height: 480,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false
});
window.loadURL(dir + '/about.html?ver=' + ver);
return "true"
}
ipc.on('column-del', (e, tlid) => {
console.log(tlid);
var options = language.delsel(lang)
dialog.showMessageBox(options, function (index) {
e.sender.webContents.send('column-del-reply', [index, tlid]);
})
});
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({
webPreferences: {
webviewTag: false,
nodeIntegration: false,
contextIsolation: true,
preload: join(dirname,"js", "platform", "preload.js")
},
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) => {
event = e.sender
cbTimer1 = setInterval(mems, 1000);
});
function mems() {
var mem = os.totalmem() - os.freemem();
if (mainWindow) {
event.webContents.send('memory', [mem, os.cpus()[0].model, os.totalmem()]);
}
}
ipc.on('endmem', (e, arg) => {
if (cbTimer1) {
clearInterval(cbTimer1);
}
});
ipc.on('export', (e, args) => {
fs.writeFileSync(args[0], args[1]);
});
//フォント
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) => {
const fm = require('font-manager');
var fonts = fm.getAvailableFontsSync();
object_array_sort(fonts, 'family', 'asc', function (fonts_sorted) {
e.sender.webContents.send('font-list', fonts_sorted);
});
});
}
exports.system = system;

View File

@@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link href="./css/themes.css" type="text/css" rel="stylesheet"> <link href="./css/themes.css" type="text/css" rel="stylesheet">
@@ -15,38 +16,58 @@ html{
overflow: hidden; overflow: hidden;
font-family: sans-serif; font-family: sans-serif;
} }
body { body {
background-color: rgba(0, 0, 0, 0.1); background-color: rgba(0, 0, 0, 0.1);
font-size: 11px; font-size: 11px;
} }
#timeline_nano { #timeline_nano {
overflow-y: scroll; overflow-y: scroll;
overflow-x: hidden; overflow-x: hidden;
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
max-height: 100px; max-height: 100px;
} }
.user{font-size:12px;}
.user {
font-size: 12px;
}
select { select {
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
} }
button { button {
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
} }
textarea { textarea {
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
} }
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 5px; width: 5px;
height: 10px; height: 10px;
background: rgba(0, 0, 0, 0.05); background: rgba(0, 0, 0, 0.05);
} }
::-webkit-scrollbar-track { ::-webkit-scrollbar-track {
-webkit-border-radius: 5px; -webkit-border-radius: 5px;
border-radius: 5px; border-radius: 5px;
} }
.area-actions{display:none !important;}
.area-date_via{display:none !important;} .area-actions {
.area-side{display:none !important;} display: none !important;
}
.area-date_via {
display: none !important;
}
.area-side {
display: none !important;
}
/* Handle */ /* Handle */
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
-webkit-border-radius: 5px; -webkit-border-radius: 5px;
@@ -54,22 +75,29 @@ textarea {
background: rgba(0, 0, 0, 0.8); background: rgba(0, 0, 0, 0.8);
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5); -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);
} }
.blacktheme body { .blacktheme body {
color: white; color: white;
background-color: #212121; background-color: #212121;
} }
.blacktheme button { .blacktheme button {
background-color: black; background-color: black;
color: white; color: white;
} }
.blacktheme textarea, .blacktheme select{
.blacktheme textarea,
.blacktheme select {
color: white; color: white;
} }
.blacktheme select,.blacktheme option{
.blacktheme select,
.blacktheme option {
background-color: black; background-color: black;
} }
</style> </style>
</head> </head>
<body> <body>
<script> <script>
//jQuery読む //jQuery読む

3403
app/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,23 +1,33 @@
{ {
"name": "thedesk", "name": "thedesk",
"version": "18.1.0", "version": "18.6.1",
"description": "TheDesk is a Mastodon client for PC.", "description": "TheDesk is a Mastodon client for PC.",
"repository": "https://github.com/cutls/TheDesk",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1", "test": "echo \"Error: no test specified\" && exit 1",
"construct": "cd view/make && node make",
"dev": "electron ./ --dev",
"dist": "build --linux snap", "dist": "build --linux snap",
"build:js": "node build.js",
"build": "electron-builder",
"build:all": "electron-builder --win --linux", "build:all": "electron-builder --win --linux",
"build:win": "electron-builder --win" "build:win": "electron-builder --win"
}, },
"keywords": [], "keywords": [
"mastodon",
"client",
"electron",
"thedesk"
],
"bugs": { "bugs": {
"url": "https://github.com/cutls/TheDesk/issues", "url": "https://github.com/cutls/TheDesk/issues",
"email": "mstdn@thedesk.top" "email": "web-pro@cutls.com"
}, },
"homepage": "https://thedesk.top", "homepage": "https://thedesk.top",
"author": { "author": {
"name": "Cutls", "name": "Cutls",
"url": "https://kirishima.clooud/@Cutls", "url": "https://cutls.com/@Cutls",
"email": "web-pro@cutls.com" "email": "web-pro@cutls.com"
}, },
"contributor": [ "contributor": [
@@ -33,27 +43,35 @@
}, },
{ {
"name": "kPherox", "name": "kPherox",
"url": "https://www.kr-kp.com/", "url": "https://pawoo.net/@kPherox",
"email": "admin@mail.kr-kp.com" "email": "admin@mail.kr-kp.com"
} }
], ],
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"electron-dl": "^1.11.0", "electron-dl": "^1.14.0",
"font-manager": "^0.3.0", "jimp": "^0.6.4",
"jimp": "^0.2.28",
"json5": "^2.1.0", "json5": "^2.1.0",
"node-notifier": "^5.2.1", "node-notifier": "^5.4.0",
"sumchecker": "^2.0.2", "sumchecker": "^3.0.0",
"vue": "^2.6.9" "vue": "^2.6.10"
}, },
"optionalDependencies": { "optionalDependencies": {
"nowplaying-node": "^0.1.3", "nowplaying-node": "git+https://github.com/cutls/nowplaying-node",
"itunes-nowplaying-mac": "git+https://github.com/rinsuki/itunes-nowplaying-mac#pull/1/head" "itunes-nowplaying-mac": "git+https://github.com/rinsuki/itunes-nowplaying-mac#pull/4/head",
"font-manager": "^0.3.0"
},
"devDependencies": {
"electron": "^5.0.1",
"electron-builder": "^20.43.0",
"readline-sync": "1.4.9"
}, },
"build": { "build": {
"productName": "TheDesk", "productName": "TheDesk",
"appId": "top.thedesk", "appId": "top.thedesk",
"asarUnpack": [
"node_modules/itunes-nowplaying-mac"
],
"directories": { "directories": {
"output": "../build" "output": "../build"
}, },
@@ -83,22 +101,20 @@
"linux": { "linux": {
"icon": "build/icons", "icon": "build/icons",
"target": [ "target": [
"zip",
"snap" "snap"
], ],
"category": "Network" "category": "Network"
}, },
"mac": { "mac": {
"target": "dmg" "target": [
"dmg",
"zip"
]
}, },
"electronDownload": { "electronDownload": {
"version": "4.0.6" "version": "5.0.1"
}, },
"electronVersion": "4.0.6" "electronVersion": "5.0.1"
},
"devDependencies": {
"electron": "^4.0.6",
"electron-packager": "^13.0.1",
"electron-prebuilt": "^1.4.13",
"electron-rebuild": "^1.8.4"
} }
} }

BIN
app/source/notif.wav Normal file

Binary file not shown.

BIN
app/source/notif2.wav Normal file

Binary file not shown.

BIN
app/source/notif3.wav Normal file

Binary file not shown.

View File

@@ -1,5 +1,6 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<title>Account Manager - TheDesk</title> <title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport"> <meta content="width=device-width,initial-scale=1.0" name="viewport">
@@ -10,14 +11,57 @@
<link href='../../css/tl.css' rel='stylesheet' type='text/css'> <link href='../../css/tl.css' rel='stylesheet' type='text/css'>
<link href='../../css/userdata.css' rel='stylesheet' type='text/css'> <link href='../../css/userdata.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
<style>.acct{display:flex; justify-content:space-around;} <style>
.card{width:400px; background-color: #9e9e9e; margin:10px; } .acct {
body,html{overflow-y: scroll;} display: flex;
#acct-list{display:flex; flex-wrap:wrap; color:white; align-items: flex-start} justify-content: space-around;
.lts{font-size:150%} }
.colorsel{ display:flex; }
.card .colorsel div:not(.exc){width:20px;height:20px;} .card {
.card .colorsel div.exc{width:40px;height:20px;} width: 400px;
background-color: #9e9e9e;
margin: 10px;
}
body,
html {
overflow-y: scroll;
}
#acct-list {
display: flex;
flex-wrap: wrap;
color: white;
align-items: flex-start
}
.lts {
font-size: 150%
}
.colorsel {
display: flex;
}
.card .colorsel div:not(.exc) {
width: 20px;
height: 20px;
}
.card .colorsel div.exc {
width: 40px;
height: 20px;
}
.first {
display: flex;
justify-content: center;
align-items: center
}
.first .hide-first {
display: none;
}
</style> </style>
<meta charset="utf-8"> <meta charset="utf-8">
<!-- <!--
@@ -28,6 +72,7 @@ body,html{overflow-y: scroll;}
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script> <script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
--> -->
</head> </head>
<body id="mainView"> <body id="mainView">
<script type="text/javascript" src="../../js/common/jquery.js"></script> <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/platform/first.js"></script>
@@ -39,28 +84,38 @@ body,html{overflow-y: scroll;}
<script type="text/javascript" src="../../js/ui/tips.js"></script> <script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/common/time.js"></script> <script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/modal.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> <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> <h5>List of accounts</h5>
<div id="acct-list"></div> <div id="acct-list"></div>
<div class="divider"></div> <div class="divider"></div>
</div>
<div>
<h5>Add an account</h5><br> <h5>Add an account</h5><br>
<div id="add"> <div id="add">
<div class="row"> <div class="row">
<div class="col s6"> <div class="col s8">
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp"> <input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp">
<div id="ins-suggest"></div> <div id="ins-suggest"></div>
Check if TheDesk is not working on Windows, you want to login Pleroma servers, you cannot login when it checked.<br> Uncheck it to skip pasiting code.(login to Mastodon on Windows or macOS) (Recommended: pcheck)<br>
<label>
<input type="checkbox" class="filled-in" id="linux" /> <input type="checkbox" class="filled-in" id="linux" />
<label for="linux">Code setup</label><br> <span>Code setup</span>
</label>
<br>
<label>
<input type="checkbox" class="filled-in" id="misskey" /> <input type="checkbox" class="filled-in" id="misskey" />
<label for="misskey">Login as Misskey</label><br> <span>Login as Misskey</span>
</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br> <button class="btn waves-effect" onclick="instance()">Login</button><br>
</div> </div>
<div class="col s6"> <div class="col s4">
<span style="font-family:Open Sans;">Supports</span> <span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div> <div id="support" class="collection transparent"></div>
</div> </div>
</div></div> </div>
</div>
<div id="auth" style="display:none"> <div id="auth" style="display:none">
Paste the code and close browser.<br> Paste the code and close browser.<br>
<input type="text" id="code" placeholder="Code"> <input type="text" id="code" placeholder="Code">
@@ -73,6 +128,8 @@ body,html{overflow-y: scroll;}
<input type="text" id="misskey-key" placeholder="Code"> <input type="text" id="misskey-key" placeholder="Code">
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br> <button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br>
</div> </div>
</div>
<div class="hide-first">
<h5>Main an account</h5> <h5>Main an account</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">Select an account</span> <div class="input-field" style="width:300px"><span data-trans="your_acct">Select an account</span>
<br> <br>
@@ -91,6 +148,7 @@ Toots:<span id="ins-toot"></span><br>
Users:<span id="ins-user"></span>Users<br> Users:<span id="ins-user"></span>Users<br>
Connection:<span id="ins-per"></span>%<br> Connection:<span id="ins-per"></span>%<br>
Mastodon version:<span id="ins-ver"></span>@<span id="ins-upd"></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/ui/theme.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/common/sha256.js"></script> <script type="text/javascript" src="../../js/common/sha256.js"></script>

View File

@@ -1,16 +1,18 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<title>TheDesk</title> <title>TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport"> <meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="../../css/materialize.css" type="text/css" rel="stylesheet"> <link href="../../css/materialize.css" type="text/css" rel="stylesheet">
<link href='../../css/font-awesome.css' rel='stylesheet' type='text/css'> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"
integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
<link href="../../css/themes.css" type="text/css" rel="stylesheet"> <link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link href='../../css/tl.css' rel='stylesheet' type='text/css'> <link href="../../css/tl.css" rel="stylesheet" type="text/css">
<link href='../../css/userdata.css' rel='stylesheet' type='text/css'> <link href="../../css/userdata.css" rel="stylesheet" type="text/css">
<link href='../../css/post.css' rel='stylesheet' type='text/css'> <link href="../../css/post.css" rel="stylesheet" type="text/css">
<link href="../../css/master.css" type="text/css" rel="stylesheet"> <link href="../../css/master.css" type="text/css" rel="stylesheet">
<link href='../../css/sort.css' rel='stylesheet' type='text/css'> <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"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet">
<meta charset="utf-8"> <meta charset="utf-8">
<!-- <!--
@@ -21,27 +23,29 @@
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script> <script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
--> -->
</head> </head>
<body> <body>
<script type="text/javascript" src="../../js/common/jquery.js"></script> <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/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script> <script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.en.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/time.js"></script>
<script type="text/javascript" src="../../js/common/blurhash.js"></script>
<script type="text/javascript" src="../../js/common/version.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/keyshortcut.js"></script>
<script type="text/javascript" src="../../js/common/modal.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 type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
<script> <script>
var ver="Usamin (18.1.1)"; var ver = "Usamin (18.6.1)";
//betaを入れるとバージョンチェックしない //betaを入れるとバージョンチェックしない
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html) //GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
//var ver="beta"; //var ver="beta";
//WinstoreではバージョンCK・言語・Misskeyトークンの機能が排除 //WinstoreではバージョンCK・言語・Misskeyトークンの機能が排除
var acct_id = 0; var acct_id = 0;
var tlid = 0; var tlid = 0;
verck(ver);
</script> </script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea> <textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<canvas id="canvas" style="top:-100px; position:fixed;width:32px;height:32px" width="32" height="32"></canvas>
<div id="tl"> <div id="tl">
<!--TL--> <!--TL-->
<!--ドラッグハンドラ--> <!--ドラッグハンドラ-->
@@ -53,57 +57,85 @@ var tlid=0;
</div> </div>
</div> </div>
<div id="post-box" class="z-depth-5"> <div id="post-box" class="z-depth-5">
<div id="post-bar" class="drag-bar">Post new</div> <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 id="left-side">
<div class="row" style="margin-bottom:0;"> <div class="row" style="margin-bottom:0;">
</span> </span>
<div class="" style="float:left;"> <div class="" style="float:left;">
<a onclick="profShow()" style="vertical-align:-2.5rem;" class="pointer mize"> <a onclick="profShow()" style="vertical-align:-2.5rem;" class="pointer mize">
<img src="../../img/missing.svg" id="acct-sel-prof" title="Show profile of the selecting account(Ctrl+Shift+P)" data-trans-title="post_box_prof" width="24px"> <img src="../../img/missing.svg" id="acct-sel-prof" title="Show profile of the selecting account(Ctrl+Shift+P)"
data-trans-title="post_box_prof" width="24px">
</a> </a>
</div> </div>
<div class="input-field mize" style="float:left; width:calc(100% - 24px)"> <div class="input-field mize" style="float:left; width:calc(100% - 24px)">
<select id="post-acct-sel" class="acct-sel" onchange="mdCheck()"></select> <select id="post-acct-sel" class="acct-sel" onchange="mdCheck()"></select>
</div> </div>
<span class="cancel"> <span class="cancel">
<i class="material-icons waves-effect" onclick="hide()" title="Close this box(X)" data-trans-title="post_box_close">cancel</i> <i class="material-icons waves-effect" onclick="hide()" title="Close this box(X)"
data-trans-title="post_box_close">cancel</i>
</span> </span>
<!--Markdown--> <!--Markdown-->
<div class="row" style="margin-bottom:0"> <div class="row" style="margin-bottom:0">
<div class="markdown mize hide"> <div class="markdown mize hide">
<div class="col s12"> <div class="col s12">
<i class="material-icons pointer setting waves-effect" onclick="tagsel('b')" title="太字(Ctrl+B)テキストボックス内を選択してから押すと囲みます。">format_bold</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('b')"
<i class="material-icons pointer setting waves-effect" onclick="tagsel('i')" title="字(Ctrl+I)テキストボックス内を選択してから押すと囲みます。">format_italic</i> title="字(Ctrl+B)テキストボックス内を選択してから押すと囲みます。">format_bold</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('u')" title="下線(Ctrl+U)テキストボックス内を選択してから押すと囲みます。">format_underlined</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('i')"
<i class="material-icons pointer setting waves-effect" onclick="tagsel('s')" title="取り消し(Ctrl+S)テキストボックス内を選択してから押すと囲みます。">strikethrough_s</i> title="斜字(Ctrl+I)テキストボックス内を選択してから押すと囲みます。">format_italic</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('>','no','yes')" title="引用">format_quote</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('u')"
<i class="material-icons pointer setting waves-effect" onclick="markdown('#','no','yes')" title="見出し">short_text</i> title="下線(Ctrl+U)テキストボックス内を選択してから押すと囲みます。">format_underlined</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('`','yes','no')" title="コード挿入 テキストボックス内を選択してから押すと囲みます。">code</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('s')"
<i class="material-icons pointer setting waves-effect" onclick="markdown('- ','yes','yes')" title="箇条書きリスト">format_list_bulleted</i> title="取り消し(Ctrl+S)テキストボックス内を選択してから押すと囲みます。">strikethrough_s</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('1. ','yes','yes')" title="番号付きリスト">format_list_numbered</i> <i class="material-icons pointer setting waves-effect" onclick="markdown('>','no','yes')"
<i class="pointer setting fa fa-subscript waves-effect" onclick="markdown('__','yes','no','before')" title="下付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i> title="引用">format_quote</i>
<i class="pointer setting fa fa-superscript waves-effect" onclick="markdown('_','yes','no','before')" title="上付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i> <i class="material-icons pointer setting waves-effect" onclick="markdown('#','no','yes')"
<i class="material-icons pointer setting waves-effect" onclick="tagsel('spin')" title="回転 テキストボックス内を選択してから押すと囲みます。">autorenew</i> title="見出し">short_text</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('pulse')" title="点滅 テキストボックス内を選択してから押すと囲みます。">flare</i> <i class="material-icons pointer setting waves-effect" onclick="markdown('`','yes','no')"
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=vertical')" title="上下反転 テキストボックス内を選択してから押すと囲みます。">swap_vert</i> title="コード挿入 テキストボックス内を選択してから押すと囲みます。">code</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=horizontal')" title="左右反転 テキストボックス内を選択してから押すと囲みます。">swap_horiz</i> <i class="material-icons pointer setting waves-effect" onclick="markdown('- ','yes','yes')"
title="箇条書きリスト">format_list_bulleted</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('1. ','yes','yes')"
title="番号付きリスト">format_list_numbered</i>
<i class="pointer setting fa fa-subscript waves-effect"
onclick="markdown('__','yes','no','before')" title="下付き文字 テキストボックス内を選択してから押すと囲みます。"
style="font-size:1.5rem"></i>
<i class="pointer setting fa fa-superscript waves-effect"
onclick="markdown('_','yes','no','before')" title="上付き文字 テキストボックス内を選択してから押すと囲みます。"
style="font-size:1.5rem"></i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('spin')"
title="回転 テキストボックス内を選択してから押すと囲みます。">autorenew</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('pulse')"
title="点滅 テキストボックス内を選択してから押すと囲みます。">flare</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=vertical')"
title="上下反転 テキストボックス内を選択してから押すと囲みます。">swap_vert</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=horizontal')"
title="左右反転 テキストボックス内を選択してから押すと囲みます。">swap_horiz</i>
<span class="sml gray pointer waves-effect"> <span class="sml gray pointer waves-effect">
<a onclick="mdToggle()">Markdownエディタを隠す</a> <a onclick="mdToggle()">Markdownエディタを隠す</a>
</span> </span>
<br> <br>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('size')" title="文字サイズ変更 テキストボックス内を選択してから押すと囲みます。">format_size</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('size')"
title="文字サイズ変更 テキストボックス内を選択してから押すと囲みます。">format_size</i>
<input id="size" style="width: calc(50% - 20px); margin: 0; height: 24px;" value="12">px <input id="size" style="width: calc(50% - 20px); margin: 0; height: 24px;" value="12">px
<i class="material-icons pointer setting waves-effect" onclick="tagsel('colorhex')" title="文字色変更 テキストボックス内を選択してから押すと囲みます。">color_lens</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('colorhex')"
title="文字色変更 テキストボックス内を選択してから押すと囲みます。">color_lens</i>
<input id="colorhex" style="width: calc(50% - 50px); margin: 0; height: 24px;" type="color"> <input id="colorhex" style="width: calc(50% - 50px); margin: 0; height: 24px;" type="color">
<br> <br>
<i class="material-icons pointer setting waves-effect" onclick="markdownLink()" title="リンク挿入">link</i> <i class="material-icons pointer setting waves-effect" onclick="markdownLink()"
<input id="linkt" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクテキスト">&nbsp; title="リンク挿入">link</i>
<input id="link2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクアドレス"> <input id="linkt" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="リンクテキスト">&nbsp;
<input id="link2" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="リンクアドレス">
<br> <br>
<i class="material-icons pointer setting waves-effect" onclick="markdownImage()" title="インライン画像挿入">image</i> <i class="material-icons pointer setting waves-effect" onclick="markdownImage()"
<input id="image" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="代替テキスト">&nbsp; title="インライン画像挿入">image</i>
<input id="image2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="画像アドレス"> <input id="image" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="代替テキスト">&nbsp;
<input id="image2" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="画像アドレス">
</div> </div>
</div> </div>
<div class="input-field col s12" id="preview-field" style="margin-top: 0;"> <div class="input-field col s12" id="preview-field" style="margin-top: 0;">
@@ -115,7 +147,8 @@ var tlid=0;
</div> </div>
<div class="input-field col s12" id="toot-field" style="margin-top: 10px;"> <div class="input-field col s12" id="toot-field" style="margin-top: 10px;">
<textarea id="textarea" class="materialize-textarea unmize" style="margin-bottom:0;" data-length="500"></textarea> <textarea id="textarea" class="materialize-textarea unmize" style="margin-bottom:0;"
data-length="500"></textarea>
<label for="textarea" data-trans="toot">Toot</label> <label for="textarea" data-trans="toot">Toot</label>
<br> <br>
<span class="sml gray pointer markdown mize" id="preview-btn"> <span class="sml gray pointer markdown mize" id="preview-btn">
@@ -126,13 +159,19 @@ var tlid=0;
</span> </span>
</div> </div>
<div class="col s12 mize" style="margin-top: 0; display:flex; justify-content: space-between"> <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" id="nsfw" title="Mark media as sensitive"
<i class="waves-effect gray material-icons purple-text dropdown-button" data-activates='dropdown1' id="vis-icon">public</i> onclick="nsfw()">visibility_off</i>
<i class="waves-effect gray material-icons purple-text dropdown-trigger"
data-target="dropdown1" id="vis-icon">public</i>
<a class="waves-effect gray" id="cw" onclick="cw()" title="Hide text behind warning">CW</a> <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> <span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray"
<i class="waves-effect gray material-icons" onclick="emojiToggle()" id="emojibtn" title="Emojis">tag_faces</i> onclick="fileselect()" title="Attach..">photo_library</i></span></span>
<i class="waves-effect gray material-icons dropdown-button" data-activates='dropdown2'>more_vert</i> <i class="waves-effect gray material-icons" onclick="emojiToggle()" id="emojibtn"
<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> title="Emojis">tag_faces</i>
<i class="waves-effect gray material-icons dropdown-trigger"
data-target="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>
<div class="col s12 mize" style="margin-bottom:5px; padding:0;"> <div class="col s12 mize" style="margin-bottom:5px; padding:0;">
<div id="taglist"></div> <div id="taglist"></div>
@@ -145,13 +184,15 @@ var tlid=0;
<br> <br>
<input type="text" id="cw-text" placeholder="Warning text" class="mize" style="margin:0"> <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> <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"> <input type="datetime-local" id="sch-date" placeholder="Scheduled toot" class="datepicker"
style="margin:0">
</div> </div>
</div> </div>
</div> </div>
<!-- 公開範囲 Dropdown Structure --> <!-- 公開範囲 Dropdown Structure -->
<ul id='dropdown1' class='dropdown-content'> <ul id="dropdown1" class="dropdown-content">
<li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">Adjust status privacy</li> <li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">Adjust status privacy
</li>
<li> <li>
<a onclick="vis('public')">(Public)</a> <a onclick="vis('public')">(Public)</a>
</li> </li>
@@ -172,10 +213,7 @@ var tlid=0;
</li> </li>
</ul> </ul>
<!-- その他 Dropdown Structure --> <!-- その他 Dropdown Structure -->
<ul id='dropdown2' class='dropdown-content'> <ul id="dropdown2" class="dropdown-content">
<li>
<a onclick="adobe()">Adobe Photo Editor</a>
</li>
<li> <li>
<a onclick="nowplaying('spotify');">NowPlaying(Spotify)</a> <a onclick="nowplaying('spotify');">NowPlaying(Spotify)</a>
</li> </li>
@@ -195,8 +233,11 @@ var tlid=0;
<!--END hidden area--> <!--END hidden area-->
</div> </div>
<div id="toot-btn-field"> <div id="toot-btn-field">
<button class="btn waves-effect indigo unmize toot-btn-group" onclick="post()" id="toot-post-btn">Toot</button> <button class="btn waves-effect indigo unmize toot-btn-group" onclick="post()"
<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> id="toot-post-btn">Toot</button>
<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> </div>
<div id="right-side"> <div id="right-side">
@@ -205,18 +246,19 @@ var tlid=0;
<div id="emoji" class="hide"> <div id="emoji" class="hide">
<span class="gray sml"> <span class="gray sml">
<a onclick="emojiGet('true')" class="pointer">Refresh emojis list</a> <a onclick="emojiGet('true')" class="pointer">Refresh emojis list</a>
<i class="material-icons waves-effect" onclick="emojiToggle()" title="Close this box" data-trans-title="post_box_close">cancel</i>
<br> <br>
</span> </span>
<div id="emoji-list" class="" style=""> <div id="emoji-list" class="" style="">
</div> </div>
<div class="emoji-control center"> <div class="emoji-control center">
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('before')" id="emoji-before"> <button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('before')"
id="emoji-before">
<i class="material-icons">navigate_before</i> <i class="material-icons">navigate_before</i>
</button> </button>
<span id="emoji-count"></span>/ <span id="emoji-count"></span>/
<span id="emoji-sum"></span> <span id="emoji-sum"></span>
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('next')" id="emoji-next"> <button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('next')"
id="emoji-next">
<i class="material-icons">navigate_next</i> <i class="material-icons">navigate_next</i>
</button> </button>
</div> </div>
@@ -251,7 +293,7 @@ var tlid=0;
<i class="material-icons">flag</i> <i class="material-icons">flag</i>
</a> </a>
<a onclick="faicon()" class="pointer waves-effect" title="faicon" id="faicon-btn"> <a onclick="faicon()" class="pointer waves-effect" title="faicon" id="faicon-btn">
<i class="fa fa-fort-awesome"></i> <i class="fab fa-fort-awesome"></i>
</a> </a>
</div> </div>
</div> </div>
@@ -259,24 +301,24 @@ var tlid=0;
<div id="poll" class="hide"> <div id="poll" class="hide">
<select id="poll-sel" onchange="pollProviderCk()"> <select id="poll-sel" onchange="pollProviderCk()">
<option value="nothing">Polls: Disabled</option> <option value="nothing">Polls: Disabled</option>
<option value="votedon">votedon.</option>
<option value="mastodon-poll">Mastodon(2.8~)</option> <option value="mastodon-poll">Mastodon(2.8~)</option>
</select> </select>
<div id="votedon" class="poll-provider hide">
WIP
</div>
<div id="mastodon-poll" class="poll-provider hide"> <div id="mastodon-poll" class="poll-provider hide">
<input type="text" class="mastodon-choice" placeholder="Choice1"> <input type="text" class="mastodon-choice" placeholder="Choice1">
<input type="text" class="mastodon-choice" placeholder="Choice2"> <input type="text" class="mastodon-choice" placeholder="Choice2">
<input type="text" class="mastodon-choice" placeholder="Choice3"> <input type="text" class="mastodon-choice" placeholder="Choice3">
<input type="text" class="mastodon-choice" placeholder="Choice4"> <input type="text" class="mastodon-choice" placeholder="Choice4">
<label>
<input type="checkbox" class="filled-in" id="poll-multiple" value="1" /> <input type="checkbox" class="filled-in" id="poll-multiple" value="1" />
<label for="poll-multiple">Multiple select</label><br> <span>Multiple select</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="poll-until" value="1" /> <input type="checkbox" class="filled-in" id="poll-until" value="1" />
<label for="poll-until">Hide 'votes' count until people vote it.</label><br> <span>Hide 'votes' count until people vote it.</span>
<input type="number" style="width:50px" id="days_poll" placeholder="d" value="0">days </label>
<input type="number" style="width:50px" id="hours_poll" placeholder="h" value="0">hours <input type="number" style="width:50px" id="days_poll" placeholder="d" value="0">day(s)
<input type="number" style="width:50px" id="mins_poll" placeholder="m" value="0">minutes <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="6">minute(s)
</div> </div>
</div> </div>
</div> </div>
@@ -284,7 +326,28 @@ var tlid=0;
<!-- Modal Structure Tootdata--> <!-- Modal Structure Tootdata-->
<div id="tootmodal" class="modal modal-fixed-footer"> <div id="tootmodal" class="modal modal-fixed-footer">
<div class="modal-content"> <div class="modal-content">
<ul class="collapsible" data-collapsible="accordion" id="det-col"> <ul class="collapsible"id="det-col">
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">people_outline</i>Local TL after this toot)
</div>
<div class="collapsible-body toot-reset" id="ltl-after">
</div>
</li>
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">person_outline</i>User TL before this toot
</div>
<div class="collapsible-body toot-reset" id="user-after">
</div>
</li>
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">language</i>Federated TL after this toot
</div>
<div class="collapsible-body toot-reset" id="ftl-after">
</div>
</li>
<li> <li>
<div class="collapsible-header"> <div class="collapsible-header">
<i class="material-icons">arrow_upward</i>Context before this toot <i class="material-icons">arrow_upward</i>Context before this toot
@@ -330,26 +393,29 @@ var tlid=0;
</li> </li>
<li class="dm-hide"> <li class="dm-hide">
<div class="collapsible-header"> <div class="collapsible-header">
<i class="text-darken-3 fa fa-retweet"></i>People who boosted it <i class="text-darken-3 false fas fa-retweet"></i>People who boosted it
</div> </div>
<div class="collapsible-body toot-reset" id="toot-rt"> <div class="collapsible-body toot-reset" id="toot-rt">
</div> </div>
</li> </li>
</ul> </ul>
<div class="dm-hide"> <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> Use other account(<i class="fas fa-retweet"></i>/<i class="fas fa-star"></i>:unfav and unBT are disabled.)<br>
<div class="row"> <div class="row">
<div class="col s6"> <div class="col s6">
<select id="status-acct-sel" class="acct-sel"></select> <select id="status-acct-sel" class="acct-sel"></select>
</div> </div>
<div class="col s2"> <div class="col s2">
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share"></i>/button> <button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i
class="fas fa-share"></i></button>
</div> </div>
<div class="col s2"> <div class="col s2">
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i class="fa fa-retweet"></i></button> <button class="dropdown-button btn waves-effect indigo" style="width:100%;"
onclick="staEx('rt')"><i class="fas fa-retweet"></i></button>
</div> </div>
<div class="col s2"> <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> <button class="dropdown-button btn waves-effect orange" style="width:100%;"
onclick="staEx('fav')"><i class="fas fa-star"></i></button>
</div> </div>
</div> </div>
<div id="toot-tools"> <div id="toot-tools">
@@ -360,7 +426,6 @@ var tlid=0;
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<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="brws()">Open in browser</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="shot()">Take a screenshot</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="cbCopy()">Copy URL of this toot</a> <a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="cbCopy()">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="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> <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
@@ -372,7 +437,7 @@ var tlid=0;
<div id="his-data-show"> <div id="his-data-show">
<div class="his-float" id="his-float-data"> <div class="his-float" id="his-float-data">
<div id="his-basic-prof"> <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> <span id="his-name">Loading...</span><span class="gray" id="his-bot"></span>
<br>@ <br>@
<span id="his-acct"></span><br> <span id="his-acct"></span><br>
@@ -390,12 +455,16 @@ var tlid=0;
<span class="cbadge" style="max-width:150px; width:150px; ">Since: <span class="cbadge" style="max-width:150px; width:150px; ">Since:
<span id="his-since"></span> <span id="his-since"></span>
</span> </span>
<div id="his-proof-prof"></div>
</div> </div>
<div id="his-des"></div><br> <div id="his-des" data-acct=""></div><br>
<div id="his-plus-action"> <div id="his-plus-action">
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-emp-btn" onclick="empUser()">Emphasize this user</a> <a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-emp-btn"
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data" id="his-end-btn" onclick="pinUser()">Feature on profile</a><br> onclick="empUser()">Emphasize this user</a>
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-openin" onclick="profbrws()">Open in browser</a><br> <a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data"
id="his-end-btn" onclick="pinUser()">Feature on profile</a><br>
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-openin"
onclick="profbrws()">Open in browser</a><br>
</div><br> </div><br>
<div id="his-matching-list"> <div id="his-matching-list">
Get people resembling this user.<br> Get people resembling this user.<br>
@@ -406,66 +475,77 @@ var tlid=0;
</div> </div>
<div class="his-float" id="his-float-timeline"> <div class="his-float" id="his-float-timeline">
<div id="my-data-nav"> <div id="my-data-nav">
<ul class="custom-tabs transparent"> <ul class="tabs transparent">
<li class="custom-tab col my-data-width active-back column-first"> <li class="tab col my-data-width active-back column-first">
<a go="#his-tl" title="Timeline"><i class="material-icons">timeline</i></a> <a go="#his-tl" title="Timeline"><i class="material-icons">timeline</i></a>
</li> </li>
<li class="custom-tab col my-data-width"> <li class="tab col my-data-width">
<a go="#his-follow-list" title="Follow"><i class="material-icons">people</i></a> <a go="#his-follow-list" title="Follow"><i class="material-icons">people</i></a>
</li> </li>
<li class="custom-tab col my-data-width"> <li class="tab col my-data-width">
<a go="#his-follower-list" title="Follower"><i class="material-icons">people</i></a> <a go="#his-follower-list" title="Follower"><i
class="material-icons">people</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-his-data"> <li class="tab col my-data-width only-his-data">
<a go="#his-action" title="Cross-account"><i class="material-icons">account_box</i></a> <a go="#his-action" title="Cross-account"><i
class="material-icons">account_box</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-his-data"> <li class="tab col my-data-width only-his-data">
<a go="#his-list" title="List"><i class="material-icons">list</i></a> <a go="#his-list" title="List"><i class="material-icons">list</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-fav-list" title="Favourite"><i class="material-icons">star</i></a> <a go="#his-fav-list" title="Favourite"><i class="material-icons">star</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-blocking-list" title="Blocks"><i class="material-icons">block</i></a> <a go="#his-blocking-list" title="Blocks"><i class="material-icons">block</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-blocking-list" title="Blocks"><i class="material-icons">voice_over_off</i></a> <a go="#his-blocking-list" title="Blocks"><i
class="material-icons">voice_over_off</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-domain-list" title="Domain block"><i class="material-icons">language</i><i class="material-icons">block</i></a> <a go="#his-domain-list" title="Domain block"><i
class="material-icons">language</i><i class="material-icons">block</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-prof-list" title="Edit profile"><i class="material-icons">create</i></a> <a go="#his-prof-list" title="Edit profile"><i class="material-icons">create</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-request-list" title="Follow requests"><i class="material-icons">how_to_reg</i></a> <a go="#his-request-list" title="Follow requests"><i
class="material-icons">how_to_reg</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-follow-recom-list" title="Suggest"><i class="material-icons">recent_actors</i></a> <a go="#his-follow-recom-list" title="Suggest"><i
class="material-icons">recent_actors</i></a>
</li> </li>
</ul> </ul>
</div> </div>
<div id="his-tl" class="tab-content"> <div id="his-tl" class="tab-content">
<div id="his-tl-contents" class="cont-series"> <div id="his-tl-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="utl('--now','more')">More</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="utl('--now','more')">More</button>
</div> </div>
<div id="his-follow-list" class="tab-content"> <div id="his-follow-list" class="tab-content">
<div id="his-follow-list-contents" class="cont-series"> <div id="his-follow-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="flw('--now','more')">More</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="flw('--now','more')">More</button>
</div> </div>
<div id="his-follower-list" class="tab-content"> <div id="his-follower-list" class="tab-content">
<div id="his-follower-list-contents" class="cont-series"> <div id="his-follower-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="fer('--now','more')">More</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="fer('--now','more')">More</button>
</div> </div>
<div id="his-action" class="tab-content"> <div id="his-action" class="tab-content">
Use other account to Follow((Unable to unfollow))<br> Use other account to Follow((Unable to unfollow))<br>
<div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div> <div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div>
<a href="#!" class="waves-effect btn" onclick="follow('selector','true')">Follow</a><br> <a href="#!" class="waves-effect btn" onclick="follow('selector','true')">Follow</a><br>
or<br> or<br>
<a href="#!" class="waves-effect btn" onclick="udgEx('selector', 'selector')">Show profile</a><br> <a href="#!" class="waves-effect btn"
onclick="udgEx('selector', 'selector')">Show profile</a><br>
</div> </div>
<div id="his-list" class="tab-content"> <div id="his-list" class="tab-content">
<div id="his-lists-a">Follow to add this user to lists.</div> <div id="his-lists-a">Follow to add this user to lists.</div>
@@ -475,22 +555,26 @@ var tlid=0;
<div id="his-fav-list" class="tab-content"> <div id="his-fav-list" class="tab-content">
<div id="his-fav-list-contents" class="cont-series"> <div id="his-fav-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="showFav('more')">More</button> <button class="btn waves-effect" style="width:100%; padding:0;"
onclick="showFav('more')">More</button>
</div> </div>
<div id="his-blocking-list" class="tab-content"> <div id="his-blocking-list" class="tab-content">
<div id="his-blocking-list-contents" class="cont-series"> <div id="his-blocking-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showBlo('more')">More</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showBlo('more')">More</button>
</div> </div>
<div id="his-muting-list" class="tab-content"> <div id="his-muting-list" class="tab-content">
<div id="his-muting-list-contents" class="cont-series"> <div id="his-muting-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showMut('more')">More</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showMut('more')">More</button>
</div> </div>
<div id="his-domain-list" class="tab-content"> <div id="his-domain-list" class="tab-content">
<div id="his-domain-list-contents" class="cont-series"> <div id="his-domain-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showDom('more')">More</button>Add blocking domain <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showDom('more')">More</button>Add blocking domain
<br> <br>
<input type="text" placeholder="example.com" id="domainblock"> <input type="text" placeholder="example.com" id="domainblock">
<button class="btn waves-effect" onclick="addDomainblock()">Add</button> <button class="btn waves-effect" onclick="addDomainblock()">Add</button>
@@ -505,7 +589,8 @@ var tlid=0;
<textarea placeholder="Note" id="his-des-val" class="materialize-textarea"></textarea> <textarea placeholder="Note" id="his-des-val" class="materialize-textarea"></textarea>
<label for="his-des-val">Note</label> <label for="his-des-val">Note</label>
</div> </div>
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="profedit()">Save</button> <button class="btn waves-effect" style="width:100%; padding:0;"
onclick="profedit()">Save</button>
<br>Change avataor: <br>Change avataor:
<span id="prof-change"> <span id="prof-change">
<input type="file" onchange="imgChange(this,'avatar')"> <input type="file" onchange="imgChange(this,'avatar')">
@@ -518,20 +603,28 @@ var tlid=0;
<div id="his-request-list" class="tab-content"> <div id="his-request-list" class="tab-content">
<div id="his-request-list-contents" class="cont-series"> <div id="his-request-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showReq('more')">More</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showReq('more')">More</button>
</div> </div>
<div id="his-follow-recom-list" class="tab-content"> <div id="his-follow-recom-list" class="tab-content">
<div id="his-follow-recom-contents" class="cont-series"> <div id="his-follow-recom-contents" class="cont-series">
</div> </div>
</div> </div>
</div> </div>
<div class="his-float" id="his-float-blocked">
<div>You are blocked. Why?</div>
</div>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="modal-action waves-effect waves-green btn-flat" id="his-history-btn" onclick="historyShow()">Back</button> <button class="modal-action waves-effect waves-green btn-flat" id="his-history-btn"
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-follow-btn" onclick="follow()">Follow</a> onclick="historyShow()">Back</button>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-mute-btn" onclick="mute()">Mute</a> <a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-follow-btn"
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-block-btn" onclick="block()">Block</a> onclick="follow()">Follow</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-mute-btn"
onclick="mute()">Mute</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-block-btn"
onclick="block()">Block</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" onclick="hisclose()">Close</a> <a href="#!" class="modal-action waves-effect waves-green btn-flat" onclick="hisclose()">Close</a>
</div> </div>
</div> </div>
@@ -583,39 +676,49 @@ var tlid=0;
<a href="https://thedesk.top" target="_blank">HP</a><br> <a href="https://thedesk.top" target="_blank">HP</a><br>
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br> <a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
<br> <br>
<div id="release-Usamin_18-1-1" class="release-do" style="display:none; "> <div id="release-Usamin_18-6-1" class="release-do" style="display:none; ">
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br> <a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br> <a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
Entyでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。<br> Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。 困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
<h5>Release Note Usamin (18.1.1)</h5> <h5>Release Note Usamin (18.6.1)</h5>
・お知らせ機能改善<br> ・リプライができない不具合を修正<br>
・Integrated TLで一部挙動改善(Thanks to <a href="https://www.kr-kp.com/">kPherox</a>)<br> ・ワードフィルター/強調の適用がおかしい不具合<br>
--以下18.1.0--<br> ・テキストエリアのフォントが設定通りにならない不具合<br>
・iTunes NowPlaying(macOS)にアルバムアートワークを付ける(Thanks to <a href="https://www.kr-kp.com/">kPherox</a>)<br> <h5>Release Note Usamin (18.6.0)</h5>
・カラムを<b>縦に並べられる</b>ように(2つ目以降のカラム毎の設定の「左に重ねる」「右に出す」を押す)<br> ・アカウント選択のデザイン修正。クリック直後に閉じてしまうバグを修正。<br>
・画像を個別に削除する(画像をクリックして)<br> ・投票済みのアンケートについて修正。<br>
・何個もアルバムアートワークが投稿されるバグを修正<br> <b>セキュリティの大幅な強化。</b><br>
・Misskeyでログインしたまま何もできないバグを修正(権限回り) ・ご注意<img class="emoji" draggable="false" alt="⚠️" src="https://twemoji.maxcdn.com/2/72x72/26a0.png">: TweetDeck統合は設定で有効にしないと使えなくなりました。<br>
・Adobeフォトエディタの廃止
<br>
<h5>ThinkingDeskラベル</h5>
<img src="../../img/thinkingdesk.png" style="width:100px;" draggable="false"><br>
手作りマットラベル。貼ってはがせる。300円なのでポイントの余りでどうぞ。<br>
<a href="https://item.mercari.com/jp/m822743330" target="_blank">メルカリ</a>へ。
</div> </div>
<div id="release-en"> <div id="release-en" style="display:none">
<h5>Let's make it native!</h5> <h5>Let's make it native!</h5>
<a href="https://translate.thedesk.top">Crowdin translation project</a> <a href="https://translate.thedesk.top">Crowdin translation project</a>
</div> </div>
<br><br> <br><br>
<h3>Support TheDesk!</h3> <h3>Support TheDesk!</h3>
TheDesk has no ad, you need no charge to unlock premium features. We need your friendly support!<br> TheDesk has no ad, you need no charge to unlock premium features. We need your friendly support!<br>
<a class="btn-share btn waves-effect waves-light purple lighten-2" href="https://enty.jp/Cutls" target="_blank"> <a class="btn-share btn waves-effect waves-light red lighten-2"
Support on Enty href="https://www.pixiv.net/fanbox/creator/28105985" target="_blank">
Support on Pixiv FANBOX
</a> </a>
<a class="btn-share btn waves-effect waves-light red lighten-2" href="https://osushi.love/Cutls_P" target="_blank"> <a class="btn-share btn waves-effect waves-light red darken-2" href="https://www.patreon.com/cutls"
Osushi.love: give me sushi target="_blank">
Support on Patreon
</a> </a>
<a class="btn-share btn waves-effect waves-light blue" href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank"> <a class="btn-share btn waves-effect waves-light blue"
href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">
Amazon Wish List Amazon Wish List
</a> </a>
<br> <br>
Give me Amazon Gift Card:<a href="mailto:mstdn@thedesk.top" target="_blank">mstdn@thedesk.top</a><br> Give me Amazon Gift Card:<a href="mailto:web-pro@cutls.com"
target="_blank">web-pro@cutls.com</a><br>
Kyash<br> Kyash<br>
<img src="../../img/kyash.png" width="100"><br> <img src="../../img/kyash.png" width="100"><br>
</div> </div>
@@ -639,13 +742,20 @@ var tlid=0;
</span> </span>
<div id="menu-wrapper"> <div id="menu-wrapper">
<div id="left-menu"> <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 active" onclick="addColumnMenu()" id="addColumnMenu"><i
<div class="waves-effect" onclick="sortMenu()" id="sortMenu"><i class="material-icons">sort</i><span>Sort</span></div> class="material-icons">add</i><span>Add a column</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="sortMenu()" id="sortMenu"><i
<div class="waves-effect" onclick="listMenu()" id="listMenu"><i class="material-icons">view_headline</i><span>List</span></div> class="material-icons">sort</i><span>Sort</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="searchMenu()" id="searchMenu"><i
<div class="waves-effect" onclick="help()"><i class="material-icons">help_outline</i><span>Help</span></div> class="material-icons">search</i><span>Search</span></div>
<div class="waves-effect" onclick="location.href='index.html'"><i class="material-icons">refresh</i><span>Reload TL</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>
<div id="right-menu"> <div id="right-menu">
<!--カラム追加--> <!--カラム追加-->
@@ -660,24 +770,50 @@ var tlid=0;
<input type="hidden" value="local" id="type-sel"> <input type="hidden" value="local" id="type-sel">
Show this TL: Show this TL:
<div id="tltype"> <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 active" data-type="local">
<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><i class="material-icons">people_outline</i></div><span>Local</span>
<div class="type waves-effect" data-type="home"><div><i class="material-icons">home</i></div><span>Home</span></div> </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="local-media">
<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><i class="material-icons">people_outline</i><i
<div class="type waves-effect" data-type="dm"><div><i class="material-icons">mail_outline</i></div><span>Direct Message</span></div> class="material-icons sub-icon">perm_media</i>
<div class="type waves-effect" data-type="mix"><div><i class="material-icons">merge_type</i></div><span>Integrated(Local/Home)</span></div> </div><span>Local(Media)</span>
<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>
<div class="type waves-effect" data-type="notf"><div><i class="material-icons">notifications</i></div><span>Notifications</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> </div>
<div id="noauth" class="hide">Show this TL: <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"> <input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);"
placeholder="e.g:mstdn.jp">
</div> </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 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>
</div> </div>
<button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()" data-trans-i="add"> <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 <i class="material-icons left">add</i>Add
</button> </button>
<br> <br>
@@ -687,12 +823,13 @@ var tlid=0;
<div id="src-box" class="hide menu-content"> <div id="src-box" class="hide menu-content">
<div class="input-field"> <div class="input-field">
<select id="src-acct-sel" class="acct-sel" onchange="trend()"></select> <select id="src-acct-sel" class="acct-sel" onchange="trend()"></select>
</div><div class="input-field"> </div>
<i class="material-icons prefix">search</i> <div class="input-field">
<input id="src" type="text" class="validate" style="width:calc( 60% - 40px);"> <input id="src" type="text" class="validate" style="width:60%">
<label for="src" data-trans="src">Search</label> <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"> <button class="btn waves-effect indigo" style="width: 36%;padding: 0;padding-left: 15px;"
<i class="material-icons left">search</i>Search onclick="src()" data-trans-i="src">
<i class="material-icons left" style="margin:0">search</i>Search
</button> </button>
<br> <br>
<br> <br>
@@ -706,7 +843,7 @@ var tlid=0;
<div id="sort-box" class="hide menu-content"> <div id="sort-box" class="hide menu-content">
<ul id="sort"></ul> <ul id="sort"></ul>
<div> <div>
<button onclick="sort()" class="btn waves-effect nex" style="width:100%; max-width:300px;" data-trans-i="sort"> <button onclick="sort()" class="btn waves-effect nex" style="width:97.5%;" data-trans-i="sort">
<i class="material-icons left">sort</i>Sort <i class="material-icons left">sort</i>Sort
</button> </button>
</div> </div>
@@ -718,7 +855,8 @@ var tlid=0;
<label>Account(Scroll to show all)</label> <label>Account(Scroll to show all)</label>
</div> </div>
<div style="float:left; padding-top:8px; padding-bottom:28px;"> <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 class="btn waves-effect indigo" style="width:80px;" onclick="list()"
data-trans-i="lists">
List List
</button> </button>
</div> </div>
@@ -735,7 +873,8 @@ var tlid=0;
<label>Account(Scroll to show all)</label> <label>Account(Scroll to show all)</label>
</div> </div>
<div style="float:left; padding-top:8px; padding-bottom:28px;"> <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 class="btn waves-effect indigo" style="width:80px;" onclick="filter()"
data-trans-i="filters">
List List
</button> </button>
</div> </div>
@@ -743,26 +882,48 @@ var tlid=0;
<input type="hidden" id="filter-edit-id"> <input type="hidden" id="filter-edit-id">
<input type="text" style="width:150px" id="filter-add-word" placeholder="Filtering words"><br> <input type="text" style="width:150px" id="filter-add-word" placeholder="Filtering words"><br>
Filter contexts<br> Filter contexts<br>
<label>
<input type="checkbox" class="filled-in" id="home_filter" value="home" /> <input type="checkbox" class="filled-in" id="home_filter" value="home" />
<label for="home_filter">Home</label> <span>Home</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="local_filter" value="public" /> <input type="checkbox" class="filled-in" id="local_filter" value="public" />
<label for="local_filter">Local</label> <span>Local</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="notf_filter" value="notifications" /> <input type="checkbox" class="filled-in" id="notf_filter" value="notifications" />
<label for="notf_filter">Notifications</label> <span>Notifications</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="conv_filter" value="thread" /> <input type="checkbox" class="filled-in" id="conv_filter" value="thread" />
<label for="conv_filter">Conversations</label><br> <span>Conversations</span>
</label>
Options<br> Options<br>
<label>
<input type="checkbox" class="filled-in" id="wholeword_filter" value="1" /> <input type="checkbox" class="filled-in" id="wholeword_filter" value="1" />
<label for="wholeword_filter">Whole word</label><br> <span>Whole word</span>
</label>
<br>
<span class="sml">Nice for Latin language</span><br> <span class="sml">Nice for Latin language</span><br>
<label>
<input type="checkbox" class="filled-in" id="except_filter" value="1" /> <input type="checkbox" class="filled-in" id="except_filter" value="1" />
<label for="except_filter">Drop instead of hide</label><br> <span>Drop instead of hide</span>
</label>
<br>
<span class="sml">Filtered toots will disappear irreversibly, even if filter is later removed</span><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> Expire after<span class="sml">Unset or "0" means "Never"<b>This value may contain some error</b></span><br><br>
<input type="number" style="width:50px" id="days_filter" placeholder="d" value="0">days <input type="number" style="width:50px" id="days_filter" placeholder="d" value="0">day(s)
<input type="number" style="width:50px" id="hours_filter" placeholder="h" value="0">hours <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">minutes <input type="number" style="width:50px" id="mins_filter" placeholder="m" value="0">minute(s)<br>
<button class="btn waves-effect" style="width:120px;" onclick="makeNewFilter()" id="add-filter-btn">Add</button><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> <span class="sml">Integrated TL/Plus TL will hide both Home-filtering words and Local-filtering words.</span>
</div> </div>
</div> </div>
@@ -772,12 +933,18 @@ var tlid=0;
</a>&nbsp;|&nbsp; </a>&nbsp;|&nbsp;
<a onclick="bottomReverse()" class="nex waves-effect"> <a onclick="bottomReverse()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">swap_horiz</i>Toot button layout reverse <i class="material-icons" style="font-size: 1rem;">swap_horiz</i>Toot button layout reverse
</a>&nbsp;|&nbsp;
<a onclick="openRN()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">new_releases</i>Release Note
</a> </a>
</div> </div>
<div id="main"> <div id="main">
<!--TLのTL--> <!--TLのTL-->
<div id="timeline-container"> <div id="timeline-container">
<h3>Welcome to TheDesk</h3><br><a href="acct.html">Add an account</a> or click <i class="material-icons">apps</i> to add a column. <div id="something-wrong">
<img src="" style="width:150px;margin:5px;display:none;" draggable="false">
<div>Internal error: please clear all data(at setting page) <b>All data will be deleted.</b></div>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -785,8 +952,10 @@ var tlid=0;
<div id="bottom" class="reverse"> <div id="bottom" class="reverse">
<div class="leftside reverse"> <div class="leftside reverse">
<div id="dambox"> <div id="dambox">
<button id="posttgl" class="btn waves-effect indigo" style="width: 100%;height: 2.5rem;line-height: 0;margin: 0;"> <button id="posttgl" class="btn waves-effect indigo"
<i class="material-icons" style="position: relative; top: 5px; font-size: 1.5rem; text-align: center; margin-right: 10px;">edit</i>Toot 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> </button>
</div> </div>
<div class="leftside reverse" id="group"> <div class="leftside reverse" id="group">
@@ -798,13 +967,16 @@ var tlid=0;
<i class="material-icons nex" title="Preferences(Ctrl+Shift+S)">settings</i> <i class="material-icons nex" title="Preferences(Ctrl+Shift+S)">settings</i>
</a> </a>
<a onclick="nano()" class="nex waves-effect"> <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> <i class="material-icons" title="The smallest Mastodon,TheDesk Nano"
data-trans-title="nano_desp">remove_from_queue</i>
</a> </a>
<a onclick="menu()" class="nex waves-effect" id="list-tgl"> <a onclick="menu()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="List">apps</i> <i class="material-icons" title="List">apps</i>
</a> </a>
<span id="fukidashi"><- Add TL</span>
</div>
</div>
</div> </div>
</div></div>
<div> <div>
<div id="tips-menu"> <div id="tips-menu">
<div class="btnsgroup" style="height:34px"><span class="grouptitle">Tips:</span> <div class="btnsgroup" style="height:34px"><span class="grouptitle">Tips:</span>
@@ -821,7 +993,7 @@ var tlid=0;
<i class="material-icons nex" title="アイマストドントレンド" data-trans-title="trendtip">whatshot</i> <i class="material-icons nex" title="アイマストドントレンド" data-trans-title="trendtip">whatshot</i>
</a> </a>
<a onclick="tips('spotify')" class="nex waves-effect"> <a onclick="tips('spotify')" class="nex waves-effect">
<i class="fa fa-spotify nex" title="Spotify" data-trans-title="spotifytips"></i> <i class="fab fa-spotify nex" title="Spotify" data-trans-title="spotifytips"></i>
</a> </a>
</div> </div>
</div> </div>
@@ -833,6 +1005,56 @@ var tlid=0;
</div> </div>
</div> </div>
</div> </div>
<!--Support me-->
<div id="support-btm" class="z-depth-4 hide">
<div id="support-btm-ja">
<h5>ご支援いただけませんか?</h5>
(これは支援の有無に関わらず定期的に出ます。)<br>
あなたのMastodon, Misskeyライフを邪魔してしまって申し訳ありません。<br>
乞食のようなマネをしてご支援をお願いするのもどうかと思いますが、少々お時間をください。<br>
<br>
あなたはMastodon, MisskeyクライアントにTheDeskを選びました。これは奇跡的なことです。今考えればブラウザからアクセスした方が良かったのではと感じることかと存じます。<br>
それでも、あなたはTheDeskを使っています。<br>
TheDeskは2018年1月13日に最初のバージョンが出ました。それから圧倒的な機能数でゴリ押しするクライアントになっています。<br>
新機能に追従を図るためのモチベーションもさることながら、安全対策上TheDeskは開発者の緊急メッセージを表示できる機能が備わっており、開発者が送信ボタンを押すとすべてのTheDeskユーザーに通知が行くようになっています。<br>
かつてこれによってバグ報告を行い、使用を自粛していただくこともありました。<br>
そのような機能を実装するために、Mastodonなどのインスタンスを運営するのと同じく有料のサーバーを運用しています。<br>
<b>全てのユーザーが安心してTheDeskを使っていただける環境のため</b>にも、ぜひご支援をご検討ください。<br>
<b>TheDesk has no ad, you need no charge to unlock premium features. We need your friendly support!</b>
</div>
<div id="support-btm-en" class="hide">
<h5>Support me</h5>
It may disturb your Mastodon life, but your support is required to keep TheDesk awesome!<br>
<b>TheDesk has no ad, you need no charge to unlock premium features. We need your friendly support!</b>
</div>
<div id="support-btm-middle">
<h5>Monthly</h5>
<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 red darken-2" href="https://www.patreon.com/cutls"
target="_blank">
Support on Patreon
</a>
</div>
<div id="support-btm-right">
<h5>Once</h5>
<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>
<br>
Give me Amazon Gift Card:<a href="mailto:web-pro@cutls.com"
target="_blank">web-pro@cutls.com</a><br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
</div>
<div id="support-btm-close">
<button class="btn waves-effect" style="width:100%;" onclick="closeSupport()"
id="add-filter-btn">Close</button>
</div>
</div>
<!--左下メッセージ--> <!--左下メッセージ-->
<div id="message"> <div id="message">
</div> </div>
@@ -860,6 +1082,7 @@ var tlid=0;
<script type="text/javascript" src="../../js/tl/speech.js"></script> <script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/ui/post-box.js"></script> <script type="text/javascript" src="../../js/ui/post-box.js"></script>
<script type="text/javascript" src="../../js/ui/layout.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/instance.js"></script>
<script type="text/javascript" src="../../js/login/login.js"></script> <script type="text/javascript" src="../../js/login/login.js"></script>
<script type="text/javascript" src="../../js/ui/img.js"></script> <script type="text/javascript" src="../../js/ui/img.js"></script>
@@ -873,7 +1096,6 @@ var tlid=0;
<script type="text/javascript" src="../../js/post/img.js"></script> <script type="text/javascript" src="../../js/post/img.js"></script>
<script type="text/javascript" src="../../js/post/status.js"></script> <script type="text/javascript" src="../../js/post/status.js"></script>
<script type="text/javascript" src="../../js/post/misskeystatus.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/suggest.js"></script>
<script type="text/javascript" src="../../js/post/bb-md.js"></script> <script type="text/javascript" src="../../js/post/bb-md.js"></script>
<script type="text/javascript" src="../../js/userdata/showOnTL.js"></script> <script type="text/javascript" src="../../js/userdata/showOnTL.js"></script>

View File

@@ -15,7 +15,7 @@
<script type="text/javascript" src="../../js/platform/first.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/common/materialize.js"></script>
<a href="setting.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>Back</a> <a href="setting.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>Back</a>
LICENSE of TheDesk:<a href="https://github.com/cutls/TheDesk/blob/master/LICENSE.md">TheDesk LICENSE (Latest Ver.)</a><br> LICENSE of TheDesk:<a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">TheDesk LICENSE (Latest Ver.)</a><br>
<article style="width:500px; max-width:100%; margin:15px; font-family:Arial,Helvetica"> <article style="width:500px; max-width:100%; margin:15px; font-family:Arial,Helvetica">
<h5>TheDesk</h5> <h5>TheDesk</h5>
<i class="fa fa-github"></i><a href="https://github.com/cutls/TheDesk" target="_blank">cutls/TheDesk</a><br> <i class="fa fa-github"></i><a href="https://github.com/cutls/TheDesk" target="_blank">cutls/TheDesk</a><br>
@@ -842,13 +842,6 @@ SOFTWARE.<br>
<h5>itunes-nowplaying-mac</h5> <h5>itunes-nowplaying-mac</h5>
<i class="fa fa-github"></i><a href="https://github.com/rinsuki/itunes-nowplaying-mac" target="_blank">rinsuki/itunes-nowplaying-mac</a><br> <i class="fa fa-github"></i><a href="https://github.com/rinsuki/itunes-nowplaying-mac" target="_blank">rinsuki/itunes-nowplaying-mac</a><br>
MIT LICENSE MIT LICENSE
<h5>Adobe Creative SDK</h5>
Please visit:
<a href="http://wwwimages.adobe.com/www.adobe.com/content/dam/acom/jp/legal/servicetou/Creative_SDK_API_and_Developer_Additional_TOU-ja_JP-20140602_1513.pdf" target="_blank">
This file
<i class="material-icons">
picture_as_pdf
</i></a>
<h5>Google Fonts</h5> <h5>Google Fonts</h5>
<ul> <ul>
<li>Open Sans:<a target="_blank" href="http://www.apache.org/licenses/LICENSE-2.0"> Apache License, Version 2.0 </a></li> <li>Open Sans:<a target="_blank" href="http://www.apache.org/licenses/LICENSE-2.0"> Apache License, Version 2.0 </a></li>

View File

@@ -1,5 +1,6 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en" style="overflow:scroll">
<head> <head>
<title>Settings - TheDesk</title> <title>Settings - TheDesk</title>
<!-- <!--
@@ -17,8 +18,17 @@
<link href='../../css/font-awesome.css' rel='stylesheet' type='text/css'> <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"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
<meta charset="utf-8"> <meta charset="utf-8">
<style>input{max-height:50px!important} .pcr-result{height:1rem !important;}</style> <style>
input {
max-height: 50px !important
}
.pcr-result {
height: 1rem !important;
}
</style>
</head> </head>
<body id="mainView" style="overflow-y:scroll"> <body id="mainView" style="overflow-y:scroll">
<script type="text/javascript" src="../../js/common/jquery.js"></script> <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/platform/first.js"></script>
@@ -37,36 +47,47 @@
<div class="collapsible-body"> <div class="collapsible-body">
<h5>Languages</h5> <h5>Languages</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br> 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>/ <a onclick="changelang('ja')" class="pointer" style="margin-right:5px;">日本語</a><a onclick="changelang('en')" class="pointer" style="margin-right:5px;">English</a><a onclick="changelang('ps')" class="pointer" style="margin-right:5px;">Crowdin translate system(beta)</a>
<h5>Import and export of preferences</h5> <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="exportSettings()" class="btn waves-effect lime darken-3"
<button onclick="importSettings()" class="btn waves-effect cyan darken-3" style="width:100%; max-width:200px;">Import</button> 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"> <div id="envView">
<template v-for="(item, i) in config"> <template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5> <h5>{{item.text.head}}</h5>
<templete v-html=item.text.desc></templete><br> <template v-if="item.text.desc">
<template v-if="item.id=='notf'"><a onclick="notftest()" class="pointer">Notification test</a><br></template> <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-if="item.checkbox">
<template v-for="(check, j) in item.text.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>
<label v-bind:for="item.id+check.value">{{check.text}}</label> <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" />
<span>{{check.text}}</span>
</label>
</template> </template>
</template> </template>
<template v-else> <template v-else>
<template v-if="item.doubleText"> <template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data"> <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}} <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> </template>
<template v-else> <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}} <input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id"
</template> v-bind:style="{ width: item.width+'px'}" />{{item.text.after}}
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">Change</button>
</template> </template>
<button class="btn waves-effect" style="width:100px;"
v-on:click="complete(i)">Change</button>
</template><br>
</template> </template>
</div> </div>
<h5>Font</h5> <h5>Font</h5>
Select your favorite font to 'Select'<br> Select your favorite font to 'Select'(Windows/ macOS only)<br>
<button class="btn waves-effect" style="width:100px;" onclick="font()">Select</button><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> <div id="fonts" class="hide" style="overflow-y:scroll; width:300px; height:500px;"></div>
<br> <br>
@@ -85,18 +106,32 @@
</div> </div>
<div class="collapsible-body"> <div class="collapsible-body">
<h4>Select theme</h4> <h4>Select theme</h4>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="black" value="black" /> <input class="with-gap" onchange="settings()" name="theme" type="radio" id="black" value="black" />
<label for="black">Black</label> <span>Black</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="white" value="white" /> <input class="with-gap" onchange="settings()" name="theme" type="radio" id="white" value="white" />
<label for="white">White</label> <span>White</span>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="indigo" value="indigo" /> </label>
<label for="indigo">Indigo<span class="imas hide">(エンドレスナイト)</span></label> <label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="indigo"
value="indigo" />
<span>Indigo<span class="imas hide">(エンドレスナイト)</span></span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="brown" value="brown" /> <input class="with-gap" onchange="settings()" name="theme" type="radio" id="brown" value="brown" />
<label for="brown">Brown<span class="imas hide">(ビタースイート・タイム)</span></label> <span>Brown<span class="imas hide">(ビタースイート・タイム)</span></span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" /> <input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
<label for="green">Green<span class="imas hide">(ユースフルロマンス)</span></label> <span>Green<span class="imas hide">(ユースフルロマンス)</span></span>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom" value="custom" /> </label>
<label for="custom">Custom</label> <label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom"
value="custom" />
<span>custom</span>
</label>
<div style="width:300px" id="sel-selector"> <div style="width:300px" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select> <select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div> </div>
@@ -109,40 +144,58 @@
<h5>Name</h5> <h5>Name</h5>
<input type="text" style="width:300px" id="custom_name" placeholder="Name..."> <input type="text" style="width:300px" id="custom_name" placeholder="Name...">
<h5>About this theme</h5> <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> <div class="input-field"><textarea style="width:300px" id="custom_desc" class="materialize-textarea"
placeholder="About this theme..."></textarea></div>
<h5>Color scheme</h5> <h5>Color scheme</h5>
<input class="with-gap" name="derection" type="radio" id="dark" value="dark" checked="true" /> <label>
<label for="dark">Dark</label> <input class="with-gap" onchange="settings()" name="direction" type="radio" id="dark" value="dark"
<input class="with-gap" name="derection" type="radio" id="light" value="light" /> checked="true" />
<label for="light">Light</label> <span>Dark</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="light"
value="light" />
<span>Light</span>
</label>
<div id="pickers"> <div id="pickers">
<div> <div>
<h5>Primary</h5>Background of components <h5>Primary</h5>Background of components
<div id="color-picker0-wrap"><div class="color-picker" id="color-picker0"></div></div> <div id="color-picker0-wrap">
<div class="color-picker" id="color-picker0"></div>
</div>
<input type="hidden" id="color-picker0_value"> <input type="hidden" id="color-picker0_value">
</div> </div>
<div> <div>
<h5>Secondary</h5>Background color <h5>Secondary</h5>Background color
<div id="color-picker1-wrap"><div class="color-picker" id="color-picker1"></div></div> <div id="color-picker1-wrap">
<div class="color-picker" id="color-picker1"></div>
</div>
<input type="hidden" id="color-picker1_value"> <input type="hidden" id="color-picker1_value">
</div> </div>
<div> <div>
<h5>Texts</h5>Text color <h5>Texts</h5>Text color
<div id="color-picker2-wrap"><div class="color-picker" id="color-picker2"></div></div> <div id="color-picker2-wrap">
<div class="color-picker" id="color-picker2"></div>
</div>
<input type="hidden" id="color-picker2_value"> <input type="hidden" id="color-picker2_value">
</div> </div>
<div> <div>
<h5>Accent</h5>Background of boosts <h5>Accent</h5>Background of boosts
<div id="color-picker3-wrap"><div class="color-picker" id="color-picker3"></div></div> <div id="color-picker3-wrap">
<div class="color-picker" id="color-picker3"></div>
</div>
<input type="hidden" id="color-picker3_value"> <input type="hidden" id="color-picker3_value">
</div> </div>
</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> <button class="btn-large waves-effect" onclick="customComp()">Change</button>&nbsp;<button
<input type="text" style="width:300px" id="custom_json" class="materialize-textarea" placeholder="JSON style" readonly><br> class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">Delete</button><br><br>
<input type="text" style="width:300px;height:40px;" id="custom_json" class="materialize-textarea"
placeholder="JSON style" readonly><br>
Share this code with other TheDesk. Do not share this code with MiAS. Share this code with other TheDesk. Do not share this code with MiAS.
<h4>Import of custom themes</h4> <h4>Import of custom themes</h4>
Get more themes on <a href="https://assets.msky.cafe/" target="_blank">MiAS</a><br> 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"> <input type="text" style="width:300px;height:40px;" id="custom_import" class="materialize-textarea"
placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">Import</button><br> <button class="btn waves-effect" onclick="customImp()">Import</button><br>
</li> </li>
<li> <li>
@@ -153,26 +206,43 @@
<div id="tlView"> <div id="tlView">
<template v-for="(item, i) in config"> <template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5> <h5>{{item.text.head}}</h5>
{{item.text.desc}}<br> <template v-if="item.text.desc">
<templete v-html="item.text.desc"></templete><br>
</template>
<template v-if="item.checkbox"> <template v-if="item.checkbox">
<template v-for="(check, j) in item.text.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>
<label v-bind:for="item.id+check.value">{{check.text}}</label> <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" />
<span>{{check.text}}</span>
</label>
</template> </template>
</template> </template>
<template v-else> <template v-else>
<template v-if="item.doubleText"> <template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data"> <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}} <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> </template>
<template v-else> <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}} <input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id"
</template> v-bind:style="{ width: item.width+'px'}" />{{item.text.after}}
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">Change</button>
</template> </template>
<button class="btn waves-effect" style="width:100px;"
v-on:click="complete(i)">Change</button>
</template><br>
</template> </template>
</div> </div>
<h5>Custom sound</h5>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span
id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span
id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span
id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span
id="c4-file"></span><br>
</div> </div>
</li> </li>
<li> <li>
@@ -183,12 +253,16 @@
<div id="postView"> <div id="postView">
<template v-for="(item, i) in config"> <template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5> <h5>{{item.text.head}}</h5>
{{item.text.desc}}<br> <template v-if="item.text.desc">
<templete v-html="item.text.desc"></templete><br>
</template>
<template v-if="item.checkbox"> <template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox"> <template v-for="(check, j) in item.text.checkbox">
<template v-if="!check.kirishima || (check.kirishima && kirishima)"> <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><input class="with-gap" v-on:click="complete(i,check.value)"
<label v-bind:for="item.id+check.value">{{check.text}}</label> v-model="item.setValue" type="radio" v-bind:id="item.id+check.value"
v-bind:value="check.value" />
<span>{{check.text}}</span></label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span> <span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template> </template>
</template> </template>
@@ -196,14 +270,17 @@
<template v-else> <template v-else>
<template v-if="item.doubleText"> <template v-if="item.doubleText">
<template v-for="(textbox, j) in item.data"> <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}} <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> </template>
<template v-else> <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}} <input type="text" v-model="item.setValue" type="radio" v-bind:id="item.id"
</template> v-bind:style="{ width: item.width+'px'}" />{{item.text.after}}
<button class="btn waves-effect" style="width:100px;" v-on:click="complete(i)">Change</button>
</template> </template>
<button class="btn waves-effect" style="width:100px;"
v-on:click="complete(i)">Change</button>
</template><br>
</template> </template>
</div> </div>
</div> </div>
@@ -253,26 +330,47 @@
<div class="collapsible-body"> <div class="collapsible-body">
<h5>NowPlaying Provider(Windows)</h5> <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> 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>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="aimp" value="AIMP" /> <input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="aimp" value="AIMP" />
<label for="aimp">AIMP</label> <span>AIMP</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="itunes" value="ITUNES" /> <input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="itunes" value="ITUNES" />
<label for="itunes">iTunes</label> <span>iTunes</span>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="npmm" value="MEDIAMONKEY" /> </label>
<label for="npmm">MediaMonkey</label> <label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="npmm"
value="MEDIAMONKEY" />
<span>MediaMonkey</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="winamp" value="WINAMP" /> <input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="winamp" value="WINAMP" />
<label for="winamp">Winamp</label> <span>Winamp</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wmp" value="WMP" /> <input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wmp" value="WMP" />
<label for="wmp">WMP</label> <span>WMP</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wlm" value="WLM" /> <input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wlm" value="WLM" />
<label for="wlm">WLM</label> <span>WLM</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="cad" value="CAD" /> <input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="cad" value="CAD" />
<label for="cad">CAD</label><br><br> <span>CAD</span>
</label>
<br><br>
Click <i class="material-icons" style="font-size:24px;">music_note</i>icon to NowPlaying<br> Click <i class="material-icons" style="font-size:24px;">music_note</i>icon to NowPlaying<br>
<h5>Account Connection</h5> <h5>Account Connection</h5>
TheDesk save your data on thedesk.top server.<br> 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> <div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button
<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> onclick="spotifyAuth()" class="btn waves-effect" style="width:100px;">Save</button></div>
<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> <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> <h5>Edit a template</h5>
<br> <br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist} <textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
@@ -280,15 +378,17 @@
Spotify:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br> 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> 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> Windows:{song}:Song name/{album}:Album name/{artist}:Artist name<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> <button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Attach an Artwork of Spotify</h5> <h5>Attach an Artwork of Spotify</h5>
<span class="imas hide">この設定はCINDERELLA NowPlaying(imastodon.net限定)にも適用されます。</span><br> <label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes" value="yes" /> <input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes" value="yes" />
<label for="awk_yes">Yes</label> <span>Yes</span>
</label>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no" value="no" /> <input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no" value="no" />
<label for="awk_no">No</label> <span>No</span>
</label>
<br> <br>
</div> </div>
</li> </li>
@@ -299,23 +399,28 @@
<div class="collapsible-body"> <div class="collapsible-body">
<h5>Speed</h5> <h5>Speed</h5>
1-100(default:10)<br> 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> <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> <h5>Pitch</h5>
0-100(default:50)<br> 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> <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> <h5>Volume</h5>
0-100(default:100)<br> 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> <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> <h5>Test</h5>
<input type="text" style="width:350px" id="voicetxt" value="TheDesk is an open-source Mastodon client for PC."> <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> <button class="btn waves-effect blue" style="width:150px;" onclick="voicePlay()"
id="testplay">Play/Stop</button><br>
<br> <br>
<button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">Save</button> <button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">Save</button>
</div> </div>
</li> </li>
</ul> </ul>
<br> <br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i class="material-icons left">undo</i>Back</a> <a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i
class="material-icons left">undo</i>Back</a>
<br> <br>
<br>Keyboard shortcuts <br>Keyboard shortcuts
<li>Ctrl+1-9:Jump to n(1-9)th column</li> <li>Ctrl+1-9:Jump to n(1-9)th column</li>
@@ -346,27 +451,41 @@
<a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く <a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く
</li><br> </li><br>
</div> </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 red" style="width:100%; max-width:500px;"
<button class="btn waves-effect indigo" onclick="about()" style="width:100%; max-width:500px;"><i class="material-icons left">info</i>About TheDesk</button> onclick="if(confirm('Delete all data. You cannot undo. Continue?')){ localStorage.clear(); location.href='index.html'; }"><i
<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> class="material-icons left">delete</i>Reset(Danger)</button><br><br>
<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> <button class="btn waves-effect indigo" onclick="about()" style="width:100%; max-width:500px;"><i
<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> class="material-icons left">info</i>About TheDesk</button>
<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="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:500px;"><i
<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> class="material-icons left">web</i>Website</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> <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://www.patreon.com/cutls" class="btn waves-effect red darken-2"
style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>Support(Patreon)</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@cutls.com" 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@cutls.com</a>
<br> <br>
Kyash<br> Kyash<br>
<img src="../../img/kyash.png" width="100"><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 onclick="localStorage.removeItem('new-ver-skip'); location.href='index.html';"
class="pointer">Check update</a><br>
<a href="oss.html">OSS License</a><br> <a href="oss.html">OSS License</a><br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018 All Rights Reserved. <span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018
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> 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( <br>Developer: Cutls P(
<a href="index.html?mode=user&code=Cutls@kirishima.cloud">@Cutls@kirishima.cloud</a>) <a href="index.html?mode=user&code=Cutls@cutls.com">@Cutls@cutls.com</a>)
<br> <br>
</span><br> </span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br> TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br> タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/common/about.js"></script> <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/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script> <script type="text/javascript" src="../../js/login/logout.js"></script>

View File

@@ -7,6 +7,27 @@ var yesno=[
value: "no" value: "no"
} }
]; ];
var sound = [
{
text: "None",
value: "none"
}, {
text: "Default",
value: "default"
}, {
text: "Custom 1",
value: "c1"
}, {
text: "Custom 2",
value: "c2"
}, {
text: "Custom 3",
value: "c3"
}, {
text: "Custom 4",
value: "c4"
}
];
var envConstruction = [ var envConstruction = [
{ {
id: "popup", id: "popup",
@@ -286,6 +307,46 @@ var tlConstruction=[
desc: "", desc: "",
checkbox: yesno checkbox: yesno
} }
}, {
id: "replySound",
storage: "replySound",
checkbox: true,
setValue: "none",
text: {
head: "Sound(Reply)",
desc: "",
checkbox: sound
}
}, {
id: "favSound",
storage: "favSound",
checkbox: true,
setValue: "none",
text: {
head: "Sound(Fav)",
desc: "",
checkbox: sound
}
}, {
id: "btSound",
storage: "btSound",
checkbox: true,
setValue: "none",
text: {
head: "Sound(Boost)",
desc: "",
checkbox: sound
}
}, {
id: "followSound",
storage: "followSound",
checkbox: true,
setValue: "none",
text: {
head: "Sound(Follow)",
desc: "",
checkbox: sound
}
} }
]; ];
var postConstruction = [ var postConstruction = [
@@ -476,5 +537,16 @@ var postConstruction=[
} }
] ]
} }
}, {
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

@@ -1,5 +1,6 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<title>Update - TheDesk</title> <title>Update - TheDesk</title>
<link href="../../css/materialize.css" type="text/css" rel="stylesheet"> <link href="../../css/materialize.css" type="text/css" rel="stylesheet">
@@ -14,6 +15,7 @@
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script> <script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
--> -->
</head> </head>
<body> <body>
<style> <style>
body { body {
@@ -23,6 +25,7 @@ body{
padding: 10px; padding: 10px;
text-align: right; text-align: right;
} }
#start { #start {
display: flex; display: flex;
justify-content: center; justify-content: center;
@@ -31,17 +34,25 @@ body{
height: calc(100vh - 2.5rem); height: calc(100vh - 2.5rem);
text-align: center; text-align: center;
} }
#checkbox { #checkbox {
text-align: left; text-align: left;
} }
a,button,input,label,i{
a,
button,
input,
label,
i {
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
} }
#updskip { #updskip {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.skipbtn { .skipbtn {
display: block; display: block;
float: left; float: left;
@@ -55,16 +66,15 @@ a,button,input,label,i{
border: 1px solid; border: 1px solid;
overflow: hidden; overflow: hidden;
} }
.skipbtn:hover { .skipbtn:hover {
background-color: #b3e5fc; background-color: #b3e5fc;
transition: all 0.3s ease-in-out; transition: all 0.3s ease-in-out;
} }
#prog { #prog {
font-size: 200%; font-size: 200%;
} }
.linux, .mac{
display:none;
}
</style> </style>
<script type="text/javascript" src="../../js/common/jquery.js"></script> <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/platform/first.js"></script>
@@ -78,11 +88,14 @@ a,button,input,label,i{
<p>Get latest TheDesk</p> <p>Get latest TheDesk</p>
<span id="now"></span><b id="ver"></b><br> <span id="now"></span><b id="ver"></b><br>
<span id="det"></span><br> <span id="det"></span><br>
<button class="waves-effect btn windows" onclick="update('install')" style="margin-left:15px;">Installer ver.</button> <button class="waves-effect btn windows hide" onclick="update('install')"
<button class="waves-effect btn windows" onclick="update('portable')" style="margin-left:15px;">Portable ver.</button> style="margin-left:15px;">Installer ver.</button>
<span class="linux">Snap ver may be on Snapcraft<br></span> <button class="waves-effect btn windows hide" onclick="update('portable')"
<button class="waves-effect btn linux" onclick="update('linux')" style="margin-left:15px;">Start</button> style="margin-left:15px;">Portable ver.</button>
<button class="waves-effect btn mac" onclick="update('mac')" style="margin-left:15px;">Start</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> <br>
Some problems?<br>Please download on <a href="https://thedesk.top">Oficial HP</a>. Some problems?<br>Please download on <a href="https://thedesk.top">Oficial HP</a>.
</div> </div>
@@ -90,14 +103,21 @@ a,button,input,label,i{
<h4>You may lose a cool experience!</h4> <h4>You may lose a cool experience!</h4>
Skip this update<br> Skip this update<br>
<div id="updskip"> <div id="updskip">
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light"><div>Until next TL loading</div></a> <a onclick="window.close();" class="pointer skipbtn waves-effect waves-light">
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light"><div>Until next version</div></a> <div>Until next TL loading</div>
</a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light">
<div>Until next version</div>
</a>
</div> </div>
<a class="pointer waves-effect" onclick="skipper();" style="margin-top:5px">Continue updating</a> <a class="pointer waves-effect" onclick="skipper();" style="margin-top:5px">Continue updating</a>
</div> </div>
<div id="dlnow" class="hide"> <div id="dlnow" class="hide">
<h4>Downloading...</h4> <h4>Downloading...</h4>
<h4 id="prog"></h4> <h4 id="prog"></h4>
<div class="progress">
<div class="determinate" style="width: 0%"></div>
</div>
</div> </div>
</div> </div>
<script type="text/javascript" src="../../js/common/about.js"></script> <script type="text/javascript" src="../../js/common/about.js"></script>
@@ -115,8 +135,6 @@ function skipper(){
$("#skipper").toggleClass("show"); $("#skipper").toggleClass("show");
} }
} }
var electron = require("electron");
var ipc = electron.ipcRenderer;
verck(); verck();
function update(sel) { function update(sel) {
$("#box").toggleClass("show"); $("#box").toggleClass("show");
@@ -124,8 +142,7 @@ function update(sel){
$("#dlnow").toggleClass("hide"); $("#dlnow").toggleClass("hide");
$("#dlnow").toggleClass("show"); $("#dlnow").toggleClass("show");
$("#prog").text(""); $("#prog").text("");
var remote=electron.remote; var bit = localStorage.getItem("bit");
var bit=process.arch;
var start = "https://thedesk.top/ver.json"; var start = "https://thedesk.top/ver.json";
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
@@ -162,34 +179,34 @@ function update(sel){
} }
} else if (sel == "mac") { } else if (sel == "mac") {
var url = json["mac"]; var url = json["mac"];
var file="TheDesk-darwin-x64.zip"; shell.openExternal(url);
return false;
} }
ipc.send('download-btn', [url,file]); postMessage(["downloadButton", [url, file]], "*")
}); });
} }
function quit() { function quit() {
ipc.send('quit', 'go'); postMessage(["sendSinmpleIpc", "quit"], "*")
} }
ipc.on('prog', function (event, arg) { function updateProg(arg) {
console.log(arg); console.log(arg);
$("body").css('background','linear-gradient(#fff 0%,#fff '+(1-arg)*100+'%, #d7ccc8 '+(1-arg)*100+'%, #d7ccc8 100%)'); $(".determinate").css("width", arg * 100 + "%");
$("#prog").text(Math.floor(arg * 100) + "%"); $("#prog").text(Math.floor(arg * 100) + "%");
}) }
ipc.on('mess', function (event, arg) { function updateMess(arg) {
console.log(arg); console.log(arg);
$("#prog").text(arg); $("#prog").text(arg);
}) }
function verck() { function verck() {
var remote=electron.remote; var platform = localStorage.getItem("platform");
var platform=remote.process.platform; var bit = localStorage.getItem("bit");
var bit=process.arch; if (platform == "win32") {
if(platform=="linux"){ $('.windows').removeClass("hide")
$('.windows').hide() } else if (platform == "linux") {
$('.linux').show() $('.linux').removeClass("hide")
}else if(platform=="mac"){ } else if (platform == "darwin") {
$('.windows').hide() $('.mac').removeClass("hide")
$('.mac').show()
} }
var start = "https://thedesk.top/ver.json"; var start = "https://thedesk.top/ver.json";
fetch(start, { fetch(start, {
@@ -202,9 +219,23 @@ function verck(){
console.error(error); console.error(error);
}).then(function (json) { }).then(function (json) {
console.log(json); console.log(json);
if (platform == "win32") {
$("#ver").text(json.desk); $("#ver").text(json.desk);
localStorage.setItem("next-ver", json.desk); localStorage.setItem("next-ver", json.desk);
} else if (platform == "linux") {
$("#ver").text(json.desk_linux);
localStorage.setItem("next-ver", json.desk_linux);
} else if (platform == "darwin") {
$("#ver").text(json.desk_mac);
localStorage.setItem("next-ver", json.desk_mac);
}
var lang = "en";
if (lang == "ja") {
$("#det").html(json.detail); $("#det").html(json.detail);
} else {
$("#det").html(json.detail_en);
}
$("#now").text(localStorage.getItem("ver")); $("#now").text(localStorage.getItem("ver"));
}); });

View File

@@ -1,5 +1,6 @@
<!doctype html> <!doctype html>
<html lang="ja"> <html lang="ja">
<head> <head>
<title>Account Manager - TheDesk</title> <title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport"> <meta content="width=device-width,initial-scale=1.0" name="viewport">
@@ -10,14 +11,57 @@
<link href='../../css/tl.css' rel='stylesheet' type='text/css'> <link href='../../css/tl.css' rel='stylesheet' type='text/css'>
<link href='../../css/userdata.css' rel='stylesheet' type='text/css'> <link href='../../css/userdata.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
<style>.acct{display:flex; justify-content:space-around;} <style>
.card{width:400px; background-color: #9e9e9e; margin:10px; } .acct {
body,html{overflow-y: scroll;} display: flex;
#acct-list{display:flex; flex-wrap:wrap; color:white; align-items: flex-start} justify-content: space-around;
.lts{font-size:150%} }
.colorsel{ display:flex; }
.card .colorsel div:not(.exc){width:20px;height:20px;} .card {
.card .colorsel div.exc{width:40px;height:20px;} width: 400px;
background-color: #9e9e9e;
margin: 10px;
}
body,
html {
overflow-y: scroll;
}
#acct-list {
display: flex;
flex-wrap: wrap;
color: white;
align-items: flex-start
}
.lts {
font-size: 150%
}
.colorsel {
display: flex;
}
.card .colorsel div:not(.exc) {
width: 20px;
height: 20px;
}
.card .colorsel div.exc {
width: 40px;
height: 20px;
}
.first {
display: flex;
justify-content: center;
align-items: center
}
.first .hide-first {
display: none;
}
</style> </style>
<meta charset="utf-8"> <meta charset="utf-8">
<!-- <!--
@@ -28,6 +72,7 @@ body,html{overflow-y: scroll;}
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script> <script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
--> -->
</head> </head>
<body id="mainView"> <body id="mainView">
<script type="text/javascript" src="../../js/common/jquery.js"></script> <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/platform/first.js"></script>
@@ -39,28 +84,38 @@ body,html{overflow-y: scroll;}
<script type="text/javascript" src="../../js/ui/tips.js"></script> <script type="text/javascript" src="../../js/ui/tips.js"></script>
<script type="text/javascript" src="../../js/common/time.js"></script> <script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/modal.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> <div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex"
style="width:100%; max-width:200px;">戻る</a><br>
<h5>アカウント一覧</h5> <h5>アカウント一覧</h5>
<div id="acct-list"></div> <div id="acct-list"></div>
<div class="divider"></div> <div class="divider"></div>
</div>
<div>
<h5>アカウントを追加</h5><br> <h5>アカウントを追加</h5><br>
<div id="add"> <div id="add">
<div class="row"> <div class="row">
<div class="col s6"> <div class="col s8">
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp"> <input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp">
<div id="ins-suggest"></div> <div id="ins-suggest"></div>
Windows以外でご使用の方やPleromaにログインされる方はチェックを入れて下さい。ログインできない場合、チェックを外してください。<br> チェックを外すとコード貼り付けをスキップできます。(<u>Mastodon</u>にWindowsやmacOSからログインする場合)失敗する場合はチェックを入れてください。<br>
<label>
<input type="checkbox" class="filled-in" id="linux" /> <input type="checkbox" class="filled-in" id="linux" />
<label for="linux">コードセットアップ</label><br> <span>コードセットアップ</span>
</label>
<br>
<label>
<input type="checkbox" class="filled-in" id="misskey" /> <input type="checkbox" class="filled-in" id="misskey" />
<label for="misskey">Misskeyとしてログイン</label><br> <span>Misskeyとしてログイン</span>
</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br> <button class="btn waves-effect" onclick="instance()">Login</button><br>
</div> </div>
<div class="col s6"> <div class="col s4">
<span style="font-family:Open Sans;">Supports</span> <span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div> <div id="support" class="collection transparent"></div>
</div> </div>
</div></div> </div>
</div>
<div id="auth" style="display:none"> <div id="auth" style="display:none">
指定されたコードを貼り付けてください。ログインウィンドウは閉じていただいて構いません。<br> 指定されたコードを貼り付けてください。ログインウィンドウは閉じていただいて構いません。<br>
<input type="text" id="code" placeholder="コードを入力"> <input type="text" id="code" placeholder="コードを入力">
@@ -73,6 +128,8 @@ body,html{overflow-y: scroll;}
<input type="text" id="misskey-key" placeholder="コードを入力"> <input type="text" id="misskey-key" placeholder="コードを入力">
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br> <button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br>
</div> </div>
</div>
<div class="hide-first">
<h5>メインアカウント</h5> <h5>メインアカウント</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">アカウントを選択</span> <div class="input-field" style="width:300px"><span data-trans="your_acct">アカウントを選択</span>
<br> <br>
@@ -91,6 +148,7 @@ Administered by:<a id="ins-admin"></a><br>
ユーザー数:<span id="ins-user"></span>ユーザー数<br> ユーザー数:<span id="ins-user"></span>ユーザー数<br>
コネクション:<span id="ins-per"></span>%<br> コネクション:<span id="ins-per"></span>%<br>
Mastodonバージョン:<span id="ins-ver"></span>@<span id="ins-upd"></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/ui/theme.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/common/sha256.js"></script> <script type="text/javascript" src="../../js/common/sha256.js"></script>

View File

@@ -1,16 +1,18 @@
<!doctype html> <!doctype html>
<html lang="ja"> <html lang="ja">
<head> <head>
<title>TheDesk</title> <title>TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport"> <meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="../../css/materialize.css" type="text/css" rel="stylesheet"> <link href="../../css/materialize.css" type="text/css" rel="stylesheet">
<link href='../../css/font-awesome.css' rel='stylesheet' type='text/css'> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"
integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
<link href="../../css/themes.css" type="text/css" rel="stylesheet"> <link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link href='../../css/tl.css' rel='stylesheet' type='text/css'> <link href="../../css/tl.css" rel="stylesheet" type="text/css">
<link href='../../css/userdata.css' rel='stylesheet' type='text/css'> <link href="../../css/userdata.css" rel="stylesheet" type="text/css">
<link href='../../css/post.css' rel='stylesheet' type='text/css'> <link href="../../css/post.css" rel="stylesheet" type="text/css">
<link href="../../css/master.css" type="text/css" rel="stylesheet"> <link href="../../css/master.css" type="text/css" rel="stylesheet">
<link href='../../css/sort.css' rel='stylesheet' type='text/css'> <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"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet">
<meta charset="utf-8"> <meta charset="utf-8">
<!-- <!--
@@ -21,27 +23,29 @@
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script> <script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
--> -->
</head> </head>
<body> <body>
<script type="text/javascript" src="../../js/common/jquery.js"></script> <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/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script> <script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.ja.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/time.js"></script>
<script type="text/javascript" src="../../js/common/blurhash.js"></script>
<script type="text/javascript" src="../../js/common/version.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/keyshortcut.js"></script>
<script type="text/javascript" src="../../js/common/modal.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 type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
<script> <script>
var ver="Usamin (18.1.1)"; var ver = "Usamin (18.6.1)";
//betaを入れるとバージョンチェックしない //betaを入れるとバージョンチェックしない
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html) //GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
//var ver="beta"; //var ver="beta";
//WinstoreではバージョンCK・言語・Misskeyトークンの機能が排除 //WinstoreではバージョンCK・言語・Misskeyトークンの機能が排除
var acct_id = 0; var acct_id = 0;
var tlid = 0; var tlid = 0;
verck(ver);
</script> </script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea> <textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<canvas id="canvas" style="top:-100px; position:fixed;width:32px;height:32px" width="32" height="32"></canvas>
<div id="tl"> <div id="tl">
<!--TL--> <!--TL-->
<!--ドラッグハンドラ--> <!--ドラッグハンドラ-->
@@ -53,57 +57,85 @@ var tlid=0;
</div> </div>
</div> </div>
<div id="post-box" class="z-depth-5"> <div id="post-box" class="z-depth-5">
<div id="post-bar" class="drag-bar">投稿</div> <div id="post-bar" class="drag-bar"><span id="unreact">投稿</span><span id="addreact"
class="hide">Reaction</span></div>
<!--トゥートボックス--> <!--トゥートボックス-->
<div id="left-side"> <div id="left-side">
<div class="row" style="margin-bottom:0;"> <div class="row" style="margin-bottom:0;">
</span> </span>
<div class="" style="float:left;"> <div class="" style="float:left;">
<a onclick="profShow()" style="vertical-align:-2.5rem;" class="pointer mize"> <a onclick="profShow()" style="vertical-align:-2.5rem;" class="pointer mize">
<img src="../../img/missing.svg" id="acct-sel-prof" title="選択したアカウントのプロフィールを表示(Ctrl+Shift+P)" data-trans-title="post_box_prof" width="24px"> <img src="../../img/missing.svg" id="acct-sel-prof" title="選択したアカウントのプロフィールを表示(Ctrl+Shift+P)"
data-trans-title="post_box_prof" width="24px">
</a> </a>
</div> </div>
<div class="input-field mize" style="float:left; width:calc(100% - 24px)"> <div class="input-field mize" style="float:left; width:calc(100% - 24px)">
<select id="post-acct-sel" class="acct-sel" onchange="mdCheck()"></select> <select id="post-acct-sel" class="acct-sel" onchange="mdCheck()"></select>
</div> </div>
<span class="cancel"> <span class="cancel">
<i class="material-icons waves-effect" onclick="hide()" title="このボックスを閉じる(X)" data-trans-title="post_box_close">cancel</i> <i class="material-icons waves-effect" onclick="hide()" title="このボックスを閉じる(X)"
data-trans-title="post_box_close">cancel</i>
</span> </span>
<!--Markdown--> <!--Markdown-->
<div class="row" style="margin-bottom:0"> <div class="row" style="margin-bottom:0">
<div class="markdown mize hide"> <div class="markdown mize hide">
<div class="col s12"> <div class="col s12">
<i class="material-icons pointer setting waves-effect" onclick="tagsel('b')" title="太字(Ctrl+B)テキストボックス内を選択してから押すと囲みます。">format_bold</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('b')"
<i class="material-icons pointer setting waves-effect" onclick="tagsel('i')" title="字(Ctrl+I)テキストボックス内を選択してから押すと囲みます。">format_italic</i> title="字(Ctrl+B)テキストボックス内を選択してから押すと囲みます。">format_bold</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('u')" title="下線(Ctrl+U)テキストボックス内を選択してから押すと囲みます。">format_underlined</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('i')"
<i class="material-icons pointer setting waves-effect" onclick="tagsel('s')" title="取り消し(Ctrl+S)テキストボックス内を選択してから押すと囲みます。">strikethrough_s</i> title="斜字(Ctrl+I)テキストボックス内を選択してから押すと囲みます。">format_italic</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('>','no','yes')" title="引用">format_quote</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('u')"
<i class="material-icons pointer setting waves-effect" onclick="markdown('#','no','yes')" title="見出し">short_text</i> title="下線(Ctrl+U)テキストボックス内を選択してから押すと囲みます。">format_underlined</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('`','yes','no')" title="コード挿入 テキストボックス内を選択してから押すと囲みます。">code</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('s')"
<i class="material-icons pointer setting waves-effect" onclick="markdown('- ','yes','yes')" title="箇条書きリスト">format_list_bulleted</i> title="取り消し(Ctrl+S)テキストボックス内を選択してから押すと囲みます。">strikethrough_s</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('1. ','yes','yes')" title="番号付きリスト">format_list_numbered</i> <i class="material-icons pointer setting waves-effect" onclick="markdown('>','no','yes')"
<i class="pointer setting fa fa-subscript waves-effect" onclick="markdown('__','yes','no','before')" title="下付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i> title="引用">format_quote</i>
<i class="pointer setting fa fa-superscript waves-effect" onclick="markdown('_','yes','no','before')" title="上付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i> <i class="material-icons pointer setting waves-effect" onclick="markdown('#','no','yes')"
<i class="material-icons pointer setting waves-effect" onclick="tagsel('spin')" title="回転 テキストボックス内を選択してから押すと囲みます。">autorenew</i> title="見出し">short_text</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('pulse')" title="点滅 テキストボックス内を選択してから押すと囲みます。">flare</i> <i class="material-icons pointer setting waves-effect" onclick="markdown('`','yes','no')"
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=vertical')" title="上下反転 テキストボックス内を選択してから押すと囲みます。">swap_vert</i> title="コード挿入 テキストボックス内を選択してから押すと囲みます。">code</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=horizontal')" title="左右反転 テキストボックス内を選択してから押すと囲みます。">swap_horiz</i> <i class="material-icons pointer setting waves-effect" onclick="markdown('- ','yes','yes')"
title="箇条書きリスト">format_list_bulleted</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('1. ','yes','yes')"
title="番号付きリスト">format_list_numbered</i>
<i class="pointer setting fa fa-subscript waves-effect"
onclick="markdown('__','yes','no','before')" title="下付き文字 テキストボックス内を選択してから押すと囲みます。"
style="font-size:1.5rem"></i>
<i class="pointer setting fa fa-superscript waves-effect"
onclick="markdown('_','yes','no','before')" title="上付き文字 テキストボックス内を選択してから押すと囲みます。"
style="font-size:1.5rem"></i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('spin')"
title="回転 テキストボックス内を選択してから押すと囲みます。">autorenew</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('pulse')"
title="点滅 テキストボックス内を選択してから押すと囲みます。">flare</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=vertical')"
title="上下反転 テキストボックス内を選択してから押すと囲みます。">swap_vert</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=horizontal')"
title="左右反転 テキストボックス内を選択してから押すと囲みます。">swap_horiz</i>
<span class="sml gray pointer waves-effect"> <span class="sml gray pointer waves-effect">
<a onclick="mdToggle()">Markdownエディタを隠す</a> <a onclick="mdToggle()">Markdownエディタを隠す</a>
</span> </span>
<br> <br>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('size')" title="文字サイズ変更 テキストボックス内を選択してから押すと囲みます。">format_size</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('size')"
title="文字サイズ変更 テキストボックス内を選択してから押すと囲みます。">format_size</i>
<input id="size" style="width: calc(50% - 20px); margin: 0; height: 24px;" value="12">px <input id="size" style="width: calc(50% - 20px); margin: 0; height: 24px;" value="12">px
<i class="material-icons pointer setting waves-effect" onclick="tagsel('colorhex')" title="文字色変更 テキストボックス内を選択してから押すと囲みます。">color_lens</i> <i class="material-icons pointer setting waves-effect" onclick="tagsel('colorhex')"
title="文字色変更 テキストボックス内を選択してから押すと囲みます。">color_lens</i>
<input id="colorhex" style="width: calc(50% - 50px); margin: 0; height: 24px;" type="color"> <input id="colorhex" style="width: calc(50% - 50px); margin: 0; height: 24px;" type="color">
<br> <br>
<i class="material-icons pointer setting waves-effect" onclick="markdownLink()" title="リンク挿入">link</i> <i class="material-icons pointer setting waves-effect" onclick="markdownLink()"
<input id="linkt" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクテキスト">&nbsp; title="リンク挿入">link</i>
<input id="link2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクアドレス"> <input id="linkt" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="リンクテキスト">&nbsp;
<input id="link2" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="リンクアドレス">
<br> <br>
<i class="material-icons pointer setting waves-effect" onclick="markdownImage()" title="インライン画像挿入">image</i> <i class="material-icons pointer setting waves-effect" onclick="markdownImage()"
<input id="image" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="代替テキスト">&nbsp; title="インライン画像挿入">image</i>
<input id="image2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="画像アドレス"> <input id="image" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="代替テキスト">&nbsp;
<input id="image2" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="画像アドレス">
</div> </div>
</div> </div>
<div class="input-field col s12" id="preview-field" style="margin-top: 0;"> <div class="input-field col s12" id="preview-field" style="margin-top: 0;">
@@ -115,7 +147,8 @@ var tlid=0;
</div> </div>
<div class="input-field col s12" id="toot-field" style="margin-top: 10px;"> <div class="input-field col s12" id="toot-field" style="margin-top: 10px;">
<textarea id="textarea" class="materialize-textarea unmize" style="margin-bottom:0;" data-length="500"></textarea> <textarea id="textarea" class="materialize-textarea unmize" style="margin-bottom:0;"
data-length="500"></textarea>
<label for="textarea" data-trans="toot">トゥート</label> <label for="textarea" data-trans="toot">トゥート</label>
<br> <br>
<span class="sml gray pointer markdown mize" id="preview-btn"> <span class="sml gray pointer markdown mize" id="preview-btn">
@@ -126,13 +159,19 @@ var tlid=0;
</span> </span>
</div> </div>
<div class="col s12 mize" style="margin-top: 0; display:flex; justify-content: space-between"> <div class="col s12 mize" style="margin-top: 0; display:flex; justify-content: space-between">
<i class="waves-effect gray material-icons" id="nsfw" title="画像に制限を付与" onclick="nsfw()">visibility_off</i> <i class="waves-effect gray material-icons" id="nsfw" title="画像に制限を付与"
<i class="waves-effect gray material-icons purple-text dropdown-button" data-activates='dropdown1' id="vis-icon">public</i> onclick="nsfw()">visibility_off</i>
<i class="waves-effect gray material-icons purple-text dropdown-trigger"
data-target="dropdown1" id="vis-icon">public</i>
<a class="waves-effect gray" id="cw" onclick="cw()" title="コンテンツワーニング(トゥートを表示する前にメッセージで隠す)">CW</a> <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> <span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray"
<i class="waves-effect gray material-icons" onclick="emojiToggle()" id="emojibtn" title="絵文字を挿入">tag_faces</i> onclick="fileselect()" title="ファイルを選択">photo_library</i></span></span>
<i class="waves-effect gray material-icons dropdown-button" data-activates='dropdown2'>more_vert</i> <i class="waves-effect gray material-icons" onclick="emojiToggle()" id="emojibtn"
<i class="material-icons nex gray waves-effect" title="トゥートボックスのクリア(Ctrl+Shit+C)" data-trans-title="post_box_clear" id="clear">clear</i> title="絵文字を挿入">tag_faces</i>
<i class="waves-effect gray material-icons dropdown-trigger"
data-target="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>
<div class="col s12 mize" style="margin-bottom:5px; padding:0;"> <div class="col s12 mize" style="margin-bottom:5px; padding:0;">
<div id="taglist"></div> <div id="taglist"></div>
@@ -145,13 +184,15 @@ var tlid=0;
<br> <br>
<input type="text" id="cw-text" placeholder="警告文" class="mize" style="margin:0"> <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> <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"> <input type="datetime-local" id="sch-date" placeholder="時間指定投稿" class="datepicker"
style="margin:0">
</div> </div>
</div> </div>
</div> </div>
<!-- 公開範囲 Dropdown Structure --> <!-- 公開範囲 Dropdown Structure -->
<ul id='dropdown1' class='dropdown-content'> <ul id="dropdown1" class="dropdown-content">
<li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">公開範囲指定</li> <li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">公開範囲指定
</li>
<li> <li>
<a onclick="vis('public')">公開(Public)</a> <a onclick="vis('public')">公開(Public)</a>
</li> </li>
@@ -172,10 +213,7 @@ var tlid=0;
</li> </li>
</ul> </ul>
<!-- その他 Dropdown Structure --> <!-- その他 Dropdown Structure -->
<ul id='dropdown2' class='dropdown-content'> <ul id="dropdown2" class="dropdown-content">
<li>
<a onclick="adobe()">Adobeフォトエディタ</a>
</li>
<li> <li>
<a onclick="nowplaying('spotify');">NowPlaying(Spotify)</a> <a onclick="nowplaying('spotify');">NowPlaying(Spotify)</a>
</li> </li>
@@ -195,8 +233,11 @@ var tlid=0;
<!--END hidden area--> <!--END hidden area-->
</div> </div>
<div id="toot-btn-field"> <div id="toot-btn-field">
<button class="btn waves-effect indigo unmize toot-btn-group" onclick="post()" id="toot-post-btn">トゥート</button> <button class="btn waves-effect indigo unmize toot-btn-group" onclick="post()"
<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> id="toot-post-btn">トゥート</button>
<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> </div>
<div id="right-side"> <div id="right-side">
@@ -205,18 +246,19 @@ var tlid=0;
<div id="emoji" class="hide"> <div id="emoji" class="hide">
<span class="gray sml">サーバーによって実装が異なります。 <span class="gray sml">サーバーによって実装が異なります。
<a onclick="emojiGet('true')" class="pointer">絵文字更新</a> <a onclick="emojiGet('true')" class="pointer">絵文字更新</a>
<i class="material-icons waves-effect" onclick="emojiToggle()" title="このボックスを閉じる" data-trans-title="post_box_close">cancel</i>
<br> <br>
</span> </span>
<div id="emoji-list" class="" style=""> <div id="emoji-list" class="" style="">
</div> </div>
<div class="emoji-control center"> <div class="emoji-control center">
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('before')" id="emoji-before"> <button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('before')"
id="emoji-before">
<i class="material-icons">navigate_before</i> <i class="material-icons">navigate_before</i>
</button> </button>
<span id="emoji-count"></span>/ <span id="emoji-count"></span>/
<span id="emoji-sum"></span> <span id="emoji-sum"></span>
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('next')" id="emoji-next"> <button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('next')"
id="emoji-next">
<i class="material-icons">navigate_next</i> <i class="material-icons">navigate_next</i>
</button> </button>
</div> </div>
@@ -251,7 +293,7 @@ var tlid=0;
<i class="material-icons">flag</i> <i class="material-icons">flag</i>
</a> </a>
<a onclick="faicon()" class="pointer waves-effect" title="faicon" id="faicon-btn"> <a onclick="faicon()" class="pointer waves-effect" title="faicon" id="faicon-btn">
<i class="fa fa-fort-awesome"></i> <i class="fab fa-fort-awesome"></i>
</a> </a>
</div> </div>
</div> </div>
@@ -259,24 +301,24 @@ var tlid=0;
<div id="poll" class="hide"> <div id="poll" class="hide">
<select id="poll-sel" onchange="pollProviderCk()"> <select id="poll-sel" onchange="pollProviderCk()">
<option value="nothing">アンケートを使用しない</option> <option value="nothing">アンケートを使用しない</option>
<option value="votedon">votedon.</option>
<option value="mastodon-poll">Mastodon(2.8~)</option> <option value="mastodon-poll">Mastodon(2.8~)</option>
</select> </select>
<div id="votedon" class="poll-provider hide">
WIP
</div>
<div id="mastodon-poll" class="poll-provider hide"> <div id="mastodon-poll" class="poll-provider hide">
<input type="text" class="mastodon-choice" placeholder="選択肢1"> <input type="text" class="mastodon-choice" placeholder="選択肢1">
<input type="text" class="mastodon-choice" placeholder="選択肢2"> <input type="text" class="mastodon-choice" placeholder="選択肢2">
<input type="text" class="mastodon-choice" placeholder="選択肢3"> <input type="text" class="mastodon-choice" placeholder="選択肢3">
<input type="text" class="mastodon-choice" placeholder="選択肢4"> <input type="text" class="mastodon-choice" placeholder="選択肢4">
<label>
<input type="checkbox" class="filled-in" id="poll-multiple" value="1" /> <input type="checkbox" class="filled-in" id="poll-multiple" value="1" />
<label for="poll-multiple">複数選択を許可</label><br> <span>複数選択を許可</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="poll-until" value="1" /> <input type="checkbox" class="filled-in" id="poll-until" value="1" />
<label for="poll-until">投票するまで票数を隠す</label><br> <span>投票するまで票数を隠す</span>
</label>
<input type="number" style="width:50px" id="days_poll" placeholder="d" value="0"> <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="hours_poll" placeholder="h" value="0">時間
<input type="number" style="width:50px" id="mins_poll" placeholder="m" value="0"> <input type="number" style="width:50px" id="mins_poll" placeholder="m" value="6">
</div> </div>
</div> </div>
</div> </div>
@@ -284,7 +326,28 @@ var tlid=0;
<!-- Modal Structure Tootdata--> <!-- Modal Structure Tootdata-->
<div id="tootmodal" class="modal modal-fixed-footer"> <div id="tootmodal" class="modal modal-fixed-footer">
<div class="modal-content"> <div class="modal-content">
<ul class="collapsible" data-collapsible="accordion" id="det-col"> <ul class="collapsible"id="det-col">
<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="ltl-after">
</div>
</li>
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">person_outline</i>これより後のユーザーTL(言及確認)
</div>
<div class="collapsible-body toot-reset" id="user-after">
</div>
</li>
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">language</i>これより後の連合TL(言及確認)
</div>
<div class="collapsible-body toot-reset" id="ftl-after">
</div>
</li>
<li> <li>
<div class="collapsible-header"> <div class="collapsible-header">
<i class="material-icons">arrow_upward</i>これより前の会話 <i class="material-icons">arrow_upward</i>これより前の会話
@@ -330,26 +393,29 @@ var tlid=0;
</li> </li>
<li class="dm-hide"> <li class="dm-hide">
<div class="collapsible-header"> <div class="collapsible-header">
<i class="text-darken-3 fa fa-retweet"></i>このトゥートをブーストした人 <i class="text-darken-3 false fas fa-retweet"></i>このトゥートをブーストした人
</div> </div>
<div class="collapsible-body toot-reset" id="toot-rt"> <div class="collapsible-body toot-reset" id="toot-rt">
</div> </div>
</li> </li>
</ul> </ul>
<div class="dm-hide"> <div class="dm-hide">
他のアカウントを使用(<i class="fa fa-retweet"></i>/<i class="fa fa-star"></i>の解除はできません)<br> 他のアカウントを使用(<i class="fas fa-retweet"></i>/<i class="fas fa-star"></i>の解除はできません)<br>
<div class="row"> <div class="row">
<div class="col s6"> <div class="col s6">
<select id="status-acct-sel" class="acct-sel"></select> <select id="status-acct-sel" class="acct-sel"></select>
</div> </div>
<div class="col s2"> <div class="col s2">
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share"></i>/button> <button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i
class="fas fa-share"></i></button>
</div> </div>
<div class="col s2"> <div class="col s2">
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i class="fa fa-retweet"></i></button> <button class="dropdown-button btn waves-effect indigo" style="width:100%;"
onclick="staEx('rt')"><i class="fas fa-retweet"></i></button>
</div> </div>
<div class="col s2"> <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> <button class="dropdown-button btn waves-effect orange" style="width:100%;"
onclick="staEx('fav')"><i class="fas fa-star"></i></button>
</div> </div>
</div> </div>
<div id="toot-tools"> <div id="toot-tools">
@@ -360,7 +426,6 @@ var tlid=0;
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<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="brws()">ブラウザで開く</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="shot()">スクリーンショット</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="cbCopy()">URLをコピー</a> <a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="cbCopy()">URLをコピー</a>
<a href="#!" class="waves-effect waves-green btn-flat dm-hide" onclick="cbCopy('emb')">埋め込む</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> <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
@@ -372,7 +437,7 @@ var tlid=0;
<div id="his-data-show"> <div id="his-data-show">
<div class="his-float" id="his-float-data"> <div class="his-float" id="his-float-data">
<div id="his-basic-prof"> <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> <span id="his-name">Loading...</span><span class="gray" id="his-bot"></span>
<br>@ <br>@
<span id="his-acct"></span><br> <span id="his-acct"></span><br>
@@ -390,12 +455,16 @@ var tlid=0;
<span class="cbadge" style="max-width:150px; width:150px; ">Since: <span class="cbadge" style="max-width:150px; width:150px; ">Since:
<span id="his-since"></span> <span id="his-since"></span>
</span> </span>
<div id="his-proof-prof"></div>
</div> </div>
<div id="his-des"></div><br> <div id="his-des" data-acct=""></div><br>
<div id="his-plus-action"> <div id="his-plus-action">
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-emp-btn" onclick="empUser()">ユーザー強調</a> <a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-emp-btn"
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data" id="his-end-btn" onclick="pinUser()">紹介する</a><br> onclick="empUser()">ユーザー強調</a>
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-openin" onclick="profbrws()">ブラウザで開く</a><br> <a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data"
id="his-end-btn" onclick="pinUser()">紹介する</a><br>
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-openin"
onclick="profbrws()">ブラウザで開く</a><br>
</div><br> </div><br>
<div id="his-matching-list"> <div id="his-matching-list">
似ているユーザーを取得できます。<br> 似ているユーザーを取得できます。<br>
@@ -406,66 +475,77 @@ var tlid=0;
</div> </div>
<div class="his-float" id="his-float-timeline"> <div class="his-float" id="his-float-timeline">
<div id="my-data-nav"> <div id="my-data-nav">
<ul class="custom-tabs transparent"> <ul class="tabs transparent">
<li class="custom-tab col my-data-width active-back column-first"> <li class="tab col my-data-width active-back column-first">
<a go="#his-tl" title="タイムライン"><i class="material-icons">timeline</i></a> <a go="#his-tl" title="タイムライン"><i class="material-icons">timeline</i></a>
</li> </li>
<li class="custom-tab col my-data-width"> <li class="tab col my-data-width">
<a go="#his-follow-list" title="フォロー"><i class="material-icons">people</i></a> <a go="#his-follow-list" title="フォロー"><i class="material-icons">people</i></a>
</li> </li>
<li class="custom-tab col my-data-width"> <li class="tab col my-data-width">
<a go="#his-follower-list" title="フォロワー"><i class="material-icons">people</i></a> <a go="#his-follower-list" title="フォロワー"><i
class="material-icons">people</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-his-data"> <li class="tab col my-data-width only-his-data">
<a go="#his-action" title="他のアカウントで操作"><i class="material-icons">account_box</i></a> <a go="#his-action" title="他のアカウントで操作"><i
class="material-icons">account_box</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-his-data"> <li class="tab col my-data-width only-his-data">
<a go="#his-list" title="リスト"><i class="material-icons">list</i></a> <a go="#his-list" title="リスト"><i class="material-icons">list</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-fav-list" title="お気に入り登録"><i class="material-icons">star</i></a> <a go="#his-fav-list" title="お気に入り登録"><i class="material-icons">star</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-blocking-list" title="ブロック"><i class="material-icons">block</i></a> <a go="#his-blocking-list" title="ブロック"><i class="material-icons">block</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-blocking-list" title="ブロック"><i class="material-icons">voice_over_off</i></a> <a go="#his-blocking-list" title="ブロック"><i
class="material-icons">voice_over_off</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-domain-list" title="ドメインブロック"><i class="material-icons">language</i><i class="material-icons">block</i></a> <a go="#his-domain-list" title="ドメインブロック"><i
class="material-icons">language</i><i class="material-icons">block</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-prof-list" title="プロフィール編集"><i class="material-icons">create</i></a> <a go="#his-prof-list" title="プロフィール編集"><i class="material-icons">create</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-request-list" title="フォローリクエスト"><i class="material-icons">how_to_reg</i></a> <a go="#his-request-list" title="フォローリクエスト"><i
class="material-icons">how_to_reg</i></a>
</li> </li>
<li class="custom-tab col my-data-width only-my-data"> <li class="tab col my-data-width only-my-data">
<a go="#his-follow-recom-list" title="おすすめ"><i class="material-icons">recent_actors</i></a> <a go="#his-follow-recom-list" title="おすすめ"><i
class="material-icons">recent_actors</i></a>
</li> </li>
</ul> </ul>
</div> </div>
<div id="his-tl" class="tab-content"> <div id="his-tl" class="tab-content">
<div id="his-tl-contents" class="cont-series"> <div id="his-tl-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="utl('--now','more')">もっと</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="utl('--now','more')">もっと</button>
</div> </div>
<div id="his-follow-list" class="tab-content"> <div id="his-follow-list" class="tab-content">
<div id="his-follow-list-contents" class="cont-series"> <div id="his-follow-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="flw('--now','more')">もっと</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="flw('--now','more')">もっと</button>
</div> </div>
<div id="his-follower-list" class="tab-content"> <div id="his-follower-list" class="tab-content">
<div id="his-follower-list-contents" class="cont-series"> <div id="his-follower-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="fer('--now','more')">もっと</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="fer('--now','more')">もっと</button>
</div> </div>
<div id="his-action" class="tab-content"> <div id="his-action" class="tab-content">
他のアカウントを使用するフォロー((解除はできません。))<br> 他のアカウントを使用するフォロー((解除はできません。))<br>
<div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div> <div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div>
<a href="#!" class="waves-effect btn" onclick="follow('selector','true')">フォロー</a><br> <a href="#!" class="waves-effect btn" onclick="follow('selector','true')">フォロー</a><br>
または<br> または<br>
<a href="#!" class="waves-effect btn" onclick="udgEx('selector', 'selector')">プロフィールを表示</a><br> <a href="#!" class="waves-effect btn"
onclick="udgEx('selector', 'selector')">プロフィールを表示</a><br>
</div> </div>
<div id="his-list" class="tab-content"> <div id="his-list" class="tab-content">
<div id="his-lists-a">リストに追加するためにはフォローが必要です。</div> <div id="his-lists-a">リストに追加するためにはフォローが必要です。</div>
@@ -475,22 +555,26 @@ var tlid=0;
<div id="his-fav-list" class="tab-content"> <div id="his-fav-list" class="tab-content">
<div id="his-fav-list-contents" class="cont-series"> <div id="his-fav-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="showFav('more')">もっと</button> <button class="btn waves-effect" style="width:100%; padding:0;"
onclick="showFav('more')">もっと</button>
</div> </div>
<div id="his-blocking-list" class="tab-content"> <div id="his-blocking-list" class="tab-content">
<div id="his-blocking-list-contents" class="cont-series"> <div id="his-blocking-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showBlo('more')">もっと</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showBlo('more')">もっと</button>
</div> </div>
<div id="his-muting-list" class="tab-content"> <div id="his-muting-list" class="tab-content">
<div id="his-muting-list-contents" class="cont-series"> <div id="his-muting-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showMut('more')">もっと</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showMut('more')">もっと</button>
</div> </div>
<div id="his-domain-list" class="tab-content"> <div id="his-domain-list" class="tab-content">
<div id="his-domain-list-contents" class="cont-series"> <div id="his-domain-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showDom('more')">もっと</button>ブロックするドメイン <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showDom('more')">もっと</button>ブロックするドメイン
<br> <br>
<input type="text" placeholder="example.com" id="domainblock"> <input type="text" placeholder="example.com" id="domainblock">
<button class="btn waves-effect" onclick="addDomainblock()">追加</button> <button class="btn waves-effect" onclick="addDomainblock()">追加</button>
@@ -505,7 +589,8 @@ var tlid=0;
<textarea placeholder="自己紹介" id="his-des-val" class="materialize-textarea"></textarea> <textarea placeholder="自己紹介" id="his-des-val" class="materialize-textarea"></textarea>
<label for="his-des-val">自己紹介</label> <label for="his-des-val">自己紹介</label>
</div> </div>
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="profedit()">変更</button> <button class="btn waves-effect" style="width:100%; padding:0;"
onclick="profedit()">変更</button>
<br>アバターを変更: <br>アバターを変更:
<span id="prof-change"> <span id="prof-change">
<input type="file" onchange="imgChange(this,'avatar')"> <input type="file" onchange="imgChange(this,'avatar')">
@@ -518,20 +603,28 @@ var tlid=0;
<div id="his-request-list" class="tab-content"> <div id="his-request-list" class="tab-content">
<div id="his-request-list-contents" class="cont-series"> <div id="his-request-list-contents" class="cont-series">
</div> </div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showReq('more')">もっと</button> <button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showReq('more')">もっと</button>
</div> </div>
<div id="his-follow-recom-list" class="tab-content"> <div id="his-follow-recom-list" class="tab-content">
<div id="his-follow-recom-contents" class="cont-series"> <div id="his-follow-recom-contents" class="cont-series">
</div> </div>
</div> </div>
</div> </div>
<div class="his-float" id="his-float-blocked">
<div>ブロックされています。なぜでしょう?</div>
</div>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="modal-action waves-effect waves-green btn-flat" id="his-history-btn" onclick="historyShow()">一つ前のユーザーデータ</button> <button class="modal-action waves-effect waves-green btn-flat" id="his-history-btn"
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-follow-btn" onclick="follow()">フォロー</a> onclick="historyShow()">一つ前のユーザーデータ</button>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-mute-btn" onclick="mute()">ミュート</a> <a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-follow-btn"
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-block-btn" onclick="block()">ブロック</a> onclick="follow()">フォロー</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-mute-btn"
onclick="mute()">ミュート</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-block-btn"
onclick="block()">ブロック</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" onclick="hisclose()">Close</a> <a href="#!" class="modal-action waves-effect waves-green btn-flat" onclick="hisclose()">Close</a>
</div> </div>
</div> </div>
@@ -583,39 +676,49 @@ var tlid=0;
<a href="https://thedesk.top" target="_blank">HP</a><br> <a href="https://thedesk.top" target="_blank">HP</a><br>
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br> <a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
<br> <br>
<div id="release-Usamin_18-1-1" class="release-do" style="display:none; "> <div id="release-Usamin_18-6-1" class="release-do" style="display:none; ">
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br> <a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br> <a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
Entyでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。<br> Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。 困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
<h5>Release Note Usamin (18.1.1)</h5> <h5>Release Note Usamin (18.6.1)</h5>
・お知らせ機能改善<br> ・リプライができない不具合を修正<br>
・Integrated TLで一部挙動改善(Thanks to <a href="https://www.kr-kp.com/">kPherox</a>)<br> ・ワードフィルター/強調の適用がおかしい不具合<br>
--以下18.1.0--<br> ・テキストエリアのフォントが設定通りにならない不具合<br>
・iTunes NowPlaying(macOS)にアルバムアートワークを付ける(Thanks to <a href="https://www.kr-kp.com/">kPherox</a>)<br> <h5>Release Note Usamin (18.6.0)</h5>
・カラムを<b>縦に並べられる</b>ように(2つ目以降のカラム毎の設定の「左に重ねる」「右に出す」を押す)<br> ・アカウント選択のデザイン修正。クリック直後に閉じてしまうバグを修正。<br>
・画像を個別に削除する(画像をクリックして)<br> ・投票済みのアンケートについて修正。<br>
・何個もアルバムアートワークが投稿されるバグを修正<br> <b>セキュリティの大幅な強化。</b><br>
・Misskeyでログインしたまま何もできないバグを修正(権限回り) ・ご注意<img class="emoji" draggable="false" alt="⚠️" src="https://twemoji.maxcdn.com/2/72x72/26a0.png">: TweetDeck統合は設定で有効にしないと使えなくなりました。<br>
・Adobeフォトエディタの廃止
<br>
<h5>ThinkingDeskラベル</h5>
<img src="../../img/thinkingdesk.png" style="width:100px;" draggable="false"><br>
手作りマットラベル。貼ってはがせる。300円なのでポイントの余りでどうぞ。<br>
<a href="https://item.mercari.com/jp/m822743330" target="_blank">メルカリ</a>へ。
</div> </div>
<div id="release-en"> <div id="release-en" style="display:none">
<h5>Let's make it native!</h5> <h5>Let's make it native!</h5>
<a href="https://translate.thedesk.top">Crowdin translation project</a> <a href="https://translate.thedesk.top">Crowdin translation project</a>
</div> </div>
<br><br> <br><br>
<h3>ご支援ください。</h3> <h3>ご支援ください。</h3>
TheDeskは営利目的ではないため、有料機能や広告は一切ありません。<br>皆様のあたたかいご支援のもとで製作されています。<br> TheDeskは営利目的ではないため、有料機能や広告は一切ありません。<br>皆様のあたたかいご支援のもとで製作されています。<br>
<a class="btn-share btn waves-effect waves-light purple lighten-2" href="https://enty.jp/Cutls" target="_blank"> <a class="btn-share btn waves-effect waves-light red lighten-2"
Entyで支援 href="https://www.pixiv.net/fanbox/creator/28105985" target="_blank">
Pixiv FANBOXで支援
</a> </a>
<a class="btn-share btn waves-effect waves-light red lighten-2" href="https://osushi.love/Cutls_P" target="_blank"> <a class="btn-share btn waves-effect waves-light red darken-2" href="https://www.patreon.com/cutls"
Osushi.loveで寿司を贈る target="_blank">
Patreonで支援
</a> </a>
<a class="btn-share btn waves-effect waves-light blue" href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank"> <a class="btn-share btn waves-effect waves-light blue"
href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">
Amazonほしいものリスト Amazonほしいものリスト
</a> </a>
<br> <br>
<a href="mailto:mstdn@thedesk.top" target="_blank">mstdn@thedesk.top</a>にAmazonギフトカードを送る<br> <a href="mailto:web-pro@cutls.com"
target="_blank">web-pro@cutls.com</a>にAmazonギフトカードを送る<br>
Kyash<br> Kyash<br>
<img src="../../img/kyash.png" width="100"><br> <img src="../../img/kyash.png" width="100"><br>
</div> </div>
@@ -639,13 +742,20 @@ var tlid=0;
</span> </span>
<div id="menu-wrapper"> <div id="menu-wrapper">
<div id="left-menu"> <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 active" onclick="addColumnMenu()" id="addColumnMenu"><i
<div class="waves-effect" onclick="sortMenu()" id="sortMenu"><i class="material-icons">sort</i><span>カラム一覧/並べ替え</span></div> class="material-icons">add</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="sortMenu()" id="sortMenu"><i
<div class="waves-effect" onclick="listMenu()" id="listMenu"><i class="material-icons">view_headline</i><span>リスト</span></div> class="material-icons">sort</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="searchMenu()" id="searchMenu"><i
<div class="waves-effect" onclick="help()"><i class="material-icons">help_outline</i><span>ヘルプ</span></div> class="material-icons">search</i><span>検索</span></div>
<div class="waves-effect" onclick="location.href='index.html'"><i class="material-icons">refresh</i><span>TL再読込</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>
<div id="right-menu"> <div id="right-menu">
<!--カラム追加--> <!--カラム追加-->
@@ -660,24 +770,50 @@ var tlid=0;
<input type="hidden" value="local" id="type-sel"> <input type="hidden" value="local" id="type-sel">
表示するタイムライン 表示するタイムライン
<div id="tltype"> <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 active" data-type="local">
<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><i class="material-icons">people_outline</i></div><span>ローカル</span>
<div class="type waves-effect" data-type="home"><div><i class="material-icons">home</i></div><span>ホーム</span></div> </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="local-media">
<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><i class="material-icons">people_outline</i><i
<div class="type waves-effect" data-type="dm"><div><i class="material-icons">mail_outline</i></div><span>ダイレクトメッセージ</span></div> class="material-icons sub-icon">perm_media</i>
<div class="type waves-effect" data-type="mix"><div><i class="material-icons">merge_type</i></div><span>統合(ローカルとホーム)</span></div> </div><span>ローカル(メディア)</span>
<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>
<div class="type waves-effect" data-type="notf"><div><i class="material-icons">notifications</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> </div>
<div id="noauth" class="hide">表示するタイムライン <div id="noauth" class="hide">表示するタイムライン
<input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);" placeholder="e.g:mstdn.jp"> <input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);"
placeholder="e.g:mstdn.jp">
</div> </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 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>
</div> </div>
<button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()" data-trans-i="add"> <button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()"
data-trans-i="add">
<i class="material-icons left">add</i>追加 <i class="material-icons left">add</i>追加
</button> </button>
<br> <br>
@@ -687,12 +823,13 @@ var tlid=0;
<div id="src-box" class="hide menu-content"> <div id="src-box" class="hide menu-content">
<div class="input-field"> <div class="input-field">
<select id="src-acct-sel" class="acct-sel" onchange="trend()"></select> <select id="src-acct-sel" class="acct-sel" onchange="trend()"></select>
</div><div class="input-field"> </div>
<i class="material-icons prefix">search</i> <div class="input-field">
<input id="src" type="text" class="validate" style="width:calc( 60% - 40px);"> <input id="src" type="text" class="validate" style="width:60%">
<label for="src" data-trans="src">検索</label> <label for="src" data-trans="src">検索</label>
<button class="btn waves-effect indigo" style="width:calc( 40% - 40px);" onclick="src()" data-trans-i="src"> <button class="btn waves-effect indigo" style="width: 36%;padding: 0;padding-left: 15px;"
<i class="material-icons left">search</i>検索 onclick="src()" data-trans-i="src">
<i class="material-icons left" style="margin:0">search</i>検索
</button> </button>
<br> <br>
<br> <br>
@@ -706,7 +843,7 @@ var tlid=0;
<div id="sort-box" class="hide menu-content"> <div id="sort-box" class="hide menu-content">
<ul id="sort"></ul> <ul id="sort"></ul>
<div> <div>
<button onclick="sort()" class="btn waves-effect nex" style="width:100%; max-width:300px;" data-trans-i="sort"> <button onclick="sort()" class="btn waves-effect nex" style="width:97.5%;" data-trans-i="sort">
<i class="material-icons left">sort</i>並べ替え設定 <i class="material-icons left">sort</i>並べ替え設定
</button> </button>
</div> </div>
@@ -718,7 +855,8 @@ var tlid=0;
<label>選択(スクロールで全選択肢表示)</label> <label>選択(スクロールで全選択肢表示)</label>
</div> </div>
<div style="float:left; padding-top:8px; padding-bottom:28px;"> <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 class="btn waves-effect indigo" style="width:80px;" onclick="list()"
data-trans-i="lists">
一覧 一覧
</button> </button>
</div> </div>
@@ -735,7 +873,8 @@ var tlid=0;
<label>選択(スクロールで全選択肢表示)</label> <label>選択(スクロールで全選択肢表示)</label>
</div> </div>
<div style="float:left; padding-top:8px; padding-bottom:28px;"> <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 class="btn waves-effect indigo" style="width:80px;" onclick="filter()"
data-trans-i="filters">
一覧 一覧
</button> </button>
</div> </div>
@@ -743,26 +882,48 @@ var tlid=0;
<input type="hidden" id="filter-edit-id"> <input type="hidden" id="filter-edit-id">
<input type="text" style="width:150px" id="filter-add-word" placeholder="フィルターワード"><br> <input type="text" style="width:150px" id="filter-add-word" placeholder="フィルターワード"><br>
適応範囲<br> 適応範囲<br>
<label>
<input type="checkbox" class="filled-in" id="home_filter" value="home" /> <input type="checkbox" class="filled-in" id="home_filter" value="home" />
<label for="home_filter">ホーム</label> <span>ホーム</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="local_filter" value="public" /> <input type="checkbox" class="filled-in" id="local_filter" value="public" />
<label for="local_filter">ローカル</label> <span>ローカル</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="notf_filter" value="notifications" /> <input type="checkbox" class="filled-in" id="notf_filter" value="notifications" />
<label for="notf_filter">通知</label> <span>通知</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="conv_filter" value="thread" /> <input type="checkbox" class="filled-in" id="conv_filter" value="thread" />
<label for="conv_filter">会話</label><br> <span>会話</span>
</label>
オプション<br> オプション<br>
<label>
<input type="checkbox" class="filled-in" id="wholeword_filter" value="1" /> <input type="checkbox" class="filled-in" id="wholeword_filter" value="1" />
<label for="wholeword_filter">単語マッチ</label><br> <span>単語マッチ</span>
</label>
<br>
<span class="sml">非ラテン系の文字列では「単語マッチ」は推奨されません。</span><br> <span class="sml">非ラテン系の文字列では「単語マッチ」は推奨されません。</span><br>
<label>
<input type="checkbox" class="filled-in" id="except_filter" value="1" /> <input type="checkbox" class="filled-in" id="except_filter" value="1" />
<label for="except_filter">除外</label><br> <span>除外</span>
</label>
<br>
<span class="sml">「除外」時マッチしたトゥートは非可逆的に除外され、削除後も閲覧できません。</span><br> <span class="sml">「除外」時マッチしたトゥートは非可逆的に除外され、削除後も閲覧できません。</span><br>
有効期限(あと)<span class="sml">未指定(または0分)で「無限」になります。<b>仕様上数値の正確性を保証できません。</b></span><br><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="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="hours_filter" placeholder="h" value="0">時間
<input type="number" style="width:50px" id="mins_filter" placeholder="m" value="0"> <input type="number" style="width:50px" id="mins_filter" placeholder="m" value="0"><br>
<button class="btn waves-effect" style="width:120px;" onclick="makeNewFilter()" id="add-filter-btn">追加</button><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> <span class="sml">Integrated TL/Plus TLは、公開/ホームのフィルターワードが合算されて適応されます。どちらか一方の指定でも非表示になります。</span>
</div> </div>
</div> </div>
@@ -772,12 +933,18 @@ var tlid=0;
</a>&nbsp;|&nbsp; </a>&nbsp;|&nbsp;
<a onclick="bottomReverse()" class="nex waves-effect"> <a onclick="bottomReverse()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">swap_horiz</i>トゥートボタンの左右入れ替え <i class="material-icons" style="font-size: 1rem;">swap_horiz</i>トゥートボタンの左右入れ替え
</a>&nbsp;|&nbsp;
<a onclick="openRN()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">new_releases</i>Release Note
</a> </a>
</div> </div>
<div id="main"> <div id="main">
<!--TLのTL--> <!--TLのTL-->
<div id="timeline-container"> <div id="timeline-container">
<h3>Welcome to TheDesk</h3><br><a href="acct.html">アカウントを追加</a>するか下の<i class="material-icons">apps</i>ボタンよりカラムを追加してください。 <div id="something-wrong">
<img src="" style="width:150px;margin:5px;display:none;" draggable="false">
<div>内部エラーです。再読込して治らない場合は初期化(全データ削除)をしてください。(事前に設定をエクスポートしておくことをおすすめします。)</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -785,8 +952,10 @@ var tlid=0;
<div id="bottom" class="reverse"> <div id="bottom" class="reverse">
<div class="leftside reverse"> <div class="leftside reverse">
<div id="dambox"> <div id="dambox">
<button id="posttgl" class="btn waves-effect indigo" style="width: 100%;height: 2.5rem;line-height: 0;margin: 0;"> <button id="posttgl" class="btn waves-effect indigo"
<i class="material-icons" style="position: relative; top: 5px; font-size: 1.5rem; text-align: center; margin-right: 10px;">edit</i>トゥート 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> </button>
</div> </div>
<div class="leftside reverse" id="group"> <div class="leftside reverse" id="group">
@@ -798,13 +967,16 @@ var tlid=0;
<i class="material-icons nex" title="設定(Ctrl+Shift+S)">settings</i> <i class="material-icons nex" title="設定(Ctrl+Shift+S)">settings</i>
</a> </a>
<a onclick="nano()" class="nex waves-effect"> <a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="最小のマストドン。TheDesk Nano" data-trans-title="nano_desp">remove_from_queue</i> <i class="material-icons" title="最小のマストドン。TheDesk Nano"
data-trans-title="nano_desp">remove_from_queue</i>
</a> </a>
<a onclick="menu()" class="nex waves-effect" id="list-tgl"> <a onclick="menu()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="リスト">apps</i> <i class="material-icons" title="リスト">apps</i>
</a> </a>
<span id="fukidashi">←ここからTL追加</span>
</div>
</div>
</div> </div>
</div></div>
<div> <div>
<div id="tips-menu"> <div id="tips-menu">
<div class="btnsgroup" style="height:34px"><span class="grouptitle">Tips:</span> <div class="btnsgroup" style="height:34px"><span class="grouptitle">Tips:</span>
@@ -821,7 +993,7 @@ var tlid=0;
<i class="material-icons nex" title="アイマストドントレンド" data-trans-title="trendtip">whatshot</i> <i class="material-icons nex" title="アイマストドントレンド" data-trans-title="trendtip">whatshot</i>
</a> </a>
<a onclick="tips('spotify')" class="nex waves-effect"> <a onclick="tips('spotify')" class="nex waves-effect">
<i class="fa fa-spotify nex" title="Spotify" data-trans-title="spotifytips"></i> <i class="fab fa-spotify nex" title="Spotify" data-trans-title="spotifytips"></i>
</a> </a>
</div> </div>
</div> </div>
@@ -833,6 +1005,56 @@ var tlid=0;
</div> </div>
</div> </div>
</div> </div>
<!--Support me-->
<div id="support-btm" class="z-depth-4 hide">
<div id="support-btm-ja">
<h5>ご支援いただけませんか?</h5>
(これは支援の有無に関わらず定期的に出ます。)<br>
あなたのMastodon, Misskeyライフを邪魔してしまって申し訳ありません。<br>
乞食のようなマネをしてご支援をお願いするのもどうかと思いますが、少々お時間をください。<br>
<br>
あなたはMastodon, MisskeyクライアントにTheDeskを選びました。これは奇跡的なことです。今考えればブラウザからアクセスした方が良かったのではと感じることかと存じます。<br>
それでも、あなたはTheDeskを使っています。<br>
TheDeskは2018年1月13日に最初のバージョンが出ました。それから圧倒的な機能数でゴリ押しするクライアントになっています。<br>
新機能に追従を図るためのモチベーションもさることながら、安全対策上TheDeskは開発者の緊急メッセージを表示できる機能が備わっており、開発者が送信ボタンを押すとすべてのTheDeskユーザーに通知が行くようになっています。<br>
かつてこれによってバグ報告を行い、使用を自粛していただくこともありました。<br>
そのような機能を実装するために、Mastodonなどのインスタンスを運営するのと同じく有料のサーバーを運用しています。<br>
<b>全てのユーザーが安心してTheDeskを使っていただける環境のため</b>にも、ぜひご支援をご検討ください。<br>
<b>TheDeskは営利目的ではないため、有料機能や広告は一切ありません。<br>皆様のあたたかいご支援のもとで製作されています。</b>
</div>
<div id="support-btm-en" class="hide">
<h5>Support me</h5>
It may disturb your Mastodon life, but your support is required to keep TheDesk awesome!<br>
<b>TheDeskは営利目的ではないため、有料機能や広告は一切ありません。<br>皆様のあたたかいご支援のもとで製作されています。</b>
</div>
<div id="support-btm-middle">
<h5>月額支援(大歓迎)</h5>
<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 red darken-2" href="https://www.patreon.com/cutls"
target="_blank">
Patreonで支援
</a>
</div>
<div id="support-btm-right">
<h5>一度限りの支援(もちろん歓迎)</h5>
<a class="btn-share btn waves-effect waves-light blue"
href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">
Amazonほしいものリスト
</a>
<br>
<a href="mailto:web-pro@cutls.com"
target="_blank">web-pro@cutls.com</a>にAmazonギフトカードを送る<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
</div>
<div id="support-btm-close">
<button class="btn waves-effect" style="width:100%;" onclick="closeSupport()"
id="add-filter-btn">Close</button>
</div>
</div>
<!--左下メッセージ--> <!--左下メッセージ-->
<div id="message"> <div id="message">
</div> </div>
@@ -860,6 +1082,7 @@ var tlid=0;
<script type="text/javascript" src="../../js/tl/speech.js"></script> <script type="text/javascript" src="../../js/tl/speech.js"></script>
<script type="text/javascript" src="../../js/ui/post-box.js"></script> <script type="text/javascript" src="../../js/ui/post-box.js"></script>
<script type="text/javascript" src="../../js/ui/layout.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/instance.js"></script>
<script type="text/javascript" src="../../js/login/login.js"></script> <script type="text/javascript" src="../../js/login/login.js"></script>
<script type="text/javascript" src="../../js/ui/img.js"></script> <script type="text/javascript" src="../../js/ui/img.js"></script>
@@ -873,7 +1096,6 @@ var tlid=0;
<script type="text/javascript" src="../../js/post/img.js"></script> <script type="text/javascript" src="../../js/post/img.js"></script>
<script type="text/javascript" src="../../js/post/status.js"></script> <script type="text/javascript" src="../../js/post/status.js"></script>
<script type="text/javascript" src="../../js/post/misskeystatus.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/suggest.js"></script>
<script type="text/javascript" src="../../js/post/bb-md.js"></script> <script type="text/javascript" src="../../js/post/bb-md.js"></script>
<script type="text/javascript" src="../../js/userdata/showOnTL.js"></script> <script type="text/javascript" src="../../js/userdata/showOnTL.js"></script>

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