Compare commits

..

193 Commits

Author SHA1 Message Date
cutls
7281db2375 Merge branch 'master' of github.com:cutls/TheDesk 2021-02-02 11:47:43 +09:00
cutls
2699d51301 TheDesk 22.1.0 (Koume) 2021-02-02 11:47:38 +09:00
Cutls
e8c1dad86b Merge pull request #441 from cutls/dependabot/npm_and_yarn/app/json5-2.2.0
Bump json5 from 2.1.3 to 2.2.0 in /app
2021-02-01 17:47:17 -09:00
Cutls
72b279a107 Merge pull request #439 from cutls/dependabot/npm_and_yarn/app/sweetalert2-10.14.0
Bump sweetalert2 from 10.13.0 to 10.14.0 in /app
2021-02-01 17:47:01 -09:00
Cutls
73894c7e37 Merge pull request #437 from cutls/dependabot/npm_and_yarn/app/sanitize-html-2.3.2
Bump sanitize-html from 2.3.1 to 2.3.2 in /app
2021-02-01 17:46:48 -09:00
Cutls
12dee56919 Merge pull request #440 from cutls/l10n_master
New Crowdin updates
2021-02-01 17:46:29 -09:00
cutls
e9c5709095 remove tweetdeck 2021-02-02 11:38:23 +09:00
cutls
10358cb317 Merge branch 'master' of github.com:cutls/TheDesk 2021-02-02 11:27:28 +09:00
cutls
7d6d0b5628 Mention and tag links are not considered the acct data 2021-02-02 11:27:15 +09:00
dependabot-preview[bot]
e6eeff56e3 Bump json5 from 2.1.3 to 2.2.0 in /app
Bumps [json5](https://github.com/json5/json5) from 2.1.3 to 2.2.0.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/master/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.1.3...v2.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-01 20:13:05 +00:00
Cutls
0f3be2fdc4 New translations setting.json (German) 2021-01-31 15:36:40 -09:00
Cutls
8c1ba088be New translations acct.json (German) 2021-01-31 15:36:38 -09:00
Cutls
5d5e3c77e1 New translations main.json (French) 2021-01-31 15:36:36 -09:00
Cutls
995f677d8f New translations update.json (French) 2021-01-31 15:24:50 -09:00
Cutls
8e71e973d6 New translations setting.json (German) 2021-01-31 15:24:48 -09:00
Cutls
c7f1bb9b76 New translations main.json (German) 2021-01-31 15:24:47 -09:00
Cutls
3cc1f427ce New translations setting.json (French) 2021-01-31 15:24:45 -09:00
Cutls
3621be674f New translations main.json (French) 2021-01-31 15:24:43 -09:00
Cutls
ef1ecd5db3 New translations acct.json (French) 2021-01-31 15:24:42 -09:00
Cutls
a0a0802784 New translations main.json (German) 2021-01-31 15:06:27 -09:00
Cutls
3b96bf3c25 New translations index.json (German) 2021-01-31 15:06:26 -09:00
dependabot-preview[bot]
87c747cb93 Bump sweetalert2 from 10.13.0 to 10.14.0 in /app
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 10.13.0 to 10.14.0.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v10.13.0...v10.14.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-28 20:13:08 +00:00
dependabot-preview[bot]
83b2138b26 Bump sanitize-html from 2.3.1 to 2.3.2 in /app
Bumps [sanitize-html](https://github.com/apostrophecms/sanitize-html) from 2.3.1 to 2.3.2.
- [Release notes](https://github.com/apostrophecms/sanitize-html/releases)
- [Changelog](https://github.com/apostrophecms/sanitize-html/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apostrophecms/sanitize-html/compare/2.3.1...2.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-27 20:15:47 +00:00
Cutls
23a72c1dc5 Merge pull request #434 from cutls/dependabot/npm_and_yarn/app/sanitize-html-2.3.1
Bump sanitize-html from 2.3.0 to 2.3.1 in /app
2021-01-24 00:22:00 +09:00
Cutls
9413d9c4b8 New Crowdin updates (#432)
* New translations main.json (Norwegian)

* New translations main.json (Dutch)

* New translations main.json (Italian)

* New translations main.json (Hungarian)

* New translations main.json (Hebrew)

* New translations main.json (Polish)

* New translations main.json (Turkish)

* New translations main.json (Swedish)

* New translations main.json (Serbian (Cyrillic))

* New translations main.json (Russian)

* New translations main.json (Portuguese)

* New translations main.json (Arabic)

* New translations main.json (Afrikaans)

* New translations main.json (Spanish)

* New translations main.json (Finnish)

* New translations main.json (French)

* New translations main.json (Romanian)

* New translations main.json (Bulgarian)

* New translations main.json (German)

* New translations main.json (Greek)

* New translations main.json (Czech)

* New translations main.json (Danish)

* New translations main.json (Catalan)

* New translations main.json (Spanish, Argentina)

* New translations main.json (English)

* New translations index.json (Cornish)

* New translations main.json (Sinhala)

* New translations acct.json (Cornish)

* New translations main.json (Cornish)

* New translations setting.json (Cornish)

* New translations main.json (Portuguese, Brazilian)

* New translations main.json (Vietnamese)

* New translations main.json (Chinese Traditional)

* New translations main.json (Chinese Simplified)

* New translations main.json (Ukrainian)

* New translations update.json (Cornish)

* New translations main.json (Chinese Traditional)
2021-01-23 06:21:43 -09:00
cutls
78ea495969 add image rotate button 2021-01-23 19:17:55 +09:00
dependabot-preview[bot]
a2c8d5fd37 Bump sanitize-html from 2.3.0 to 2.3.1 in /app
Bumps [sanitize-html](https://github.com/apostrophecms/sanitize-html) from 2.3.0 to 2.3.1.
- [Release notes](https://github.com/apostrophecms/sanitize-html/releases)
- [Changelog](https://github.com/apostrophecms/sanitize-html/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apostrophecms/sanitize-html/compare/2.3.0...2.3.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-22 20:13:53 +00:00
Cutls
31b5df7f42 Merge pull request #430 from cutls/dependabot/npm_and_yarn/app/fortawesome/fontawesome-free-5.15.2
Bump @fortawesome/fontawesome-free from 5.15.1 to 5.15.2 in /app
2021-01-19 04:11:43 +09:00
Cutls
28a0419d2c Merge pull request #431 from cutls/dependabot/npm_and_yarn/app/chokidar-3.5.1
Bump chokidar from 3.5.0 to 3.5.1 in /app
2021-01-19 04:11:30 +09:00
Cutls
88214e5a33 New Crowdin updates (#428)
* New translations setting.json (Swedish)

* New translations setting.json (Serbian (Cyrillic))

* New translations setting.json (Russian)

* New translations setting.json (Portuguese)

* New translations setting.json (Polish)

* New translations setting.json (Norwegian)

* New translations setting.json (Dutch)

* New translations setting.json (Turkish)

* New translations setting.json (Vietnamese)

* New translations setting.json (English)

* New translations setting.json (Spanish, Argentina)

* New translations setting.json (Portuguese, Brazilian)

* New translations setting.json (Chinese Traditional)

* New translations setting.json (Chinese Simplified)

* New translations setting.json (Ukrainian)

* New translations setting.json (Afrikaans)

* New translations setting.json (Catalan)

* New translations setting.json (Bulgarian)

* New translations setting.json (Arabic)

* New translations setting.json (Spanish)

* New translations setting.json (French)

* New translations setting.json (Romanian)

* New translations setting.json (Italian)

* New translations setting.json (Hungarian)

* New translations setting.json (Hebrew)

* New translations setting.json (Finnish)

* New translations setting.json (Czech)

* New translations setting.json (Greek)

* New translations setting.json (German)

* New translations setting.json (Danish)

* New translations setting.json (Sinhala)
2021-01-19 04:11:15 +09:00
cutls
277f61826f gitignore and language file 2021-01-19 04:10:30 +09:00
cutls
447aeea0cb some git watched file modified 2021-01-19 04:10:18 +09:00
cutls
cc5ba8af0f add Pleroma refreshable token 2021-01-19 04:06:13 +09:00
dependabot-preview[bot]
9e62d15576 Bump chokidar from 3.5.0 to 3.5.1 in /app
Bumps [chokidar](https://github.com/paulmillr/chokidar) from 3.5.0 to 3.5.1.
- [Release notes](https://github.com/paulmillr/chokidar/releases)
- [Commits](https://github.com/paulmillr/chokidar/compare/3.5.0...3.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-15 20:14:08 +00:00
cutls
eaec63adb8 Add desc 2021-01-16 04:41:16 +09:00
cutls
57ca23e4e5 Add macOS control center nowplaying 2021-01-16 04:28:09 +09:00
dependabot-preview[bot]
e97ac5008a Bump @fortawesome/fontawesome-free from 5.15.1 to 5.15.2 in /app
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.15.1 to 5.15.2.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.15.1...5.15.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-14 20:13:06 +00:00
cutls
8c2d17d096 readme 2021-01-12 15:09:14 +09:00
cutls
7763ad98ad Merge branch 'master' of github.com:cutls/TheDesk 2021-01-12 14:46:02 +09:00
cutls
d6a32fbeae misc 2021-01-12 14:45:49 +09:00
cutls
aeaca51334 and more 2021-01-12 14:45:18 +09:00
cutls
f4d6ff8ee3 add beta language and auto restart when login crowdin 2021-01-12 14:44:57 +09:00
Cutls
f0a25df38f New Crowdin updates (#427)
* New translations acct.json (Sinhala)

* New translations index.json (Sinhala)

* New translations main.json (Sinhala)

* New translations setting.json (Sinhala)

* New translations update.json (Sinhala)

* New translations main.json (Sinhala)

* New translations setting.json (Sinhala)
2021-01-12 14:04:34 +09:00
Cutls
89b25c56e7 Merge pull request #425 from cutls/dependabot/npm_and_yarn/app/sweetalert2-10.13.0
Bump sweetalert2 from 10.10.0 to 10.13.0 in /app
2021-01-12 04:57:45 +09:00
Cutls
f0f8ed5eca Merge pull request #426 from cutls/dependabot/npm_and_yarn/app/chokidar-3.5.0
Bump chokidar from 3.4.3 to 3.5.0 in /app
2021-01-12 04:57:28 +09:00
Cutls
793a511bc3 Merge pull request #416 from cutls/dependabot/npm_and_yarn/app/ini-1.3.8
[Security] Bump ini from 1.3.5 to 1.3.8 in /app
2021-01-12 04:57:06 +09:00
Cutls
22299eaf33 New Crowdin updates (#422)
* New translations acct.json (Chinese Traditional)

* New translations index.json (Chinese Traditional)

* New translations main.json (Chinese Traditional)

* New translations setting.json (Chinese Traditional)

* New translations acct.json (Chinese Traditional)

* New translations index.json (Chinese Traditional)

* New translations main.json (Chinese Traditional)

* New translations setting.json (Chinese Traditional)

* New translations index.json (Chinese Traditional)

* New translations main.json (Chinese Traditional)

* New translations index.json (Chinese Traditional)

* New translations update.json (Chinese Traditional)

* New translations index.json (Chinese Traditional)

* New translations update.json (Chinese Traditional)

* New translations index.json (Chinese Traditional)

* New translations main.json (Chinese Traditional)

* New translations setting.json (Chinese Traditional)

* New translations index.json (Chinese Traditional)

* New translations main.json (Chinese Traditional)

* New translations setting.json (Chinese Traditional)

* New translations main.json (Chinese Traditional)

* New translations setting.json (Chinese Traditional)

* New translations main.json (Chinese Traditional)

* New translations main.json (Chinese Traditional)

* New translations setting.json (Portuguese)

* New translations main.json (Swedish)

* New translations setting.json (Serbian (Cyrillic))

* New translations main.json (Serbian (Cyrillic))

* New translations setting.json (Russian)

* New translations main.json (Russian)

* New translations main.json (Portuguese)

* New translations setting.json (Polish)

* New translations main.json (Polish)

* New translations setting.json (Norwegian)

* New translations main.json (Norwegian)

* New translations setting.json (Dutch)

* New translations main.json (Dutch)

* New translations setting.json (Swedish)

* New translations main.json (English)

* New translations setting.json (Spanish, Argentina)

* New translations main.json (Spanish, Argentina)

* New translations setting.json (Portuguese, Brazilian)

* New translations main.json (Portuguese, Brazilian)

* New translations setting.json (Vietnamese)

* New translations main.json (Vietnamese)

* New translations setting.json (Chinese Traditional)

* New translations main.json (Turkish)

* New translations main.json (Chinese Traditional)

* New translations setting.json (Chinese Simplified)

* New translations main.json (Chinese Simplified)

* New translations setting.json (Ukrainian)

* New translations main.json (Ukrainian)

* New translations setting.json (Turkish)

* New translations setting.json (Italian)

* New translations setting.json (Afrikaans)

* New translations setting.json (Catalan)

* New translations main.json (Catalan)

* New translations setting.json (Bulgarian)

* New translations main.json (Bulgarian)

* New translations setting.json (Arabic)

* New translations main.json (Arabic)

* New translations main.json (Afrikaans)

* New translations setting.json (Spanish)

* New translations main.json (Spanish)

* New translations setting.json (French)

* New translations main.json (French)

* New translations setting.json (Romanian)

* New translations main.json (Romanian)

* New translations main.json (Czech)

* New translations main.json (Italian)

* New translations setting.json (Hungarian)

* New translations main.json (Hungarian)

* New translations setting.json (Hebrew)

* New translations main.json (Hebrew)

* New translations setting.json (Finnish)

* New translations main.json (Finnish)

* New translations setting.json (Czech)

* New translations setting.json (Greek)

* New translations main.json (Greek)

* New translations setting.json (German)

* New translations main.json (German)

* New translations setting.json (Danish)

* New translations main.json (Danish)

* New translations setting.json (English)
2021-01-12 04:56:25 +09:00
cutls
8745f94d81 add export plugin 2021-01-09 21:58:34 +09:00
cutls
ecff3c7f8f plugin readme 2021-01-09 21:38:10 +09:00
cutls
5cee604d51 TheDesk 22.0.1(Koume) 2021-01-09 21:24:55 +09:00
cutls
f12f9ed047 change StartMenu 2021-01-09 21:19:21 +09:00
dependabot-preview[bot]
7f4e752b21 Bump sweetalert2 from 10.10.0 to 10.13.0 in /app
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 10.10.0 to 10.13.0.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v10.10.0...v10.13.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-09 12:13:06 +00:00
cutls
3ad4aca4a7 announce unread 2021-01-09 21:11:09 +09:00
cutls
4fbe7218e6 AiScript 2021-01-09 21:07:59 +09:00
cutls
46bc9474a0 emoji input 2021-01-09 17:51:40 +09:00
cutls
40ac7b33a1 scrollbar width 2021-01-09 17:51:35 +09:00
cutls
1db56bcfbb add reset width 2021-01-09 15:47:20 +09:00
dependabot-preview[bot]
4612dbe591 Bump chokidar from 3.4.3 to 3.5.0 in /app
Bumps [chokidar](https://github.com/paulmillr/chokidar) from 3.4.3 to 3.5.0.
- [Release notes](https://github.com/paulmillr/chokidar/releases)
- [Commits](https://github.com/paulmillr/chokidar/compare/3.4.3...3.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-06 20:14:03 +00:00
dependabot-preview[bot]
0a74b9c54b [Security] Bump ini from 1.3.5 to 1.3.8 in /app
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8. **This update includes a security fix.**
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-14 20:12:40 +00:00
cutls
a10a4d02b4 travis 2020-11-28 07:42:05 +09:00
cutls
6805ed32fb TheDesk 22.0.0 (Koume) 2020-11-28 07:32:06 +09:00
Cutls
1f2740b01e New Crowdin updates (#406)
* New translations setting.json (Serbian (Cyrillic))

* New translations setting.json (Russian)

* New translations setting.json (Portuguese)

* New translations setting.json (Swedish)

* New translations setting.json (Polish)

* New translations setting.json (Norwegian)

* New translations setting.json (Dutch)

* New translations setting.json (Italian)

* New translations setting.json (Chinese Traditional)

* New translations setting.json (Spanish, Argentina)

* New translations setting.json (Portuguese, Brazilian)

* New translations setting.json (Vietnamese)

* New translations setting.json (Chinese Simplified)

* New translations setting.json (Ukrainian)

* New translations setting.json (Turkish)

* New translations setting.json (Afrikaans)

* New translations setting.json (Bulgarian)

* New translations setting.json (Arabic)

* New translations setting.json (Spanish)

* New translations setting.json (French)

* New translations setting.json (Romanian)

* New translations setting.json (Catalan)

* New translations setting.json (Hungarian)

* New translations setting.json (Hebrew)

* New translations setting.json (Finnish)

* New translations setting.json (Greek)

* New translations setting.json (German)

* New translations setting.json (Danish)

* New translations setting.json (Czech)

* New translations setting.json (English)
2020-11-28 07:29:47 +09:00
cutls
74af696ad5 add 2020-11-28 07:26:18 +09:00
cutls
ec3c2369bc md 2020-11-28 07:08:55 +09:00
cutls
c0a6ecec4d Add: AiScript TheDesk Plugin 2020-11-28 07:07:16 +09:00
cutls
7169f1147b Add: plugin system[WIP] 2020-11-28 05:57:11 +09:00
cutls
8873af4597 Merge branch 'master' of github.com:cutls/TheDesk 2020-11-17 02:16:28 +09:00
Cutls
859acad27c New Crowdin updates (#369)
* New translations setting.json (French)

* New translations setting.json (French)

* New translations setting.json (French)

* New translations setting.json (French)

* New translations main.json (Portuguese)

* New translations main.json (Swedish)

* New translations index.json (Swedish)

* New translations main.json (Serbian (Cyrillic))

* New translations index.json (Serbian (Cyrillic))

* New translations main.json (Russian)

* New translations index.json (Russian)

* New translations index.json (Portuguese)

* New translations main.json (Polish)

* New translations index.json (Polish)

* New translations main.json (Norwegian)

* New translations index.json (Norwegian)

* New translations main.json (Dutch)

* New translations index.json (Turkish)

* New translations index.json (English)

* New translations main.json (Spanish, Argentina)

* New translations index.json (Spanish, Argentina)

* New translations main.json (Portuguese, Brazilian)

* New translations index.json (Portuguese, Brazilian)

* New translations main.json (Vietnamese)

* New translations index.json (Vietnamese)

* New translations main.json (Turkish)

* New translations main.json (Chinese Traditional)

* New translations index.json (Chinese Traditional)

* New translations main.json (Chinese Simplified)

* New translations index.json (Chinese Simplified)

* New translations main.json (Ukrainian)

* New translations index.json (Ukrainian)

* New translations index.json (Dutch)

* New translations index.json (Romanian)

* New translations main.json (Catalan)

* New translations index.json (Catalan)

* New translations main.json (Bulgarian)

* New translations index.json (Bulgarian)

* New translations main.json (Arabic)

* New translations index.json (Arabic)

* New translations main.json (Afrikaans)

* New translations index.json (Czech)

* New translations index.json (Afrikaans)

* New translations main.json (Spanish)

* New translations index.json (Spanish)

* New translations main.json (French)

* New translations index.json (French)

* New translations main.json (Romanian)

* New translations main.json (Czech)

* New translations main.json (Italian)

* New translations index.json (Finnish)

* New translations index.json (Italian)

* New translations main.json (Hungarian)

* New translations index.json (Hungarian)

* New translations main.json (Hebrew)

* New translations index.json (Hebrew)

* New translations main.json (Finnish)

* New translations main.json (Greek)

* New translations index.json (Greek)

* New translations main.json (German)

* New translations index.json (German)

* New translations main.json (Danish)

* New translations index.json (Danish)

* New translations main.json (English)

* New translations main.json (Swedish)

* New translations index.json (Swedish)

* New translations main.json (Serbian (Cyrillic))

* New translations index.json (Serbian (Cyrillic))

* New translations main.json (Russian)

* New translations index.json (Russian)

* New translations main.json (Portuguese)

* New translations index.json (Portuguese)

* New translations main.json (Polish)

* New translations index.json (Polish)

* New translations main.json (Norwegian)

* New translations index.json (Norwegian)

* New translations main.json (Dutch)

* New translations index.json (Turkish)

* New translations index.json (English)

* New translations main.json (Spanish, Argentina)

* New translations index.json (Spanish, Argentina)

* New translations main.json (Portuguese, Brazilian)

* New translations index.json (Portuguese, Brazilian)

* New translations main.json (Vietnamese)

* New translations index.json (Vietnamese)

* New translations main.json (Turkish)

* New translations main.json (Chinese Traditional)

* New translations index.json (Chinese Traditional)

* New translations main.json (Chinese Simplified)

* New translations index.json (Chinese Simplified)

* New translations main.json (Ukrainian)

* New translations index.json (Ukrainian)

* New translations index.json (Dutch)

* New translations index.json (Romanian)

* New translations main.json (Catalan)

* New translations index.json (Catalan)

* New translations main.json (Bulgarian)

* New translations index.json (Bulgarian)

* New translations main.json (Arabic)

* New translations index.json (Arabic)

* New translations main.json (Afrikaans)

* New translations index.json (Czech)

* New translations index.json (Afrikaans)

* New translations main.json (Spanish)

* New translations index.json (Spanish)

* New translations main.json (French)

* New translations index.json (French)

* New translations main.json (Romanian)

* New translations main.json (Czech)

* New translations main.json (Italian)

* New translations index.json (Finnish)

* New translations index.json (Italian)

* New translations main.json (Hungarian)

* New translations index.json (Hungarian)

* New translations main.json (Hebrew)

* New translations index.json (Hebrew)

* New translations main.json (Finnish)

* New translations main.json (Greek)

* New translations index.json (Greek)

* New translations main.json (German)

* New translations index.json (German)

* New translations main.json (Danish)

* New translations index.json (Danish)

* New translations main.json (English)
2020-11-17 02:16:12 +09:00
Cutls
44943e0e14 Merge pull request #372 from cutls/dependabot/npm_and_yarn/app/fortawesome/fontawesome-free-5.15.1
Bump @fortawesome/fontawesome-free from 5.14.0 to 5.15.1 in /app
2020-11-17 02:15:57 +09:00
Cutls
640847416a Merge pull request #379 from cutls/dependabot/npm_and_yarn/app/electron-builder-22.9.1
Bump electron-builder from 22.8.1 to 22.9.1 in /app
2020-11-17 02:15:45 +09:00
dependabot-preview[bot]
35122db142 Bump electron-builder from 22.8.1 to 22.9.1 in /app
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.8.1 to 22.9.1.
- [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/v22.8.1...v22.9.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-16 17:14:58 +00:00
Cutls
994ec964d6 Merge pull request #381 from cutls/dependabot/npm_and_yarn/app/chokidar-3.4.3
Bump chokidar from 3.4.2 to 3.4.3 in /app
2020-11-17 02:13:13 +09:00
Cutls
5508862ba1 Merge branch 'master' into dependabot/npm_and_yarn/app/chokidar-3.4.3 2020-11-17 02:13:06 +09:00
dependabot-preview[bot]
075a120856 Bump chokidar from 3.4.2 to 3.4.3 in /app
Bumps [chokidar](https://github.com/paulmillr/chokidar) from 3.4.2 to 3.4.3.
- [Release notes](https://github.com/paulmillr/chokidar/releases)
- [Commits](https://github.com/paulmillr/chokidar/compare/3.4.2...3.4.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-16 17:12:31 +00:00
Cutls
f34e2e6bbf Merge pull request #386 from cutls/dependabot/npm_and_yarn/app/electron-rebuild-2.3.2
Bump electron-rebuild from 2.0.3 to 2.3.2 in /app
2020-11-17 02:11:42 +09:00
Cutls
64296c69d3 Merge branch 'master' into dependabot/npm_and_yarn/app/electron-rebuild-2.3.2 2020-11-17 02:11:33 +09:00
Cutls
f4d250eeb3 Merge pull request #389 from cutls/dependabot/npm_and_yarn/app/electron-10.1.5
Bump electron from 10.1.2 to 10.1.5 in /app
2020-11-17 02:10:57 +09:00
Cutls
750c74ae69 Merge pull request #393 from cutls/dependabot/npm_and_yarn/app/eslint-7.13.0
Bump eslint from 7.9.0 to 7.13.0 in /app
2020-11-17 02:10:42 +09:00
Cutls
525dd5ec52 Merge pull request #397 from cutls/dependabot/npm_and_yarn/app/sweetalert2-10.10.0
Bump sweetalert2 from 10.3.5 to 10.10.0 in /app
2020-11-17 02:10:29 +09:00
cutls
89bb8d6496 node update 2020-11-17 02:09:50 +09:00
cutls
a7399db3f1 TheDesk 21.3.0 2020-11-17 01:56:58 +09:00
cutls
790ab2065c when in offline 2020-11-17 01:36:07 +09:00
cutls
fa20278727 CW when reply 2020-11-17 01:10:59 +09:00
cutls
f2a4900f18 add: draft 2020-11-17 01:00:32 +09:00
dependabot-preview[bot]
fd3afb6354 Bump sweetalert2 from 10.3.5 to 10.10.0 in /app
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 10.3.5 to 10.10.0.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v10.3.5...v10.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-11 20:13:15 +00:00
dependabot-preview[bot]
4a4dc82c40 Bump eslint from 7.9.0 to 7.13.0 in /app
Bumps [eslint](https://github.com/eslint/eslint) from 7.9.0 to 7.13.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.9.0...v7.13.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-09 20:13:17 +00:00
dependabot-preview[bot]
54db978b6f Bump electron from 10.1.2 to 10.1.5 in /app
Bumps [electron](https://github.com/electron/electron) from 10.1.2 to 10.1.5.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/master/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v10.1.2...v10.1.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-24 15:56:19 +00:00
dependabot-preview[bot]
1a35eda46f Bump electron-rebuild from 2.0.3 to 2.3.2 in /app
Bumps [electron-rebuild](https://github.com/electron/electron-rebuild) from 2.0.3 to 2.3.2.
- [Release notes](https://github.com/electron/electron-rebuild/releases)
- [Changelog](https://github.com/electron/electron-rebuild/blob/master/.releaserc.json)
- [Commits](https://github.com/electron/electron-rebuild/compare/v2.0.3...v2.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-22 02:04:00 +00:00
cutls
7d9ab19eef #373 looong more button 2020-10-18 18:33:53 +09:00
cutls
bdfeae20f2 #317 disabled toot button when offline 2020-10-18 18:04:31 +09:00
dependabot-preview[bot]
9931ecd577 Bump @fortawesome/fontawesome-free from 5.14.0 to 5.15.1 in /app
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.14.0 to 5.15.1.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.14.0...5.15.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-06 12:32:35 +00:00
cutls
99c2f0fc8d TheDesk 21.2.4 (Mayu) 2020-09-26 22:46:30 +09:00
cutls
58d9228aec Add italiano 2020-09-26 21:18:28 +09:00
Cutls
85738d72ae Merge pull request #362 from cutls/l10n_master
New Crowdin updates
2020-09-26 21:05:57 +09:00
Cutls
2fe60a3b69 Merge pull request #364 from cutls/dependabot/npm_and_yarn/app/sweetalert2-10.3.5
Bump sweetalert2 from 10.3.1 to 10.3.5 in /app
2020-09-26 21:05:34 +09:00
cutls
06c944a35d timeline subscription streaming bug 2020-09-26 21:04:21 +09:00
cutls
0f75972616 TheDesk Tips redesign 2020-09-26 21:02:48 +09:00
dependabot-preview[bot]
f55b08cbf3 Bump sweetalert2 from 10.3.1 to 10.3.5 in /app
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 10.3.1 to 10.3.5.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v10.3.1...v10.3.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-26 05:02:25 +00:00
Cutls
51814e49d7 New translations setting.json (German) 2020-09-24 22:42:05 +09:00
Cutls
36d8a00a49 New translations index.json (German) 2020-09-24 22:42:04 +09:00
Cutls
1c8ca3b5f9 New translations acct.json (German) 2020-09-24 22:42:02 +09:00
cutls
1cbd6992e3 em fix 2020-09-23 03:14:37 +09:00
cutls
1f3a27325b TheDesk 21.2.3 (Mayu) 2020-09-23 02:22:09 +09:00
Cutls
890ec772f9 Merge pull request #357 from cutls/dependabot/npm_and_yarn/app/electron-rebuild-2.0.3
Bump electron-rebuild from 1.11.0 to 2.0.3 in /app
2020-09-23 02:10:30 +09:00
Cutls
b072012976 Merge pull request #359 from cutls/dependabot/npm_and_yarn/app/sweetalert2-10.3.1
Bump sweetalert2 from 10.0.2 to 10.3.1 in /app
2020-09-23 02:10:19 +09:00
cutls
8982058a25 Coding for the KIRENAI streaming 2020-09-23 01:35:28 +09:00
dependabot-preview[bot]
fb95e077e9 Bump sweetalert2 from 10.0.2 to 10.3.1 in /app
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 10.0.2 to 10.3.1.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v10.0.2...v10.3.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-22 08:52:01 +00:00
cutls
dc08f46909 delete custom-electron-titlebar 2020-09-18 21:49:55 +09:00
dependabot-preview[bot]
3e6a47d5f7 Bump electron-rebuild from 1.11.0 to 2.0.3 in /app
Bumps [electron-rebuild](https://github.com/electron/electron-rebuild) from 1.11.0 to 2.0.3.
- [Release notes](https://github.com/electron/electron-rebuild/releases)
- [Changelog](https://github.com/electron/electron-rebuild/blob/master/.releaserc.json)
- [Commits](https://github.com/electron/electron-rebuild/compare/v1.11.0...v2.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-17 16:10:21 +00:00
cutls
aabcfb230f Merge branch 'master' of github.com:cutls/TheDesk 2020-09-17 21:42:17 +09:00
cutls
ee99a660c2 use lazyload 2020-09-17 21:42:04 +09:00
cutls
5063061a70 to spell check false 2020-09-17 21:41:55 +09:00
Cutls
c3ce7bd516 New Crowdin updates (#324)
* New translations setting.json (Catalan)

* New translations setting.json (Danish)

* New translations setting.json (Greek)

* New translations setting.json (Finnish)

* New translations setting.json (Hebrew)

* New translations setting.json (Bulgarian)

* New translations setting.json (Romanian)

* New translations setting.json (French)

* New translations setting.json (Spanish)

* New translations setting.json (Arabic)

* New translations setting.json (Afrikaans)

* New translations setting.json (Ukrainian)

* New translations setting.json (Turkish)

* New translations setting.json (Swedish)

* New translations setting.json (Serbian (Cyrillic))

* New translations setting.json (Chinese Traditional)

* New translations setting.json (Vietnamese)

* New translations setting.json (Portuguese, Brazilian)

* New translations setting.json (Dutch)

* New translations setting.json (Hungarian)

* New translations setting.json (Italian)

* New translations setting.json (Russian)

* New translations setting.json (Norwegian)

* New translations setting.json (Polish)

* New translations setting.json (Portuguese)

* New translations index.json (Serbian (Cyrillic))

* New translations index.json (Russian)

* New translations index.json (Portuguese)

* New translations index.json (Polish)

* New translations index.json (Norwegian)

* New translations index.json (Dutch)

* New translations index.json (Italian)

* New translations index.json (Portuguese, Brazilian)

* New translations index.json (Vietnamese)

* New translations index.json (Chinese Traditional)

* New translations index.json (Swedish)

* New translations index.json (Ukrainian)

* New translations index.json (Turkish)

* New translations index.json (Arabic)

* New translations index.json (Afrikaans)

* New translations index.json (Spanish)

* New translations index.json (French)

* New translations index.json (Romanian)

* New translations index.json (Catalan)

* New translations index.json (Hungarian)

* New translations index.json (Hebrew)

* New translations index.json (Finnish)

* New translations index.json (Greek)

* New translations index.json (Danish)

* New translations index.json (Portuguese, Brazilian)

* New translations acct.json (Portuguese, Brazilian)

* New translations index.json (Portuguese, Brazilian)

* New translations main.json (Portuguese, Brazilian)

* New translations setting.json (Portuguese, Brazilian)

* New translations setting.json (Serbian (Cyrillic))

* New translations setting.json (Russian)

* New translations setting.json (Portuguese)

* New translations setting.json (Swedish)

* New translations setting.json (Polish)

* New translations setting.json (Norwegian)

* New translations setting.json (Dutch)

* New translations setting.json (Italian)

* New translations setting.json (Chinese Traditional)

* New translations setting.json (Spanish, Argentina)

* New translations setting.json (Portuguese, Brazilian)

* New translations setting.json (Vietnamese)

* New translations setting.json (Chinese Simplified)

* New translations setting.json (Ukrainian)

* New translations setting.json (Turkish)

* New translations setting.json (Afrikaans)

* New translations setting.json (Bulgarian)

* New translations setting.json (Arabic)

* New translations setting.json (Spanish)

* New translations setting.json (French)

* New translations setting.json (Romanian)

* New translations setting.json (Catalan)

* New translations setting.json (Hungarian)

* New translations setting.json (Hebrew)

* New translations setting.json (Finnish)

* New translations setting.json (Greek)

* New translations setting.json (German)

* New translations setting.json (Danish)

* New translations setting.json (Czech)

* New translations setting.json (English)

* New translations setting.json (Portuguese)

* New translations setting.json (Swedish)

* New translations setting.json (Serbian (Cyrillic))

* New translations setting.json (Russian)

* New translations setting.json (Polish)

* New translations setting.json (Norwegian)

* New translations setting.json (Dutch)

* New translations setting.json (Turkish)

* New translations setting.json (Italian)

* New translations setting.json (Catalan)

* New translations setting.json (Romanian)

* New translations setting.json (French)

* New translations setting.json (Spanish)

* New translations setting.json (Afrikaans)

* New translations setting.json (Bulgarian)

* New translations setting.json (Greek)

* New translations setting.json (Hungarian)

* New translations setting.json (Hebrew)

* New translations setting.json (Finnish)

* New translations setting.json (Czech)

* New translations setting.json (Danish)

* New translations setting.json (Arabic)

* New translations setting.json (German)

* New translations setting.json (Chinese Traditional)

* New translations setting.json (English)

* New translations setting.json (Ukrainian)

* New translations setting.json (Chinese Simplified)

* New translations setting.json (Spanish, Argentina)

* New translations setting.json (Vietnamese)

* New translations setting.json (Portuguese, Brazilian)

* New translations setting.json (Catalan)

* New translations main.json (Czech)

* New translations setting.json (Czech)

* New translations main.json (Danish)

* New translations setting.json (Danish)

* New translations main.json (German)

* New translations setting.json (German)

* New translations main.json (Greek)

* New translations setting.json (Greek)

* New translations main.json (Finnish)

* New translations main.json (Catalan)

* New translations setting.json (Spanish)

* New translations main.json (Romanian)

* New translations setting.json (Bulgarian)

* New translations setting.json (Romanian)

* New translations setting.json (French)

* New translations main.json (Spanish)

* New translations main.json (French)

* New translations setting.json (Arabic)

* New translations main.json (Bulgarian)

* New translations main.json (Arabic)

* New translations setting.json (Afrikaans)

* New translations main.json (Afrikaans)

* New translations main.json (Chinese Simplified)

* New translations setting.json (Ukrainian)

* New translations main.json (Ukrainian)

* New translations setting.json (Turkish)

* New translations main.json (Turkish)

* New translations setting.json (Swedish)

* New translations main.json (Swedish)

* New translations setting.json (Chinese Simplified)

* New translations setting.json (Portuguese, Brazilian)

* New translations main.json (Portuguese, Brazilian)

* New translations setting.json (Serbian (Cyrillic))

* New translations setting.json (English)

* New translations setting.json (Spanish, Argentina)

* New translations main.json (Spanish, Argentina)

* New translations main.json (Chinese Traditional)

* New translations setting.json (Vietnamese)

* New translations main.json (Vietnamese)

* New translations setting.json (Chinese Traditional)

* New translations setting.json (Italian)

* New translations main.json (Serbian (Cyrillic))

* New translations main.json (Hungarian)

* New translations main.json (Italian)

* New translations setting.json (Hungarian)

* New translations setting.json (Dutch)

* New translations setting.json (Hebrew)

* New translations main.json (Hebrew)

* New translations setting.json (Finnish)

* New translations main.json (Dutch)

* New translations main.json (Portuguese)

* New translations setting.json (Russian)

* New translations main.json (Russian)

* New translations setting.json (Portuguese)

* New translations setting.json (Polish)

* New translations main.json (Polish)

* New translations setting.json (Norwegian)

* New translations main.json (Norwegian)

* New translations main.json (English)

* New translations main.json (Arabic)

* New translations main.json (Afrikaans)

* New translations main.json (Bulgarian)

* New translations main.json (Romanian)

* New translations main.json (French)

* New translations main.json (Spanish)

* New translations main.json (Turkish)

* New translations main.json (Swedish)

* New translations main.json (Russian)

* New translations main.json (Serbian (Cyrillic))

* New translations main.json (Portuguese)

* New translations main.json (Ukrainian)

* New translations main.json (Vietnamese)

* New translations main.json (Spanish, Argentina)

* New translations main.json (Portuguese, Brazilian)

* New translations main.json (Chinese Traditional)

* New translations main.json (Chinese Simplified)

* New translations main.json (Italian)

* New translations main.json (Polish)

* New translations main.json (Danish)

* New translations main.json (Greek)

* New translations main.json (German)

* New translations main.json (Czech)

* New translations main.json (Catalan)

* New translations main.json (Finnish)

* New translations main.json (Norwegian)

* New translations main.json (Dutch)

* New translations main.json (Hungarian)

* New translations main.json (Hebrew)

* New translations main.json (English)

* New translations acct.json (Portuguese, Brazilian)

* New translations main.json (Portuguese, Brazilian)

* New translations main.json (Portuguese, Brazilian)

* New translations setting.json (Portuguese, Brazilian)

* New translations index.json (Portuguese, Brazilian)

* New translations main.json (Portuguese, Brazilian)

* New translations setting.json (Portuguese, Brazilian)

* New translations update.json (Portuguese, Brazilian)

* New translations index.json (Portuguese, Brazilian)

* New translations main.json (Portuguese, Brazilian)

* New translations acct.json (Italian)

* New translations index.json (Italian)

* New translations main.json (Italian)

* New translations setting.json (Italian)

* New translations acct.json (Italian)

* New translations index.json (Italian)

* New translations main.json (Italian)

* New translations index.json (Italian)

* New translations main.json (Italian)

* New translations setting.json (Italian)

* New translations index.json (Italian)

* New translations main.json (Italian)

* New translations setting.json (Italian)

* New translations index.json (Italian)

* New translations index.json (Italian)

* New translations main.json (Italian)

* New translations setting.json (Italian)

* New translations update.json (Italian)

* New translations main.json (Italian)

* New translations setting.json (Italian)

* New translations update.json (Italian)

* New translations main.json (Italian)

* New translations main.json (Italian)

* New translations main.json (Italian)

* New translations setting.json (Italian)

* New translations setting.json (Italian)

* New translations setting.json (Italian)

* New translations setting.json (Italian)

* New translations setting.json (Italian)

* New translations setting.json (Italian)

* New translations setting.json (Italian)

* New translations setting.json (Italian)

* New translations setting.json (Italian)

* New translations setting.json (Italian)

* New translations setting.json (Italian)

* New translations setting.json (Italian)
2020-09-17 21:31:47 +09:00
Cutls
95efd96c3e Merge pull request #328 from cutls/dependabot/npm_and_yarn/app/electron-dl-3.0.2
Bump electron-dl from 3.0.1 to 3.0.2 in /app
2020-09-17 21:29:23 +09:00
Cutls
abf5274c06 Merge branch 'master' into dependabot/npm_and_yarn/app/electron-dl-3.0.2 2020-09-17 21:28:40 +09:00
dependabot-preview[bot]
db5d3182bc Bump electron-dl from 3.0.1 to 3.0.2 in /app
Bumps [electron-dl](https://github.com/sindresorhus/electron-dl) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/sindresorhus/electron-dl/releases)
- [Commits](https://github.com/sindresorhus/electron-dl/compare/v3.0.1...v3.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-17 12:27:26 +00:00
Cutls
0527c978ce Merge pull request #329 from cutls/dependabot/npm_and_yarn/app/chokidar-3.4.2
Bump chokidar from 3.4.1 to 3.4.2 in /app
2020-09-17 21:26:54 +09:00
Cutls
b36de5dc26 Merge pull request #332 from cutls/dependabot/npm_and_yarn/app/lodash-4.17.20
Bump lodash from 4.17.19 to 4.17.20 in /app
2020-09-17 21:26:30 +09:00
Cutls
92b47e56f7 Merge pull request #333 from cutls/dependabot/npm_and_yarn/app/custom-electron-titlebar-3.2.4
Bump custom-electron-titlebar from 3.2.3 to 3.2.4 in /app
2020-09-17 21:26:17 +09:00
Cutls
fc967f92f3 Merge pull request #335 from cutls/dependabot/npm_and_yarn/app/vue-2.6.12
Bump vue from 2.6.11 to 2.6.12 in /app
2020-09-17 21:26:02 +09:00
Cutls
1882bbf0b6 Merge pull request #339 from cutls/dependabot/npm_and_yarn/app/jimp-0.16.1
Bump jimp from 0.14.0 to 0.16.1 in /app
2020-09-17 21:25:42 +09:00
Cutls
a3fed1f6f0 Merge pull request #345 from cutls/dependabot/npm_and_yarn/app/yargs-parser-15.0.1
[Security] Bump yargs-parser from 15.0.0 to 15.0.1 in /app
2020-09-17 21:25:25 +09:00
Cutls
eae0fd1768 Merge pull request #348 from cutls/dependabot/npm_and_yarn/app/sweetalert2-10.0.2
Bump sweetalert2 from 9.17.0 to 10.0.2 in /app
2020-09-17 21:25:04 +09:00
dependabot-preview[bot]
a7a99fc3a2 [Security] Bump yargs-parser from 15.0.0 to 15.0.1 in /app
Bumps [yargs-parser](https://github.com/yargs/yargs-parser) from 15.0.0 to 15.0.1. **This update includes a security fix.**
- [Release notes](https://github.com/yargs/yargs-parser/releases)
- [Changelog](https://github.com/yargs/yargs-parser/blob/master/docs/CHANGELOG-full.md)
- [Commits](https://github.com/yargs/yargs-parser/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-17 12:24:41 +00:00
dependabot-preview[bot]
fedd80477b Bump chokidar from 3.4.1 to 3.4.2 in /app
Bumps [chokidar](https://github.com/paulmillr/chokidar) from 3.4.1 to 3.4.2.
- [Release notes](https://github.com/paulmillr/chokidar/releases)
- [Commits](https://github.com/paulmillr/chokidar/compare/3.4.1...3.4.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-17 12:24:21 +00:00
Cutls
844d145e09 Merge pull request #350 from Ding-Fan/patch-1
Update README.md
2020-09-17 21:23:57 +09:00
Cutls
a817c14925 Merge pull request #354 from cutls/dependabot/npm_and_yarn/app/electron-builder-22.8.1
Bump electron-builder from 22.7.0 to 22.8.1 in /app
2020-09-17 21:23:20 +09:00
Cutls
70e145eceb Merge branch 'master' into dependabot/npm_and_yarn/app/electron-builder-22.8.1 2020-09-17 21:23:11 +09:00
Cutls
438f11c11d Merge pull request #351 from cutls/dependabot/npm_and_yarn/app/electron-10.1.2
Bump electron from 9.1.1 to 10.1.2 in /app
2020-09-17 21:22:32 +09:00
dependabot-preview[bot]
edf75d1915 Bump electron-builder from 22.7.0 to 22.8.1 in /app
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.7.0 to 22.8.1.
- [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/v22.7.0...v22.8.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-17 12:08:46 +00:00
dependabot-preview[bot]
9de26d9998 Bump lodash from 4.17.19 to 4.17.20 in /app
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.19 to 4.17.20.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.19...4.17.20)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-17 12:08:36 +00:00
dependabot-preview[bot]
ab5a786197 Bump electron from 9.1.1 to 10.1.2 in /app
Bumps [electron](https://github.com/electron/electron) from 9.1.1 to 10.1.2.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/master/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v9.1.1...v10.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-17 12:08:35 +00:00
Cutls
272b613e18 Merge pull request #352 from cutls/dependabot/npm_and_yarn/app/eslint-7.9.0
Bump eslint from 7.6.0 to 7.9.0 in /app
2020-09-17 21:06:49 +09:00
cutls
35c10e0c7d css fix 2020-09-17 21:05:08 +09:00
cutls
7795adf173 #353 subscription type streaming JSON bug 2020-09-17 21:05:01 +09:00
dependabot-preview[bot]
dca2e5fdab Bump eslint from 7.6.0 to 7.9.0 in /app
Bumps [eslint](https://github.com/eslint/eslint) from 7.6.0 to 7.9.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.6.0...v7.9.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-15 09:37:21 +00:00
Ding
eb6dcdfa5d Update README.md
fix typo
2020-09-13 00:49:27 +08:00
cutls
9f4f788519 toogle with mouseover 2020-09-11 21:25:27 +09:00
dependabot-preview[bot]
1d7588e4e4 Bump sweetalert2 from 9.17.0 to 10.0.2 in /app
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 9.17.0 to 10.0.2.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v9.17.0...v10.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-09 16:43:12 +00:00
cutls
81c476c1bb TheDesk 21.2.2 (Mayu) 2020-09-09 22:04:24 +09:00
cutls
ccc44ca769 bump 2020-09-09 20:54:31 +09:00
cutls
82c5a853cb fix 2020-09-09 20:54:07 +09:00
cutls
e11af25ba6 TheDesk 21.2.1 (Mayu) 2020-09-09 20:46:52 +09:00
cutls
16b68bb190 TheDesk 21.2.0 (Mayu) 2020-09-09 17:15:19 +09:00
cutls
051dbb3b1b For store only build 2020-09-09 16:59:18 +09:00
cutls
bdf2b9be71 disabled version checker for MS Store 2020-09-09 16:58:41 +09:00
cutls
0b6a76d01a travis trial 6 2020-09-09 16:53:44 +09:00
cutls
bd1e1f7ee8 travis trial 5 2020-09-09 16:49:00 +09:00
cutls
e9c7ffe825 travis trial 4 2020-09-09 16:45:32 +09:00
cutls
9e735bc7df travis trial 3 2020-09-09 16:42:12 +09:00
cutls
eefc03c4f3 travis trial 2 2020-09-09 16:37:17 +09:00
cutls
135caffaec travis trial 1 2020-09-09 16:34:45 +09:00
cutls
c1f7abac58 not to ban for MS Store 2020-09-09 16:33:11 +09:00
cutls
a325c50f1f pwa exp 2020-09-08 23:56:35 +09:00
cutls
37daa5638b to pwa 2020-09-08 23:46:55 +09:00
cutls
8118806f4e fix input type color css 2020-09-08 23:39:06 +09:00
cutls
3f7aaa7e99 new custom/default css 2020-09-08 23:35:30 +09:00
cutls
700de676d0 to streaming notifications with new subscription type streaming 2020-09-08 23:35:13 +09:00
cutls
52a8ec8033 to fix translate btn design 2020-09-08 23:34:42 +09:00
cutls
40a884b4f5 Redesign of column setting 2020-09-08 18:50:05 +09:00
cutls
62df4e2fac bug of custom sound 2020-09-08 18:49:55 +09:00
cutls
69d60a7372 I8d TL streaming 2020-09-07 19:06:57 +09:00
cutls
9623b79197 #317 dropdown menu with library 2020-09-07 16:36:25 +09:00
cutls
ec1481aed0 fix 2020-09-07 00:58:26 +09:00
cutls
1e76867fd1 TheDesk 21.1.1 (Mayu) 2020-09-07 00:55:47 +09:00
cutls
7ff01413e5 some fix 2020-09-07 00:23:10 +09:00
cutls
48b3ed3aca some fix 2020-09-07 00:14:51 +09:00
cutls
e75d52f985 TheDesk 21.1.0 (Mayu) 2020-09-07 00:08:30 +09:00
cutls
3f95e755b5 cannot get next fav/flw/fler 2020-09-06 23:29:12 +09:00
cutls
9d0f4096f8 #317 nice reload 2020-09-06 22:57:20 +09:00
cutls
e402e0e7a7 materialize-css update 2020-09-06 21:39:16 +09:00
cutls
38c77fb39e streaming disconnect warrior 2020-09-06 21:38:15 +09:00
cutls
3020adbe9d #317 annoucement 2020-09-06 21:37:50 +09:00
cutls
4df390713c #317 announcement bug 2020-09-04 23:54:49 +09:00
cutls
bec4444388 #307 #317 margin between timelines 2020-09-04 23:43:04 +09:00
cutls
2d249f6f19 max/min width of column 2020-09-03 23:17:01 +09:00
cutls
4d1053ce99 Use proxy media url for unknown media 2020-09-03 22:57:53 +09:00
cutls
0522331977 Channel subscription type streaming 2020-09-03 11:21:20 +09:00
cutls
eb9520397c z-index 2020-09-03 11:20:57 +09:00
cutls
f0c93b8fce #342 emoji 2020-09-03 11:20:36 +09:00
cutls
b3e9c3d6ce wip: channel subscription type streaming 2020-09-02 13:24:59 +09:00
cutls
99793f2e20 TheDesk Nano fixed 2020-09-02 12:11:02 +09:00
cutls
f43bd64be2 minimum hashtag streaming 2020-09-02 12:02:31 +09:00
cutls
fa440e8d9b fix some CSS 2020-08-30 22:42:49 +09:00
dependabot-preview[bot]
db4d457325 Bump jimp from 0.14.0 to 0.16.1 in /app
Bumps [jimp](https://github.com/oliver-moran/jimp) from 0.14.0 to 0.16.1.
- [Release notes](https://github.com/oliver-moran/jimp/releases)
- [Changelog](https://github.com/oliver-moran/jimp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/oliver-moran/jimp/compare/v0.14.0...v0.16.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-29 15:10:29 +00:00
dependabot-preview[bot]
d87245899e Bump vue from 2.6.11 to 2.6.12 in /app
Bumps [vue](https://github.com/vuejs/vue) from 2.6.11 to 2.6.12.
- [Release notes](https://github.com/vuejs/vue/releases)
- [Commits](https://github.com/vuejs/vue/compare/v2.6.11...v2.6.12)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-20 20:30:38 +00:00
dependabot-preview[bot]
ac6260ab24 Bump custom-electron-titlebar from 3.2.3 to 3.2.4 in /app
Bumps [custom-electron-titlebar](https://github.com/AlexTorresSk/custom-electron-titlebar) from 3.2.3 to 3.2.4.
- [Release notes](https://github.com/AlexTorresSk/custom-electron-titlebar/releases)
- [Commits](https://github.com/AlexTorresSk/custom-electron-titlebar/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-14 22:58:13 +00:00
cutls
91bc8c8bdd WIP #317 last.fm 2020-08-12 10:01:14 +09:00
cutls
74d756d43b #317 for a11y 2020-08-12 09:48:28 +09:00
cutls
2281d0ca35 #317 WebView prefer 2020-08-05 12:46:10 +09:00
cutls
31cc929c68 #317 last_status type 2020-08-05 12:38:51 +09:00
cutls
80ce93785a #317 context menu 2020-08-05 12:26:59 +09:00
cutls
1710ab0035 [WIP] linting 2020-08-02 16:08:07 +09:00
209 changed files with 13068 additions and 7738 deletions

9
.gitignore vendored
View File

@@ -20,7 +20,16 @@ app/view/bg
app/view/cs app/view/cs
app/view/ps app/view/ps
app/view/es-AR app/view/es-AR
app/view/it-IT
app/git app/git
*.code-workspace *.code-workspace
releasenote.md releasenote.md
app/yarn-error.log app/yarn-error.log
app/js/platform/aiscript.js
app/view/es-ES
app/view/fr-FR
app/view/no-NO
app/view/zh-CN
app/view/ru-RU
app/view/zh-TW
app/view/pt-BR

View File

@@ -6,15 +6,30 @@ language: node_js
env: env:
- YARN_GPG=no - YARN_GPG=no
node_js: node_js:
- '10.15.2' - '12.17.0'
cache: cache:
yarn: true yarn: true
script: node -v script: node -v
before_deploy: before_deploy:
- yarn global add electron-builder - yarn global add electron-builder
- yarn global add browserify
- cd app - cd app
- VERSION=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]') - VERSION=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]')
- yarn install --no-lockfile --prod - yarn install --no-lockfile --prod
- yarn construct:store
- if [ "$TRAVIS_OS_NAME" = "osx" ];then electron-builder --mac -p never;else :;fi
- if [ "$TRAVIS_OS_NAME" = "osx" ];then cd ../build;else :;fi
- if [ "$TRAVIS_OS_NAME" = "osx" ];then mv *.dmg TheDesk-$VERSION-store.dmg;else :;fi
- if [ "$TRAVIS_OS_NAME" = "osx" ];then cd ../app;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then electron-builder --linux snap:x64 -p never;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../build;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then mv *.snap TheDesk-$VERSION-store.snap;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../app;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then yarn add electron-builder;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then electron-builder --win appx:x64 -p never ;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../build;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then mv *.appx TheDesk-$VERSION-store.appx;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../app;else :;fi
- yarn construct - yarn construct
- if [ "$TRAVIS_OS_NAME" = "osx" ];then electron-builder --mac -p never;else :;fi - if [ "$TRAVIS_OS_NAME" = "osx" ];then electron-builder --mac -p never;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then electron-builder --linux --x64 -p never;else :;fi - if [ "$TRAVIS_OS_NAME" = "linux" ];then electron-builder --linux --x64 -p never;else :;fi
@@ -22,7 +37,6 @@ before_deploy:
- if [ "$TRAVIS_OS_NAME" = "linux" ];then ls;else :;fi - if [ "$TRAVIS_OS_NAME" = "linux" ];then ls;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then mv thedesk-*.zip thedesk.zip;else :;fi - if [ "$TRAVIS_OS_NAME" = "linux" ];then mv thedesk-*.zip thedesk.zip;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../app;else :;fi - if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../app;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then yarn add electron-builder;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then electron-builder --win --ia32 -p never;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 cd ../build;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then ls;else :;fi - if [ "$TRAVIS_OS_NAME" = "windows" ];then ls;else :;fi

View File

@@ -11,7 +11,10 @@
Mastodon/Misskey client for PC(Windows/Linux/macOS) Mastodon/Misskey client for PC(Windows/Linux/macOS)
オープンソースSNSマストドン/MisskeyのPC向けクライアント[日本語はこちら](README_ja.md) オープンソースSNSマストドン/MisskeyのPC向けクライアント[日本語はこちら](README_ja.md)
Download:[TheDesk](https://thedesk.top) [![check](https://status.cutls.com/badge/?site=thedesk.top)](https://status.cutls.com) Download:[TheDesk](https://thedesk.top)
On GitHub Releases, `-store.*` assets are made for some application store or manager(Snapcraft, Homebrew, Microsoft Store).
They do not check the latest version(Which you can get the latest ver or not depends on the store)
<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> <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>
<a href="https://liberapay.com/cutls/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a> <a href="https://liberapay.com/cutls/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a>
@@ -28,19 +31,24 @@ The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.o
* [SVG 4095x4096](https://d2upiril6ywqp9.cloudfront.net/press/thedesk-fullcolor.svg) * [SVG 4095x4096](https://d2upiril6ywqp9.cloudfront.net/press/thedesk-fullcolor.svg)
* [ico 256x256](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ico) * [ico 256x256](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ico)
* [icns old](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.icns) * [icns old](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.icns)
* [Illustrator .ai](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ai)
The default sounds of notifications is provided [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/) The default sounds of notifications is provided [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/)
## Terms of Use ## Privacy Policy
* [利用規約(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)
* 日本語, 関西(Japanese, Kansai)
* English * English
* de, cs, bg(from Crowdin) * български(Bulgarian) with [translate project](https://translate.thedesk.top/project/thedesk/bg)
* Česky(Czech) with [translate project](https://translate.thedesk.top/project/thedesk/cs)
* Deutsch(German) with [translate project](https://translate.thedesk.top/project/thedesk/de)
* Español, argentina(Spanish, Argentina) with [translate project](https://translate.thedesk.top/project/thedesk/es-AR)
* italiano(Italian) with [translate project](https://translate.thedesk.top/project/thedesk/it-IT)
### Translation ### Translation
@@ -48,15 +56,17 @@ Crowdin project is available! Visit: https://translate.thedesk.top
### Run on developer mode ### Run on developer mode
`npm run dev` on `app` folder. `npm run dev` on `app` folder.(before you should run `yarn construct` to make HTML views)
If you change HTML or language files, you should rub to `yarn construct`. Or `yarn watchview` can always watch and construct such files with 1 process.
## Contributors ## Contributors
Build for macOS Build for macOS(Now: Travis CI)
* [toneji](https://minohdon.jp/@toneji) * [toneji](https://minohdon.jp/@toneji)
Build for Linux Build for Linux(Now: Travis CI)
* [popn_ja](https://popon.pptdn.jp/@popn_ja) * [popn_ja](https://popon.pptdn.jp/@popn_ja)
@@ -66,7 +76,8 @@ Fellow coder
## Build ## Build
You have to use either **npm** or **yarn**. Whichever you use, it works well. You should use `yarn` but you can use also `npm`, but if you build on Windows, you should strongly use `yarn`
`yarn ***` and `npm run ***` has the same meaning,
### npm ### npm
@@ -91,27 +102,11 @@ yarn install
yarn construct yarn construct
``` ```
run `npm run dev` or `yarn dev` to launch developer version with console(click `view`) run `yarn dev` to launch developer version with console(click `view`)
### electron-builder(Recommended) ### electron-builder(Recommended)
Use scripts(they can work well with npm, **yarn**). Use scripts(they can work well with npm, **yarn**).
#### npm
```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
```
#### yarn
```sh ```sh
# Build for current platform # Build for current platform
yarn build yarn build
@@ -128,7 +123,7 @@ yarn build:all
Config is all on package.json Config is all on package.json
### electron-packager ### electron-packager
`npm install --save-dev electron-rebuild` `yarn --D electron-rebuild`
Linux/macOS Linux/macOS
`./node_modules/.bin/electron-rebuild` `./node_modules/.bin/electron-rebuild`
@@ -139,19 +134,25 @@ To install Python 2.x and Visual C++ for Windows, before running `npm install --
`npm install --global windows-build-tools` `npm install --global windows-build-tools`
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
`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` ```
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 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
```
### PWA support ### PWA support
TheDesk is a wed-based app, so you can run it on a browser. Of course, the main stream is as Electron. Some features won't work as well as Electron. TheDesk is a web-based app, so you can run it on a browser. Of course, the main stream is as Electron. Some features won't work as well as Electron.
You can run `npm run build:pwa` to build as PWA, including `manifest.json` and the ServiceWorker. You can run `npm run build:pwa` to build as PWA, including `manifest.json` and the ServiceWorker.
**You have to rename `node_modules` to `dependencies` to run as a web application. (restricted by Netlify)** **You have to rename `node_modules` to `dependencies` to run as a web application. (restricted by Netlify, but always you should do to run as PWA)**
Check the app on Chrome or Firefox: [Here](https://app.thedesk.top) (it follows the `master` branch, so not stable.) Check the app on Chrome or Firefox: [Here](https://app.thedesk.top) (it follows the `master` branch, so not stable.)
[![Netlify Status](https://api.netlify.com/api/v1/badges/6916503b-2882-43f7-9681-ab814e6d28f9/deploy-status)](https://app.netlify.com/sites/thedesk/deploys) [![Netlify Status](https://api.netlify.com/api/v1/badges/6916503b-2882-43f7-9681-ab814e6d28f9/deploy-status)](https://app.netlify.com/sites/thedesk/deploys)
@@ -162,6 +163,6 @@ 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.
## Vulnerabilities when `npm i`??? ## Vulnerabilities when `yarn install`???
No, if your npm says materialize-css has vulnerabilities(CVE-2019-11002/3/4), look at [here](https://github.com/Dogfalo/materialize/issues/6286) under discussion. No, if your npm says materialize-css has vulnerabilities(CVE-2019-11002/3/4), look at [here](https://github.com/Dogfalo/materialize/issues/6286) under discussion, but I do not think this report is really fatal.

View File

@@ -10,10 +10,12 @@
![Contributors](https://flat.badgen.net/github/contributors/cutls/TheDesk) ![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のPC向けクライアント オープンソースSNSマストドン/MisskeyのPC向けクライアント
Download:[TheDesk](https://thedesk.top) [![check](https://status.cutls.com/badge/?site=thedesk.top)](https://status.cutls.com) Download:[TheDesk](https://thedesk.top)
[Pixiv FANBOX](https://www.pixiv.net/fanbox/creator/28105985) [Pixiv FANBOX](https://www.pixiv.net/fanbox/creator/28105985)
`-store.*`とあるアセットはストアやパッケージマネージャ向けのもので、アップデートの確認をソフト本体で行いません。
![Screenshots1](https://thedesk.top/img/scr1.png) ![Screenshots1](https://thedesk.top/img/scr1.png)
## ライセンス ## ライセンス
@@ -31,32 +33,39 @@ Download:[TheDesk](https://thedesk.top) [![check](https://status.cutls.com/badge
標準の通知音は [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/) で提供されています。 標準の通知音は [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/) で提供されています。
## 利用規約 ## プライバシーポリシー
* [利用規約](https://thedesk.top/tos.html)
* [プライバシーポリシー](https://thedesk.top/priv.html) * [プライバシーポリシー](https://thedesk.top/priv.html)
## 言語 ## 言語
* 日本語 * 日本語
* 日本語(関西)
* English(英語) * English(英語)
* ドイツ語, チェコ語, ブルガリア語(from Crowdin) * ドイツ語, チェコ語, ブルガリア語, イタリア語, スペイン語アルゼンチン方言 (from [Crowdin](https://translate.thedesk.top))
### 翻訳 ### 翻訳
Crowdinから翻訳に参加してみませんか: https://translate.thedesk.top Crowdinから翻訳に参加してみませんか: https://translate.thedesk.top
以下、`yarn ***`は全て`npm run ***`で実行できます。(yarnが推奨)
### デベロッパーモード ### デベロッパーモード
`npm run dev``app`フォルダ内で実行 `yarn dev``app`フォルダ内で実行
ただし、最初に`yarn construct`必須。
watchモード(ホットリロードはしません): `yarn construct`の代わりに`yarn watchview`
HTMLや言語定義の変更について、このコマンドで継続監視します。その他のアセットの変更には不要です。
プロセス1つを占拠するので、`yarn dev`は他のプロセスで行ってください。
## 主なコントリビューター ## 主なコントリビューター
macOSビルダー macOSビルダー(現在はTravis CI)
* [とねぢ](https://minohdon.jp/@toneji) * [とねぢ](https://minohdon.jp/@toneji)
Linuxビルダー Linuxビルダー(現在はTravis CI)
* [ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja) * [ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja)
@@ -66,7 +75,7 @@ Linuxビルダー
## ビルド ## ビルド
npmでもyarnでも好きな方を選んでください。 npmでもyarnでも好きな方を選んでください。Windows環境ではyarnを強く推奨します。
### npm ### npm
@@ -95,22 +104,6 @@ yarn construct
scriptsを利用します scriptsを利用します
#### npm
```sh
# 実行している環境向けにビルド
npm run build
# ターゲットを指定してビルド
## Windows
npm run build:win
## macOS向けのビルドにはmacOSで実行する必要があるためこのコマンドではビルドされません
npm run build:all
```
#### yarn
```sh ```sh
# 実行している環境向けにビルド # 実行している環境向けにビルド
yarn build yarn build
@@ -123,10 +116,11 @@ yarn build:win
yarn build:all yarn build:all
``` ```
ビルド設定はすべてpackage.jsonに記載しています。 ビルド設定はすべてpackage.jsonに記載しています。
### electron-packager(非推奨) ### electron-packager(非推奨)
`npm install --save-dev electron-rebuild` `yarn -D electron-rebuild`
Linux/macOS Linux/macOS
`./node_modules/.bin/electron-rebuild` `./node_modules/.bin/electron-rebuild`
@@ -139,19 +133,25 @@ WindowsでPython 2.xやVisualC++を一発でインストールできるツール
日本語話者向けですが、macOSビルドにはXCodeが要るとの情報があります。([とねぢ](https://minohdon.jp/@toneji)氏談) 日本語話者向けですが、macOSビルドにはXCodeが要るとの情報があります。([とねぢ](https://minohdon.jp/@toneji)氏談)
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
`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` ```
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 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
```
### PWAとして実行 ### PWAとして実行
TheDeskはウェブ技術を使用して作られているので、ブラウザで動かすこともできます。もちろん、Electron向けに設計されているので一部機能は動きません。 TheDeskはウェブ技術を使用して作られているので、ブラウザで動かすこともできます。もちろん、Electron向けに設計されているので一部機能は動きません。
`npm run build:pwa`でビルドできます。PWAに必要な`manifest.json`やサービスワーカーなども要員されています。 `yarn build:pwa`でビルドできます。PWAに必要な`manifest.json`やサービスワーカーなども用意されています。
**`node_modules``dependencies`にリネームしないと動きません。(Netlifyの制限です)** **`node_modules`を`dependencies`にリネームしないと動きません。(Netlifyの制限ですが、Netlify以外で動かす場合にも必須です)**
ChromeまたはFirefoxでチェック: [こちら](https://app.thedesk.top) (`master`ブランチに追従しています。不安定です。) ChromeまたはFirefoxでチェック: [こちら](https://app.thedesk.top) (`master`ブランチに追従しています。不安定です。)
[![Netlify Status](https://api.netlify.com/api/v1/badges/6916503b-2882-43f7-9681-ab814e6d28f9/deploy-status)](https://app.netlify.com/sites/thedesk/deploys) [![Netlify Status](https://api.netlify.com/api/v1/badges/6916503b-2882-43f7-9681-ab814e6d28f9/deploy-status)](https://app.netlify.com/sites/thedesk/deploys)
@@ -165,7 +165,7 @@ Issuesに書いてある問題についてはなるべく対処しますので
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk) [TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)
## `npm i`したら脆弱性あるって言われた ## `yarn install`したら脆弱性あるって言われた
materialize-cssの脆弱性(CVE-2019-11002/3/4)については[こちら](https://github.com/Dogfalo/materialize/issues/6286)で本当に脆弱性かどうか議論しています。 materialize-cssの脆弱性(CVE-2019-11002/3/4)については[こちら](https://github.com/Dogfalo/materialize/issues/6286)で本当に脆弱性かどうか議論しています。
実際には害が無いものと思われます。 実際には害が無いものと思われます。

5
app/.eslintignore Normal file
View File

@@ -0,0 +1,5 @@
js/common/blurhash.js
js/common/hammer.min.js
js/common/sha256.js
js/platform/punycode.js
js/platform/tj-deck.js

14
app/.eslintrc.json Normal file
View File

@@ -0,0 +1,14 @@
{
"extends": "eslint:recommended",
"env": {"browser": true},
"rules": {
"no-console": "off",
"semi": ["error", "never"]
},
"globals": {
"$": false,
"ver": true,
"pwa": true,
"lang": true
}
}

11
app/aiscript.js Normal file
View File

@@ -0,0 +1,11 @@
const { AiScript, parse, values, utils } = require('@syuilo/aiscript')
global.sanitizeHtml = require('sanitize-html')
global.asValue = values
global.AiScript = AiScript
global.asParse = parse
global.asCommon = {
'TheDesk:console': values.FN_NATIVE((z) => {
console.log(z[0].value)
})
}
global.asUtil = utils

View File

@@ -21,6 +21,15 @@ html {
align-items: flex-start; align-items: flex-start;
} }
#acct-list .btn-flat.white-text {
color: inherit !important;
}
#acct-list .btn-flat.red-text {
background-color: white !important;
}
.lts { .lts {
font-size: 150%; font-size: 150%;
} }
@@ -79,4 +88,7 @@ i.left {
#domain-list .title { #domain-list .title {
font-size: 1.3rem; font-size: 1.3rem;
}
.text-line-icon {
font-size: 1rem;
} }

View File

@@ -6,7 +6,7 @@ body {
user-select: none; user-select: none;
cursor: default; cursor: default;
height: 100vh; height: 100vh;
color: var(--color); color: var(--text);
} }
html { html {
font-size: 13px; font-size: 13px;
@@ -14,14 +14,15 @@ html {
.titlebar, .titlebar,
.menubar-menu-container, .menubar-menu-container,
.action-menu-item { .action-menu-item {
background-color: var(--notfbox) !important; background-color: var(--subcolor) !important;
filter: brightness(110%) !important; filter: brightness(110%) !important;
color: var(--color) !important; color: var(--text) !important;
} }
.action-menu-item:hover { .action-menu-item:hover {
filter: brightness(80%) !important; filter: brightness(80%) !important;
} }
.btn, .btn-flat { .btn,
.btn-flat {
font-size: 1.1rem; font-size: 1.1rem;
margin: 0.4rem; margin: 0.4rem;
text-transform: none; text-transform: none;
@@ -89,6 +90,15 @@ option {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
#imagewrap img.rotate-90 {
transform: rotate(-90deg)
}
#imagewrap img.rotate-180 {
transform: rotate(-180deg)
}
#imagewrap img.rotate-270 {
transform: rotate(-270deg)
}
.pointer { .pointer {
cursor: pointer; cursor: pointer;
} }
@@ -231,7 +241,8 @@ blockquote:before,
width: 100vw; width: 100vw;
height: calc(100vh - 3rem); height: calc(100vh - 3rem);
background-color: var(--bg); background-color: var(--bg);
color: var(--color); filter: brightness(50%);
color: var(--text);
z-index: 99999; z-index: 99999;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
@@ -242,7 +253,7 @@ blockquote:before,
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
background-color: var(--bg); background-color: var(--bg);
color: var(--color); color: var(--text);
z-index: 99999; z-index: 99999;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
@@ -253,7 +264,7 @@ blockquote:before,
#pip { #pip {
z-index: 504; z-index: 504;
width: 418px; width: 418px;
background-color: var(--subcolor); background-color: var(--thirdColor);
position: absolute; position: absolute;
} }
.pip-bottom { .pip-bottom {
@@ -314,10 +325,10 @@ blockquote:before,
} }
.collapsible-header, .collapsible-header,
.tabs { .tabs {
background-color: var(--subcolor); background-color: var(--thirdColor);
} }
.collapsible-header:focus { .collapsible-header:focus {
background-color: var(--subcolor) !important; background-color: var(--thirdColor) !important;
} }
.modal-footer { .modal-footer {
background-color: var(--modalfooter) !important; background-color: var(--modalfooter) !important;
@@ -331,16 +342,29 @@ blockquote:before,
} }
.release-do { .release-do {
border: solid 2px; border: solid 2px;
border-color: var(--color); border-color: var(--text);
padding: 5px; padding: 5px;
} }
#pickers { #pickers {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
flex-direction: column;
}
input[type='color'] {
-webkit-appearance: none;
border: none;
width: 32px;
height: 32px;
}
input[type='color']::-webkit-color-swatch-wrapper {
padding: 0;
}
input[type='color']::-webkit-color-swatch {
border: none;
} }
#menu { #menu {
position: fixed; position: fixed;
z-index: 9999; z-index: 999;
background-color: var(--postbox); background-color: var(--postbox);
width: 540px; width: 540px;
top: calc(50% - 150px); top: calc(50% - 150px);
@@ -366,7 +390,7 @@ blockquote:before,
display: flex; display: flex;
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
color: var(--color); color: var(--text);
} }
#left-menu a:hover { #left-menu a:hover {
background-color: var(--beforehover); background-color: var(--beforehover);
@@ -377,6 +401,9 @@ blockquote:before,
#left-menu a.active { #left-menu a.active {
background-color: var(--emphasized); background-color: var(--emphasized);
} }
#left-menu a.active span {
text-decoration: underline;
}
#right-menu { #right-menu {
width: 100%; width: 100%;
overflow-y: scroll; overflow-y: scroll;
@@ -394,7 +421,7 @@ blockquote:before,
width: 13rem; width: 13rem;
height: 3.1rem; height: 3.1rem;
cursor: pointer; cursor: pointer;
color: var(--color); color: var(--text);
} }
#tltype .type span { #tltype .type span {
width: calc(100% - 2.3rem); width: calc(100% - 2.3rem);
@@ -421,7 +448,7 @@ blockquote:before,
text-align: center; text-align: center;
width: calc(100% + 0.8rem); width: calc(100% + 0.8rem);
border-radius: 5px; border-radius: 5px;
background-color: var(--box); background-color: var(--subcolor);
filter: brightness(80%); filter: brightness(80%);
margin-left: -0.4rem; margin-left: -0.4rem;
margin-right: -0.4rem; margin-right: -0.4rem;
@@ -442,7 +469,7 @@ blockquote:before,
position: fixed; position: fixed;
bottom: -300px; bottom: -300px;
width: 100vw; width: 100vw;
background-color: var(--box); background-color: var(--subcolor);
z-index: 9999; z-index: 9999;
padding: 0.8rem; padding: 0.8rem;
display: grid; display: grid;
@@ -468,16 +495,16 @@ blockquote:before,
} }
input, input,
textarea { textarea {
color: var(--color); color: var(--text);
font-size: 1rem !important; font-size: 1rem !important;
font-family: inherit; font-family: inherit;
} }
.swal2-popup { .swal2-popup {
background-color: var(--notfbox) !important; background-color: var(--subcolor) !important;
} }
.swal2-title, .swal2-title,
.swal2-content { .swal2-content {
color: var(--color) !important; color: var(--text) !important;
} }
#src-contents svg { #src-contents svg {
margin-right: 0.4rem; margin-right: 0.4rem;
@@ -526,7 +553,7 @@ textarea {
left: calc(50vw - 11.53rem); left: calc(50vw - 11.53rem);
width: 23rem; width: 23rem;
max-width: 100%; max-width: 100%;
background-color: var(--box); background-color: var(--subcolor);
z-index: 501; z-index: 501;
padding: 0.4rem; padding: 0.4rem;
} }
@@ -550,9 +577,15 @@ textarea {
/*スクロールバー*/ /*スクロールバー*/
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 5px; width: 5px;
height: 10px; height: 12px;
background: rgba(0, 0, 0, 0.05); background: rgba(0, 0, 0, 0.05);
} }
.thickScrollBar ::-webkit-scrollbar {
height: 18px;
}
.thinScrollBar ::-webkit-scrollbar {
height: 5px;
}
::-webkit-scrollbar-track { ::-webkit-scrollbar-track {
-webkit-border-radius: 5px; -webkit-border-radius: 5px;
border-radius: 5px; border-radius: 5px;
@@ -564,6 +597,15 @@ textarea {
background: #607d8b; background: #607d8b;
-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);
} }
::-webkit-scrollbar-thumb::after {
content: '';
position: absolute;
top: 100%;
left: 50%;
margin-left: -15px;
border: 15px solid transparent;
border-top: 15px solid #e0edff;
}
/* Web Fonts */ /* Web Fonts */
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
@@ -606,3 +648,41 @@ textarea {
.darwin .win { .darwin .win {
display: none; display: none;
} }
.dropdown-content.header:hover {
background-color: white;
}
button {
font-family: inherit !important;
}
.via-dropdown {
text-overflow: ellipsis;
white-space: nowrap;
overflow-x: hidden;
}
#re-online {
background-color: rgb(38, 92, 153);
position: fixed;
width: 100vw;
height: 2rem;
padding: 0.25rem;
color: white;
z-index: 1000;
}
#offline {
background-color: rgb(153, 38, 38);
position: fixed;
width: 100vw;
height: 2rem;
padding: 0.25rem;
color: white;
z-index: 999;
}
.pluginNex {
width: 2rem;
text-align: center;
}
.pluginNex span {
font-size: 2rem;
position: relative;
top: -4px;
}

View File

@@ -64,9 +64,10 @@ textarea {
} }
#emoji { #emoji {
} }
#suggest { #suggest, #draft {
max-height: 23rem; max-height: 23rem;
overflow-y: scroll; overflow-y: scroll;
overflow-x: hidden;
} }
#emoji-list { #emoji-list {
width: 100%; width: 100%;
@@ -86,7 +87,7 @@ textarea {
max-height: 7.7rem; max-height: 7.7rem;
} }
#default-emoji a { #default-emoji a {
color: var(--color); color: var(--text);
margin-right: 0.15rem; margin-right: 0.15rem;
} }
.character-counter { .character-counter {
@@ -126,8 +127,8 @@ textarea {
} }
#posttgl, #posttgl,
#toot-post-btn { #toot-post-btn {
background-color: var(--accentbtn); background-color: var(--active);
color: var(--color); color: var(--text);
} }
/*mini*/ /*mini*/
.mini-post .mize { .mini-post .mize {

View File

@@ -5,7 +5,7 @@
background-color: var(--modalfooter); background-color: var(--modalfooter);
margin: 0.4rem; margin: 0.4rem;
border-radius: 0.4rem; border-radius: 0.4rem;
color: var(--color); color: var(--text);
padding: 3px; padding: 3px;
display: grid; display: grid;
grid-template-columns: 3.3rem 1fr 4.6rem; grid-template-columns: 3.3rem 1fr 4.6rem;

View File

@@ -1,192 +1,22 @@
:root { :root {
--bg: white;
--drag: rgba(255, 255, 255, 0.8);
--color: black;
--beforehover: #757575;
--modal: white;
--subcolor: #e0e0e0;
--box: white;
--sidebar: #eeeeee;
--shared: #cfd8dc;
--notfbox: white;
--emphasized: #81c784;
--his-data: rgba(255, 255, 255, 0.9);
--active: #e6ee9c;
--postbox: white;
--modalfooter: #fafafa;
--accentbtn: #009688;
--selected: #c0c0c0;
--selectedWithShare: #b2babd;
--gray: #757575;
}
#imagemodal {
background: url("../img/pixel.white.svg");
}
.blacktheme {
--bg: #212121; --bg: #212121;
--drag: rgba(0, 0, 0, 0.8); --drag: rgba(0, 0, 0, 0.8);
--color: white; --text: white;
--beforehover: #9e9e9e; --beforehover: #9e9e9e;
--modal: black; --modal: black;
--subcolor: #212121; --thirdColor: #212121;
--box: #424242; --bottom: #424242;
--sidebar: #424242; --accent: #004d40;
--shared: #004d40; --subcolor: #333333;
--notfbox: #333333;
--emphasized: #4e342e; --emphasized: #4e342e;
--his-data: rgba(0, 0, 0, 0.8); --his-data: rgba(0, 0, 0, 0.8);
--active: #757575;
--postbox: #424242; --postbox: #424242;
--modalfooter: #212121; --modalfooter: #212121;
--accentbtn: #3f51b5; --active: #3f51b5;
--selected: #3f3f3f; --selected: #3f3f3f;
--selectedWithShare: #003a30; --selectedWithShare: #003a30;
--gray: #cccccc; --gray: #cccccc;
} }
.blacktheme #imagemodal { #imagemodal {
background: url("../img/pixel.svg"); background: url("../img/pixel.svg");
}
.indigotheme {
--bg: #031833;
--drag: rgba(0, 0, 0, 0.8);
--color: white;
--beforehover: #9e9e9e;
--modal: #0d1351;
--subcolor: #0d1351;
--shared: #004d40;
--box: #0d1351;
--sidebar: #0d1351;
--notfbox: #0d47a1;
--emphasized: #4e342e;
--his-data: rgba(13, 19, 81, 0.8);
--active: #757575;
--postbox: #1a237e;
--modalfooter: #031833;
--accentbtn: #00acc1;
--selected: #214f8a;
--selectedWithShare: #003a30;
--gray: #cccccc ;
}
.indigotheme #imagemodal {
background: url("../img/pixel.svg");
}
.browntheme {
--bg: #261411;
--drag: rgba(0, 0, 0, 0.8);
--color: white;
--beforehover: #9e9e9e;
--modal: #261411;
--subcolor: #4e342e;
--shared: #004d40;
--box: #4e342e;
--sidebar: #4e342e;
--notfbox: #4e342e;
--emphasized: #0d47a1;
--his-data: rgba(62, 39, 35, 0.8);
--active: #757575;
--postbox: #4e342e;
--modalfooter: #261411;
--accentbtn: #827717;
--selected: #6d352b;
--selectedWithShare: #003a30;
--gray: #cccccc;
}
.browntheme #imagemodal {
background: url("../img/pixel.svg");
}
.greentheme {
--bg: #c8e6c9;
--drag: rgba(255, 255, 255, 0.8);
--color: black;
--beforehover: #757575;
--modal: #81c784;
--subcolor: #a5d6a7;
--box: #81c784;
--sidebar: #c5e1a5;
--shared: #ffcc80;
--notfbox: #a5d6a7;
--emphasized: #9e9d24;
--his-data: rgba(255, 255, 255, 0.9);
--active: #e6ee9c;
--postbox: #a5d6a7;
--modalfooter: #81c784;
--accentbtn: #33691e;
--selected: #78c17a;
--selectedWithShare: #caa266;
--gray: #757575;
}
.greentheme #imagemodal {
background: url("../img/pixel.white.svg");
}
.bluetheme {
--bg: #c9e1ec;
--drag: rgba(255, 255, 255, 0.8);
--color: black;
--beforehover: #757575;
--modal: #b2ebf2;
--subcolor: #90caf9;
--box: #90caf9;
--sidebar: #b6e6f5;
--shared: #e0ffe4;
--notfbox: #90caf9;
--emphasized: #c5e1a5;
--his-data: rgba(255, 255, 255, 0.9);
--active: #b39ddb;
--postbox: #dff1ff;
--modalfooter: #2196f3;
--accentbtn: #2f7bb7;
--selected: #9dcade;
--selectedWithShare: #c1dac4;
--gray: #757575;
}
.bluetheme #imagemodal {
background: url("../img/pixel.white.svg");
}
.polartheme {
--bg: #2e3440;
--drag: rgba(0, 0, 0, 0.8);
--color: white;
--beforehover: #8d94a0;
--modal: #3b4252;
--subcolor: #434c5e;
--box: #4c566a;
--sidebar: #3b4252;
--shared: #2d3b58;
--notfbox: #2a3857;
--emphasized: #2f4b86;
--his-data: rgba(0, 0, 0, 0.8);
--active: #2a3857;
--postbox: #434c5e;
--modalfooter: #485166;
--accentbtn: #2f4b86;
--selected: #464f61;
--selectedWithShare: #3e527e;
--gray: #cccccc;
}
.polartheme #imagemodal {
background: url("../img/pixel.svg");
}
.snowtheme {
--bg: #eceff4;
--drag: rgba(255, 255, 255, 0.8);
--color: #36425a;
--beforehover: #344058;
--modal: #e5e9f0;
--subcolor: #d8dee9;
--box: #c0c8d6;
--sidebar: #eeeeee;
--shared: #c3d4e6;
--notfbox: #d8dee9;
--emphasized: #88c0d0;
--his-data: rgba(255, 255, 255, 0.9);
--active: #8fbcbb;
--postbox: #d8dee9;
--modalfooter: #b2bed4;
--accentbtn: #81a1c1;
--selected: #b4bdd0;
--selectedWithShare: #a3afbb;
--gray: #5c6c8c;
}
.snowtheme #imagemodal {
background: url("../img/pixel.white.svg");
} }

View File

@@ -18,7 +18,7 @@
padding: 0.23rem; padding: 0.23rem;
padding-right: 0; padding-right: 0;
padding-left: 3rem; padding-left: 3rem;
background-color: var(--sidebar); background-color: var(--bottom);
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
flex-wrap: wrap; flex-wrap: wrap;
@@ -62,7 +62,7 @@
} }
#bottom a, #bottom a,
#demogroup a { #demogroup a {
color: var(--color); color: var(--text);
} }
#bottom i { #bottom i {
font-size: 2.3rem; font-size: 2.3rem;
@@ -93,7 +93,7 @@
display: grid; display: grid;
grid-template-columns: 3rem 2.3rem 2.5fr 1fr 4.6rem; grid-template-columns: 3rem 2.3rem 2.5fr 1fr 4.6rem;
grid-template-rows: 1.7rem 1.5rem; grid-template-rows: 1.7rem 1.5rem;
grid-template-areas: 'cover name name artist refresh' 'cover progress progress progress time'; grid-template-areas: 'cover name name name refresh' 'cover progress progress progress time';
} }
#spot-refresh { #spot-refresh {
grid-area: refresh; grid-area: refresh;
@@ -108,18 +108,12 @@
overflow: hidden; overflow: hidden;
line-height: 1.92rem; line-height: 1.92rem;
} }
#spot-artist {
grid-area: artist;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
line-height: 1.92rem;
}
#spot-img { #spot-img {
width: 90%; width: 90%;
} }
#spot-time { #spot-time {
grid-area: time; grid-area: time;
line-height: 0.5rem;
} }
.progress { .progress {
grid-area: progress; grid-area: progress;
@@ -157,7 +151,8 @@ iframe,
} }
.box { .box {
overflow: hidden; overflow: hidden;
min-width: 23rem; min-width: 300px;
max-width: 600px;
flex: 1; flex: 1;
border-top: none; border-top: none;
display: flex; display: flex;
@@ -217,10 +212,14 @@ iframe,
.emoji, .emoji,
.emoji-img { .emoji-img {
width: 1.153rem; width: 1.153rem;
height: 1.153rem;
object-fit: cover;
} }
.area-toot .emoji, .area-toot .emoji,
.area-toot .emoji-img { .area-toot .emoji-img {
width: 1.538rem; width: 1.538rem;
height: 1.538rem;
object-fit: cover;
vertical-align: middle; vertical-align: middle;
margin: -1px 0; margin: -1px 0;
} }
@@ -430,7 +429,7 @@ iframe,
} }
.btn-flat { .btn-flat {
color: var(--color); color: var(--text);
} }
.area-side i { .area-side i {
margin-left: 0.75rem; margin-left: 0.75rem;
@@ -449,44 +448,15 @@ iframe,
color: var(--beforehover); color: var(--beforehover);
} }
.actct:hover { .actct:hover {
color: var(--color); color: var(--text);
transition: 0.5s; transition: 0.5s;
} }
#contextWrap { .contextMenu.dropdown-content {
position: fixed; padding-top: 5px;
width: 199vw; overflow-y: hidden;
height: 100vh; left: calc(100% - 200px) !important;
z-index: 100; width: 200px !important;
} }
.contextMenu {
position: fixed;
background-color: var(--box);
z-index: 9999;
border-radius: 0.4rem;
padding: 0.4rem;
}
.contextMenu.bottom:before {
content: '';
position: absolute;
top: 100%;
right: 2rem;
border: 1.2rem solid transparent;
border-top: 1.2rem solid var(--box);
}
.contextMenu.top:before {
content: '';
position: absolute;
top: -2.3rem;
right: 2rem;
border: 1.5rem solid transparent;
border-bottom: 1.5rem solid var(--box);
}
.contextMenu .btn-flat {
text-transform: none !important;
width: 100%;
text-align: left;
}
.gray { .gray {
color: var(--gray); color: var(--gray);
} }
@@ -525,7 +495,7 @@ iframe,
user-select: none; user-select: none;
} }
.cbadge-hover { .cbadge-hover {
color: var(--color); color: var(--text);
background-color: transparent; background-color: transparent;
} }
.cbadge-hover:hover { .cbadge-hover:hover {
@@ -541,7 +511,7 @@ p:not(:last-child) {
margin-bottom: 0.76rem; margin-bottom: 0.76rem;
} }
.shared { .shared {
background-color: var(--shared); background-color: var(--accent);
} }
.emphasized { .emphasized {
background-color: var(--emphasized); background-color: var(--emphasized);
@@ -551,7 +521,7 @@ p:not(:last-child) {
} }
.notice-box { .notice-box {
top: 0; top: 0;
background-color: var(--notfbox); background-color: var(--subcolor);
filter: brightness(110%); filter: brightness(110%);
position: relative; position: relative;
margin-right: 0.7rem; margin-right: 0.7rem;
@@ -620,7 +590,7 @@ p:not(:last-child) {
.notf-box { .notf-box {
position: fixed; position: fixed;
right: 5.4rem; right: 5.4rem;
background-color: var(--box); background-color: var(--subcolor);
border: thin solid gray; border: thin solid gray;
z-index: 501; z-index: 501;
width: 30rem; width: 30rem;
@@ -657,14 +627,30 @@ p:not(:last-child) {
box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 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; 0 5px 5px -3px rgba(0, 0, 0, 0.3), 0px -10px 10px 0px rgba(0, 0, 0, 0.3) inset;
} }
.notf-indv-box label span {
padding-left: 23px !important;
margin-right: 5px;
}
.notf-indv-box .setting {
font-size: 1rem;
width: calc(25% - 3px);
text-align: left;
padding: 5px;
height: 70px;
text-align: center;
}
.notf-exclude-btn:hover {
background-color: inherit !important;
border: 1px solid;
}
.type-b { .type-b {
display: none; display: none;
} }
.modal-footer { .modal-footer {
background-color: var(--box); background-color: var(--subcolor);
} }
.ballons { .ballons {
background-color: var(--box); background-color: var(--subcolor);
position: absolute; position: absolute;
bottom: 0px; bottom: 0px;
right: 0px; right: 0px;
@@ -722,11 +708,11 @@ p:not(:last-child) {
transition-duration: 0.5s; transition-duration: 0.5s;
} }
.votebtn:hover { .votebtn:hover {
background-color: var(--color); background-color: var(--text);
} }
.leadPoll { .leadPoll {
position: absolute; position: absolute;
background-color: var(--box); background-color: var(--subcolor);
height: 1.5rem; height: 1.5rem;
border-radius: 0.23rem; border-radius: 0.23rem;
} }
@@ -788,11 +774,11 @@ audio {
.cw_btn { .cw_btn {
margin: 0.23rem; margin: 0.23rem;
background-color: var(--emphasized); background-color: var(--emphasized);
color: var(--color); color: var(--text);
padding-left: 0.23rem; padding-left: 0.23rem;
padding-right: 0.23rem; padding-right: 0.23rem;
border-radius: 0.23rem; border-radius: 0.23rem;
border: 1px solid var(--color); border: 1px solid var(--text);
user-select: none; user-select: none;
} }
.vis-data { .vis-data {
@@ -882,7 +868,7 @@ audio {
cursor: pointer; cursor: pointer;
border: solid 1px; border: solid 1px;
padding-left: 0.15rem; padding-left: 0.15rem;
background-color: var(--notfbox); background-color: var(--subcolor);
border-radius: 0.15rem; border-radius: 0.15rem;
} }
.announReaction img { .announReaction img {

View File

@@ -1,147 +1,162 @@
/*アイコンをクリックした時とかにでてくるユーザーデータ*/ /*アイコンをクリックした時とかにでてくるユーザーデータ*/
#his-data { #his-data {
background-repeat: no-repeat; background-repeat: no-repeat;
background-image: url("../img/loading.svg"); background-image: url('../img/loading.svg');
overflow-y: hidden; overflow-y: hidden;
} }
#his-data .btn .material-icons{ #his-data .btn .material-icons {
float:left; float: left;
} }
#his-data-content { #his-data-content {
display: flex; display: flex;
justify-content: center; justify-content: center;
} }
#his-name { #his-name {
font-size: 1.5rem; font-size: 1.5rem;
} }
#his-prof { #his-prof {
float: left; width: 7.7rem;
width: 7.7rem; margin-right: 0.4rem;
margin-right: 0.4rem;
} }
.his-float { .his-float {
overflow-y: scroll; overflow-y: scroll;
padding: 0.4rem; padding: 0.4rem;
} }
#his-float-data { #his-float-data {
height: 100%; height: 100%;
overflow-y: hidden; overflow-y: hidden;
} }
#his-leftside { #his-leftside {
width: 38.4rem; width: 28.4rem;
max-width: 30vw;
} }
#his-float-timeline { #his-float-timeline {
max-width: 59.6rem; max-width: 47.5rem;
height: 100%; min-width: calc(100% - 29.4rem);
overflow-y: hidden; height: 100%;
overflow-y: hidden;
} }
#his-basic-prof { #his-basic-prof {
min-height: 10rem; display: flex;
min-height: 10rem;
} }
#his-field { #his-field {
vertical-align: baseline; vertical-align: baseline;
text-align: center; text-align: center;
padding: 0; padding: 0;
} }
#his-field tr { #his-field tr {
height: 1.5rem; height: 1.5rem;
} }
.his-field-title { .his-field-title {
height: 1.5rem; height: 1.5rem;
padding: 0; padding: 0;
background-color: #757575; background-color: #757575;
text-align: center; text-align: center;
padding: 0.4rem; padding: 0.4rem;
margin-bottom: 1px; margin-bottom: 1px;
width: 30%; width: 30%;
} }
.his-field-content { .his-field-content {
height: 1.5rem; height: 1.5rem;
padding: 0; padding: 0;
padding-left: 0.4rem; padding-left: 0.4rem;
} }
.his-var-content a span.ellipsis:after { .his-var-content a span.ellipsis:after {
content: "..."; content: '...';
} }
.his-var-content a:not(.mention) span:last-of-type { .his-var-content a:not(.mention) span:last-of-type {
display: none; display: none;
} }
#his-data a .rep_ct, #his-data a .rep_ct,
#his-data a .rt_ct, #his-data a .rt_ct,
#his-data a .fav_ct { #his-data a .fav_ct {
display: inline !important; display: inline !important;
} }
#his-data-show { #his-data-show {
margin: 1.5rem; margin: 1.5rem;
margin-left: 3.8rem; margin-left: 3.8rem;
margin-right: 3.8rem; margin-right: 3.8rem;
background-color: var(--his-data); background-color: var(--his-data);
height: calc(100% - 1.5rem); height: calc(100% - 1.5rem);
margin-bottom: 0; margin-bottom: 0;
padding: 0.4rem; padding: 0.4rem;
} }
#his-data-wrap { #his-data-wrap {
display: flex; display: flex;
} }
.his-var-content { .his-var-content {
overflow-y: scroll; overflow-y: scroll;
overflow-x: hidden; overflow-x: hidden;
height: calc(100% - 3.4rem); height: calc(100% - 3.4rem);
padding-bottom: 60px;
} }
#my-data-nav .btn { #my-data-nav .btn {
width: 10.7rem; width: 10.6rem;
} }
.active-back { #my-data-nav .active-back {
background-color: var(--active); display: none;
} }
#his-name .emojione, #his-name .emojione,
#his-name .emoji-img { #his-name .emoji-img {
width: 1.538rem; width: 1.538rem;
} }
#his-plus-action .btn { #his-plus-action .btn {
padding-right: 0.4rem; padding-right: 0.4rem;
padding-left: 0.4rem; padding-left: 0.4rem;
} }
.tabs { .tabs {
display: flex; display: flex;
} }
.tabs .tab a { .tabs .tab a {
padding: 0.6rem 0.9rem; padding: 0.6rem 0.9rem;
} }
#his-des { #his-des {
max-height: 17.7rem; max-height: 17.7rem;
overflow-y: scroll; overflow-y: scroll;
} }
#his-sign-action { #his-sign-action {
border: 1px solid; border: 1px solid;
border-radius: 0.4rem; border-radius: 0.4rem;
display: flex; display: flex;
align-items: center; align-items: center;
padding-left: 0.75rem; padding-left: 0.75rem;
padding-right: 0.75rem; padding-right: 0.75rem;
flex-wrap: wrap; flex-wrap: wrap;
} }
#his-sign-action .btn { #his-sign-action .btn {
flex-basis: 31.2%; flex-basis: calc(50% - 10.6px);
}
#his-sign-action .dropdown-trigger {
flex-basis: 100%;
} }
#his-des .mention { #his-des .mention {
color: #039be5; color: #039be5;
cursor: pointer; cursor: pointer;
} }
#his-table{ #his-table {
max-height: 11.538rem; max-height: 11.538rem;
overflow-y: scroll; overflow-y: scroll;
} }
#his-float-blocked { #his-float-blocked {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
font-size: 2rem; font-size: 2rem;
height: 100%; height: 100%;
} }
#hisdropdown{ #hisdropdown {
background-color: var(--bg); background-color: var(--bg);
}
#hisdropdown li a {
color: white;
}
#hisdropdown li:hover {
background-color: var(--active);
}
#his-data-title {
width: 100%;
text-align: center;
font-size: 1.5rem;
} }
#hisdropdown li:hover{
background-color: var(--active);
}

69
app/img/2025.svg Normal file
View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 600 600" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g id="輝き" transform="matrix(0.892356,0,0,0.892356,36.941,-15.9516)">
<g transform="matrix(2.39479,0,0,2.21494,-178.97,-182.183)">
<ellipse cx="123.217" cy="151.049" rx="36.923" ry="35.804" style="fill:rgb(84,82,81);"/>
</g>
<g transform="matrix(1,0,0,1,8.39159,-32.1678)">
<ellipse cx="120.479" cy="305.524" rx="112.5" ry="52" style="fill:rgb(84,82,81);"/>
</g>
<g transform="matrix(0.952046,-0.305955,0.305955,0.952046,-139.881,8.62199)">
<ellipse cx="134.479" cy="430.524" rx="46.5" ry="84" style="fill:rgb(84,82,81);"/>
</g>
<g transform="matrix(1,0,0,1,2.39158,-65.1678)">
<ellipse cx="130.479" cy="561.024" rx="72.5" ry="74.5" style="fill:rgb(84,82,81);"/>
</g>
<g transform="matrix(1,0,0,1,8.39159,-32.1678)">
<ellipse cx="156.979" cy="651.76" rx="68" ry="60.235" style="fill:rgb(84,82,81);"/>
</g>
<g transform="matrix(0.954888,0.296965,-0.296965,0.954888,55.6063,-54.2336)">
<ellipse cx="199.479" cy="158.995" rx="98.5" ry="51" style="fill:rgb(240,132,46);"/>
</g>
<g transform="matrix(0.931851,0.362841,-0.362841,0.931851,63.1962,-89.0819)">
<ellipse cx="344.979" cy="135.857" rx="74" ry="90.137" style="fill:rgb(240,132,46);"/>
</g>
<g transform="matrix(1,0,0,1,-56.6084,-45.1678)">
<ellipse cx="493.479" cy="301.22" rx="126.5" ry="55.5" style="fill:rgb(240,132,46);"/>
</g>
<g transform="matrix(1,0,0,1,-14.6084,-70.1678)">
<ellipse cx="531.479" cy="368.22" rx="58.5" ry="54.5" style="fill:rgb(240,132,46);"/>
</g>
<g transform="matrix(0.973706,-0.227807,0.227807,0.973706,-124.722,44.48)">
<ellipse cx="265.479" cy="614.97" rx="98.5" ry="37.5" style="fill:rgb(54,76,159);"/>
</g>
<g transform="matrix(0.982834,-0.184492,0.184492,0.982834,-148.417,-31.379)">
<ellipse cx="407.479" cy="676.47" rx="71.5" ry="96" style="fill:rgb(54,76,159);"/>
</g>
<g transform="matrix(1,0,0,1,-34.6084,-22.1678)">
<ellipse cx="468.979" cy="511.47" rx="48" ry="31" style="fill:rgb(54,76,159);"/>
</g>
<g transform="matrix(0.880625,0.473815,-0.473815,0.880625,260.236,-235.714)">
<ellipse cx="533.979" cy="472.97" rx="46" ry="99.5" style="fill:rgb(54,76,159);"/>
</g>
<g transform="matrix(1,0,0,1,9.39159,-36.1678)">
<circle cx="69.229" cy="310.72" r="24.25" style="fill:white;"/>
</g>
<g transform="matrix(1,0,0,1,8.39159,-48.1678)">
<circle cx="98.229" cy="417.72" r="25.25" style="fill:white;"/>
</g>
<g transform="matrix(0.76,0,0,0.76,96.9465,101.545)">
<circle cx="375.229" cy="646.72" r="56.25" style="fill:white;"/>
</g>
<g transform="matrix(1,0,0,1,8.39159,-32.1678)">
<circle cx="427.729" cy="287.22" r="32.75" style="fill:white;"/>
</g>
<g id="cat" transform="matrix(0.0249784,0,0,0.0249784,346.146,563.341)">
<path d="M1592.47,2584L2048.94,2584C2048.94,2519.11 2044.31,2506.24 1936.84,2506.24C1954.01,2454.74 2023.79,2330.13 2062.57,2330.13C2096.88,2330.13 2137.81,2332.02 2137.81,2410.3C2137.81,2499.17 2287.37,2642.46 2323.63,2584C2377.67,2496.88 2230.72,2523.45 2230.72,2313.35C2230.72,2025.92 2398.46,2066.84 2398.46,1905.36C2398.46,1824.57 2376.14,1813.66 2376.14,1755.9C2376.14,1679.56 2443.39,1683.99 2430.31,1620.7C2421.27,1576.98 2414.2,1541.92 2408.93,1489.05C2405.19,1451.54 2404,1411.55 2365.03,1413.16C2319.25,1415.05 2301.88,1495.63 2230.72,1501.41C2159.7,1507.18 2099.15,1440.95 2071.66,1450.41C2044.41,1459.79 2052.98,1533.73 2069.14,1586.24C2094.54,1668.78 2149.93,1776.1 2048.94,1792.26C1947.95,1808.42 1774.25,1824.58 1649.02,1990.2C1523.79,2155.82 1528.42,2350.19 1479.36,2410.31C1314.72,2612.08 1146,2529.23 1146,2697.11C1146,2772.27 1273.35,2826.38 1293.55,2802.14C1313.75,2777.9 1121.93,2705.68 1336.56,2620.36C1519.91,2547.46 1536.28,2532.58 1592.47,2584Z" style="fill:rgb(5,127,254);"/>
</g>
<g id="cat1" serif:id="cat" transform="matrix(-0.0249784,0,0,0.0249784,147.519,318.341)">
<path d="M1592.47,2584L2048.94,2584C2048.94,2519.11 2044.31,2506.24 1936.84,2506.24C1954.01,2454.74 2023.79,2330.13 2062.57,2330.13C2096.88,2330.13 2137.81,2332.02 2137.81,2410.3C2137.81,2499.17 2287.37,2642.46 2323.63,2584C2377.67,2496.88 2230.72,2523.45 2230.72,2313.35C2230.72,2025.92 2398.46,2066.84 2398.46,1905.36C2398.46,1824.57 2376.14,1813.66 2376.14,1755.9C2376.14,1679.56 2443.39,1683.99 2430.31,1620.7C2421.27,1576.98 2414.2,1541.92 2408.93,1489.05C2405.19,1451.54 2404,1411.55 2365.03,1413.16C2319.25,1415.05 2301.88,1495.63 2230.72,1501.41C2159.7,1507.18 2099.15,1440.95 2071.66,1450.41C2044.41,1459.79 2052.98,1533.73 2069.14,1586.24C2094.54,1668.78 2149.93,1776.1 2048.94,1792.26C1947.95,1808.42 1774.25,1824.58 1649.02,1990.2C1523.79,2155.82 1528.42,2350.19 1479.36,2410.31C1314.72,2612.08 1146,2529.23 1146,2697.11C1146,2772.27 1273.35,2826.38 1293.55,2802.14C1313.75,2777.9 1121.93,2705.68 1336.56,2620.36C1519.91,2547.46 1536.28,2532.58 1592.47,2584Z" style="fill:rgb(5,127,254);"/>
</g>
<g id="cat2" serif:id="cat" transform="matrix(-0.0249784,0,0,0.0249784,120.519,222.341)">
<path d="M1592.47,2584L2048.94,2584C2048.94,2519.11 2044.31,2506.24 1936.84,2506.24C1954.01,2454.74 2023.79,2330.13 2062.57,2330.13C2096.88,2330.13 2137.81,2332.02 2137.81,2410.3C2137.81,2499.17 2287.37,2642.46 2323.63,2584C2377.67,2496.88 2230.72,2523.45 2230.72,2313.35C2230.72,2025.92 2398.46,2066.84 2398.46,1905.36C2398.46,1824.57 2376.14,1813.66 2376.14,1755.9C2376.14,1679.56 2443.39,1683.99 2430.31,1620.7C2421.27,1576.98 2414.2,1541.92 2408.93,1489.05C2405.19,1451.54 2404,1411.55 2365.03,1413.16C2319.25,1415.05 2301.88,1495.63 2230.72,1501.41C2159.7,1507.18 2099.15,1440.95 2071.66,1450.41C2044.41,1459.79 2052.98,1533.73 2069.14,1586.24C2094.54,1668.78 2149.93,1776.1 2048.94,1792.26C1947.95,1808.42 1774.25,1824.58 1649.02,1990.2C1523.79,2155.82 1528.42,2350.19 1479.36,2410.31C1314.72,2612.08 1146,2529.23 1146,2697.11C1146,2772.27 1273.35,2826.38 1293.55,2802.14C1313.75,2777.9 1121.93,2705.68 1336.56,2620.36C1519.91,2547.46 1536.28,2532.58 1592.47,2584Z" style="fill:rgb(5,127,254);"/>
</g>
<g id="cat3" serif:id="cat" transform="matrix(0.0249784,0,0,0.0249784,390.146,196.341)">
<path d="M1592.47,2584L2048.94,2584C2048.94,2519.11 2044.31,2506.24 1936.84,2506.24C1954.01,2454.74 2023.79,2330.13 2062.57,2330.13C2096.88,2330.13 2137.81,2332.02 2137.81,2410.3C2137.81,2499.17 2287.37,2642.46 2323.63,2584C2377.67,2496.88 2230.72,2523.45 2230.72,2313.35C2230.72,2025.92 2398.46,2066.84 2398.46,1905.36C2398.46,1824.57 2376.14,1813.66 2376.14,1755.9C2376.14,1679.56 2443.39,1683.99 2430.31,1620.7C2421.27,1576.98 2414.2,1541.92 2408.93,1489.05C2405.19,1451.54 2404,1411.55 2365.03,1413.16C2319.25,1415.05 2301.88,1495.63 2230.72,1501.41C2159.7,1507.18 2099.15,1440.95 2071.66,1450.41C2044.41,1459.79 2052.98,1533.73 2069.14,1586.24C2094.54,1668.78 2149.93,1776.1 2048.94,1792.26C1947.95,1808.42 1774.25,1824.58 1649.02,1990.2C1523.79,2155.82 1528.42,2350.19 1479.36,2410.31C1314.72,2612.08 1146,2529.23 1146,2697.11C1146,2772.27 1273.35,2826.38 1293.55,2802.14C1313.75,2777.9 1121.93,2705.68 1336.56,2620.36C1519.91,2547.46 1536.28,2532.58 1592.47,2584Z" style="fill:rgb(5,127,254);"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

50
app/img/aiscript.svg Normal file
View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 687 72" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g id="アートボード1" transform="matrix(1,0,0,1,-168.896,-476)">
<rect x="168.896" y="476" width="686.208" height="72" style="fill:none;"/>
<clipPath id="_clip1">
<rect x="168.896" y="476" width="686.208" height="72"/>
</clipPath>
<g clip-path="url(#_clip1)">
<g transform="matrix(1,0,0,1,77.6363,162.413)">
<g transform="matrix(96,0,0,96,88.3157,385.587)">
<path d="M0.463,-0.571C0.452,-0.59 0.436,-0.602 0.415,-0.608C0.394,-0.613 0.374,-0.611 0.356,-0.6L0.08,-0.443C0.053,-0.428 0.04,-0.405 0.04,-0.374C0.04,-0.344 0.053,-0.321 0.08,-0.306L0.356,-0.148C0.368,-0.141 0.381,-0.138 0.395,-0.138C0.425,-0.138 0.448,-0.151 0.463,-0.178C0.474,-0.197 0.476,-0.217 0.47,-0.237C0.465,-0.259 0.453,-0.274 0.434,-0.285L0.278,-0.374L0.434,-0.464C0.453,-0.474 0.465,-0.49 0.47,-0.511C0.476,-0.532 0.474,-0.552 0.463,-0.571Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
<g transform="matrix(96,0,0,96,137.468,385.587)">
<path d="M0.197,-0.67C0.197,-0.691 0.189,-0.71 0.174,-0.725C0.159,-0.74 0.14,-0.748 0.118,-0.748C0.096,-0.748 0.078,-0.74 0.063,-0.725C0.047,-0.71 0.04,-0.691 0.04,-0.67C0.04,-0.648 0.047,-0.629 0.063,-0.614C0.078,-0.599 0.096,-0.591 0.118,-0.591C0.14,-0.591 0.159,-0.599 0.174,-0.614C0.189,-0.629 0.197,-0.648 0.197,-0.67ZM0.197,-0.079C0.197,-0.101 0.189,-0.119 0.174,-0.135C0.159,-0.15 0.14,-0.158 0.118,-0.158C0.096,-0.158 0.078,-0.15 0.063,-0.135C0.047,-0.119 0.04,-0.101 0.04,-0.079C0.04,-0.057 0.047,-0.038 0.063,-0.023C0.078,-0.008 0.096,0 0.118,0C0.14,0 0.159,-0.008 0.174,-0.023C0.189,-0.038 0.197,-0.057 0.197,-0.079Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
<g transform="matrix(96,0,0,96,201.74,385.587)">
<path d="M0.118,-0.75C0.097,-0.75 0.078,-0.742 0.063,-0.727C0.047,-0.712 0.04,-0.693 0.04,-0.671L0.04,-0.573C0.04,-0.551 0.047,-0.532 0.063,-0.517C0.078,-0.502 0.097,-0.494 0.118,-0.494C0.14,-0.494 0.159,-0.502 0.174,-0.517C0.189,-0.532 0.197,-0.551 0.197,-0.573L0.197,-0.671C0.197,-0.693 0.189,-0.712 0.174,-0.727C0.159,-0.742 0.14,-0.75 0.118,-0.75ZM0.355,-0.75C0.333,-0.75 0.314,-0.742 0.299,-0.727C0.284,-0.712 0.276,-0.693 0.276,-0.671L0.276,-0.573C0.276,-0.551 0.284,-0.532 0.299,-0.517C0.314,-0.502 0.333,-0.494 0.355,-0.494C0.377,-0.494 0.395,-0.502 0.41,-0.517C0.426,-0.532 0.434,-0.551 0.434,-0.573L0.434,-0.671C0.434,-0.693 0.426,-0.712 0.41,-0.727C0.395,-0.742 0.377,-0.75 0.355,-0.75Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
<g transform="matrix(96,0,0,96,247.1,385.587)">
<path d="M0.394,-0.494L0.488,-0.306L0.3,-0.306L0.394,-0.494ZM0.063,-0.009C0.082,0.001 0.102,0.002 0.123,-0.005C0.144,-0.011 0.159,-0.024 0.169,-0.044L0.221,-0.148L0.566,-0.148L0.619,-0.044C0.625,-0.03 0.635,-0.02 0.648,-0.012C0.661,-0.004 0.674,0 0.689,0C0.701,0 0.713,-0.003 0.724,-0.009C0.743,-0.018 0.756,-0.033 0.763,-0.054C0.771,-0.075 0.769,-0.095 0.759,-0.114L0.464,-0.705C0.457,-0.718 0.448,-0.729 0.435,-0.737C0.422,-0.745 0.408,-0.749 0.394,-0.749C0.379,-0.749 0.365,-0.745 0.352,-0.737C0.339,-0.729 0.33,-0.718 0.323,-0.705L0.028,-0.114C0.018,-0.095 0.017,-0.075 0.024,-0.054C0.03,-0.033 0.043,-0.018 0.063,-0.009Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
<g transform="matrix(96,0,0,96,322.7,385.587)">
<path d="M0.158,0C0.18,0 0.198,-0.008 0.214,-0.023C0.229,-0.038 0.236,-0.057 0.236,-0.079L0.236,-0.67C0.236,-0.691 0.229,-0.71 0.214,-0.725C0.198,-0.741 0.18,-0.749 0.158,-0.749C0.136,-0.749 0.117,-0.741 0.102,-0.725C0.087,-0.71 0.079,-0.691 0.079,-0.67L0.079,-0.079C0.079,-0.057 0.087,-0.038 0.102,-0.023C0.117,-0.008 0.136,0 0.158,0Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
<g transform="matrix(96,0,0,96,352.988,385.587)">
<path d="M0.118,-0.158C0.097,-0.158 0.078,-0.15 0.063,-0.135C0.047,-0.119 0.04,-0.101 0.04,-0.079C0.04,-0.057 0.047,-0.038 0.063,-0.023C0.078,-0.008 0.097,0 0.118,0L0.463,0C0.525,0 0.579,-0.022 0.623,-0.067C0.667,-0.111 0.69,-0.164 0.69,-0.227C0.69,-0.289 0.667,-0.342 0.623,-0.387C0.579,-0.431 0.525,-0.453 0.463,-0.453L0.266,-0.453C0.247,-0.453 0.231,-0.46 0.218,-0.473C0.204,-0.487 0.197,-0.503 0.197,-0.522C0.197,-0.541 0.204,-0.557 0.218,-0.571C0.231,-0.584 0.247,-0.591 0.266,-0.591L0.611,-0.591C0.632,-0.591 0.651,-0.599 0.667,-0.614C0.682,-0.629 0.69,-0.648 0.69,-0.67C0.69,-0.691 0.682,-0.71 0.667,-0.725C0.651,-0.741 0.632,-0.749 0.611,-0.749L0.266,-0.749C0.204,-0.749 0.15,-0.726 0.106,-0.682C0.062,-0.638 0.04,-0.584 0.04,-0.522C0.04,-0.459 0.062,-0.406 0.106,-0.362C0.15,-0.318 0.204,-0.296 0.266,-0.296L0.463,-0.296C0.482,-0.296 0.498,-0.289 0.511,-0.275C0.525,-0.262 0.532,-0.246 0.532,-0.227C0.532,-0.207 0.525,-0.191 0.511,-0.178C0.498,-0.164 0.482,-0.158 0.463,-0.158L0.118,-0.158Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
<g transform="matrix(96,0,0,96,422.924,385.587)">
<path d="M0.413,0C0.517,0 0.605,-0.037 0.678,-0.11C0.693,-0.125 0.701,-0.143 0.701,-0.166C0.701,-0.187 0.693,-0.206 0.678,-0.221C0.663,-0.236 0.644,-0.244 0.623,-0.244C0.601,-0.244 0.582,-0.236 0.567,-0.221C0.524,-0.179 0.473,-0.158 0.413,-0.158C0.354,-0.158 0.303,-0.179 0.261,-0.221C0.218,-0.263 0.197,-0.314 0.197,-0.374C0.197,-0.434 0.218,-0.485 0.261,-0.528C0.303,-0.57 0.354,-0.591 0.413,-0.591C0.473,-0.591 0.524,-0.57 0.567,-0.528C0.582,-0.512 0.601,-0.504 0.623,-0.504C0.644,-0.504 0.663,-0.512 0.678,-0.528C0.693,-0.543 0.701,-0.561 0.701,-0.583C0.701,-0.605 0.693,-0.623 0.678,-0.639C0.605,-0.712 0.517,-0.749 0.413,-0.749C0.31,-0.749 0.222,-0.712 0.149,-0.639C0.076,-0.566 0.04,-0.478 0.04,-0.374C0.04,-0.271 0.076,-0.183 0.149,-0.11C0.222,-0.037 0.31,0 0.413,0Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
<g transform="matrix(96,0,0,96,492.86,385.587)">
<path d="M0.572,-0.472C0.572,-0.44 0.56,-0.412 0.537,-0.389C0.514,-0.366 0.486,-0.355 0.453,-0.355L0.236,-0.355L0.236,-0.591L0.453,-0.591C0.486,-0.591 0.514,-0.579 0.537,-0.556C0.56,-0.533 0.572,-0.505 0.572,-0.472ZM0.421,-0.197L0.595,-0.023C0.61,-0.008 0.628,0 0.65,0C0.672,0 0.69,-0.008 0.706,-0.023C0.721,-0.038 0.729,-0.057 0.729,-0.079C0.729,-0.101 0.721,-0.119 0.706,-0.135L0.601,-0.24C0.64,-0.265 0.671,-0.298 0.694,-0.338C0.717,-0.38 0.729,-0.425 0.729,-0.472C0.729,-0.549 0.702,-0.614 0.648,-0.668C0.594,-0.722 0.529,-0.749 0.453,-0.749L0.158,-0.749C0.136,-0.749 0.117,-0.741 0.102,-0.725C0.087,-0.71 0.079,-0.691 0.079,-0.67L0.079,-0.079C0.079,-0.057 0.087,-0.038 0.102,-0.023C0.117,-0.008 0.136,0 0.158,0C0.18,0 0.198,-0.008 0.214,-0.023C0.229,-0.038 0.236,-0.057 0.236,-0.079L0.236,-0.197L0.421,-0.197Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
<g transform="matrix(96,0,0,96,566.588,385.587)">
<path d="M0.158,0C0.18,0 0.198,-0.008 0.214,-0.023C0.229,-0.038 0.236,-0.057 0.236,-0.079L0.236,-0.67C0.236,-0.691 0.229,-0.71 0.214,-0.725C0.198,-0.741 0.18,-0.749 0.158,-0.749C0.136,-0.749 0.117,-0.741 0.102,-0.725C0.087,-0.71 0.079,-0.691 0.079,-0.67L0.079,-0.079C0.079,-0.057 0.087,-0.038 0.102,-0.023C0.117,-0.008 0.136,0 0.158,0Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
<g transform="matrix(96,0,0,96,596.876,385.587)">
<path d="M0.572,-0.472C0.572,-0.44 0.56,-0.412 0.537,-0.389C0.514,-0.366 0.486,-0.355 0.453,-0.355L0.236,-0.355L0.236,-0.591L0.453,-0.591C0.486,-0.591 0.514,-0.579 0.537,-0.556C0.56,-0.533 0.572,-0.505 0.572,-0.472ZM0.158,0C0.18,0 0.198,-0.008 0.214,-0.023C0.229,-0.038 0.236,-0.057 0.236,-0.079L0.236,-0.197L0.453,-0.197C0.529,-0.197 0.594,-0.224 0.648,-0.278C0.702,-0.332 0.729,-0.397 0.729,-0.472C0.729,-0.549 0.702,-0.614 0.648,-0.668C0.594,-0.722 0.529,-0.749 0.453,-0.749L0.158,-0.749C0.136,-0.749 0.117,-0.741 0.102,-0.725C0.087,-0.71 0.079,-0.691 0.079,-0.67L0.079,-0.079C0.079,-0.057 0.087,-0.038 0.102,-0.023C0.117,-0.008 0.136,0 0.158,0Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
<g transform="matrix(96,0,0,96,670.604,385.587)">
<path d="M0.266,-0.591L0.266,-0.079C0.266,-0.057 0.273,-0.038 0.289,-0.023C0.304,-0.008 0.323,0 0.344,0C0.366,0 0.385,-0.008 0.4,-0.023C0.415,-0.038 0.423,-0.057 0.423,-0.079L0.423,-0.591L0.591,-0.591C0.612,-0.591 0.631,-0.599 0.647,-0.614C0.662,-0.629 0.67,-0.648 0.67,-0.67C0.67,-0.691 0.662,-0.71 0.647,-0.725C0.631,-0.741 0.612,-0.749 0.591,-0.749L0.099,-0.749C0.077,-0.749 0.058,-0.741 0.043,-0.725C0.027,-0.71 0.02,-0.691 0.02,-0.67C0.02,-0.648 0.027,-0.629 0.043,-0.614C0.058,-0.599 0.077,-0.591 0.099,-0.591L0.266,-0.591Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
<g transform="matrix(96,0,0,96,736.748,385.587)">
<path d="M0.118,-0.75C0.097,-0.75 0.078,-0.742 0.063,-0.727C0.047,-0.712 0.04,-0.693 0.04,-0.671L0.04,-0.573C0.04,-0.551 0.047,-0.532 0.063,-0.517C0.078,-0.502 0.097,-0.494 0.118,-0.494C0.14,-0.494 0.159,-0.502 0.174,-0.517C0.189,-0.532 0.197,-0.551 0.197,-0.573L0.197,-0.671C0.197,-0.693 0.189,-0.712 0.174,-0.727C0.159,-0.742 0.14,-0.75 0.118,-0.75ZM0.355,-0.75C0.333,-0.75 0.314,-0.742 0.299,-0.727C0.284,-0.712 0.276,-0.693 0.276,-0.671L0.276,-0.573C0.276,-0.551 0.284,-0.532 0.299,-0.517C0.314,-0.502 0.333,-0.494 0.355,-0.494C0.377,-0.494 0.395,-0.502 0.41,-0.517C0.426,-0.532 0.434,-0.551 0.434,-0.573L0.434,-0.671C0.434,-0.693 0.426,-0.712 0.41,-0.727C0.395,-0.742 0.377,-0.75 0.355,-0.75Z" style="fill:rgb(129,201,196);fill-rule:nonzero;"/>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -227,7 +227,8 @@ $(function($) {
var acct_id = $('#timeline_' + selectedColumn).attr('data-acct') var acct_id = $('#timeline_' + selectedColumn).attr('data-acct')
var ats_cm = $('.selectedToot .rep-btn').attr('data-men') var ats_cm = $('.selectedToot .rep-btn').attr('data-men')
var mode = $('.selectedToot .rep-btn').attr('data-visen') var mode = $('.selectedToot .rep-btn').attr('data-visen')
re(id, ats_cm, acct_id, mode) var cwTxt = $('#cw-text').val()
re(id, ats_cm, acct_id, mode, cwTxt)
return false return false
} }
} }

View File

@@ -10,7 +10,7 @@ $(document).ready(function () {
belowOrigin: false, // Displays dropdown below the button belowOrigin: false, // Displays dropdown below the button
alignment: 'left', // Displays dropdown with edge aligned to the left of button alignment: 'left', // Displays dropdown with edge aligned to the left of button
stopPropagation: false stopPropagation: false
}); })
$('.dropdown-trigger').dropdown({ $('.dropdown-trigger').dropdown({
inDuration: 300, inDuration: 300,
outDuration: 225, outDuration: 225,
@@ -21,9 +21,9 @@ $(document).ready(function () {
alignment: 'left', // Displays dropdown with edge aligned to the left of button alignment: 'left', // Displays dropdown with edge aligned to the left of button
stopPropagation: false // Stops event propagation stopPropagation: false // Stops event propagation
} }
); )
$('.collapsible').collapsible(); $('.collapsible').collapsible()
$('#videomodal').modal({ $('#videomodal').modal({
onCloseEnd: stopVideo onCloseEnd: stopVideo
}); })
}); })

View File

@@ -17,26 +17,26 @@
(function (factory) { (function (factory) {
if (typeof define === 'function' && define.amd) { if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module. // AMD. Register as an anonymous module.
define(['jquery'], factory); define(['jquery'], factory)
} else if (typeof module === 'object' && typeof module.exports === 'object') { } else if (typeof module === 'object' && typeof module.exports === 'object') {
factory(require('jquery')); factory(require('jquery'))
} else { } else {
// Browser globals // Browser globals
factory(jQuery); factory(jQuery)
} }
}(function ($) { }(function ($) {
$.timeago = function (timestamp) { $.timeago = function (timestamp) {
if (timestamp instanceof Date) { if (timestamp instanceof Date) {
return inWords(timestamp); return inWords(timestamp)
} else if (typeof timestamp === "string") { } else if (typeof timestamp === "string") {
return inWords($.timeago.parse(timestamp)); return inWords($.timeago.parse(timestamp))
} else if (typeof timestamp === "number") { } else if (typeof timestamp === "number") {
return inWords(new Date(timestamp)); return inWords(new Date(timestamp))
} else { } else {
return inWords($.timeago.datetime(timestamp)); return inWords($.timeago.datetime(timestamp))
} }
}; }
var $t = $.timeago; var $t = $.timeago
$.extend($.timeago, { $.extend($.timeago, {
settings: { settings: {
refreshMillis: 60000, refreshMillis: 60000,
@@ -69,33 +69,33 @@
inWords: function (distanceMillis) { inWords: function (distanceMillis) {
if (!this.settings.allowPast && !this.settings.allowFuture) { if (!this.settings.allowPast && !this.settings.allowFuture) {
throw 'timeago allowPast and allowFuture settings can not both be set to false.'; throw 'timeago allowPast and allowFuture settings can not both be set to false.'
} }
var $l = this.settings.strings; var $l = this.settings.strings
var prefix = $l.prefixAgo; var prefix = $l.prefixAgo
var suffix = $l.suffixAgo; var suffix = $l.suffixAgo
if (this.settings.allowFuture) { if (this.settings.allowFuture) {
if (distanceMillis < 0) { if (distanceMillis < 0) {
prefix = $l.prefixFromNow; prefix = $l.prefixFromNow
suffix = $l.suffixFromNow; suffix = $l.suffixFromNow
} }
} }
if (!this.settings.allowPast && distanceMillis >= 0) { if (!this.settings.allowPast && distanceMillis >= 0) {
return this.settings.strings.inPast; return this.settings.strings.inPast
} }
var seconds = Math.abs(distanceMillis) / 1000; var seconds = Math.abs(distanceMillis) / 1000
var minutes = seconds / 60; var minutes = seconds / 60
var hours = minutes / 60; var hours = minutes / 60
var days = hours / 24; var days = hours / 24
var years = days / 365; var years = days / 365
function substitute(stringOrFunction, number) { function substitute(stringOrFunction, number) {
var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction
var value = ($l.numbers && $l.numbers[number]) || number; var value = ($l.numbers && $l.numbers[number]) || number
return string.replace(/%d/i, value); return string.replace(/%d/i, value)
} }
var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
@@ -108,124 +108,124 @@
days < 45 && substitute($l.month, 1) || days < 45 && substitute($l.month, 1) ||
days < 365 && substitute($l.months, Math.round(days / 30)) || days < 365 && substitute($l.months, Math.round(days / 30)) ||
years < 1.5 && substitute($l.year, 1) || years < 1.5 && substitute($l.year, 1) ||
substitute($l.years, Math.round(years)); substitute($l.years, Math.round(years))
var separator = $l.wordSeparator || ""; var separator = $l.wordSeparator || ""
if ($l.wordSeparator === undefined) { separator = " "; } if ($l.wordSeparator === undefined) { separator = " " }
return $.trim([prefix, words, suffix].join(separator)); return $.trim([prefix, words, suffix].join(separator))
}, },
parse: function (iso8601) { parse: function (iso8601) {
var s = $.trim(iso8601); var s = $.trim(iso8601)
s = s.replace(/\.\d+/, ""); // remove milliseconds s = s.replace(/\.\d+/, "") // remove milliseconds
s = s.replace(/-/, "/").replace(/-/, "/"); s = s.replace(/-/, "/").replace(/-/, "/")
s = s.replace(/T/, " ").replace(/Z/, " UTC"); s = s.replace(/T/, " ").replace(/Z/, " UTC")
s = s.replace(/([\+\-]\d\d)\:?(\d\d)/, " $1$2"); // -04:00 -> -0400 s = s.replace(/([\+\-]\d\d)\:?(\d\d)/, " $1$2") // -04:00 -> -0400
s = s.replace(/([\+\-]\d\d)$/, " $100"); // +09 -> +0900 s = s.replace(/([\+\-]\d\d)$/, " $100") // +09 -> +0900
return new Date(s); return new Date(s)
}, },
datetime: function (elem) { datetime: function (elem) {
var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title"); var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title")
return $t.parse(iso8601); return $t.parse(iso8601)
}, },
isTime: function (elem) { isTime: function (elem) {
// jQuery's `is()` doesn't play well with HTML5 in IE // jQuery's `is()` doesn't play well with HTML5 in IE
return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); return $(elem).get(0).tagName.toLowerCase() === "time" // $(elem).is("time");
} }
}); })
// functions that can be called via $(el).timeago('action') // functions that can be called via $(el).timeago('action')
// init is default when no action is given // init is default when no action is given
// functions are called with context of a single element // functions are called with context of a single element
var functions = { var functions = {
init: function () { init: function () {
functions.dispose.call(this); functions.dispose.call(this)
var refresh_el = $.proxy(refresh, this); var refresh_el = $.proxy(refresh, this)
refresh_el(); refresh_el()
var $s = $t.settings; var $s = $t.settings
if ($s.refreshMillis > 0) { if ($s.refreshMillis > 0) {
this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis); this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis)
} }
}, },
update: function (timestamp) { update: function (timestamp) {
var date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp); var date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp)
$(this).data('timeago', { datetime: date }); $(this).data('timeago', { datetime: date })
if ($t.settings.localeTitle) { if ($t.settings.localeTitle) {
$(this).attr("title", date.toLocaleString()); $(this).attr("title", date.toLocaleString())
} }
refresh.apply(this); refresh.apply(this)
}, },
updateFromDOM: function () { updateFromDOM: function () {
$(this).data('timeago', { datetime: $t.parse($t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title")) }); $(this).data('timeago', { datetime: $t.parse($t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title")) })
refresh.apply(this); refresh.apply(this)
}, },
dispose: function () { dispose: function () {
if (this._timeagoInterval) { if (this._timeagoInterval) {
window.clearInterval(this._timeagoInterval); window.clearInterval(this._timeagoInterval)
this._timeagoInterval = null; this._timeagoInterval = null
} }
} }
}; }
$.fn.timeago = function (action, options) { $.fn.timeago = function (action, options) {
var fn = action ? functions[action] : functions.init; var fn = action ? functions[action] : functions.init
if (!fn) { if (!fn) {
throw new Error("Unknown function name '" + action + "' for timeago"); throw new Error("Unknown function name '" + action + "' for timeago")
} }
// each over objects here and call the requested function // each over objects here and call the requested function
this.each(function () { this.each(function () {
fn.call(this, options); fn.call(this, options)
}); })
return this; return this
}; }
function refresh() { function refresh() {
var $s = $t.settings; var $s = $t.settings
//check if it's still visible //check if it's still visible
if ($s.autoDispose && !$.contains(document.documentElement, this)) { if ($s.autoDispose && !$.contains(document.documentElement, this)) {
//stop if it has been removed //stop if it has been removed
$(this).timeago("dispose"); $(this).timeago("dispose")
return this; return this
} }
var data = prepareData(this); var data = prepareData(this)
if (!isNaN(data.datetime)) { if (!isNaN(data.datetime)) {
if ($s.cutoff === 0 || Math.abs(distance(data.datetime)) < $s.cutoff) { if ($s.cutoff === 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
$(this).text(inWords(data.datetime)); $(this).text(inWords(data.datetime))
} else { } else {
if ($(this).attr('title').length > 0) { if ($(this).attr('title').length > 0) {
$(this).text($(this).attr('title')); $(this).text($(this).attr('title'))
} }
} }
} }
return this; return this
} }
function prepareData(element) { function prepareData(element) {
element = $(element); element = $(element)
if (!element.data("timeago")) { if (!element.data("timeago")) {
element.data("timeago", { datetime: $t.datetime(element) }); element.data("timeago", { datetime: $t.datetime(element) })
var text = $.trim(element.text()); var text = $.trim(element.text())
if ($t.settings.localeTitle) { if ($t.settings.localeTitle) {
element.attr("title", element.data('timeago').datetime.toLocaleString()); element.attr("title", element.data('timeago').datetime.toLocaleString())
} else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
element.attr("title", text); element.attr("title", text)
} }
} }
return element.data("timeago"); return element.data("timeago")
} }
function inWords(date) { function inWords(date) {
return $t.inWords(distance(date)); return $t.inWords(distance(date))
} }
function distance(date) { function distance(date) {
return (new Date().getTime() - date.getTime()); return (new Date().getTime() - date.getTime())
} }
// fix for IE6 suckage // fix for IE6 suckage
document.createElement("abbr"); document.createElement("abbr")
document.createElement("time"); document.createElement("time")
})); }))

View File

@@ -1,5 +1,6 @@
//バージョンチェッカー //バージョンチェッカー
function verck(ver, jp) { function verck(ver, jp) {
if (store) return false
console.log('%c Welcome😊 ' + ver, 'color: red;font-size:200%;') console.log('%c Welcome😊 ' + ver, 'color: red;font-size:200%;')
$('body').addClass(localStorage.getItem('platform')) $('body').addClass(localStorage.getItem('platform'))
var date = new Date() var date = new Date()
@@ -72,9 +73,9 @@ function verck(ver, jp) {
} }
var platform = localStorage.getItem('platform') var platform = localStorage.getItem('platform')
console.log('Your platform:' + platform) console.log('Your platform:' + platform)
if (!localStorage.getItem('winstore') && !pwa) { //if (!localStorage.getItem('winstore') && !pwa) {
$('#start').css('display', 'flex') // $('#start').css('display', 'flex')
} //}
if ( if (
localStorage.getItem('winstore') == 'brewcask' || localStorage.getItem('winstore') == 'brewcask' ||
localStorage.getItem('winstore') == 'snapcraft' || localStorage.getItem('winstore') == 'snapcraft' ||
@@ -327,82 +328,8 @@ function closeSupport() {
} }
) )
} }
function storeDialog(platform, ver) {
if($('body').hasClass('accessibility')) return false
if (platform == 'win32') {
var mes = lang.lang_version_platform
} else if (platform == 'linux') {
var mes = lang.lang_version_platform_linux
} else if (platform == 'darwin') {
var mes = lang.lang_version_platform_mac
} else {
var mes = false
}
if (mes) {
Swal.fire({
title: 'Select your platform',
text: mes,
type: 'info',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#3085d6',
confirmButtonText: lang.lang_no,
cancelButtonText: lang.lang_yesno
}).then(result => {
//逆にしてる
if (!result.value) {
localStorage.setItem('winstore', 'winstore')
} else {
localStorage.setItem('winstore', 'localinstall')
}
localStorage.setItem('ver', ver)
showVer = true
if(pwa) return false
console.log('%c Thank you for your update🎉', 'color: red;font-size:200%;')
$(document).ready(function() {
$('#releasenote').modal('open')
verp = ver.replace('(', '')
verp = verp.replace('.', '-')
verp = verp.replace('.', '-')
verp = verp.replace('[', '-')
verp = verp.replace(']', '')
verp = verp.replace(')', '')
verp = verp.replace(' ', '_')
console.log('%c ' + verp, 'color: red;font-size:200%;')
if (lang.language == 'ja') {
$('#release-' + verp).show()
} else {
$('#release-en').show()
}
})
})
} else {
localStorage.setItem('ver', ver)
showVer = true
console.log('%c Thank you for your update🎉', 'color: red;font-size:200%;')
$(document).ready(function() {
if(pwa) return false
$('#releasenote').modal('open')
verp = ver.replace('(', '')
verp = verp.replace('.', '-')
verp = verp.replace('.', '-')
verp = verp.replace('[', '-')
verp = verp.replace(']', '')
verp = verp.replace(')', '')
verp = verp.replace(' ', '_')
console.log('%c ' + verp, 'color: red;font-size:200%;')
if (lang.language == 'ja') {
$('#release-' + verp).show()
} else {
$('#release-en').show()
}
})
}
}
function closeStart() { function closeStart() {
$('#start').css('display', 'none') $('#start').css('display', 'none')
var platform = localStorage.getItem('platform') var platform = localStorage.getItem('platform')
var ver = localStorage.getItem('ver') var ver = localStorage.getItem('ver')
storeDialog(platform, ver)
} }

View File

@@ -92,7 +92,7 @@ var activity=[
{shortcode:"man-rowing-boat",css:"95.8333% 14.5833%"}, {shortcode:"man-rowing-boat",css:"95.8333% 14.5833%"},
{shortcode:"man-biking",css:"95.8333% 39.5833%"}, {shortcode:"man-biking",css:"95.8333% 39.5833%"},
{shortcode:"man-mountain-biking",css:"95.8333% 64.5833%"} {shortcode:"man-mountain-biking",css:"95.8333% 64.5833%"}
]; ]
var flag=[ var flag=[
{shortcode:"checkered_flag",css:"16.6667% 58.3333%"}, {shortcode:"checkered_flag",css:"16.6667% 58.3333%"},
{shortcode:"crossed_flags",css:"14.5833% 60.4167%"}, {shortcode:"crossed_flags",css:"14.5833% 60.4167%"},
@@ -356,7 +356,7 @@ var flag=[
{shortcode:"rainbow-flag",css:"83.3333% 100%"}, {shortcode:"rainbow-flag",css:"83.3333% 100%"},
{shortcode:"triangular_flag_on_post",css:"54.1667% 6.25%"}, {shortcode:"triangular_flag_on_post",css:"54.1667% 6.25%"},
{shortcode:"waving_black_flag",css:"20.8333% 29.1667%"}, {shortcode:"waving_black_flag",css:"20.8333% 29.1667%"},
{shortcode:"waving_white_flag",css:"20.8333% 27.0833%"}]; {shortcode:"waving_white_flag",css:"20.8333% 27.0833%"}]
var food=[ var food=[
{shortcode:"green_apple",css:"12.5% 25%"}, {shortcode:"green_apple",css:"12.5% 25%"},
{shortcode:"apple",css:"12.5% 22.9167%"}, {shortcode:"apple",css:"12.5% 22.9167%"},
@@ -444,7 +444,7 @@ var food=[
{shortcode:"spoon",css:"62.5% 14.5833%"}, {shortcode:"spoon",css:"62.5% 14.5833%"},
{shortcode:"fork_and_knife",css:"14.5833% 0%"}, {shortcode:"fork_and_knife",css:"14.5833% 0%"},
{shortcode:"knife_fork_plate",css:"14.5833% 18.75%"} {shortcode:"knife_fork_plate",css:"14.5833% 18.75%"}
]; ]
var nature=[ var nature=[
{shortcode:"dog",css:"22.9167% 62.5%"}, {shortcode:"dog",css:"22.9167% 62.5%"},
{shortcode:"cat",css:"22.9167% 52.0833%"}, {shortcode:"cat",css:"22.9167% 52.0833%"},
@@ -605,7 +605,7 @@ var nature=[
{shortcode:"droplet",css:"35.4167% 39.5833%"}, {shortcode:"droplet",css:"35.4167% 39.5833%"},
{shortcode:"sweat_drops",css:"35.4167% 37.5%"}, {shortcode:"sweat_drops",css:"35.4167% 37.5%"},
{shortcode:"umbrella_with_rain_drops",css:"0% 100%"} {shortcode:"umbrella_with_rain_drops",css:"0% 100%"}
]; ]
var object=[ var object=[
{shortcode:"watch",css:"0% 29.1667%"}, {shortcode:"watch",css:"0% 29.1667%"},
{shortcode:"iphone",css:"39.5833% 0%"}, {shortcode:"iphone",css:"39.5833% 0%"},
@@ -780,7 +780,7 @@ var object=[
{shortcode:"closed_lock_with_key",css:"39.5833% 62.5%"}, {shortcode:"closed_lock_with_key",css:"39.5833% 62.5%"},
{shortcode:"lock",css:"39.5833% 66.6667%"}, {shortcode:"lock",css:"39.5833% 66.6667%"},
{shortcode:"unlock",css:"39.5833% 68.75%"} {shortcode:"unlock",css:"39.5833% 68.75%"}
]; ]
var people=[ var people=[
{shortcode:"grinning",css:"45.8333% 68.75%"}, {shortcode:"grinning",css:"45.8333% 68.75%"},
{shortcode:"smiley",css:"45.8333% 75%"}, {shortcode:"smiley",css:"45.8333% 75%"},
@@ -1096,7 +1096,7 @@ var people=[
{shortcode:"woman-raising-hand",css:"93.75% 29.1667%"}, {shortcode:"woman-raising-hand",css:"93.75% 29.1667%"},
{shortcode:"woman-frowning",css:"93.75% 54.1667%"}, {shortcode:"woman-frowning",css:"93.75% 54.1667%"},
{shortcode:"woman-pouting",css:"93.75% 79.1667%"} {shortcode:"woman-pouting",css:"93.75% 79.1667%"}
]; ]
var place=[ var place=[
{shortcode:"car",css:"52.0833% 60.4167%"}, {shortcode:"car",css:"52.0833% 60.4167%"},
{shortcode:"taxi",css:"52.0833% 56.25%"}, {shortcode:"taxi",css:"52.0833% 56.25%"},
@@ -1217,7 +1217,7 @@ var place=[
{shortcode:"milky_way",css:"8.33333% 93.75%"}, {shortcode:"milky_way",css:"8.33333% 93.75%"},
{shortcode:"bridge_at_night",css:"8.33333% 87.5%"}, {shortcode:"bridge_at_night",css:"8.33333% 87.5%"},
{shortcode:"foggy",css:"8.33333% 70.8333%"} {shortcode:"foggy",css:"8.33333% 70.8333%"}
]; ]
var symbol=[ var symbol=[
{shortcode:"heart",css:"6.25% 62.5%"}, {shortcode:"heart",css:"6.25% 62.5%"},
{shortcode:"yellow_heart",css:"35.4167% 14.5833%"}, {shortcode:"yellow_heart",css:"35.4167% 14.5833%"},
@@ -1492,7 +1492,7 @@ var symbol=[
{shortcode:"female_sign",css:"2.08333% 37.5%"}, {shortcode:"female_sign",css:"2.08333% 37.5%"},
{shortcode:"male_sign",css:"2.08333% 39.5833%"}, {shortcode:"male_sign",css:"2.08333% 39.5833%"},
{shortcode:"staff_of_aesculapius",css:"2.08333% 87.5%"} {shortcode:"staff_of_aesculapius",css:"2.08333% 87.5%"}
]; ]
var faicons=[ var faicons=[
"fa-500px", "fa-500px",
"fa-address-book", "fa-address-book",

View File

@@ -83,6 +83,6 @@ var idata = {
"nitiasa.com_quote":"enabled", "nitiasa.com_quote":"enabled",
"biwakodon.com_quote":"enabled", "biwakodon.com_quote":"enabled",
"comm.cx_quote":"enabled" "comm.cx_quote":"enabled"
}; }
localStorage.setItem("instance", JSON.stringify(idata)); localStorage.setItem("instance", JSON.stringify(idata))

View File

@@ -32,7 +32,7 @@ function ck() {
} else { } else {
var obj = JSON.parse(multi) var obj = JSON.parse(multi)
var jp = false var jp = false
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)
@@ -47,8 +47,15 @@ function ck() {
multiSelector(false) multiSelector(false)
verck(ver, jp) verck(ver, jp)
$('.stw').show() $('.stw').show()
if (localStorage.getItem('tips')) { let tipsName = localStorage.getItem('tips')
tips(localStorage.getItem('tips')) const matchCID = /custom:([abcdef0-9]{8}-[abcdef0-9]{4}-4[abcdef0-9]{3}-[abcdef0-9]{4}-[abcdef0-9]{12})/
if (tipsName) {
if (tipsName.match(matchCID)) {
const id = tipsName.match(matchCID)[1]
tips('custom', id)
} else {
tips(tipsName)
}
} }
$('#something-wrong img').attr('src', '../../img/thinking.svg') $('#something-wrong img').attr('src', '../../img/thinking.svg')
} }
@@ -77,7 +84,7 @@ function login(url) {
website: 'https://thedesk.top' website: 'https://thedesk.top'
}) })
) )
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -142,20 +149,20 @@ function code(code, mode) {
code: code code: code
}) })
}) })
.then(function(response) { .then(function (response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
todo(error) todo(error)
setLog(start, 'JSON', error) setLog(start, 'JSON', error)
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (json) {
todo(json) todo(json)
if (json['access_token']) { if (json['access_token']) {
localStorage.setItem(url + '_at', json['access_token']) localStorage.setItem(url + '_at', json['access_token'])
@@ -181,20 +188,20 @@ function getdata() {
Authorization: 'Bearer ' + at Authorization: 'Bearer ' + at
} }
}) })
.then(function(response) { .then(function (response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
todo(error) todo(error)
setLog(start, 'JSON', error) setLog(start, 'JSON', error)
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (json) {
if (json.error) { if (json.error) {
console.error('Error:' + json.error) console.error('Error:' + json.error)
M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 }) M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 })
@@ -239,20 +246,20 @@ function getdataAdv(domain, at) {
Authorization: 'Bearer ' + at Authorization: 'Bearer ' + at
} }
}) })
.then(function(response) { .then(function (response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
todo(error) todo(error)
setLog(start, 'JSON', error) setLog(start, 'JSON', error)
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (json) {
if (json.error) { if (json.error) {
console.error('Error:' + json.error) console.error('Error:' + json.error)
M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 }) M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 })
@@ -291,34 +298,40 @@ function getdataAdv(domain, at) {
}) })
} }
//ユーザーデータ更新 //ユーザーデータ更新
function refresh(target, loadskip) { async function refresh(target, loadskip) {
var multi = localStorage.getItem('multi') var multi = localStorage.getItem('multi')
var obj = JSON.parse(multi) var obj = JSON.parse(multi)
if (obj[target].mode == 'misskey') { if (obj[target].mode == 'misskey') {
return return
} }
let at = obj[target].at
if (obj[target].rt) {
console.log('refresh access token')
at = await refreshPleromaAt(obj[target])
localStorage.setItem(`acct_${target}_at`, at)
}
var start = 'https://' + obj[target].domain + '/api/v1/accounts/verify_credentials' var start = 'https://' + obj[target].domain + '/api/v1/accounts/verify_credentials'
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + obj[target].at Authorization: 'Bearer ' + at
} }
}) })
.then(function(response) { .then(function (response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
todo(error) todo(error)
setLog(start, 'JSON', error) setLog(start, 'JSON', error)
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (json) {
if (json.error) { if (json.error) {
console.error('Error:' + json.error) console.error('Error:' + json.error)
M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 }) M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 })
@@ -362,6 +375,29 @@ function refresh(target, loadskip) {
} }
}) })
} }
async function refreshPleromaAt(obj) {
const start = 'https://' + obj.domain + '/oauth/token'
const rt = obj.rt.split(' ')
let promise = await fetch(start, {
method: 'POST',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
grant_type : 'refresh_token',
refresh_token: rt[0],
client_id: rt[1],
client_secret: rt[2]
})
})
const json = await promise.json()
if (json.access_token) {
return json.access_token
} else {
return false
}
}
//MarkdownやBBCodeの対応、文字数制限をチェック //MarkdownやBBCodeの対応、文字数制限をチェック
//絶対ストリーミングを閉じさせないマン //絶対ストリーミングを閉じさせないマン
function ckdb(acct_id) { function ckdb(acct_id) {
@@ -447,13 +483,13 @@ function ckdb(acct_id) {
'content-type': 'application/json' 'content-type': 'application/json'
} }
}) })
.then(function(response) { .then(function (response) {
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (json) {
if (json.error) { if (json.error) {
console.error(json.error) console.error(json.error)
return return
@@ -500,7 +536,7 @@ function multiSelector(parseC) {
$('#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>')
} else { } else {
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) {
@@ -568,8 +604,8 @@ function multiSelector(parseC) {
$('#src-acct-sel').append('<option value="tootsearch">Tootsearch</option>') $('#src-acct-sel').append('<option value="tootsearch">Tootsearch</option>')
$('#add-acct-sel').append( $('#add-acct-sel').append(
'<option value="noauth">' + '<option value="noauth">' +
lang.lang_login_noauth + lang.lang_login_noauth +
'</option><option value="webview">Twitter</option>' '</option><!--option value="webview">Twitter</option-->'
) )
$('#dir-acct-sel').append('<option value="noauth">' + lang.lang_login_noauth + '</option>') $('#dir-acct-sel').append('<option value="noauth">' + lang.lang_login_noauth + '</option>')
} }
@@ -598,18 +634,18 @@ function ticker() {
'content-type': 'application/json' 'content-type': 'application/json'
} }
}) })
.then(function(response) { .then(function (response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (json) {
if (json) { if (json) {
localStorage.removeItem('ticker') localStorage.removeItem('ticker')
localStorage.setItem('sticker', JSON.stringify(json)) localStorage.setItem('sticker', JSON.stringify(json))

View File

@@ -1,7 +1,7 @@
//ログアウトします //ログアウトします
function logout() { function logout() {
localStorage.removeItem("acct_" + acct_id + "_at"); localStorage.removeItem("acct_" + acct_id + "_at")
localStorage.removeItem("domain_" + acct_id); localStorage.removeItem("domain_" + acct_id)
location.href = "index.html"; location.href = "index.html"
todc(); todc()
} }

View File

@@ -36,7 +36,7 @@ function load() {
var domains = [] var domains = []
var templete var templete
$('#acct-list').html('') $('#acct-list').html('')
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 (acct.background != 'def' && acct.text != 'def') { if (acct.background != 'def' && acct.text != 'def') {
@@ -55,6 +55,9 @@ function load() {
<div class="card-content "> <div class="card-content ">
<span class="lts">${list}.</span><img src="${acct.prof}" width="40" height="40" /> <span class="lts">${list}.</span><img src="${acct.prof}" width="40" height="40" />
<span class="card-title">${name}</span>${escapeHTML(acct.user)}@${acct.domain} <span class="card-title">${name}</span>${escapeHTML(acct.user)}@${acct.domain}
<a onclick="login('${acct.domain}')" class="pointer white-text waves-effect" title="${lang.lang_manager_refreshAt}">
<i class="material-icons text-line-icon">login</i>
</a>
</div> </div>
<div class="card-action"> <div class="card-action">
<button class="btn-flat waves-effect disTar pointer white-text" onclick="refresh('${key}')"> <button class="btn-flat waves-effect disTar pointer white-text" onclick="refresh('${key}')">
@@ -72,7 +75,7 @@ function load() {
}) })
domains = _.uniq(domains) domains = _.uniq(domains)
$('#domain-list').html('') $('#domain-list').html('')
Object.keys(domains).forEach(function(key2) { Object.keys(domains).forEach(function (key2) {
var domain = domains[key2] var domain = domains[key2]
if (localStorage.getItem('letters_' + key2)) { if (localStorage.getItem('letters_' + key2)) {
var maxChars = localStorage.getItem('letters_' + key2) var maxChars = localStorage.getItem('letters_' + key2)
@@ -108,7 +111,7 @@ load()
support() support()
function maxChars(domain, uid) { function maxChars(domain, uid) {
var value = $('#maxChars' + uid).val() var value = $('#maxChars' + uid).val()
if(value*1 < 1 || !Number.isInteger(value*1)) { if (value * 1 < 1 || !Number.isInteger(value * 1)) {
Swal.fire({ Swal.fire({
type: 'error', type: 'error',
title: 'Error' title: 'Error'
@@ -127,8 +130,8 @@ function maxChars(domain, uid) {
localStorage.removeItem('multi') localStorage.removeItem('multi')
} }
} }
Object.keys(obj).forEach(function(key) { Object.keys(obj).forEach(function (key) {
if(obj[key].domain == domain) localStorage.setItem('letters_' + key, value) if (obj[key].domain == domain) localStorage.setItem('letters_' + key, value)
}) })
console.log('#maxChars' + uid, value) console.log('#maxChars' + uid, value)
load() load()
@@ -208,7 +211,7 @@ function multiDel(target) {
cancelButtonText: lang.lang_no cancelButtonText: lang.lang_no
}).then(result => { }).then(result => {
if (result.value) { if (result.value) {
Object.keys(obj).forEach(function(key) { Object.keys(obj).forEach(function (key) {
var nk = key - 1 var nk = key - 1
//公開範囲(差分のみ) //公開範囲(差分のみ)
if (key >= target) { if (key >= target) {
@@ -227,7 +230,9 @@ function multiDel(target) {
var olddom = localStorage.getItem('domain_' + key) var olddom = localStorage.getItem('domain_' + key)
localStorage.setItem('domain_' + nk, olddom) localStorage.setItem('domain_' + nk, olddom)
var oldat = localStorage.getItem('acct_' + key + '_at') var oldat = localStorage.getItem('acct_' + key + '_at')
var oldrt = localStorage.getItem('acct_' + key + '_rt')
localStorage.setItem('acct_' + nk + '_at', oldat) localStorage.setItem('acct_' + nk + '_at', oldat)
localStorage.setItem('acct_' + nk + '_rt', oldrt)
localStorage.setItem('name_' + nk, localStorage.getItem('name_' + key)) localStorage.setItem('name_' + nk, localStorage.getItem('name_' + key))
localStorage.setItem('user_' + target, localStorage.getItem('user_' + key)) localStorage.setItem('user_' + target, localStorage.getItem('user_' + key))
localStorage.setItem('user-id_' + target, localStorage.getItem('user-id_' + key)) localStorage.setItem('user-id_' + target, localStorage.getItem('user-id_' + key))
@@ -243,7 +248,7 @@ function multiDel(target) {
var col = localStorage.getItem('column') var col = localStorage.getItem('column')
var oldcols = JSON.parse(col) var oldcols = JSON.parse(col)
var newcols = [] var newcols = []
Object.keys(oldcols).forEach(function(key) { Object.keys(oldcols).forEach(function (key) {
var nk = key - 1 var nk = key - 1
var oldcol = oldcols[key] var oldcol = oldcols[key]
if (target < oldcol.domain) { if (target < oldcol.domain) {
@@ -253,19 +258,19 @@ function multiDel(target) {
} }
var type = oldcol.type var type = oldcol.type
var data = null var data = null
if(oldcol.data) { if (oldcol.data) {
data = oldcol.data data = oldcol.data
} }
var background = null var background = null
if(oldcol.background) { if (oldcol.background) {
background = oldcol.background background = oldcol.background
} }
var text = null var text = null
if(oldcol.text) { if (oldcol.text) {
text = oldcol.text text = oldcol.text
} }
var left_fold = false var left_fold = false
if(oldcol.left_fold) { if (oldcol.left_fold) {
left_fold = true left_fold = true
} }
//消した垢のコラムじゃないときコピー //消した垢のコラムじゃないときコピー
@@ -303,7 +308,7 @@ function multiDel2(target) {
obj.splice(target, 1) obj.splice(target, 1)
var json = JSON.stringify(obj) var json = JSON.stringify(obj)
localStorage.setItem('multi', json) localStorage.setItem('multi', json)
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)
if (oldvis) { if (oldvis) {
@@ -331,7 +336,7 @@ function multiDel2(target) {
} else { } else {
var cobj = JSON.parse(col) var cobj = JSON.parse(col)
} }
Object.keys(cobj).forEach(function(key) { Object.keys(cobj).forEach(function (key) {
var column = cobj[key] var column = cobj[key]
if (column.domain > target) { if (column.domain > target) {
var nk = key - 1 var nk = key - 1
@@ -351,7 +356,7 @@ function multiDel2(target) {
//サポートインスタンス //サポートインスタンス
function support() { function support() {
Object.keys(idata).forEach(function(key) { Object.keys(idata).forEach(function (key) {
var instance = idata[key] var instance = idata[key]
if (instance == 'instance') { if (instance == 'instance') {
templete = templete =
@@ -399,7 +404,7 @@ function login(url) {
website: 'https://thedesk.top' website: 'https://thedesk.top'
}) })
) )
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -437,20 +442,20 @@ function versionChecker(url) {
'content-type': 'application/json' 'content-type': 'application/json'
} }
}) })
.then(function(response) { .then(function (response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
todo(error) todo(error)
setLog(start, 'JSON', error) setLog(start, 'JSON', error)
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (json) {
var version = json.version var version = json.version
if (version) { if (version) {
var reg = version.match(/^([0-9])\.[0-9]\.[0-9]/u) var reg = version.match(/^([0-9])\.[0-9]\.[0-9]/u)
@@ -476,25 +481,25 @@ function versionCompat(prefix, ver, title, real) {
'content-type': 'application/json' 'content-type': 'application/json'
} }
}) })
.then(function(response) { .then(function (response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
todo(error) todo(error)
setLog(start, 'JSON', error) setLog(start, 'JSON', error)
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (json) {
var complete = false var complete = false
var ct = 0 var ct = 0
var jl = 0 var jl = 0
var jl2 = 0 var jl2 = 0
Object.keys(json).forEach(function(key) { Object.keys(json).forEach(function (key) {
var data = json[key] var data = json[key]
if (data) { if (data) {
jl++ jl++
@@ -581,7 +586,7 @@ function misskeyLogin(url) {
] ]
}) })
) )
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -605,7 +610,7 @@ function misskeyAuth(url, mkc) {
appSecret: mkc appSecret: mkc
}) })
) )
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -629,9 +634,8 @@ function instance() {
alert('入力形式が違います。(Cutls@mstdn.jpにログインする場合、入力するのは"mstdn.jp"です。)') alert('入力形式が違います。(Cutls@mstdn.jpにログインする場合、入力するのは"mstdn.jp"です。)')
return false return false
} }
login(url) login(url)
} }
//コード入れてAccessTokenゲット //コード入れてAccessTokenゲット
function code(code) { function code(code) {
localStorage.removeItem('redirect') localStorage.removeItem('redirect')
@@ -657,7 +661,7 @@ function code(code) {
appSecret: localStorage.getItem('mkc') appSecret: localStorage.getItem('mkc')
}) })
) )
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -716,7 +720,7 @@ function code(code) {
code: code code: code
}) })
) )
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -725,14 +729,16 @@ function code(code) {
if (json['access_token']) { if (json['access_token']) {
$('#auth').hide() $('#auth').hide()
$('#add').show() $('#add').show()
getdata(url, json['access_token']) getdata(url, json)
} }
} }
} }
} }
} }
//ユーザーデータ取得 //ユーザーデータ取得
function getdata(domain, at) { function getdata(domain, json) {
var at = json['access_token']
var rt = `${json['refresh_token']} ${localStorage.getItem('client_id')} ${localStorage.getItem('client_secret')}`
var start = 'https://' + domain + '/api/v1/accounts/verify_credentials' var start = 'https://' + domain + '/api/v1/accounts/verify_credentials'
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
@@ -741,20 +747,20 @@ function getdata(domain, at) {
Authorization: 'Bearer ' + at Authorization: 'Bearer ' + at
} }
}) })
.then(function(response) { .then(function (response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
todo(error) todo(error)
setLog(start, 'JSON', error) setLog(start, 'JSON', error)
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (json) {
if (json.error) { if (json.error) {
console.error('Error:' + json.error) console.error('Error:' + json.error)
M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 }) M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 })
@@ -772,6 +778,7 @@ function getdata(domain, at) {
} }
var add = { var add = {
at: at, at: at,
rt: rt ? rt : null,
name: json['display_name'], name: json['display_name'],
domain: domain, domain: domain,
user: json['acct'], user: json['acct'],
@@ -782,8 +789,24 @@ function getdata(domain, at) {
} }
var multi = localStorage.getItem('multi') var multi = localStorage.getItem('multi')
var obj = JSON.parse(multi) var obj = JSON.parse(multi)
var target = obj.length let addTarget = -1
obj.push(add) let ct = 0
for (let acct of obj) {
if (acct.domain === domain && acct.user === json['acct']) {
console.log('detected dupl addct')
addTarget = ct
break
}
ct++
}
if (addTarget == -1) {
var target = obj.length
obj.push(add)
} else {
console.log('dupl acct_' + addTarget)
obj[addTarget] = add
var target = addTarget
}
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'])
@@ -807,6 +830,7 @@ function atSetup(type) {
var i = $('#misskey-key').val() var i = $('#misskey-key').val()
var add = { var add = {
at: i, at: i,
rt: null,
name: 'Pseudo Account', name: 'Pseudo Account',
domain: url, domain: url,
user: 'user+pseudo', user: 'user+pseudo',
@@ -820,6 +844,7 @@ function atSetup(type) {
var i = $('#code').val() var i = $('#code').val()
var add = { var add = {
at: i, at: i,
rt: null,
name: 'Pseudo Account', name: 'Pseudo Account',
domain: url, domain: url,
user: 'user+pseudo', user: 'user+pseudo',
@@ -862,25 +887,25 @@ function refresh(target) {
Authorization: 'Bearer ' + obj[target].at Authorization: 'Bearer ' + obj[target].at
} }
}) })
.then(function(response) { .then(function (response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
todo(error) todo(error)
setLog(start, 'JSON', error) setLog(start, 'JSON', error)
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (json) {
if (json.error) { if (json.error) {
console.error('Error:' + json.error) console.error('Error:' + json.error)
M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 }) M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 })
@@ -893,6 +918,7 @@ function refresh(target) {
} }
var ref = { var ref = {
at: obj[target].at, at: obj[target].at,
rt: obj[target].rt ? obj[target].rt : null,
name: json['display_name'], name: json['display_name'],
domain: obj[target].domain, domain: obj[target].domain,
user: json['acct'], user: json['acct'],
@@ -934,7 +960,7 @@ function misskeyRefresh(obj, target, url) {
i: obj[target].at i: obj[target].at
}) })
) )
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -944,6 +970,7 @@ function misskeyRefresh(obj, target, url) {
var priv = 'public' var priv = 'public'
var add = { var add = {
at: json.accessToken, at: json.accessToken,
rt: null,
name: json['user']['name'], name: json['user']['name'],
domain: url, domain: url,
user: json['user']['username'], user: json['user']['username'],
@@ -983,7 +1010,7 @@ function multisel() {
$('#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>')
} else { } else {
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) {
@@ -1073,10 +1100,10 @@ var oldSuggest
var suggest var suggest
input.addEventListener( input.addEventListener(
'focus', 'focus',
function() { function () {
$('#ins-suggest').html('') $('#ins-suggest').html('')
window.clearInterval(timer) window.clearInterval(timer)
timer = window.setInterval(function() { timer = window.setInterval(function () {
var new_val = input.value var new_val = input.value
if (prev_val != new_val) { if (prev_val != new_val) {
if (new_val.length > 3) { if (new_val.length > 3) {
@@ -1089,23 +1116,23 @@ input.addEventListener(
'Bearer tC8F6xWGWBUwGScyNevYlx62iO6fdQ4oIK0ad68Oo7ZKB8GQdGpjW9TKxBnIh8grAhvd5rw3iyP9JPamoDpeLQdz62EToPJUW99hDx8rfuJfGdjQuimZPTbIOx0woA5M' 'Bearer tC8F6xWGWBUwGScyNevYlx62iO6fdQ4oIK0ad68Oo7ZKB8GQdGpjW9TKxBnIh8grAhvd5rw3iyP9JPamoDpeLQdz62EToPJUW99hDx8rfuJfGdjQuimZPTbIOx0woA5M'
} }
}) })
.then(function(response) { .then(function (response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
todo(error) todo(error)
setLog(start, 'JSON', error) setLog(start, 'JSON', error)
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (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 =
urls + urls +
@@ -1127,7 +1154,7 @@ input.addEventListener(
input.addEventListener( input.addEventListener(
'blur', 'blur',
function() { function () {
window.clearInterval(timer) window.clearInterval(timer)
}, },
false false

View File

@@ -3,6 +3,7 @@
$(document).on('click', 'a', e => { $(document).on('click', 'a', e => {
var $a = $(e.target) var $a = $(e.target)
var url = $a.attr('href') var url = $a.attr('href')
var acct_id = $a.attr('data-acct')
if (!url) { if (!url) {
var url = $a.parent().attr('href') var url = $a.parent().attr('href')
} }
@@ -43,10 +44,14 @@ $(document).on('click', 'a', e => {
if (ats[2]) { if (ats[2]) {
//Quesdon判定 //Quesdon判定
if (!~ats[2].indexOf('@')) { if (!~ats[2].indexOf('@')) {
udgEx(url, 'main') var acct_id = $a.parent().attr('data-acct')
if (!acct_id) {
acct_id = localStorage.getItem("main")
}
udgEx(url, acct_id)
return false return false
} else { } else {
if(pwa) { if (pwa) {
return true return true
} else { } else {
postMessage(['openUrl', url], '*') postMessage(['openUrl', url], '*')
@@ -54,7 +59,7 @@ $(document).on('click', 'a', e => {
} }
} }
} else { } else {
if(pwa) { if (pwa) {
return true return true
} }
//hrefがhttp/httpsならブラウザで //hrefがhttp/httpsならブラウザで
@@ -112,7 +117,7 @@ function playSound() {
} }
context = new AudioContext() context = new AudioContext()
context.createBufferSource().start(0) context.createBufferSource().start(0)
context.decodeAudioData(request.response, function(buf) { context.decodeAudioData(request.response, function (buf) {
//console.log("Playing:" , source) //console.log("Playing:" , source)
source.buffer = buf source.buffer = buf
source.loop = false source.loop = false
@@ -130,17 +135,11 @@ function playSound() {
volumeControl.gain.value = vol volumeControl.gain.value = vol
source.start(0) source.start(0)
soundFile = source soundFile = source
function newFunction() {
var source
return source
}
} }
function nano() { function nano() {
postMessage(['nano', null], '*') postMessage(['nano', null], '*')
} }
onmessage = function(e) { onmessage = function (e) {
console.log(e)
if (e.data[0] == 'details') { if (e.data[0] == 'details') {
details(e.data[1][0], e.data[1][1]) details(e.data[1][0], e.data[1][1])
} else if (e.data[0] == 'udg') { } else if (e.data[0] == 'udg') {
@@ -150,9 +149,8 @@ onmessage = function(e) {
} else if (e.data[0] == 'post') { } else if (e.data[0] == 'post') {
post('pass') post('pass')
} else if (e.data[0] == 'toastSaved') { } else if (e.data[0] == 'toastSaved') {
var showTxt = `${lang.lang_img_DLDone}${ var showTxt = `${lang.lang_img_DLDone}${e.data[1][0]
e.data[1][0] }<button class="btn-flat toast-action" onclick="openFinder('${e.data[1][1]}')">Show</button>`
}<button class="btn-flat toast-action" onclick="openFinder('${e.data[1][1]}')">Show</button>`
M.toast({ html: showTxt, displayLength: 5000 }) M.toast({ html: showTxt, displayLength: 5000 })
} else if (e.data[0] == 'parseColumn') { } else if (e.data[0] == 'parseColumn') {
parseColumn(e.data[1]) parseColumn(e.data[1])
@@ -176,7 +174,7 @@ onmessage = function(e) {
} else if (e.data[0] == 'npCore') { } else if (e.data[0] == 'npCore') {
npCore(e.data[1]) npCore(e.data[1])
} else if (e.data[0] == 'renderMem') { } else if (e.data[0] == 'renderMem') {
renderMem(e.data[1][0], e.data[1][1], e.data[1][2]) renderMem(e.data[1][0], e.data[1][1], e.data[1][2], e.data[1][3], e.data[1][4])
} else if (e.data[0] == 'updateProg') { } else if (e.data[0] == 'updateProg') {
updateProg(e.data[1]) updateProg(e.data[1])
} else if (e.data[0] == 'updateMess') { } else if (e.data[0] == 'updateMess') {
@@ -203,7 +201,7 @@ onmessage = function(e) {
} }
} }
/* PWA */ /* PWA */
if(pwa) { if (pwa) {
function postMessage(e) { function postMessage(e) {
if (e[0] == 'openUrl') { if (e[0] == 'openUrl') {
urls = e[1].match(/https?:\/\/(.+)/) urls = e[1].match(/https?:\/\/(.+)/)
@@ -212,13 +210,27 @@ if(pwa) {
title: 'Open URL', title: 'Open URL',
icon: 'info', icon: 'info',
html: html:
`If you are OK, click: <a href="${urls[0]}" target="_blank" class="btn waves-effect">Here</a>`, `If you are OK, click: <a href="${urls[0]}" target="_blank" class="btn waves-effect">Here</a>`,
showCloseButton: false, showCloseButton: false,
showCancelButton: true, showCancelButton: true,
focusConfirm: false, focusConfirm: false,
confirmButtonText: 'Close' confirmButtonText: 'Close'
}) })
} }
} }
} }
} }
$('html').addClass(localStorage.getItem('scroll') ? localStorage.getItem('scroll') : '')
const connection = function (event) {
console.log(navigator.onLine, 'network state')
if (!navigator.onLine) {
$('#re-online').addClass('hide')
$('#offline').removeClass('hide')
} else if (!$('#offline').hasClass('hide')) {
$('#offline').addClass('hide')
$('#re-online').removeClass('hide')
}
}
window.onoffline = connection
window.ononline = connection

View File

@@ -1,11 +1,18 @@
$.strip_tags = function(str, allowed) { window.onload = function () {
console.log('loaded')
initPostbox()
connection()
initPlugin(plugins)
if(localStorage.getItem('control-center-np')) $('#ccnp').removeClass('hide')
}
$.strip_tags = function (str, allowed) {
if (!str) { if (!str) {
return '' return ''
} }
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('') allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('')
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi, var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) { return str.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '' return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''
}) })
} }
@@ -88,17 +95,18 @@ function formattimeutc(date) {
} }
postMessage(['sendSinmpleIpc', 'custom-css-request'], '*') postMessage(['sendSinmpleIpc', 'custom-css-request'], '*')
function makeCID() { function makeCID() {
return ( let chars = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("")
randomStr(8) + for (let i = 0, len = chars.length; i < len; i++) {
'-' + switch (chars[i]) {
randomStr(4) + case "x":
'-' + chars[i] = Math.floor(Math.random() * 16).toString(16)
randomStr(4) + break
'-' + case "y":
randomStr(4) + chars[i] = (Math.floor(Math.random() * 4) + 8).toString(16)
'-' + break
randomStr(12) }
) }
return chars.join("")
} }
function randomStr(l) { function randomStr(l) {
// 生成する文字列に含める文字セット // 生成する文字列に含める文字セット
@@ -147,15 +155,15 @@ function rgbToHex(color) {
console.error(color + ':第1引数はRGB形式で入力') console.error(color + ':第1引数はRGB形式で入力')
} }
/*マルチバイト用切り出し*/ /*マルチバイト用切り出し*/
$.isSurrogatePear = function(upper, lower) { $.isSurrogatePear = function (upper, lower) {
return 0xd800 <= upper && upper <= 0xdbff && 0xdc00 <= lower && lower <= 0xdfff return 0xd800 <= upper && upper <= 0xdbff && 0xdc00 <= lower && lower <= 0xdfff
} }
$.mb_strlen = function(str) { $.mb_strlen = function (str) {
var splitter = new GraphemeSplitter() var splitter = new GraphemeSplitter()
var arr = splitter.splitGraphemes(str) var arr = splitter.splitGraphemes(str)
return arr.length return arr.length
} }
$.mb_substr = function(str, begin, end) { $.mb_substr = function (str, begin, end) {
//配列にする //配列にする
var splitter = new GraphemeSplitter() var splitter = new GraphemeSplitter()
var arr = splitter.splitGraphemes(str) var arr = splitter.splitGraphemes(str)
@@ -175,7 +183,7 @@ function object_array_sort(data, key, order, fn) {
num_a = 1 num_a = 1
num_b = -1 num_b = -1
} }
data = data.sort(function(a, b) { data = data.sort(function (a, b) {
var x = a[key] var x = a[key]
var y = b[key] var y = b[key]
if (x > y) return num_a if (x > y) return num_a

218
app/js/platform/plugin.js Normal file
View File

@@ -0,0 +1,218 @@
var plugins = getPlugin()
function getPlugin() {
const json = localStorage.getItem('plugins')
let ret = {
buttonOnPostbox: [],
buttonOnToot: [],
buttonOnBottom: [],
init: [],
tips: [],
none: []
}
if (!json) return ret
const plugins = JSON.parse(json)
for (let plugin of plugins) {
const meta = getMeta(plugin.content)
if (!meta) continue
const type = meta.event
ret[type] ? ret[type].push(plugin) : ret[type] = [plugin]
if (type === 'buttonOnToot') continue
if (type === 'tips') {
if (meta.interval) {
const matchCID = /custom:([abcdef0-9]{8}-[abcdef0-9]{4}-4[abcdef0-9]{3}-[abcdef0-9]{4}-[abcdef0-9]{12})/
setInterval(function () {
const tipsName = localStorage.getItem('tips')
if (tipsName.match(matchCID)) {
const id = tipsName.match(matchCID)[1]
if (id === plugin.id) if (location.href.split('/').pop() === 'index.html') execPlugin(id, 'tips', null)
}
}, meta.interval)
}
continue
}
const shortcut = meta.shortcut
$(window).keydown(function (e) {
if (e.keyCode === shortcut && e.altKey) execPlugin(plugin.id, type)
})
}
return ret
}
function initPlugin() {
asCommon['TheDesk:dialog'] = asValue.FN_NATIVE((z) => {
Swal.fire({
title: z[0].value,
icon: z[2] ? z[2].value : 'info',
text: z[1] ? z[1].value : ''
})
})
asCommon['TheDesk:confirm'] = asValue.FN_NATIVE(async (z) => {
const alert = await Swal.fire({
title: z[0].value,
text: z[1].value,
icon: z[2] ? z[2].value : 'info',
showCancelButton: true
})
return asUtil.jsToVal(!!(alert.value && alert.value === true))
})
asCommon['TheDesk:css'] = asValue.FN_NATIVE((z) => {
$(escapeHTML(z[0].value)).css(escapeHTML(z[1].value), escapeHTML(z[2].value))
})
asCommon['TheDesk:openLink'] = asValue.FN_NATIVE((z) => {
postMessage(['openUrl', z[0].value], '*')
})
const { buttonOnPostbox, init, buttonOnBottom, tips } = plugins
for (let target of buttonOnPostbox) {
const meta = getMeta(target.content)
$('#dropdown2').append(`<li><a onclick="execPlugin('${target.id}','buttonOnPostbox', null);">${escapeHTML(meta.name)}</a></li>`)
}
for (let target of buttonOnBottom) {
const meta = getMeta(target.content)
$('#group .btnsgroup').append(`<a onclick="execPlugin('${target.id}','buttonOnBottom', null);" class="nex waves-effect pluginNex"><span title="${escapeHTML(meta.name)}">${escapeHTML(meta.name).substr(0, 1)}</span></a>`)
}
for (let target of tips) {
const meta = getMeta(target.content)
$('#tips-menu .btnsgroup').append(`<a onclick="tips('custom', '${target.id}')" class="nex waves-effect pluginNex"><span title="${escapeHTML(meta.name)}">${escapeHTML(meta.name).substr(0, 1)}</span></a>`)
}
for (let target of init) {
const as = new AiScript(asCommon)
const meta = getMeta(target.content)
M.toast({ html: `${escapeHTML(meta.name)}を実行しました`, displayLength: 1000 })
if (target) as.exec(asParse(target.content))
}
}
function getMeta(plugin) {
try {
return AiScript.collectMetadata(asParse(plugin)).get(null)
} catch (e) {
console.error(e)
return null
}
}
async function execPlugin(id, source, args) {
const coh = plugins[source]
let exe = null
for (let plugin of coh) {
if (plugin.id == id) {
exe = plugin.content
break
}
}
const common = _.cloneDeep(asCommon)
if (source == 'buttonOnToot') {
common.DATA = args
const domain = localStorage.getItem(`domain_${args.acct_id}`)
const at = localStorage.getItem(`acct_${args.acct_id}_at`)
const start = `https://${domain}/api/v1/statuses/${args.id}`
const promise = await fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization:
`Bearer ${at}`
}
})
let json = await promise.json()
common.TOOT = asUtil.jsToVal(json)
common['TheDesk:changeText'] = asValue.FN_NATIVE((z) => {
const v = sanitizeHtml(z[0].value,
{
allowedTags: ['p', 'br', 'a', 'span'],
allowedAttributes: {
'a': ['href', 'class', 'rel', 'target'],
'span': [],
'p': [],
'br': [],
}
}).replace(/href="javascript:/, 'href="').replace(/href='javascript:/, 'href="').replace(/href=javascript:/, 'href="')
json.content = v
if (getMeta(exe).dangerHtml) $(`[unique-id=${args.id}] .toot`).html(parse([json], null, null, null, null, null, null, true))
})
} else if (source == 'buttonOnPostbox') {
const postDt = post(null, false, true)
common.POST = asUtil.jsToVal(postDt)
common.ACCT_ID = asUtil.jsToVal(postDt.TheDeskAcctId)
common['TheDesk:postText'] = asValue.FN_NATIVE((z) => {
$('#textarea').val(z[0].value)
})
common['TheDesk:postCW'] = asValue.FN_NATIVE((z) => {
if (z[1]) $('#cw-text').val(z[1].value)
cw(z[0] ? z[0].value : false)
})
common['TheDesk:postNSFW'] = asValue.FN_NATIVE((z) => {
nsfw(z[0] ? z[0].value : false)
})
common['TheDesk:postVis'] = asValue.FN_NATIVE((z) => {
vis(z[0].value)
})
common['TheDesk:postClearbox'] = asValue.FN_NATIVE(() => {
clear()
})
common['TheDesk:postExec'] = asValue.FN_NATIVE(() => {
if (getMeta(exe).apiPost) post()
})
} else if (source == 'tips') {
common['TheDesk:refreshTipsView'] = asValue.FN_NATIVE((z) => {
const v = sanitizeHtml(z[0].value,
{
allowedTags: ['p', 'br', 'a', 'span', 'img'],
allowedAttributes: {
'a': ['href', 'class', 'rel', 'target', 'style'],
'span': ['style'],
'p': ['style'],
'br': [],
'img': ['src', 'style']
}
}).replace(/href="javascript:/, 'href="').replace(/href='javascript:/, 'href="').replace(/href=javascript:/, 'href="')
if (getMeta(exe).dangerHtml) $('#tips-text').html(v)
})
}
common['TheDesk:console'] = asValue.FN_NATIVE((z) => {
console.log(z[0].value)
})
common['TheDesk:api'] = asValue.FN_NATIVE(async (z) => {
try {
if (!getMeta(exe).apiGet && z[0].value == "GET") return asUtil.jsToVal(null)
if (!getMeta(exe).apiPost && (z[0].value == "POST" || z[0].value == "DELETE" || z[0].value == "PUT")) return asUtil.jsToVal(null)
const domain = localStorage.getItem(`domain_${z[3].value}`)
const at = localStorage.getItem(`acct_${z[3].value}_at`)
const start = `https://${domain}/api/${z[1].value}`
const q = {
method: z[0].value,
headers: {
'content-type': 'application/json',
Authorization:
`Bearer ${at}`
}
}
if (z[2]) q.body = z[2].value
const promise = await fetch(start, q)
const json = await promise.json()
return asUtil.jsToVal(json)
} catch (e) {
return asUtil.jsToVal(null)
}
})
common['TheDesk:getRequest'] = asValue.FN_NATIVE(async (z) => {
try {
if (!getMeta(exe).apiGet) return asUtil.jsToVal(null)
const start = `https://${z[0].value}`
const promise = await fetch(start)
let json = null
if (z[1].value) {
json = await promise.json()
} else {
json = await promise.text()
}
return asUtil.jsToVal(json)
} catch (e) {
return asUtil.jsToVal(null)
}
})
const as = new AiScript(common)
if (exe) as.exec(asParse(exe))
}

View File

@@ -2,25 +2,9 @@ var electron = require('electron')
const shell = electron.shell const shell = electron.shell
var ipc = electron.ipcRenderer var ipc = electron.ipcRenderer
//title bar //title bar
const customTitlebar = require('custom-electron-titlebar')
window.addEventListener('DOMContentLoaded', () => { window.addEventListener('DOMContentLoaded', () => {
document.title = 'TheDesk' document.title = 'TheDesk'
ipc.send('acsCheck', '') ipc.send('acsCheck', '')
ipc.send('frameCheck', '')
ipc.on('frame', function(event, args) {
const file = location.href.substr(-10)
if (
file == 'index.html' ||
file == '/acct.html' ||
file == 'tting.html'
) {
new customTitlebar.Titlebar({
backgroundColor: customTitlebar.Color.fromHex('#000'),
titleHorizontalAlignment: 'right',
icon: '../../img/desk.png'
})
}
})
}) })
onmessage = function(e) { onmessage = function(e) {
@@ -207,6 +191,7 @@ ipc.on('theme-json-response', function(event, args) {
postMessage(['customConnect', args], '*') postMessage(['customConnect', args], '*')
}) })
ipc.on('theme-json-create-complete', function(event, args) { ipc.on('theme-json-create-complete', function(event, args) {
if(args != '') alert(args)
postMessage(['clearCustomImport', ''], '*') postMessage(['clearCustomImport', ''], '*')
postMessage(['ctLoad', ''], '*') postMessage(['ctLoad', ''], '*')
}) })
@@ -219,7 +204,7 @@ ipc.on('memory', function(event, arg) {
var use = arg[0] var use = arg[0]
var cpu = arg[1] var cpu = arg[1]
var total = arg[2] var total = arg[2]
postMessage(['renderMem', [use, cpu, total]], '*') postMessage(['renderMem', [use, cpu, total, arg[3], arg[4]]], '*')
}) })
//log //log
ipc.on('logData', function(event, args) { ipc.on('logData', function(event, args) {

View File

@@ -23,6 +23,7 @@ function emojiToggle(reaction) {
} }
$('#post-box').css('width', width + 'px') $('#post-box').css('width', width + 'px')
$('#suggest').html('') $('#suggest').html('')
$('#draft').html('')
if (!localStorage.getItem('emojis_' + acct_id)) { if (!localStorage.getItem('emojis_' + acct_id)) {
var html = `<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet('true');">${lang.lang_emoji_get}</button>` var html = `<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)
@@ -31,10 +32,12 @@ function emojiToggle(reaction) {
} }
} else { } else {
$('#poll').addClass('hide') $('#poll').addClass('hide')
$('#draft').addClass('hide')
$('#right-side').hide() $('#right-side').hide()
$('#right-side').css('width', '300px') $('#right-side').css('width', '300px')
$('#emoji').addClass('hide') $('#emoji').addClass('hide')
$('#suggest').html('') $('#suggest').html('')
$('#draft').html('')
$('#left-side').css('width', '100%') $('#left-side').css('width', '100%')
var width = localStorage.getItem('postbox-width') var width = localStorage.getItem('postbox-width')
if (width) { if (width) {
@@ -336,6 +339,8 @@ function emojiInsert(code, del) {
} }
sentence = before + word + after sentence = before + word + after
textarea.value = sentence textarea.value = sentence
textarea.focus()
textarea.setSelectionRange(pos + word.length, pos + word.length)
} }
//改行挿入 //改行挿入
function brInsert(code) { function brInsert(code) {

View File

@@ -9,7 +9,16 @@ function sec() {
} }
post(null, mode) post(null, mode)
} }
function post(mode, postvis) { function post(mode, postvis, dry) {
if(!navigator.onLine && !dry) {
draftToggle(true)
addToDraft()
M.toast({
html: lang.lang_post_offline,
displayLength: 3000
})
return false
}
if ($('#toot-post-btn').prop('disabled')) { if ($('#toot-post-btn').prop('disabled')) {
return false return false
} }
@@ -122,7 +131,7 @@ function post(mode, postvis) {
console.log('This toot will be posted at:' + scheduled) console.log('This toot will be posted at:' + scheduled)
schedule() schedule()
toot.scheduled_at = scheduled toot.scheduled_at = scheduled
if($('#sch-box').hasClass('expire')) { if ($('#sch-box').hasClass('expire')) {
toot.scheduled_at = null toot.scheduled_at = null
toot.expires_at = scheduled toot.expires_at = scheduled
} }
@@ -131,7 +140,7 @@ function post(mode, postvis) {
} }
if (!$('#poll').hasClass('hide')) { if (!$('#poll').hasClass('hide')) {
var options = [] var options = []
$('.mastodon-choice').map(function() { $('.mastodon-choice').map(function () {
var choice = $(this).val() var choice = $(this).val()
if (choice != '') { if (choice != '') {
options.push(choice) options.push(choice)
@@ -159,6 +168,13 @@ function post(mode, postvis) {
} }
} }
console.table(toot) console.table(toot)
if (dry) {
$('#ideKey').val('')
$('.toot-btn-group').prop('disabled', false)
todc()
toot['TheDeskAcctId'] = acct_id
return 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')
@@ -166,11 +182,11 @@ function post(mode, postvis) {
httpreq.setRequestHeader('Idempotency-Key', ideKey) httpreq.setRequestHeader('Idempotency-Key', ideKey)
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send(JSON.stringify(toot)) httpreq.send(JSON.stringify(toot))
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
if(media && this.status == 422) { if (media && this.status == 422) {
$('#ideKey').val('') $('#ideKey').val('')
$('.toot-btn-group').prop('disabled', false) $('.toot-btn-group').prop('disabled', false)
alertProcessUnfinished() alertProcessUnfinished()
@@ -201,7 +217,7 @@ function post(mode, postvis) {
} }
function expPostMode() { function expPostMode() {
$('#sch-box').toggleClass('expire') $('#sch-box').toggleClass('expire')
if($('#sch-box').hasClass('expire')) { if ($('#sch-box').hasClass('expire')) {
Swal.fire({ Swal.fire({
type: 'info', type: 'info',
title: 'Expiring toot On' title: 'Expiring toot On'
@@ -270,7 +286,7 @@ function misskeyPost() {
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json')
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send(JSON.stringify(toot)) httpreq.send(JSON.stringify(toot))
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
if (str.indexOf(localStorage.getItem('stable')) == -1) { if (str.indexOf(localStorage.getItem('stable')) == -1) {
localStorage.removeItem('stable') localStorage.removeItem('stable')
@@ -339,7 +355,7 @@ function clear() {
$('#mins_poll').val(6) $('#mins_poll').val(6)
$('#poll').addClass('hide') $('#poll').addClass('hide')
$('#pollsta').text(lang.lang_no) $('#pollsta').text(lang.lang_no)
$('.mastodon-choice').map(function() { $('.mastodon-choice').map(function () {
$(this).val('') $(this).val('')
}) })
localStorage.removeItem('image') localStorage.removeItem('image')

View File

@@ -1,14 +1,14 @@
/*保護系*/ /*保護系*/
//画像保護 //画像保護
function nsfw() { function nsfw(force) {
if ($('#nsfw').hasClass('nsfw-avail')) { if (force || !$('#nsfw').hasClass('nsfw-avail')) {
$('#nsfw').removeClass('yellow-text')
$('#nsfw').html('visibility_off')
$('#nsfw').removeClass('nsfw-avail')
} else {
$('#nsfw').addClass('yellow-text') $('#nsfw').addClass('yellow-text')
$('#nsfw').html('visibility') $('#nsfw').html('visibility')
$('#nsfw').addClass('nsfw-avail') $('#nsfw').addClass('nsfw-avail')
} else {
$('#nsfw').removeClass('yellow-text')
$('#nsfw').html('visibility_off')
$('#nsfw').removeClass('nsfw-avail')
} }
} }
@@ -79,13 +79,8 @@ function loadVis() {
loadVis() loadVis()
//コンテントワーニング //コンテントワーニング
function cw() { function cw(force) {
if ($('#cw').hasClass('cw-avail')) { if (force || !$('#cw').hasClass('cw-avail')) {
$('#cw-text').val()
$('#cw-text').hide()
$('#cw').removeClass('yellow-text')
$('#cw').removeClass('cw-avail')
} else {
$('#cw-text').show() $('#cw-text').show()
$('#cw').addClass('yellow-text') $('#cw').addClass('yellow-text')
$('#cw').addClass('cw-avail') $('#cw').addClass('cw-avail')
@@ -93,6 +88,11 @@ function cw() {
if (cwt) { if (cwt) {
$('#cw-text').val(cwt) $('#cw-text').val(cwt)
} }
} else {
$('#cw-text').val()
$('#cw-text').hide()
$('#cw').removeClass('yellow-text')
$('#cw').removeClass('cw-avail')
} }
} }
//TLでコンテントワーニングを表示トグル //TLでコンテントワーニングを表示トグル
@@ -100,8 +100,8 @@ function cw_show(e) {
$(e).parent().parent().find('.cw_hide').toggleClass('cw') $(e).parent().parent().find('.cw_hide').toggleClass('cw')
$(e).parent().find('.cw_long').toggleClass('hide') $(e).parent().find('.cw_long').toggleClass('hide')
} }
$(function() { $(function () {
$('#cw-text').on('change', function(event) { $('#cw-text').on('change', function (event) {
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)
var cwlen = $('#cw-text').val().length var cwlen = $('#cw-text').val().length
@@ -126,3 +126,79 @@ function schedule() {
$('#sch-box').addClass('sch-avail') $('#sch-box').addClass('sch-avail')
} }
} }
//下書き機能
function draftToggle(force) {
if ($('#draft').hasClass('hide') || force) {
$('#draft').removeClass('hide')
$('#right-side').show()
$('#right-side').css('width', '300px')
$('#left-side').css('width', 'calc(100% - 300px)')
var width = localStorage.getItem('postbox-width')
if (width) {
width = width.replace('px', '') * 1 + 300
} else {
width = 600
}
$('#post-box').css('width', width + 'px')
$('#suggest').html('')
$('#draft').html('')
draftDraw()
} else {
$('#poll').addClass('hide')
$('#draft').addClass('hide')
$('#right-side').hide()
$('#right-side').css('width', '300px')
$('#emoji').addClass('hide')
$('#suggest').html('')
$('#draft').html('')
$('#left-side').css('width', '100%')
var width = localStorage.getItem('postbox-width')
if (width) {
width = width.replace('px', '') * 1
} else {
width = 300
}
$('#post-box').css('width', width + 'px')
}
}
function draftDraw() {
var draft = localStorage.getItem('draft')
var html = `<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="addToDraft();">${lang.lang_secure_draft}</button>`
if (draft) {
var draftObj = JSON.parse(draft)
for (let i = 0; i < draftObj.length; i++) {
var toot = draftObj[i]
html = html + `<div class="tootInDraft">
<i class="waves-effect gray material-icons" onclick="useThisDraft(${i})" title="${lang.lang_secure_userThis}">reply</i>
<i class="waves-effect gray material-icons" onclick="deleteThisDraft(${i})" title="${lang.lang_secure_deleteThis}">cancel</i>
${escapeHTML(toot.status).replace(/\n/, '').substr(0, 10)}
</div>`
}
}
$('#draft').html(html)
}
function addToDraft() {
var json = post(null, null, true)
var draft = localStorage.getItem('draft')
var draftObj = []
if (draft) draftObj = JSON.parse(draft)
draftObj.push(json)
draft = JSON.stringify(draftObj)
localStorage.setItem('draft', draft)
draftDraw()
}
function useThisDraft(i) {
var draft = localStorage.getItem('draft')
var draftObj = JSON.parse(draft)
draftToPost(draftObj[i], draftObj[i]['TheDeskAcctId'], 0)
draftToggle()
}
function deleteThisDraft(i) {
var draft = localStorage.getItem('draft')
var draftObj = JSON.parse(draft)
draftObj.splice(i, 1)
draft = JSON.stringify(draftObj)
localStorage.setItem('draft', draft)
draftDraw()
}

View File

@@ -15,7 +15,7 @@ function fav(id, acct_id, remote) {
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send() httpreq.send()
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -75,7 +75,7 @@ function rt(id, acct_id, remote, vis) {
} else { } else {
httpreq.send() httpreq.send()
} }
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -131,7 +131,7 @@ function bkm(id, acct_id, tlid) {
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send() httpreq.send()
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -160,7 +160,7 @@ function bkm(id, acct_id, tlid) {
//フォロー //フォロー
async function follow(acct_id, resolve) { async function follow(acct_id, resolve) {
if($('#his-data').hasClass('locked')) { if ($('#his-data').hasClass('locked')) {
locked = true locked = true
} else { } else {
locked = false locked = false
@@ -178,7 +178,7 @@ async function follow(acct_id, resolve) {
var flag = 'follow' var flag = 'follow'
var flagm = 'create' var flagm = 'create'
} }
var id = $('#his-data').attr('user-id') var id = $('#his-data').attr('user-id')
if (resolve == 'selector') { if (resolve == 'selector') {
var fullacct = $('#his-acct').attr('fullname') var fullacct = $('#his-acct').attr('fullname')
@@ -200,7 +200,7 @@ async function follow(acct_id, resolve) {
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send(JSON.stringify(ent)) httpreq.send(JSON.stringify(ent))
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -212,7 +212,7 @@ async function follow(acct_id, resolve) {
$('#his-follow-btn-text').text(lang.lang_status_follow) $('#his-follow-btn-text').text(lang.lang_status_follow)
} else { } else {
$('#his-data').addClass('following') $('#his-data').addClass('following')
if(locked) { if (locked) {
$('#his-follow-btn-text').text(lang.lang_status_requesting) $('#his-follow-btn-text').text(lang.lang_status_requesting)
} else { } else {
$('#his-follow-btn-text').text(lang.lang_status_unfollow) $('#his-follow-btn-text').text(lang.lang_status_unfollow)
@@ -278,7 +278,7 @@ function block(acct_id) {
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send() httpreq.send()
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
if (this.status !== 200) { if (this.status !== 200) {
setLog(start, this.status, this.response) setLog(start, this.status, this.response)
@@ -338,7 +338,7 @@ function muteDo(acct_id) {
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send(rq) httpreq.send(rq)
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
if (this.status !== 200) { if (this.status !== 200) {
setLog(start, this.status, this.response) setLog(start, this.status, this.response)
@@ -378,7 +378,7 @@ function del(id, acct_id) {
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send() httpreq.send()
} }
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
if (this.status !== 200) { if (this.status !== 200) {
setLog(start, this.status, this.response) setLog(start, this.status, this.response)
@@ -420,69 +420,72 @@ function redraft(id, acct_id) {
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send() httpreq.send()
} }
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
if (this.status !== 200) { if (this.status !== 200) {
setLog(start, this.status, this.response) setLog(start, this.status, this.response)
} }
var json = httpreq.response var json = httpreq.response
$('#post-acct-sel').prop('disabled', true) draftToPost(json, acct_id, id)
$('#post-acct-sel').val(acct_id)
$('select').formSelect()
mdCheck()
var medias = $('[toot-id=' + id + ']').attr('data-medias')
var mediack = json.media_attachments[0]
//メディアがあれば
var media_ids = []
if (mediack) {
for (var i = 0; i <= 4; i++) {
if (json.media_attachments[i]) {
media_ids.push(json.media_attachments[i].id)
$('#preview').append(
'<img src="' +
json.media_attachments[i].preview_url +
'" style="width:50px; max-height:100px;">'
)
} else {
break
}
}
}
var vismode = $('[toot-id=' + id + '] .vis-data').attr('data-vis')
vis(vismode)
var medias = media_ids.join(',');
$('#media').val(medias)
localStorage.setItem('nohide', true)
show()
if (json.text) {
var html = json.text
} else {
var html = $('[toot-id=' + id + '] .toot').html()
html = html.replace(/^<p>(.+)<\/p>$/, '$1')
html = html.replace(/<br\s?\/?>/, '\n')
html = html.replace(/<p>/, '\n')
html = html.replace(/<\/p>/, '\n')
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, '$1')
html = $.strip_tags(html)
}
$('#textarea').val(html)
if (json.spoiler_text) {
cw()
$('#cw-text').val(json.spoiler_text)
}
if (json.sensitive) {
$('#nsfw').addClass('yellow-text')
$('#nsfw').html('visibility')
$('#nsfw').addClass('nsfw-avail')
}
if (json.in_reply_to_id) {
$('#reply').val(json.in_reply_to_id)
}
} }
} }
} }
}) })
} }
function draftToPost(json, acct_id, id) {
$('#post-acct-sel').prop('disabled', true)
$('#post-acct-sel').val(acct_id)
$('select').formSelect()
mdCheck()
mediack = null
if(json.media_attachments) mediack = json.media_attachments[0]
//メディアがあれば
var media_ids = []
if (mediack) {
for (var i = 0; i <= 4; i++) {
if (json.media_attachments[i]) {
media_ids.push(json.media_attachments[i].id)
$('#preview').append(
'<img src="' +
json.media_attachments[i].preview_url +
'" style="width:50px; max-height:100px;">'
)
} else {
break
}
}
}
var vismode = json.visibility
vis(vismode)
var medias = media_ids.join(',')
$('#media').val(medias)
localStorage.setItem('nohide', true)
show()
if (json.text) {
var html = json.text
} else {
var html = json.status
html = html.replace(/^<p>(.+)<\/p>$/, '$1')
html = html.replace(/<br\s?\/?>/, '\n')
html = html.replace(/<p>/, '\n')
html = html.replace(/<\/p>/, '\n')
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, '$1')
html = $.strip_tags(html)
}
$('#textarea').val(html)
if (json.spoiler_text) {
cw(true)
$('#cw-text').val(json.spoiler_text)
}
if (json.sensitive) {
$('#nsfw').addClass('yellow-text')
$('#nsfw').html('visibility')
$('#nsfw').addClass('nsfw-avail')
}
if (json.in_reply_to_id) {
$('#reply').val(json.in_reply_to_id)
}
}
//ピン留め //ピン留め
function pin(id, acct_id) { function pin(id, acct_id) {
if ($(`.cvo[unique-id=${id}]`).hasClass('pined')) { if ($(`.cvo[unique-id=${id}]`).hasClass('pined')) {
@@ -499,7 +502,7 @@ function pin(id, acct_id) {
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send() httpreq.send()
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -530,7 +533,7 @@ function request(id, flag, acct_id) {
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send() httpreq.send()
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -556,7 +559,7 @@ function domainblock(add, flag, acct_id) {
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send() httpreq.send()
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -583,7 +586,7 @@ function empUser() {
M.toast({ html: id + lang.lang_status_emphas, displayLength: 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) {
var usT = obj[key] var usT = obj[key]
if (usT != id && !can) { if (usT != id && !can) {
can = false can = false
@@ -615,7 +618,7 @@ function pinUser() {
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.responseType = 'json' httpreq.responseType = 'json'
httpreq.send() httpreq.send()
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response
if (this.status !== 200) { if (this.status !== 200) {
@@ -651,20 +654,20 @@ function staEx(mode) {
Authorization: 'Bearer ' + at Authorization: 'Bearer ' + at
} }
}) })
.then(function(response) { .then(function (response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function (text) {
setLog(response.url, response.status, text) setLog(response.url, response.status, text)
}) })
} }
return response.json() return response.json()
}) })
.catch(function(error) { .catch(function (error) {
todo(error) todo(error)
setLog(start, 'JSON', error) setLog(start, 'JSON', error)
console.error(error) console.error(error)
}) })
.then(function(json) { .then(function (json) {
if (json.statuses) { if (json.statuses) {
if (json.statuses[0]) { if (json.statuses[0]) {
var id = json.statuses[0].id var id = json.statuses[0].id
@@ -680,35 +683,9 @@ function staEx(mode) {
}) })
return return
} }
function toggleAction(elem, height) { function toggleAction(elm) {
var cont = elem.parents('.cvo').find('.contextMenu') console.log(elm)
if (cont.hasClass('hide')) { const instance = M.Dropdown.init(elm)
$('#contextWrap').removeClass('hide') console.log(instance.isOpen)
var left = elem.offset().left + 60 instance.open()
var top = elem.offset().top - height
if (top < 75) {
top = elem.offset().top + 45
cont.removeClass('bottom')
cont.addClass('top')
} else {
cont.removeClass('top')
cont.addClass('bottom')
}
if (elem.parents('.cvo').attr('id') == 'toot-this') {
console.log($('#toot-this').offset().top, elem.offset().top)
left = $('#toot-this').offset().left + elem.offset().left + 10
top = $('#toot-this').offset().top - $('#toot-this').height() - height + 25
}
cont.css('top', top + 'px')
cont.css('right', `calc(100vw - ${left}px)`)
cont.removeClass('hide')
elem
.parents('.cvo')
.find('.act-icon')
.text('expand_less')
} else {
$('#contextWrap').addClass('hide')
$('.contextMenu').addClass('hide')
$('.act-icon').text('expand_more')
}
} }

View File

@@ -18,7 +18,7 @@ input.addEventListener(
var new_val = input.value var new_val = input.value
if (new_val == '') { if (new_val == '') {
$('#suggest').html('') $('#suggest').html('')
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide')) { if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) {
$('#right-side').hide() $('#right-side').hide()
$('#right-side').css('width', '300px') $('#right-side').css('width', '300px')
$('#left-side').css('width', '100%') $('#left-side').css('width', '100%')
@@ -41,7 +41,7 @@ input.addEventListener(
var q = acct[1] var q = acct[1]
} else { } else {
$('#suggest').html('') $('#suggest').html('')
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide')) { if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) {
$('#right-side').hide() $('#right-side').hide()
$('#right-side').css('width', '300px') $('#right-side').css('width', '300px')
$('#left-side').css('width', '100%') $('#left-side').css('width', '100%')
@@ -138,6 +138,7 @@ input.addEventListener(
$('#post-box').css('width', width + 'px') $('#post-box').css('width', width + 'px')
$('#poll').addClass('hide') $('#poll').addClass('hide')
$('#emoji').addClass('hide') $('#emoji').addClass('hide')
$('#draft').addClass('hide')
} }
} else if (json.accounts[0] && acct[1]) { } else if (json.accounts[0] && acct[1]) {
var accts = '' var accts = ''
@@ -165,8 +166,9 @@ input.addEventListener(
$('#suggest').html(accts) $('#suggest').html(accts)
$('#poll').addClass('hide') $('#poll').addClass('hide')
$('#emoji').addClass('hide') $('#emoji').addClass('hide')
$('#draft').addClass('hide')
} else { } else {
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide')) { if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) {
$('#right-side').hide() $('#right-side').hide()
$('#right-side').css('width', '300px') $('#right-side').css('width', '300px')
$('#left-side').css('width', '100%') $('#left-side').css('width', '100%')
@@ -226,7 +228,7 @@ function tagInsert(code, del) {
} }
sentence = before + word + after sentence = before + word + after
textarea.value = sentence textarea.value = sentence
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide')) { if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) {
$('#right-side').hide() $('#right-side').hide()
$('#right-side').css('width', '300px') $('#right-side').css('width', '300px')
$('#left-side').css('width', '50%') $('#left-side').css('width', '50%')

View File

@@ -1,5 +1,5 @@
/*リプライ*/ /*リプライ*/
function re(id, ats_cm, acct_id, mode) { function re(id, ats_cm, acct_id, mode, cwTxt) {
clear() clear()
var ats = ats_cm.split(',') var ats = ats_cm.split(',')
localStorage.setItem('nohide', true) localStorage.setItem('nohide', true)
@@ -25,13 +25,18 @@ function re(id, ats_cm, acct_id, mode) {
} }
$('#acct-sel-prof').attr('src', profimg) $('#acct-sel-prof').attr('src', profimg)
vis(mode) vis(mode)
if(localStorage.getItem('cw-continue') == 'yes') {
cw(true)
$('#cw-text').val(cwTxt)
}
} }
function reEx(id) { function reEx(id) {
$('#tootmodal').modal('close') $('#tootmodal').modal('close')
var at = $('#tootmodal').attr('data-user') var at = $('#tootmodal').attr('data-user')
var acct_id = $('#status-acct-sel').val() var acct_id = $('#status-acct-sel').val()
var mode = $('#tootmodal .vis-data').attr('data-vis') var mode = $('#tootmodal .vis-data').attr('data-vis')
re(id, at, acct_id, mode) var cwTxt = $('#cw-text').val()
re(id, at, acct_id, mode, cwTxt)
} }
//引用 //引用
function qt(id, acct_id, at, url) { function qt(id, acct_id, at, url) {

View File

@@ -334,7 +334,19 @@ function cardCheck(tlid) {
} }
} }
function mov(id, tlid, type) { function mov(id, tlid, type, rand, target) {
const dropdownTrigger = `dropdown_${rand}`
let elm = document.querySelector(`#timeline_${tlid} #${dropdownTrigger}`)
if(tlid == 'notf') {
const timeline = $(target).parents('.notf-indv-box').attr('id')
elm = document.querySelector(`#${timeline} #${dropdownTrigger}`)
console.log(`#${timeline} #${dropdownTrigger}`)
}
const instance = M.Dropdown.getInstance(elm)
if(instance) {
if(instance.isOpen) return false
}
var click = false var click = false
if (tlid == 'notf') { if (tlid == 'notf') {
var tlide = '[data-notf=' + acct_id + ']' var tlide = '[data-notf=' + acct_id + ']'
@@ -361,9 +373,9 @@ function mov(id, tlid, type) {
} }
if (mouseover == 'hide') { if (mouseover == 'hide') {
if (click) { if (click) {
$(tlide + ' [toot-id=' + id + ']').toggleClass('hide-actions') $(tlide + ' [unique-id=' + id + ']').toggleClass('hide-actions')
} else { } else {
$(tlide + ' [toot-id=' + id + ']').removeClass('hide-actions') $(tlide + ' [unique-id=' + id + ']').removeClass('hide-actions')
} }
//$(tlide + " [toot-id=" + id + "] .area-vis").toggleClass("hide") //$(tlide + " [toot-id=" + id + "] .area-vis").toggleClass("hide")

View File

@@ -1,95 +1,98 @@
//日付パーサー //日付パーサー
function date(str, datetype) { function date(str, datetype, lastStatus) {
if (datetype == "relative") { if (lastStatus) {
return '<time class="timeago" datetime="' + str + '"></time>'; var date = new Date(str)
return date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate()
} else if (datetype == "relative") {
return '<time class="timeago" datetime="' + str + '"></time>'
} else { } else {
var date = new Date(str); var date = new Date(str)
if (datetype == "unix") { if (datetype == "unix") {
var unixm = date.getTime(); var unixm = date.getTime()
return Math.floor(unixm / 1000); return Math.floor(unixm / 1000)
} }
var now = new Date(); var now = new Date()
var month = date.getMonth() + 1; var month = date.getMonth() + 1
if (date.getMinutes() < 10) { if (date.getMinutes() < 10) {
var min = "0" + date.getMinutes(); var min = "0" + date.getMinutes()
} else { } else {
var min = date.getMinutes(); var min = date.getMinutes()
} }
var sec = null; var sec = null
if (date.getSeconds() < 10) { if (date.getSeconds() < 10) {
sec = "0" + date.getSeconds(); sec = "0" + date.getSeconds()
} else { } else {
sec = date.getSeconds(); sec = date.getSeconds()
} }
if (datetype == "full") { if (datetype == "full") {
var ret = date.getFullYear() + "/" + month + "/" + date.getDate() + "/ " + var ret = date.getFullYear() + "/" + month + "/" + date.getDate() + "/ " +
date.getHours() + ":" + min + ":" + sec; date.getHours() + ":" + min + ":" + sec
} }
if (date.getFullYear() == now.getFullYear()) { if (date.getFullYear() == now.getFullYear()) {
if (date.getMonth() == now.getMonth()) { if (date.getMonth() == now.getMonth()) {
if (date.getDate() == now.getDate()) { if (date.getDate() == now.getDate()) {
if (datetype == "medium") { if (datetype == "medium") {
var ret = '<time class="timeago" datetime="' + str + '"></time>'; var ret = '<time class="timeago" datetime="' + str + '"></time>'
} else { } else {
var ret = date.getHours() + ":" + min + ":" + sec; var ret = date.getHours() + ":" + min + ":" + sec
} }
} else { } else {
var ret = month + "/" + date.getDate() + " " + date.getHours() + ":" + var ret = month + "/" + date.getDate() + " " + date.getHours() + ":" +
min + ":" + sec; min + ":" + sec
} }
} else { } else {
var ret = month + "/" + date.getDate() + " " + date.getHours() + ":" + min + var ret = month + "/" + date.getDate() + " " + date.getHours() + ":" + min +
":" + sec; ":" + sec
} }
} else { } else {
var ret = date.getFullYear() + "/" + month + "/" + date.getDate() + " " + var ret = date.getFullYear() + "/" + month + "/" + date.getDate() + " " +
date.getHours() + ":" + min + ":" + sec; date.getHours() + ":" + min + ":" + sec
} }
if (datetype == "double") { if (datetype == "double") {
return '<time class="timeago" datetime="' + str + '"></time>/' + ret; return '<time class="timeago" datetime="' + str + '"></time>/' + ret
} else { } else {
return ret; return ret
} }
} }
} }
//特殊フォーマット(インスタンス情報で利用) //特殊フォーマット(インスタンス情報で利用)
function crat(str) { function crat(str) {
var date = new Date(str); var date = new Date(str)
var mnt = null; var mnt = null
if (date.getMonth() < 9) { if (date.getMonth() < 9) {
mnt = "0" + (date.getMonth() + 1); mnt = "0" + (date.getMonth() + 1)
} else { } else {
mnt = date.getMonth() + 1; mnt = date.getMonth() + 1
} }
if (date.getDate() < 10) { if (date.getDate() < 10) {
var dat = "0" + date.getDate(); var dat = "0" + date.getDate()
} else { } else {
var dat = date.getDate(); var dat = date.getDate()
} }
if (date.getHours() < 10) { if (date.getHours() < 10) {
var hrs = "0" + date.getHours(); var hrs = "0" + date.getHours()
} else { } else {
var hrs = date.getHours(); var hrs = date.getHours()
} }
if (date.getMinutes() < 10) { if (date.getMinutes() < 10) {
var mns = "0" + date.getMinutes(); var mns = "0" + date.getMinutes()
} else { } else {
var mns = date.getMinutes(); var mns = date.getMinutes()
} }
if (date.getSeconds() < 10) { if (date.getSeconds() < 10) {
var sec = "0" + date.getSeconds(); var sec = "0" + date.getSeconds()
} else { } else {
var sec = date.getSeconds(); var sec = date.getSeconds()
} }
format_str = 'YYYY-MM-DD hh:mm:ss'; format_str = 'YYYY-MM-DD hh:mm:ss'
format_str = format_str.replace(/YYYY/g, date.getFullYear()); format_str = format_str.replace(/YYYY/g, date.getFullYear())
format_str = format_str.replace(/MM/g, mnt); format_str = format_str.replace(/MM/g, mnt)
format_str = format_str.replace(/DD/g, dat); format_str = format_str.replace(/DD/g, dat)
format_str = format_str.replace(/hh/g, hrs); format_str = format_str.replace(/hh/g, hrs)
format_str = format_str.replace(/mm/g, mns); format_str = format_str.replace(/mm/g, mns)
format_str = format_str.replace(/ss/g, sec); format_str = format_str.replace(/ss/g, sec)
return format_str; return format_str
} }

View File

@@ -1,49 +1,49 @@
//ディレクトリ //ディレクトリ
//ディレクトリトグル //ディレクトリトグル
function dirMenu() { function dirMenu() {
$("#dir-contents").html(""); $("#dir-contents").html("")
directory(); directory()
$("#left-menu a").removeClass("active"); $("#left-menu a").removeClass("active")
$("#dirMenu").addClass("active"); $("#dirMenu").addClass("active")
$(".menu-content").addClass("hide"); $(".menu-content").addClass("hide")
$("#dir-box").removeClass("hide"); $("#dir-box").removeClass("hide")
} }
function dirselCk() { function dirselCk() {
var acct = $("#dir-acct-sel").val(); var acct = $("#dir-acct-sel").val()
if (acct == "noauth") { if (acct == "noauth") {
$("#dirNoAuth").removeClass("hide"); $("#dirNoAuth").removeClass("hide")
} else { } else {
$("#dirNoAuth").addClass("hide"); $("#dirNoAuth").addClass("hide")
directory(); directory()
} }
} }
function directory(isMore) { function directory(isMore) {
var order = $("[name=sort]:checked").val(); var order = $("[name=sort]:checked").val()
if (!order) { if (!order) {
order = "active"; order = "active"
} }
var local_only = $("#local_only:checked").val(); var local_only = $("#local_only:checked").val()
if (local_only) { if (local_only) {
local_only = "true"; local_only = "true"
} else { } else {
local_only = "false"; local_only = "false"
} }
var acct_id = $("#dir-acct-sel").val(); var acct_id = $("#dir-acct-sel").val()
if (acct_id == "noauth") { if (acct_id == "noauth") {
var domain = $("#dirNoAuth-url").val(); var domain = $("#dirNoAuth-url").val()
var at = ""; var at = ""
} else { } else {
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 (isMore) { if (isMore) {
var addOffset = $("#dir-contents .cvo").length; var addOffset = $("#dir-contents .cvo").length
} else { } else {
var addOffset = 0; var addOffset = 0
$("#dir-contents").html(""); $("#dir-contents").html("")
} }
var start = "https://" + domain + "/api/v1/directory?order=" + order + "&local=" + local_only + "&offset=" + addOffset; var start = "https://" + domain + "/api/v1/directory?order=" + order + "&local=" + local_only + "&offset=" + addOffset
console.log(start); console.log(start)
fetch(start, { fetch(start, {
method: "GET", method: "GET",
headers: { headers: {
@@ -54,23 +54,23 @@ function directory(isMore) {
.then(function(response) { .then(function(response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function(text) {
setLog(response.url, response.status, text); setLog(response.url, response.status, text)
}); })
} }
return response.json(); return response.json()
}) })
.catch(function(error) { .catch(function(error) {
setLog(start, "JSON", error); setLog(start, "JSON", error)
console.error(error); console.error(error)
}) })
.then(function(json) { .then(function(json) {
if (json) { if (json) {
$("#moreDir").removeClass("disabled"); $("#moreDir").removeClass("disabled")
var html = userparse(json, null, acct_id, "dir", null); var html = userparse(json, null, acct_id, "dir", null)
$("#dir-contents").append(html); $("#dir-contents").append(html)
jQuery("time.timeago").timeago(); jQuery("time.timeago").timeago()
} else { } else {
$("#moreDir").addClass("disabled"); $("#moreDir").addClass("disabled")
} }
}); })
} }

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -19,7 +19,22 @@ async function mixtl(acct_id, tlid, type, delc, voice) {
additional(acct_id, tlid) additional(acct_id, tlid)
jQuery('time.timeago').timeago() jQuery('time.timeago').timeago()
todc() todc()
mixre(acct_id, tlid, 'mix', mute, voice, '') if(mastodonBaseWsStatus[domain] == 'cannotuse') {
mixre(acct_id, tlid, 'mix', mute, voice, '')
} else if (mastodonBaseWsStatus[domain] == 'undetected' || mastodonBaseWsStatus[domain] == 'connecting') {
const mbws = setInterval(function () {
if(mastodonBaseWsStatus[domain] == 'cannotuse') {
mixre(acct_id, tlid, 'mix', mute, voice, '')
clearInterval(mbws)
} else if(mastodonBaseWsStatus[domain] == 'available') {
mastodonBaseWs[domain].send(JSON.stringify({type: 'subscribe', stream: 'public:local'}))
clearInterval(mbws)
}
}, 1000)
} else if(mastodonBaseWsStatus[domain] == 'available') {
mastodonBaseWs[domain].send(JSON.stringify({type: 'subscribe', stream: 'public:local'}))
}
$(window).scrollTop(0) $(window).scrollTop(0)
lastId = integrated[0].id lastId = integrated[0].id
beforeLastId = integrated[1].id beforeLastId = integrated[1].id

View File

@@ -116,7 +116,7 @@ function notfColumn(acct_id, tlid, sys) {
var start = 'wss://' + domain + '/?i=' + at var start = 'wss://' + domain + '/?i=' + at
} }
} }
function notfCommon(acct_id, tlid, sys) { function notfCommon(acct_id, tlid, sys, stream) {
todo('Notifications Loading...') todo('Notifications Loading...')
var native = localStorage.getItem('nativenotf') var native = localStorage.getItem('nativenotf')
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem('acct_' + acct_id + '_at')
@@ -147,6 +147,10 @@ function notfCommon(acct_id, tlid, sys) {
} }
} }
} }
if(stream == 'only') {
notfWS(misskey, acct_id, tlid, domain, at)
return false
}
fetch(start, i) fetch(start, i)
.then(function(response) { .then(function(response) {
console.log('header to get param:' + response.headers.get('link')) console.log('header to get param:' + response.headers.get('link'))
@@ -203,10 +207,11 @@ function notfCommon(acct_id, tlid, sys) {
} }
$('#notf-box').addClass('fetched') $('#notf-box').addClass('fetched')
todc() todc()
notfWS(misskey, acct_id, tlid, domain, at) if(stream != 'no') notfWS(misskey, acct_id, tlid, domain, at)
}) })
} }
function notfWS(misskey, acct_id, tlid, domain, at) { function notfWS(misskey, acct_id, tlid, domain, at) {
if(mastodonBaseWsStatus[domain] == 'available') return false
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)
@@ -258,7 +263,7 @@ function notfWS(misskey, acct_id, tlid, domain, at) {
} }
} }
websocketNotf[acct_id].onerror = function(error) { websocketNotf[acct_id].onerror = function(error) {
console.error('WebSocket Error ' + error) console.error('WebSocket Error ', error)
errorct++ errorct++
console.log(errorct) console.log(errorct)
if (errorct < 3) { if (errorct < 3) {
@@ -266,7 +271,7 @@ function notfWS(misskey, acct_id, tlid, domain, at) {
} }
} }
websocketNotf[acct_id].onclose = function(error) { websocketNotf[acct_id].onclose = function(error) {
console.error('WebSocket Close ' + error) console.error('WebSocket Close ', error)
errorct++ errorct++
console.log(errorct) console.log(errorct)
if (errorct < 3) { if (errorct < 3) {

View File

@@ -1,5 +1,5 @@
//オブジェクトパーサー(トゥート) //オブジェクトパーサー(トゥート)
function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) { function parse(obj, mix, acct_id, tlid, popup, mutefilter, type, onlyContent) {
var splitter = new GraphemeSplitter() var splitter = new GraphemeSplitter()
var templete = '' var templete = ''
if (obj[0]) { if (obj[0]) {
@@ -194,7 +194,8 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} }
var local = [] var local = []
var times = [] var times = []
Object.keys(obj).forEach(function (key) { let content
for (let key in obj) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem('domain_' + acct_id)
var toot = obj[key] var toot = obj[key]
if (type == 'dm') { if (type == 'dm') {
@@ -224,7 +225,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} }
var emoji_url = ` var emoji_url = `
<img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}" <img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}"
alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');"> alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');" loading="lazy">
` `
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)
@@ -241,7 +242,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
noticeavatar = toot.account.avatar_static noticeavatar = toot.account.avatar_static
} }
noticeavatar = `<a onclick="udg('${toot.account.id}','${acct_id}');" user="${toot.account.acct}" class="udg"> noticeavatar = `<a onclick="udg('${toot.account.id}','${acct_id}');" user="${toot.account.acct}" class="udg">
<img draggable="false" src="${noticeavatar}" width="20" class="notf-icon prof-img" user="${toot.account.acct}" alt=""> <img draggable="false" src="${noticeavatar}" width="20" class="notf-icon prof-img" user="${toot.account.acct}" alt="" loading="lazy">
</a>` </a>`
if (toot.type == 'mention') { if (toot.type == 'mention') {
var what = lang.lang_parse_mentioned var what = lang.lang_parse_mentioned
@@ -271,8 +272,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var noticetext = `<span onclick="notfFilter('${toot.account.id}','${tlid}');" class=" pointer big-text ${notfFilHide}"><i class="fas fa-filter" var noticetext = `<span onclick="notfFilter('${toot.account.id}','${tlid}');" class=" pointer big-text ${notfFilHide}"><i class="fas fa-filter"
title="${lang.lang_parse_notffilter}"> title="${lang.lang_parse_notffilter}">
</i><span class="voice">${lang.lang_parse_notffilter}</span></span> </i><span class="voice">${lang.lang_parse_notffilter}</span></span>
<span class="cbadge cbadge-hover" title="${date(toot.created_at, 'absolute')}(${ <span class="cbadge cbadge-hover" title="${date(toot.created_at, 'absolute')}(${lang.lang_parse_notftime
lang.lang_parse_notftime
})" aria-hidden="true"><i class="far fa-clock"></i> })" aria-hidden="true"><i class="far fa-clock"></i>
${date(toot.created_at, datetype)} ${date(toot.created_at, datetype)}
</span> </span>
@@ -379,7 +379,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} }
var emoji_url = ` var emoji_url = `
<img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}" <img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}"
alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');"> alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');" loading="lazy">
` `
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)
@@ -395,7 +395,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} }
noticeavatar = `<a onclick="udg('${toot.account.id}','${acct_id}');" user="${toot.account.acct}" class="udg" aria-hidden="true"> noticeavatar = `<a onclick="udg('${toot.account.id}','${acct_id}');" user="${toot.account.acct}" class="udg" aria-hidden="true">
<img draggable="false" src="${noticeavatar}" width="20" class="notf-icon prof-img" <img draggable="false" src="${noticeavatar}" width="20" class="notf-icon prof-img"
user="${toot.account.acct}" onerror="this.src=\'../../img/loading.svg\'"> user="${toot.account.acct}" onerror="this.src=\'../../img/loading.svg\'" loading="lazy">
</a>` </a>`
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'
@@ -436,7 +436,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} }
var emoji_url = ` var emoji_url = `
<img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}" <img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}"
alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');"> alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');" loading="lazy">
` `
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)
@@ -464,9 +464,9 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} }
} }
if (toot.content == '') { if (toot.content == '') {
var content = ' ' content = ' '
} else { } else {
var content = toot.content content = toot.content
} }
if (content) { if (content) {
var id = toot.id var id = toot.id
@@ -537,7 +537,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
(sent < ct && $.mb_strlen($.strip_tags(content)) > 5) || (sent < ct && $.mb_strlen($.strip_tags(content)) > 5) ||
($.mb_strlen($.strip_tags(content)) > ltr && $.mb_strlen($.strip_tags(content)) > 5) ($.mb_strlen($.strip_tags(content)) > ltr && $.mb_strlen($.strip_tags(content)) > 5)
) { ) {
var content = `<span class="gray">${lang.lang_parse_fulltext}</span><br>` + content content = `<span class="gray">${lang.lang_parse_fulltext}</span><br>` + content
var spoil = `<span class="cw_long">${$.mb_substr( var spoil = `<span class="cw_long">${$.mb_substr(
$.strip_tags(content), $.strip_tags(content),
0, 0,
@@ -560,6 +560,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
/https?:\/\/([^+_]+)\/?(?!.*((media|tags)|mentions)).*([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?/ /https?:\/\/([^+_]+)\/?(?!.*((media|tags)|mentions)).*([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?/
) )
urlsck = content.match(/(https?):\/\/([^<>]*?)\/([^"]*)/g) urlsck = content.match(/(https?):\/\/([^<>]*?)\/([^"]*)/g)
content = content.replace(/href="([^"]+)"/g, `href="$1" data-acct="${acct_id}"`)
if (urlsck) { if (urlsck) {
for (var urlct = 0; urlct < urlsck.length; urlct++) { for (var urlct = 0; urlct < urlsck.length; urlct++) {
var urlindv = urlsck[urlct] var urlindv = urlsck[urlct]
@@ -569,12 +570,11 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var encoded = encodeURI(urlCont[4]) var encoded = encodeURI(urlCont[4])
var punycoded = 'xn--' + punycode.encode(urlCont[2]) var punycoded = 'xn--' + punycode.encode(urlCont[2])
var eUrl = urlCont[1] + '://' + punycoded + '.' + urlCont[3] + '/' + encoded var eUrl = urlCont[1] + '://' + punycoded + '.' + urlCont[3] + '/' + encoded
var regExp = new RegExp('href="' + urlindv + '"', 'g') var regExp = new RegExp(`href="${urlindv}"`, 'g')
content = content.replace(regExp, 'href="' + eUrl + '"') content = content.replace(regExp, `href="${eUrl}"`)
} }
} }
} }
if (urls) { if (urls) {
var analyze = `<a onclick="additionalIndv('${tlid}','${acct_id}','${id}')" class="add-show pointer" aria-hidden="true"> var analyze = `<a onclick="additionalIndv('${tlid}','${acct_id}','${id}')" class="add-show pointer" aria-hidden="true">
${lang.lang_parse_url} ${lang.lang_parse_url}
@@ -628,7 +628,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var mty = media.remote_url.match(/.+(\..+)$/)[1] var mty = media.remote_url.match(/.+(\..+)$/)[1]
viewer = viewer =
viewer + viewer +
`<a href="${media.remote_url}" title="${media.remote_url}">[${lang.lang_parse_unknown}(${mty})]</a> ` `<a href="${media.url ? media.url : media.remote_url}" title="${media.remote_url} from ${media.url}">[${lang.lang_parse_unknown}(${mty})]</a> `
} else if (media.type == 'audio') { } else if (media.type == 'audio') {
viewer = viewer =
viewer + viewer +
@@ -652,7 +652,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
id="${id}-image-${key2}" data-url="${url}" data-original="${remote_url}" data-type="${media.type}" id="${id}-image-${key2}" data-url="${url}" data-original="${remote_url}" data-type="${media.type}"
class="img-parsed img-link" style="width:calc(${cwdt}% - 1px); height:${imh};"> class="img-parsed img-link" style="width:calc(${cwdt}% - 1px); height:${imh};">
<img draggable="false" src="${purl}" class="${sense} toot-img pointer" <img draggable="false" src="${purl}" class="${sense} toot-img pointer"
onerror="this.src=\'../../img/loading.svg\'" title="${escapeHTML(desc)}" alt="${escapeHTML(desc)}"> onerror="this.src=\'../../img/loading.svg\'" title="${escapeHTML(desc)}" alt="${escapeHTML(desc)}" loading="lazy">
${nsfwmes} ${nsfwmes}
</a>` </a>`
} }
@@ -709,8 +709,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var featured = ` <a onclick="tagFeature('${tag.name}','${acct_id}')" class="pointer" title="add it to Featured tags">Feature</a> ` var featured = ` <a onclick="tagFeature('${tag.name}','${acct_id}')" class="pointer" title="add it to Featured tags">Feature</a> `
tags = tags =
tags + tags +
`<span class="hide" data-tag="${tag.name}" data-regTag="${tag.name.toLowerCase()}">#${ `<span class="hide" data-tag="${tag.name}" data-regTag="${tag.name.toLowerCase()}">#${tag.name
tag.name
}: }:
<a onclick="tl('tag','${tag.name}','${acct_id}','add')" class="pointer" <a onclick="tl('tag','${tag.name}','${acct_id}','add')" class="pointer"
title="${lang.lang_parse_tagTL.replace( title="${lang.lang_parse_tagTL.replace(
@@ -855,7 +854,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} }
var emoji_url = ` var emoji_url = `
<img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}" <img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}"
alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');"> alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');" loading="lazy">
` `
var regExp = new RegExp(':' + shortcode + ':', 'g') var regExp = new RegExp(':' + shortcode + ':', 'g')
content = content.replace(regExp, emoji_url) content = content.replace(regExp, emoji_url)
@@ -875,7 +874,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var emoji = toot.profile_emojis[keynico] var emoji = toot.profile_emojis[keynico]
var shortcode = emoji.shortcode var shortcode = emoji.shortcode
var emoji_url = `<img draggable="false" src="${emoji.url}" class="emoji-img" data-emoji="${shortcode}" alt=" :${shortcode}: " var emoji_url = `<img draggable="false" src="${emoji.url}" class="emoji-img" data-emoji="${shortcode}" alt=" :${shortcode}: "
title="${shortcode}" onclick="this.classList.toggle(\'bigemoji\');">` title="${shortcode}" onclick="this.classList.toggle(\'bigemoji\');" loading="lazy">`
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)
@@ -901,12 +900,10 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} }
//日本語じゃない //日本語じゃない
if (toot.language != lang.language && toot.language) { if (toot.language != lang.language && toot.language) {
var trans = `<div class=""> var trans = `<li onclick="trans('${toot.language}','${lang.language}', $(this))"
<a onclick="trans('${toot.language}','${lang.language}', $(this))" style="padding:0">
class="waves-effect waves-dark btn-flat actct" style="padding:0">
<i class="material-icons" aria-hidden="true">g_translate</i>${lang.lang_parse_trans} <i class="material-icons" aria-hidden="true">g_translate</i>${lang.lang_parse_trans}
</a> </li>`
</div>`
} else { } else {
var trans = '' var trans = ''
} }
@@ -934,20 +931,20 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var fontColor = value.fontColor var fontColor = value.fontColor
if (!value.bgColor || !value.fontColor) { if (!value.bgColor || !value.fontColor) {
if (value.type == 'mastodon') { if (value.type == 'mastodon') {
if(!value.bgColor) bgColor = tickerdataRaw.default.mastodon.bgColor if (!value.bgColor) bgColor = tickerdataRaw.default.mastodon.bgColor
if(!value.fontColor) fontColor = tickerdataRaw.default.mastodon.fontColor if (!value.fontColor) fontColor = tickerdataRaw.default.mastodon.fontColor
} else if (value.type == 'pleroma') { } else if (value.type == 'pleroma') {
if(!value.bgColor) bgColor = tickerdataRaw.default.pleroma.bgColor if (!value.bgColor) bgColor = tickerdataRaw.default.pleroma.bgColor
if(!value.fontColor) fontColor = tickerdataRaw.default.pleroma.fontColor if (!value.fontColor) fontColor = tickerdataRaw.default.pleroma.fontColor
} else if (value.type == 'misskey') { } else if (value.type == 'misskey') {
if(!value.bgColor) bgColor = tickerdataRaw.default.misskey.bgColor if (!value.bgColor) bgColor = tickerdataRaw.default.misskey.bgColor
if(!value.fontColor) fontColor = tickerdataRaw.default.misskey.fontColor if (!value.fontColor) fontColor = tickerdataRaw.default.misskey.fontColor
} else if (value.type == 'misskeylegacy') { } else if (value.type == 'misskeylegacy') {
if(!value.bgColor) bgColor = tickerdataRaw.default.misskeylegacy.bgColor if (!value.bgColor) bgColor = tickerdataRaw.default.misskeylegacy.bgColor
if(!value.fontColor) fontColor = tickerdataRaw.default.misskeylegacy.fontColor if (!value.fontColor) fontColor = tickerdataRaw.default.misskeylegacy.fontColor
} else if (value.type == 'pixelfed') { } else if (value.type == 'pixelfed') {
if(!value.bgColor) bgColor = tickerdataRaw.default.pixelfed.bgColor if (!value.bgColor) bgColor = tickerdataRaw.default.pixelfed.bgColor
if(!value.fontColor) fontColor = tickerdataRaw.default.pixelfed.fontColor if (!value.fontColor) fontColor = tickerdataRaw.default.pixelfed.fontColor
} }
} else { } else {
var bgColor = value.bgColor var bgColor = value.bgColor
@@ -959,12 +956,10 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
bgColorCSS = bgColorCSS + bg + ',' bgColorCSS = bgColorCSS + bg + ','
} }
bgColorCSS = `linear-gradient(90deg, ${bgColorCSS} transparent)` bgColorCSS = `linear-gradient(90deg, ${bgColorCSS} transparent)`
var tickerdom = `<div aria-hidden="true" style="user-select:none;cursor:default;background:${bgColorCSS} !important; color:${ var tickerdom = `<div aria-hidden="true" style="user-select:none;cursor:default;background:${bgColorCSS} !important; color:${fontColor
fontColor
};width:100%; height:0.9rem; font-size:0.8rem;" class="tickers"> };width:100%; height:0.9rem; font-size:0.8rem;" class="tickers">
<img draggable="false" src="${ <img draggable="false" src="${value.favicon
value.favicon }" style="height:100%;" onerror="this.src=\'../../img/loading.svg\'" loading="lazy">
}" style="height:100%;" onerror="this.src=\'../../img/loading.svg\'">
<span style="position:relative; top:-0.2rem;">${escapeHTML(value.name)}</span> <span style="position:relative; top:-0.2rem;">${escapeHTML(value.name)}</span>
</div>` </div>`
break break
@@ -983,10 +978,9 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
poll + poll +
`<div class="quote-renote"> `<div class="quote-renote">
<div class="renote-icon"> <div class="renote-icon">
<a onclick="udg('${toot.quote.account.id}','${acct_id}');" user="${ <a onclick="udg('${toot.quote.account.id}','${acct_id}');" user="${toot.quote.account.acct
toot.quote.account.acct
}" class="udg"> }" class="udg">
<img draggable="false" src="${toot.quote.account.avatar}"> <img draggable="false" src="${toot.quote.account.avatar}" loading="lazy">
</a> </a>
</div> </div>
<div class="renote-user"> <div class="renote-user">
@@ -996,8 +990,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
${toot.quote.content} ${toot.quote.content}
</div> </div>
<div class="renote-details"> <div class="renote-details">
<a onclick="details('${ <a onclick="details('${toot.quote.id
toot.quote.id
}','${acct_id}','${tlid}','normal')" class="waves-effect waves-dark btn-flat details" style="padding:0"> }','${acct_id}','${tlid}','normal')" class="waves-effect waves-dark btn-flat details" style="padding:0">
<i class="text-darken-3 material-icons">more_vert</i> <i class="text-darken-3 material-icons">more_vert</i>
</a> </a>
@@ -1024,6 +1017,16 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
if (trans != '') { if (trans != '') {
menuct++ menuct++
} }
//このトゥート内のアクションを完了させるために、適当にIDを振る
var rand = randomStr(8)
//プラグイン機構
var pluginBOT = plugins.buttonOnToot
var pluginHtml = ''
for (let target of pluginBOT) {
const meta = getMeta(target.content)
pluginHtml = pluginHtml + `<li><a onclick="execPlugin('${target.id}','buttonOnToot',{id: '${uniqueid}', acct_id: '${acct_id}'});">${escapeHTML(meta.name)}</a></li>`
}
templete = templete =
templete + templete +
`<div `<div
@@ -1034,15 +1037,15 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
'unix' 'unix'
)}" )}"
${if_notf} ${if_notf}
onmouseover="mov('${toot.id}','${tlid}','mv')" onmouseover="mov('${uniqueid}','${tlid}','mv', '${rand}', this)"
onclick="mov('${toot.id}','${tlid}','cl')" onclick="mov('${uniqueid}','${tlid}','cl', '${rand}', this)"
onmouseout="resetmv('mv')" onmouseout="resetmv('mv')"
> >
<div class="area-notice grid"><span class="gray sharesta">${notice}${home}</span></div> <div class="area-notice grid"><span class="gray sharesta">${notice}${home}</span></div>
<div class="area-icon grid"> <div class="area-icon grid">
<a onclick="udg('${toot.account.id}','${acct_id}');" user="${toot.account.acct}" class="udg"> <a onclick="udg('${toot.account.id}','${acct_id}');" user="${toot.account.acct}" class="udg">
<img draggable="false" src="${avatar}" width="40" class="prof-img" <img draggable="false" src="${avatar}" width="40" class="prof-img"
user="${toot.account.acct}" onerror="this.src='../../img/loading.svg'" alt="" /> user="${toot.account.acct}" onerror="this.src='../../img/loading.svg'" alt="" loading="lazy" />
</a> </a>
${noticeavatar} ${noticeavatar}
</div> </div>
@@ -1087,7 +1090,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
</a> </a>
</div> </div>
<div class="action ${disp['re']} ${noauth}"> <div class="action ${disp['re']} ${noauth}">
<a onclick="re('${toot.id}','${to_mention}','${acct_id}','${visen}')" <a onclick="re('${toot.id}','${to_mention}','${acct_id}','${visen}','${escapeHTML(toot.spoiler_text)}')"
class="waves-effect waves-dark btn-flat actct rep-btn" class="waves-effect waves-dark btn-flat actct rep-btn"
data-men="${to_mention}" data-visen="${visen}" style="padding:0" title="${lang.lang_parse_replyto}"> data-men="${to_mention}" data-visen="${visen}" style="padding:0" title="${lang.lang_parse_replyto}">
<i class="fas fa-share"></i> <i class="fas fa-share"></i>
@@ -1096,8 +1099,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
</a> </a>
</div> </div>
<div class="action ${can_rt} ${disp['rt']} ${noauth}"> <div class="action ${can_rt} ${disp['rt']} ${noauth}">
<a onclick="rt('${ <a onclick="rt('${toot.id
toot.id
}','${acct_id}','${tlid}')" class="waves-effect waves-dark btn-flat actct bt-btn" }','${acct_id}','${tlid}')" class="waves-effect waves-dark btn-flat actct bt-btn"
style="padding:0" title="${lang.lang_parse_bt}"> style="padding:0" title="${lang.lang_parse_bt}">
<i class="fas fa-retweet ${if_rt} rt_${toot.id}"></i> <i class="fas fa-retweet ${if_rt} rt_${toot.id}"></i>
@@ -1132,8 +1134,8 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
</div> </div>
<div class="area-side"> <div class="area-side">
<div class="action ${noauth}"> <div class="action ${noauth}">
<a onclick="toggleAction($(this), ${menuct * 39 + 6})" <a onclick="toggleAction(this)" data-target="dropdown_${rand}"
class="ctxMenu waves-effect waves-dark btn-flat" style="padding:0"> class="ctxMenu waves-effect waves-dark btn-flat" style="padding:0" id="trigger_${rand}">
<i class="text-darken-3 material-icons act-icon" aria-hidden="true">expand_more</i> <i class="text-darken-3 material-icons act-icon" aria-hidden="true">expand_more</i>
<span class="voice">Other actions</span> <span class="voice">Other actions</span>
</a> </a>
@@ -1146,49 +1148,38 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
<span class="voice">${lang.lang_parse_detail}</span> <span class="voice">${lang.lang_parse_detail}</span>
</div> </div>
</div> </div>
<div class="contextMenu hide z-depth-4"> <ul class="dropdown-content contextMenu" id="dropdown_${rand}">
<div class="${viashow}"> <li class="${viashow} via-dropdown" onclick="client('${$.strip_tags(via)}')" title="${lang.lang_parse_clientop}">
via ${escapeHTML(via)}<br> via ${escapeHTML(via)}</a>
<a onclick="client('${$.strip_tags(via)}')" class="pointer">${lang.lang_parse_clientop}</a> </li>
</div>
<div> <div>
<button onclick="bkm('${uniqueid}','${acct_id}','${tlid}')" <li onclick="bkm('${uniqueid}','${acct_id}','${tlid}')"
class="waves-effect waves-dark btn-flat actct bkm-btn" style="padding:0"> class="bkm-btn bkmStr_${uniqueid}" style="padding:0">
<i class="fas text-darken-3 fa-bookmark bkm_${toot.id} ${if_bkm}"></i> <i class="fas text-darken-3 fa-bookmark bkm_${toot.id} ${if_bkm}"></i>${bkmStr}
<span class="bkmStr_${uniqueid}">${bkmStr}</span> </li>
</button> <li class="${if_mine}" onclick="del('${uniqueid}','${acct_id}')"
</div>
<div class="${if_mine}">
<button onclick="del('${uniqueid}','${acct_id}')" class="waves-effect waves-dark btn-flat actct"
style="padding:0"> style="padding:0">
<i class="fas fa-trash"></i>${lang.lang_parse_del} <i class="fas fa-trash"></i>${lang.lang_parse_del}
</button> </li>
</div> <li class="${if_mine}" onclick="pin('${uniqueid}','${acct_id}')" style="padding:0" class="pinStr_${uniqueid}">
<div class="${if_mine}"> <i class="fas fa-map-pin pin_${uniqueid} ${if_pin}"></i>${pinStr}
<button onclick="pin('${uniqueid}','${acct_id}')" class="waves-effect waves-dark btn-flat actct" style="padding:0"> </li>
<i class="fas fa-map-pin pin_${uniqueid} ${if_pin}"></i> <li class="${if_mine}" onclick="redraft('${uniqueid}','${acct_id}')"
<span class="pinStr_${uniqueid}">${pinStr}</span>
</button>
</div>
<div class="${if_mine}">
<button onclick="redraft('${uniqueid}','${acct_id}')" class="waves-effect waves-dark btn-flat actct"
style="padding:0"> style="padding:0">
<i class="material-icons" aria-hidden="true">redo</i>${lang.lang_parse_redraft} <i class="material-icons" aria-hidden="true">redo</i>${lang.lang_parse_redraft}
</button> </li>
</div>
${trans} ${trans}
<div> <li onclick="postMessage(['openUrl', '${toot.url}'], '*')"
<button onclick="postMessage(['openUrl', '${toot.url}'], '*')" style="padding:0">
class="waves-effect waves-dark btn-flat actct" style="padding:0"> <i class="fas text-darken-3 fa-globe"></i>${lang.lang_parse_link}
<i class="fas text-darken-3 fa-globe"></i> </li>
${lang.lang_parse_link} ${pluginHtml}
</button> </ul>
</div>
</div>
</div> </div>
` `
} }
}) }
if (onlyContent) return content
if (mix == 'mix') { if (mix == 'mix') {
return [templete, local, times] return [templete, local, times]
} else { } else {
@@ -1246,7 +1237,6 @@ function userparse(obj, auth, acct_id, tlid, popup) {
} else if (auth == 'request') { } else if (auth == 'request') {
var ftxt = lang.lang_parse_request var ftxt = lang.lang_parse_request
} }
console.log(auth, ftxt)
if (popup > 0 || popup == -1 || notf) { if (popup > 0 || popup == -1 || notf) {
var notftext = ftxt + '<br>' var notftext = ftxt + '<br>'
} else { } else {
@@ -1296,7 +1286,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
} }
var emoji_url = ` var emoji_url = `
<img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}" <img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}"
alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');"> alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');" loading="lazy">
` `
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)
@@ -1319,7 +1309,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
} else { } else {
var udg = `<a onclick="udg('${toot.id}','${acct_id}');" user="${toot.acct}" class="udg">` var udg = `<a onclick="udg('${toot.id}','${acct_id}');" user="${toot.acct}" class="udg">`
} }
var latest = date(toot.last_status_at, 'relative') var latest = date(toot.last_status_at, 'relative', true)
if (toot.last_status_at) { if (toot.last_status_at) {
var latesthtml = `<div class="cbadge" style="width:100px;">Last <span class="voice">toot</span>: ${latest}</div>` var latesthtml = `<div class="cbadge" style="width:100px;">Last <span class="voice">toot</span>: ${latest}</div>`
} else { } else {
@@ -1339,6 +1329,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
user="${toot.acct}" user="${toot.acct}"
onerror="this.src='../../img/loading.svg'" onerror="this.src='../../img/loading.svg'"
alt="" alt=""
loading="lazy"
/> />
</a></div> </a></div>
<div class="area-display_name"> <div class="area-display_name">
@@ -1372,7 +1363,6 @@ function userparse(obj, auth, acct_id, tlid, popup) {
} }
//クライアントダイアログ //クライアントダイアログ
function client(name) { function client(name) {
$('#contextWrap').addClass('hide')
if (name != 'Unknown') { if (name != 'Unknown') {
//聞く //聞く
Swal.fire({ Swal.fire({
@@ -1530,7 +1520,7 @@ function pollParse(poll, acct_id, emojis) {
} }
var emoji_url = ` var emoji_url = `
<img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}" <img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}"
alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');"> alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');" loading="lazy">
` `
var regExp = new RegExp(':' + shortcode + ':', 'g') var regExp = new RegExp(':' + shortcode + ':', 'g')
choiceText = choiceText.replace(regExp, emoji_url) choiceText = choiceText.replace(regExp, emoji_url)
@@ -1560,3 +1550,312 @@ function pollParse(poll, acct_id, emojis) {
</div>` </div>`
return pollHtml return pollHtml
} }
//MastodonBaseStreaming
var mastodonBaseWs = {}
var mastodonBaseWsStatus = {}
function mastodonBaseStreaming(acct_id) {
console.log('start to connect mastodonBaseStreaming of ' + acct_id)
notfCommon(acct_id, 0, null, 'no')
const domain = localStorage.getItem(`domain_${acct_id}`)
if (mastodonBaseWsStatus[domain]) return
mastodonBaseWsStatus[domain] = 'undetected'
const at = localStorage.getItem(`acct_${acct_id}_at`)
let wss = 'wss://' + domain
if (localStorage.getItem('streaming_' + acct_id)) {
wss = localStorage.getItem('streaming_' + acct_id)
}
const start = `${wss}/api/v1/streaming/?access_token=${at}`
mastodonBaseWs[domain] = new WebSocket(start)
mastodonBaseWs[domain].onopen = function () {
mastodonBaseWsStatus[domain] = 'connecting'
setTimeout(function () {
mastodonBaseWsStatus[domain] = 'available'
}, 3000)
mastodonBaseWs[domain].send(JSON.stringify({ type: 'subscribe', stream: 'user' }))
$('.notice_icon_acct_' + acct_id).removeClass('red-text')
}
mastodonBaseWs[domain].onmessage = function (mess) {
const typeA = JSON.parse(mess.data).event
if (typeA == 'delete') {
$(`[unique-id=${JSON.parse(mess.data).payload}]`).hide()
$(`[unique-id=${JSON.parse(mess.data).payload}]`).remove()
} else if (typeA == 'update' || typeA == 'conversation') {
//markers show中はダメ
const tl = JSON.parse(mess.data).stream
const obj = JSON.parse(JSON.parse(mess.data).payload)
const tls = getTlMeta(tl[0], tl, acct_id, obj)
insertTl(obj, tls)
} else if (typeA == 'filters_changed') {
filterUpdate(acct_id)
} else if (~typeA.indexOf('announcement')) {
announ(acct_id, tlid)
} else if (typeA == 'notification') {
const obj = JSON.parse(JSON.parse(mess.data).payload)
let template = ''
localStorage.setItem('lastnotf_' + acct_id, obj.id)
let popup = localStorage.getItem('popup')
if (!popup) {
popup = 0
}
if (obj.type != 'follow' && obj.type != 'follow_request') {
template = parse([obj], 'notf', acct_id, 'notf', popup)
} else if (obj.type == 'follow_request') {
template = userparse([obj.account], 'request', acct_id, 'notf', -1)
} else {
template = userparse([obj], obj.type, acct_id, 'notf', popup)
}
if (!$('div[data-notfIndv=' + acct_id + '_' + obj.id + ']').length) {
$('div[data-notf=' + acct_id + ']').prepend(template)
$('div[data-const=notf_' + acct_id + ']').prepend(template)
}
jQuery('time.timeago').timeago()
} else {
console.error('unknown type ' + typeA)
}
}
mastodonBaseWs[domain].onerror = function (error) {
notfCommon(acct_id, 0, null, 'only') //fallback
console.error("Error closing " + domain)
console.error(error)
if (mastodonBaseWsStatus[domain] == 'available') {
/*M.toast({
html:
`${lang.lang_parse_disconnected}<button class="btn-flat toast-action" onclick="location.reload()">${lang.lang_layout_reconnect}</button>`,
completeCallback: function () {
parseColumn()
},
displayLength: 3000
})*/
parseColumn()
}
mastodonBaseWsStatus[domain] = 'cannotuse'
setTimeout(function () {
mastodonBaseWsStatus[domain] = 'cannotuse'
}, 3000)
mastodonBaseWs[domain] = false
return false
}
mastodonBaseWs[domain].onclose = function () {
notfCommon(acct_id, 0, null, 'only') //fallback
console.warn("Closing " + domain)
if (mastodonBaseWsStatus[domain] == 'available') {
/*M.toast({
html:
`${lang.lang_parse_disconnected}<button class="btn-flat toast-action" onclick="location.reload()">${lang.lang_layout_reconnect}</button>`,
completeCallback: function () {
parseColumn()
},
displayLength: 3000
})*/
parseColumn()
}
mastodonBaseWs[domain] = false
mastodonBaseWsStatus[domain] = 'cannotuse'
setTimeout(function () {
mastodonBaseWsStatus[domain] = 'cannotuse'
}, 3000)
return false
}
}
function insertTl(obj, tls) {
for (const timeline of tls) {
const { id, voice, type, acct_id } = timeline
const mute = getFilterTypeByAcct(acct_id, type)
if ($(`#unread_${id} .material-icons`).hasClass('teal-text')) continue
if (!$(`#timeline_${id} [toot-id=${obj.id}]`).length) {
if (voice) {
say(obj.content)
}
const template = parse([obj], type, acct_id, id, '', mute, type)
console.log($(`#timeline_box_${id}_box .tl-box`).scrollTop(), `timeline_box_${id}_box .tl-box`)
if (
$(`#timeline_box_${id}_box .tl-box`).scrollTop() === 0
) {
$(`#timeline_${id}`).prepend(template)
} else {
let pool = localStorage.getItem('pool_' + id)
if (pool) {
pool = template + pool
} else {
pool = template
}
localStorage.setItem('pool_' + id, pool)
}
scrollck()
additional(acct_id, id)
jQuery('time.timeago').timeago()
}
}
}
function getTlMeta(type, data, num, status) {
const acct_id = num.toString()
const columns = localStorage.getItem('column')
const obj = JSON.parse(columns)
let ret = []
let i = -1
switch (type) {
case 'user':
for (const tl of obj) {
i++
if (tl.domain != acct_id) continue
if (tl.type == 'mix' || tl.type == 'home') {
let voice = false
if (localStorage.getItem('voice_' + i)) voice = true
ret.push({
id: i,
voice: voice,
type: tl.type,
acct_id: tl.domain
})
}
}
break
case 'public:local':
for (const tl of obj) {
i++
if (tl.domain != acct_id) continue
if (tl.type == 'mix' || tl.type == 'local') {
let voice = false
if (localStorage.getItem('voice_' + i)) voice = true
ret.push({
id: i,
voice: voice,
type: tl.type,
acct_id: tl.domain
})
}
}
break
case 'public:local:media':
for (const tl of obj) {
i++
if (tl.domain != acct_id) continue
if (tl.type == 'local-media') {
let voice = false
if (localStorage.getItem('voice_' + i)) voice = true
ret.push({
id: i,
voice: voice,
type: tl.type,
acct_id: tl.domain
})
}
}
break;
case 'public':
for (const tl of obj) {
i++
if (tl.domain != acct_id) continue
if (tl.type == 'pub') {
console.log(i, tl)
let voice = false
if (localStorage.getItem('voice_' + i)) voice = true
ret.push({
id: i,
voice: voice,
type: tl.type,
acct_id: tl.domain
})
}
}
break;
case 'public:media':
for (const tl of obj) {
i++
if (tl.domain != acct_id) continue
if (tl.type == 'pub-media') {
let voice = false
if (localStorage.getItem('voice_' + i)) voice = true
ret.push({
id: i,
voice: voice,
type: tl.type,
acct_id: tl.domain
})
}
}
break;
case 'list':
for (const tl of obj) {
i++
if (tl.domain != acct_id) continue
if (tl.type == 'list' && tl.data == data[1]) {
let voice = false
if (localStorage.getItem('voice_' + i)) voice = true
ret.push({
id: i,
voice: voice,
type: tl.type,
acct_id: tl.domain
})
}
}
break;
case 'direct':
for (const tl of obj) {
i++
if (tl.domain != acct_id) continue
if (tl.type == 'dm') {
let voice = false
if (localStorage.getItem('voice_' + i)) voice = true
ret.push({
id: i,
voice: voice,
type: tl.type,
acct_id: tl.domain
})
}
}
break;
case 'hashtag':
for (const tl of obj) {
i++
if (tl.domain != acct_id) continue
const columnDataRaw = tl.data
let columnData
if (!columnDataRaw.name) {
columnData = { name: columnDataRaw }
} else {
columnData = columnDataRaw
}
if (tl.type == 'tag') {
let voice = false
let can = false
if (columnData.name == data[1]) can = true
//any
if (columnData.any.split(',').includes(data[1])) can = true
//all
const { tags } = status
if (columnData.all) can = true
for (const { name } of tags) {
if (!columnData.all.split(',').includes(name)) {
can = false
break
}
}
//none
if (columnData.none) can = true
for (const { name } of tags) {
if (columnData.none.split(',').includes(name)) {
can = false
break
}
}
if (localStorage.getItem('voice_' + i)) voice = true
ret.push({
id: i,
voice: voice,
type: tl.type,
acct_id: tl.domain
})
}
}
break;
default:
console.error(`Cannot catch`);
}
return ret
}

View File

@@ -25,6 +25,7 @@ function pollToggle() {
} }
$('#post-box').css('width', width + 'px') $('#post-box').css('width', width + 'px')
$('#emoji').addClass('hide') $('#emoji').addClass('hide')
$('#draft').addClass('hide')
$('#poll').addClass('hide') $('#poll').addClass('hide')
$('#pollsta').text(lang.lang_no) $('#pollsta').text(lang.lang_no)
} }

View File

@@ -219,9 +219,9 @@ function moreTs(tlid, q) {
function graphDraw(tag, acct_id) { function graphDraw(tag, acct_id) {
var tags = '' var tags = ''
var his = tag.history var his = tag.history
return graphDrawCore(his, tag) return graphDrawCore(his, tag, acct_id)
} }
function graphDrawCore(his, tag) { function graphDrawCore(his, tag, acct_id) {
var max = Math.max.apply(null, [ var max = Math.max.apply(null, [
his[0].uses, his[0].uses,
his[1].uses, his[1].uses,
@@ -307,7 +307,7 @@ function trend() {
Object.keys(json).forEach(function(keye) { Object.keys(json).forEach(function(keye) {
var tag = json[keye] var tag = json[keye]
var his = tag.history var his = tag.history
tags = graphDrawCore(his, tag) tags = graphDrawCore(his, tag, acct_id)
$('#src-contents').append(tags) $('#src-contents').append(tags)
}) })

View File

@@ -44,10 +44,10 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
//Integratedなら飛ばす //Integratedなら飛ばす
$('#notice_' + tlid).text( $('#notice_' + tlid).text(
'Integrated TL(' + 'Integrated TL(' +
localStorage.getItem('user_' + acct_id) + localStorage.getItem('user_' + acct_id) +
'@' + '@' +
domain + domain +
')' ')'
) )
$('#notice_icon_' + tlid).text('merge_type') $('#notice_icon_' + tlid).text('merge_type')
mixtl(acct_id, tlid, 'integrated', delc, voice) mixtl(acct_id, tlid, 'integrated', delc, voice)
@@ -56,10 +56,10 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
//Local+なら飛ばす //Local+なら飛ばす
$('#notice_' + tlid).text( $('#notice_' + tlid).text(
'Local+ TL(' + 'Local+ TL(' +
localStorage.getItem('user_' + acct_id) + localStorage.getItem('user_' + acct_id) +
'@' + '@' +
domain + domain +
')' ')'
) )
$('#notice_icon_' + tlid).text('people_outline') $('#notice_icon_' + tlid).text('people_outline')
mixtl(acct_id, tlid, 'plus', delc, voice) mixtl(acct_id, tlid, 'plus', delc, voice)
@@ -69,11 +69,11 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
notf(acct_id, tlid, 'direct') notf(acct_id, tlid, 'direct')
$('#notice_' + tlid).text( $('#notice_' + tlid).text(
cap(type, data, acct_id) + cap(type, data, acct_id) +
'(' + '(' +
localStorage.getItem('user_' + acct_id) + localStorage.getItem('user_' + acct_id) +
'@' + '@' +
domain + domain +
')' ')'
) )
$('#notice_icon_' + tlid).text('notifications') $('#notice_icon_' + tlid).text('notifications')
return return
@@ -82,11 +82,11 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
getBookmark(acct_id, tlid) getBookmark(acct_id, tlid)
$('#notice_' + tlid).text( $('#notice_' + tlid).text(
cap(type, data, acct_id) + cap(type, data, acct_id) +
'(' + '(' +
localStorage.getItem('user_' + acct_id) + localStorage.getItem('user_' + acct_id) +
'@' + '@' +
domain + domain +
')' ')'
) )
$('#notice_icon_' + tlid).text('bookmark') $('#notice_icon_' + tlid).text('bookmark')
return return
@@ -95,11 +95,11 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
getUtl(acct_id, tlid, data, false) getUtl(acct_id, tlid, data, false)
$('#notice_' + tlid).text( $('#notice_' + tlid).text(
cap(type, data, acct_id) + cap(type, data, acct_id) +
'(' + '(' +
localStorage.getItem('user_' + acct_id) + localStorage.getItem('user_' + acct_id) +
'@' + '@' +
domain + domain +
')' ')'
) )
$('#notice_icon_' + tlid).text('person') $('#notice_icon_' + tlid).text('person')
return return
@@ -117,11 +117,11 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
} }
$('#notice_' + tlid).text( $('#notice_' + tlid).text(
cap(type, data, acct_id) + cap(type, data, acct_id) +
'(' + '(' +
localStorage.getItem('user_' + acct_id) + localStorage.getItem('user_' + acct_id) +
'@' + '@' +
domain + domain +
')' ')'
) )
} else { } else {
var hdr = { var hdr = {
@@ -206,7 +206,7 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
additional(acct_id, tlid) additional(acct_id, tlid)
jQuery('time.timeago').timeago() jQuery('time.timeago').timeago()
todc() todc()
reload(type, '', acct_id, tlid, data, mute, delc, voice) reload(type, 'from timeline to reload', acct_id, tlid, data, mute, delc, voice)
if (type == 'home' || type == 'notf') { if (type == 'home' || type == 'notf') {
//Markers //Markers
var markers = localStorage.getItem('markers') var markers = localStorage.getItem('markers')
@@ -247,194 +247,243 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
} }
}, 100) }, 100)
} else { } else {
var misskey = false var domain = localStorage.getItem('domain_' + acct_id)
if (localStorage.getItem('streaming_' + acct_id)) { if (mastodonBaseWsStatus[domain] == 'cannotuse') {
var wss = localStorage.getItem('streaming_' + acct_id) oldStreaming(type, cc, acct_id, tlid, data, mute, delc, voice, mode)
} else { } else if (mastodonBaseWsStatus[domain] == 'undetected' || mastodonBaseWsStatus[domain] == 'connecting') {
var wss = 'wss://' + domain const mbws = setInterval(function () {
} if (mastodonBaseWsStatus[domain] == 'cannotuse') {
if (type == 'home') { oldStreaming(type, cc, acct_id, tlid, data, mute, delc, voice, mode)
var start = wss + '/api/v1/streaming/?stream=user&access_token=' + at clearInterval(mbws)
} else if (type == 'pub') { } else if (mastodonBaseWsStatus[domain] == 'available') {
var add = '' $('#notice_icon_' + tlid).removeClass('red-text')
if(remoteOnlyCk(tlid)){ stremaingSubscribe(type, acct_id, data)
add = '&remote=true' clearInterval(mbws)
}
var start = wss + '/api/v1/streaming/?stream=public&access_token=' + at + add
} else if (type == 'pub-media') {
var add = ''
if(remoteOnlyCk(tlid)){
add = '&remote=true'
}var start =
wss + '/api/v1/streaming/?stream=public:media&access_token=' + at + add
} else if (type == 'local') {
var start =
wss + '/api/v1/streaming/?stream=public:local&access_token=' + at
} else if (type == 'local-media') {
var start =
wss +
'/api/v1/streaming/?stream=public:local:media&only_media=true&access_token=' +
at
} else if (type == 'tag') {
if (type == 'tag') {
var tag = localStorage.getItem('tag-range')
if (tag == 'local') {
data = data + '&local=true'
} }
} }, 1000)
var start = } else if (mastodonBaseWsStatus[domain] == 'available') {
wss +
'/api/v1/streaming/?stream=hashtag&tag=' +
data +
'&access_token=' +
at
} else if (type == 'noauth') {
var start = 'wss://' + acct_id + '/api/v1/streaming/?stream=public:local'
} else if (type == 'list') {
var start =
wss +
'/api/v1/streaming/?stream=list&list=' +
data +
'&access_token=' +
at
} else if (type == 'dm') {
var start = wss + '/api/v1/streaming/?stream=direct&access_token=' + at
}
var wsid = websocket.length
localStorage.setItem('wss_' + tlid, wsid)
websocket[wsid] = new WebSocket(start)
websocket[wsid].onopen = function (mess) {
console.table({
tlid: tlid,
type: 'Connect Streaming API' + type,
domain: domain,
message: [mess],
})
errorct = 0
$('#notice_icon_' + tlid).removeClass('red-text') $('#notice_icon_' + tlid).removeClass('red-text')
} stremaingSubscribe(type, acct_id, data)
websocket[wsid].onmessage = function (mess) {
console.log([tlid + ':Receive Streaming API:', JSON.parse(mess.data)])
if (misskey) {
if (JSON.parse(mess.data).type == 'note') {
var obj = JSON.parse(mess.data).body
if (voice) {
say(obj.text)
}
websocketNotf[acct_id].send(
JSON.stringify({
type: 'capture',
id: obj.id,
})
)
var templete = misskeyParse([obj], type, acct_id, tlid, '', mute)
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 {
var typeA = JSON.parse(mess.data).event
if (typeA == 'delete') {
var obj = JSON.parse(mess.data).payload
if (delc == 'true') {
$(
'#timeline_' +
tlid +
' [unique-id=' +
JSON.parse(mess.data).payload +
']'
).addClass('emphasized')
$(
'#timeline_' +
tlid +
' [unique-id=' +
JSON.parse(mess.data).payload +
']'
).addClass('by_delcatch')
} else {
$('[unique-id=' + JSON.parse(mess.data).payload + ']').hide()
$('[unique-id=' + JSON.parse(mess.data).payload + ']').remove()
}
} else if (typeA == 'update' || typeA == 'conversation') {
if (
!$('#unread_' + tlid + ' .material-icons').hasClass('teal-text')
) {
//markers show中はダメ
var obj = JSON.parse(JSON.parse(mess.data).payload)
if (
$('#timeline_' + tlid + ' [toot-id=' + obj.id + ']').length < 1
) {
if (voice) {
say(obj.content)
}
var templete = parse([obj], type, acct_id, tlid, '', mute, type)
if (
$('timeline_box_' + tlid + '_box .tl-box').scrollTop() === 0
) {
$('#timeline_' + tlid).prepend(templete)
} else {
var pool = localStorage.getItem('pool_' + tlid)
if (pool) {
pool = templete + pool
} else {
pool = templete
}
localStorage.setItem('pool_' + tlid, pool)
}
scrollck()
additional(acct_id, tlid)
jQuery('time.timeago').timeago()
} else {
todo('二重取得発生中')
}
todc()
}
} else if (typeA == 'filters_changed') {
filterUpdate(acct_id)
} else if (~typeA.indexOf('announcement')) {
announ(acct_id, tlid)
}
}
}
websocket[wsid].onerror = function (error) {
console.error('Error closing')
console.error(error)
if (mode == 'error') {
$('#notice_icon_' + tlid).addClass('red-text')
todo('WebSocket Error ' + error)
} else {
errorct++
console.log(errorct)
if (errorct < 3) {
reconnector(tlid, type, acct_id, data, 'error')
}
}
return false
}
websocket[wsid].onclose = function () {
console.warn('Closing ' + tlid)
if (mode == 'error') {
$('#notice_icon_' + tlid).addClass('red-text')
todo('WebSocket Closed')
} else {
errorct++
console.log(errorct)
if (errorct < 3) {
reconnector(tlid, type, acct_id, data, 'error')
}
}
return false
} }
} }
} }
function stremaingSubscribe(type, acct_id, data, unsubscribe) {
let command = 'subscribe'
if (unsubscribe) command = 'unsubscribe'
let stream
const domain = localStorage.getItem('domain_' + acct_id)
if(type == 'home') return false
if (type === 'local' || type === 'mix') { stream = 'public:local' }
else if (type === 'local-media') { stream = 'public:local:media' }
else if (type === 'pub') { stream = 'public' }
else if (type === 'pub-media') { stream = 'public:media' }
else if (type === 'list') {
mastodonBaseWs[domain].send(JSON.stringify({type: command, stream: 'list', list: data}))
return true
} else if (type === 'tag') {
let arr = []
let name = data
if (data.name) name = data.name
arr.push(name)
if (data.any) arr = arr.concat(data.any.split(','))
if (data.all) arr = arr.concat(data.all.split(','))
for (const tag of arr) {
mastodonBaseWs[domain].send(JSON.stringify({type: command, stream: 'hashtag', tag: tag}))
}
return true
}
mastodonBaseWs[domain].send(JSON.stringify({type: command, stream: stream}))
}
function oldStreaming(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
var misskey = false
const domain = localStorage.getItem(`domain_${acct_id}`)
var at = localStorage.getItem('acct_' + acct_id + '_at')
if (localStorage.getItem('streaming_' + acct_id)) {
var wss = localStorage.getItem('streaming_' + acct_id)
} else {
var wss = 'wss://' + domain
}
if (type == 'home') {
var start = wss + '/api/v1/streaming/?stream=user&access_token=' + at
} else if (type == 'pub') {
var add = ''
if (remoteOnlyCk(tlid)) {
add = '&remote=true'
}
var start = wss + '/api/v1/streaming/?stream=public&access_token=' + at + add
} else if (type == 'pub-media') {
var add = ''
if (remoteOnlyCk(tlid)) {
add = '&remote=true'
} var start =
wss + '/api/v1/streaming/?stream=public:media&access_token=' + at + add
} else if (type == 'local') {
var start =
wss + '/api/v1/streaming/?stream=public:local&access_token=' + at
} else if (type == 'local-media') {
var start =
wss +
'/api/v1/streaming/?stream=public:local:media&only_media=true&access_token=' +
at
} else if (type == 'tag') {
var tag = localStorage.getItem('tag-range')
if (tag == 'local') {
data = data + '&local=true'
}
if (data.name) {
data = data.name
}
var start =
wss +
'/api/v1/streaming/?stream=hashtag&tag=' +
data +
'&access_token=' +
at + add
} else if (type == 'noauth') {
var start = 'wss://' + acct_id + '/api/v1/streaming/?stream=public:local'
} else if (type == 'list') {
var start =
wss +
'/api/v1/streaming/?stream=list&list=' +
data +
'&access_token=' +
at
} else if (type == 'dm') {
var start = wss + '/api/v1/streaming/?stream=direct&access_token=' + at
}
var wsid = websocket.length
localStorage.setItem('wss_' + tlid, wsid)
websocket[wsid] = new WebSocket(start)
websocket[wsid].onopen = function (mess) {
console.table({
tlid: tlid,
type: 'Connect Streaming API' + type,
domain: domain,
message: [mess],
})
errorct = 0
$('#notice_icon_' + tlid).removeClass('red-text')
}
websocket[wsid].onmessage = function (mess) {
console.log([tlid + ':Receive Streaming API:', JSON.parse(mess.data)])
if (misskey) {
if (JSON.parse(mess.data).type == 'note') {
var obj = JSON.parse(mess.data).body
if (voice) {
say(obj.text)
}
websocketNotf[acct_id].send(
JSON.stringify({
type: 'capture',
id: obj.id,
})
)
var templete = misskeyParse([obj], type, acct_id, tlid, '', mute)
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 {
var typeA = JSON.parse(mess.data).event
if (typeA == 'delete') {
var obj = JSON.parse(mess.data).payload
if (delc == 'true') {
$(
'#timeline_' +
tlid +
' [unique-id=' +
JSON.parse(mess.data).payload +
']'
).addClass('emphasized')
$(
'#timeline_' +
tlid +
' [unique-id=' +
JSON.parse(mess.data).payload +
']'
).addClass('by_delcatch')
} else {
$('[unique-id=' + JSON.parse(mess.data).payload + ']').hide()
$('[unique-id=' + JSON.parse(mess.data).payload + ']').remove()
}
} else if (typeA == 'update' || typeA == 'conversation') {
if (
!$('#unread_' + tlid + ' .material-icons').hasClass('teal-text')
) {
//markers show中はダメ
var obj = JSON.parse(JSON.parse(mess.data).payload)
if (
$('#timeline_' + tlid + ' [toot-id=' + obj.id + ']').length < 1
) {
if (voice) {
say(obj.content)
}
var templete = parse([obj], type, acct_id, tlid, '', mute, type)
if (
$('timeline_box_' + tlid + '_box .tl-box').scrollTop() === 0
) {
$('#timeline_' + tlid).prepend(templete)
} else {
var pool = localStorage.getItem('pool_' + tlid)
if (pool) {
pool = templete + pool
} else {
pool = templete
}
localStorage.setItem('pool_' + tlid, pool)
}
scrollck()
additional(acct_id, tlid)
jQuery('time.timeago').timeago()
} else {
todo('二重取得発生中')
}
todc()
}
} else if (typeA == 'filters_changed') {
filterUpdate(acct_id)
} else if (~typeA.indexOf('announcement')) {
announ(acct_id, tlid)
}
}
}
websocket[wsid].onerror = function (error) {
console.error('Error closing')
console.error(error)
if (mode == 'error') {
$('#notice_icon_' + tlid).addClass('red-text')
todo('WebSocket Error ' + error)
} else {
errorct++
console.log(errorct)
if (errorct < 3) {
reconnector(tlid, type, acct_id, data, 'error')
}
}
return false
}
websocket[wsid].onclose = function () {
console.warn('Closing ' + tlid)
if (mode == 'error') {
$('#notice_icon_' + tlid).addClass('red-text')
todo('WebSocket Closed')
} else {
errorct++
console.log(errorct)
if (errorct < 3) {
reconnector(tlid, type, acct_id, data, 'error')
}
}
return false
}
}
//一定のスクロールで発火 //一定のスクロールで発火
function moreload(type, tlid) { function moreload(type, tlid) {
var multi = localStorage.getItem('column') var multi = localStorage.getItem('column')
@@ -866,13 +915,13 @@ function com(type, data, tlid) {
return 'public?local=true&only_media=true&' return 'public?local=true&only_media=true&'
} else if (type == 'pub') { } else if (type == 'pub') {
var add = '' var add = ''
if(remoteOnlyCk(tlid)){ if (remoteOnlyCk(tlid)) {
add = 'remote=true&' add = 'remote=true&'
} }
return 'public?' + add return 'public?' + add
} else if (type == 'pub-media') { } else if (type == 'pub-media') {
var add = '' var add = ''
if(remoteOnlyCk(tlid)){ if (remoteOnlyCk(tlid)) {
add = 'remote=true&' add = 'remote=true&'
} }
return 'public?only_media=true&' + add return 'public?only_media=true&' + add
@@ -998,7 +1047,7 @@ function reconnector(tlid, type, acct_id, data, mode) {
var voice = false var voice = false
} }
var mute = getFilterTypeByAcct(acct_id, type) var mute = getFilterTypeByAcct(acct_id, type)
reload(type, '', acct_id, tlid, data, mute, '', voice, mode) var domain = localStorage.getItem('domain_' + acct_id)
} }
M.toast({ html: lang.lang_tl_reconnect, displayLength: 2000 }) M.toast({ html: lang.lang_tl_reconnect, displayLength: 2000 })
} }
@@ -1008,6 +1057,12 @@ function columnReload(tlid, type) {
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
var domain = localStorage.getItem('domain_' + acct_id)
if (mastodonBaseWsStatus[domain] == 'available') {
stremaingSubscribe(type, acct_id, obj[tlid].data, true)
parseColumn(tlid, true)
return true
}
if (type == 'mix' || type == 'integrated' || 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
@@ -1027,15 +1082,10 @@ function columnReload(tlid, type) {
$('#notice_icon_' + tlid).removeClass('red-text') $('#notice_icon_' + tlid).removeClass('red-text')
getBookmark(acct_id, tlid, false) getBookmark(acct_id, tlid, false)
} else { } else {
var wss = localStorage.getItem('wss_' + tlid) var wss = localStorage.getItem('wss_' + tlid)
websocket[wss].close() websocket[wss].close()
if (localStorage.getItem('voice_' + tlid)) { parseColumn(tlid, false)
var voice = true
} else {
var voice = false
}
var mute = getFilterTypeByAcct(acct_id, type)
parseColumn(tlid)
} }
} }
//Markers //Markers
@@ -1078,10 +1128,10 @@ function getMarker(tlid, type, acct_id) {
$('#unread_' + tlid).attr( $('#unread_' + tlid).attr(
'title', 'title',
lang.lang_layout_unread + lang.lang_layout_unread +
':' + ':' +
json.updated_at + json.updated_at +
' v' + ' v' +
json.version json.version
) )
$('#unread_' + tlid).attr('data-id', json.last_read_id) $('#unread_' + tlid).attr('data-id', json.last_read_id)
} else { } else {
@@ -1285,8 +1335,8 @@ function asReadEnd() {
onBeforeOpen: () => { onBeforeOpen: () => {
Swal.showLoading() Swal.showLoading()
}, },
onClose: () => {}, onClose: () => { },
}).then((result) => {}) }).then((result) => { })
} else { } else {
postMessage(['asReadComp', ''], '*') postMessage(['asReadComp', ''], '*')
} }
@@ -1349,8 +1399,8 @@ function getUtl(acct_id, tlid, data, more) {
moreloading = true moreloading = true
if (more) { if (more) {
var sid = $('#timeline_' + tlid + ' .cvo') var sid = $('#timeline_' + tlid + ' .cvo')
.last() .last()
.attr('unique-id') .attr('unique-id')
var ad = '?max_id=' + sid var ad = '?max_id=' + sid
} else { } else {
var ad = '' var ad = ''
@@ -1414,11 +1464,13 @@ function announ(acct_id, tlid) {
if (ct > 0) { if (ct > 0) {
$('.notf-announ_' + acct_id + '_ct').text(ct) $('.notf-announ_' + acct_id + '_ct').text(ct)
} }
localStorage.setItem('announ_' + acct_id, json[0].id)
} else { } else {
$('.notf-announ_' + acct_id).addClass('hide') $('.notf-announ_' + acct_id).addClass('hide')
} }
var templete = announParse(json, acct_id, tlid) var templete = announParse(json, acct_id, tlid)
$('#announce_' + tlid).html(templete) $('.announce_' + acct_id).html(templete)
jQuery('time.timeago').timeago() jQuery('time.timeago').timeago()
todc() todc()
} }
@@ -1426,7 +1478,7 @@ function announ(acct_id, tlid) {
} }
//buildQuery //buildQuery
function buildQuery(name, data) { function buildQuery(name, data) {
if(!data || data == '') return '' if (!data || data == '') return ''
var arr = data.split(',') var arr = data.split(',')
var str = '' var str = ''
for (var i = 0; i < arr.length; i++) { for (var i = 0; i < arr.length; i++) {

View File

@@ -4,6 +4,7 @@ function imgv(id, key, acct_id) {
$('#imgprog').text(0) $('#imgprog').text(0)
$('#imgsec').text(0) $('#imgsec').text(0)
$('#imgmodal').hide() $('#imgmodal').hide()
rotate(true)
$('#imgmodal').attr('src', '../../img/loading.svg') $('#imgmodal').attr('src', '../../img/loading.svg')
var murl = $('#' + id + '-image-' + key).attr('data-url') var murl = $('#' + id + '-image-' + key).attr('data-url')
var ourl = $('#' + id + '-image-' + key).attr('data-original') var ourl = $('#' + id + '-image-' + key).attr('data-original')
@@ -119,37 +120,10 @@ function imageXhr(id, key, murl) {
var width var width
element.onload = function() { element.onload = function() {
var width = element.naturalWidth var width = element.naturalWidth
if(width < 650) {
width = 650;
}
var height = element.naturalHeight var height = element.naturalHeight
var windowH = $(window).height() calcNiceAspect(width, height)
var windowW = $(window).width() $('#imagemodal').attr('data-naturalWidth', width)
$('#imagemodal').css('bottom', '0') $('#imagemodal').attr('data-naturalHeight', height)
$('#imagemodal img').css('width', 'auto')
if (height < windowH) {
$('#imagemodal').css('height', height + 100 + 'px')
$('#imagemodal img').css('height', height + 'px')
if (width > windowW * 0.8) {
$('#imagemodal').css('width', '80vw')
$('#imagemodal img').css('width', 'auto')
var heightS = ((windowW * 0.8) / width) * height
$('#imagemodal').css('height', heightS + 100 + 'px')
} else {
$('#imagemodal').css('width', width + 'px')
}
} else {
$('#imagemodal img').css('width', 'auto')
var widthS = (windowH / height) * width
if (widthS < windowW) {
$('#imagemodal').css('width', widthS + 'px')
} else {
$('#imagemodal').css('width', '100vw')
}
$('#imagemodal').css('height', '100vh')
$('#imagemodal img').css('height', 'calc(100vh - 60px)')
}
} }
if ($('#' + id + '-image-' + (key * 1 + 1)).length == 0) { if ($('#' + id + '-image-' + (key * 1 + 1)).length == 0) {
$('#image-next').prop('disabled', true) $('#image-next').prop('disabled', true)
@@ -172,6 +146,38 @@ function imageXhr(id, key, murl) {
xhr.responseType = 'blob' xhr.responseType = 'blob'
xhr.send() xhr.send()
} }
function calcNiceAspect( width, height ) {
if(width < 650) {
width = 650
}
var windowH = $(window).height()
var windowW = $(window).width()
$('#imagemodal').css('bottom', '0')
$('#imagemodal img').css('width', 'auto')
if (height < windowH) {
$('#imagemodal').css('height', height + 100 + 'px')
$('#imagemodal img').css('height', height + 'px')
if (width > windowW * 0.8) {
$('#imagemodal').css('width', '80vw')
$('#imagemodal img').css('width', 'auto')
var heightS = ((windowW * 0.8) / width) * height
$('#imagemodal').css('height', heightS + 100 + 'px')
} else {
$('#imagemodal').css('width', width + 'px')
}
} else {
$('#imagemodal img').css('width', 'auto')
var widthS = (windowH / height) * width
if (widthS < windowW) {
$('#imagemodal').css('width', widthS + 'px')
} else {
$('#imagemodal').css('width', '100vw')
}
$('#imagemodal').css('height', '100vh')
$('#imagemodal img').css('height', 'calc(100vh - 60px)')
}
}
//ズームボタン(z:倍率) //ズームボタン(z:倍率)
function zoom(z) { function zoom(z) {
var wdth = $('#imagewrap img').width() var wdth = $('#imagewrap img').width()
@@ -182,7 +188,7 @@ function zoom(z) {
$('#imagewrap img').css('height', hgt + 'px') $('#imagewrap img').css('height', hgt + 'px')
} }
//スマホ対応ドラッグ移動システム //スマホ対応ドラッグ移動システム
;(function() { (function() {
$.fn.dragScroll = function() { $.fn.dragScroll = function() {
var target = this var target = this
$(this) $(this)
@@ -260,6 +266,33 @@ element.onmousewheel = function(e) {
zoom(0.9) zoom(0.9)
} }
} }
function rotate(reset) {
if (reset) {
$('#imagewrap img').removeClass('rotate-90')
$('#imagewrap img').removeClass('rotate-180')
$('#imagewrap img').removeClass('rotate-270')
$('#imagemodal').attr('data-naturalWidth', null)
$('#imagemodal').attr('data-naturalWidth', null)
return true
}
var width = $('#imagemodal').attr('data-naturalWidth')
var height = $('#imagemodal').attr('data-naturalHeight')
if ($('#imagewrap img').hasClass('rotate-90')) {
$('#imagewrap img').removeClass('rotate-90')
$('#imagewrap img').addClass('rotate-180')
calcNiceAspect(width, height)
} else if ($('#imagewrap img').hasClass('rotate-180')) {
$('#imagewrap img').removeClass('rotate-180')
$('#imagewrap img').addClass('rotate-270')
calcNiceAspect(height, width)
} else if ($('#imagewrap img').hasClass('rotate-270')) {
$('#imagewrap img').removeClass('rotate-270')
calcNiceAspect(width, height)
} else {
$('#imagewrap img').addClass('rotate-90')
calcNiceAspect(height, width)
}
}
//当該トゥート //当該トゥート
function detFromImg() { function detFromImg() {

View File

@@ -42,18 +42,17 @@ function parseColumn(target, dontclose) {
var multi = localStorage.getItem('multi') var multi = localStorage.getItem('multi')
if (multi) { if (multi) {
var obj = JSON.parse(multi) var obj = JSON.parse(multi)
var templete var templete
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
var acct = obj[key] var acct = obj[key]
localStorage.setItem('name_' + key, acct.name) localStorage.setItem('name_' + key, acct.name)
localStorage.setItem('user_' + key, acct.user) localStorage.setItem('user_' + key, acct.user)
localStorage.setItem('user-id_' + key, acct.id) localStorage.setItem('user-id_' + key, acct.id)
localStorage.setItem('prof_' + key, acct.prof) localStorage.setItem('prof_' + key, acct.prof)
localStorage.setItem('domain_' + key, acct.domain) localStorage.setItem('domain_' + key, acct.domain)
localStorage.setItem('acct_' + key + '_at', acct.at) localStorage.setItem('acct_' + key + '_at', acct.at)
notf(key, 0) localStorage.setItem('acct_' + key + '_rt', acct.rt ? acct.rt : null)
if(!target) mastodonBaseStreaming(key)
ckdb(key) ckdb(key)
//フィルターデータ読もう //フィルターデータ読もう
getFilter(key) getFilter(key)
@@ -76,8 +75,12 @@ function parseColumn(target, dontclose) {
var obj = [ var obj = [
{ {
domain: 0, domain: 0,
type: 'local', type: 'home',
}, },
{
domain: 0,
type: 'local',
}
] ]
var json = JSON.stringify(obj) var json = JSON.stringify(obj)
localStorage.setItem('column', json) localStorage.setItem('column', json)
@@ -147,7 +150,6 @@ function parseColumn(target, dontclose) {
icnsert = ' style="color: #' + ichex + '" ' icnsert = ' style="color: #' + ichex + '" '
} }
} }
console.log(acct)
if (acctlist[acct.domain]) { if (acctlist[acct.domain]) {
if (acctlist[acct.domain].background != 'def') { if (acctlist[acct.domain].background != 'def') {
insert = insert + ' border-bottom:medium solid #' + acctlist[acct.domain].background + ';' insert = insert + ' border-bottom:medium solid #' + acctlist[acct.domain].background + ';'
@@ -158,15 +160,21 @@ function parseColumn(target, dontclose) {
} else { } else {
localStorage.removeItem('hasNotfC_' + acct.domain) localStorage.removeItem('hasNotfC_' + acct.domain)
} }
var css = ''
var width = localStorage.getItem('width') var width = localStorage.getItem('width')
if (width) { if (width) {
var css = ' min-width:' + width + 'px;' css = ' min-width:' + width + 'px;'
}
var maxWidth = localStorage.getItem('max-width')
if (maxWidth) {
css = css +'max-width:' + maxWidth + 'px;'
}
var margin = localStorage.getItem('margin')
if (margin) {
css = css +'margin-right:' + margin + 'px;'
} }
if (acct.width) { if (acct.width) {
var css = ' min-width:' + acct.width + 'px;max-width:' + acct.width + 'px;' css = css + ' min-width:' + acct.width + 'px !important;max-width:' + acct.width + 'px !important;'
}
if (!css) {
var css = ''
} }
if (acct.type == 'webview') { if (acct.type == 'webview') {
if (localStorage.getItem('fixwidth')) { if (localStorage.getItem('fixwidth')) {
@@ -221,65 +229,63 @@ function parseColumn(target, dontclose) {
var animecss = '' var animecss = ''
} }
var unread = `<a id="unread_${key}" onclick="showUnread('${key}','${acct.type}','${acct.domain}')" var unread = `<a id="unread_${key}" onclick="showUnread('${key}','${acct.type}','${acct.domain}')"
class="setting nex" title="${lang.lang_layout_unread}"> class="setting nex waves-effect" title="${lang.lang_layout_unread}">
<i class="material-icons waves-effect nex">more</i> <i class="material-icons waves-effect nex">more</i><br />${lang.lang_layout_unread}
</a>${lang.lang_layout_unread}<br>` </a>`
var notfDomain = acct.domain var notfDomain = acct.domain
var notfKey = key var notfKey = key
var if_tag = '' var if_tag = ''
var if_tag_btn = '' var if_tag_btn = ''
if (acct.type == 'notf') { if (acct.type == 'notf') {
var exclude = var exclude =
lang.lang_excluded + `<div style="border: 1px solid; padding: 5px; margin-top: 5px; margin-bottom: 5px;">${lang.lang_layout_excluded}:<br>
`:<br>
<label> <label>
<input type="checkbox" class="filled-in" id="exc-reply-${key}" ${excludeCk(key, 'mention')} /> <input type="checkbox" class="filled-in" id="exc-reply-${key}" ${excludeCk(key, 'mention')} />
<span> <span>
<i class="fas fa-share exc-icons"></i> ${lang.lang_layout_mention}
</span> </span>
</label> </label>
<label> <label>
<input type="checkbox" class="filled-in" id="exc-fav-${key}" ${excludeCk(key, 'favourite')} /> <input type="checkbox" class="filled-in" id="exc-fav-${key}" ${excludeCk(key, 'favourite')} />
<span> <span>
<i class="fas fa-star exc-icons"></i> ${lang.lang_layout_fav}
</span> </span>
</label> </label>
<label> <label>
<input type="checkbox" class="filled-in" id="exc-bt-${key}" ${excludeCk(key, 'reblog')} /> <input type="checkbox" class="filled-in" id="exc-bt-${key}" ${excludeCk(key, 'reblog')} />
<span> <span>
<i class="fas fa-retweet exc-icons"></i> ${lang.lang_layout_bt}
</span> </span>
</label> </label>
<label> <label>
<input type="checkbox" class="filled-in" id="exc-follow-${key}" ${excludeCk(key, 'follow')} /> <input type="checkbox" class="filled-in" id="exc-follow-${key}" ${excludeCk(key, 'follow')} />
<span> <span>
<i class="fas fa-users exc-icons"></i> ${lang.lang_status_follow}
</span> </span>
</label> </label>
<label> <label>
<input type="checkbox" class="filled-in" id="exc-poll-${key}" ${excludeCk(key, 'poll')} /> <input type="checkbox" class="filled-in" id="exc-poll-${key}" ${excludeCk(key, 'poll')} />
<span> <span>
<i class="fas fa-tasks exc-icons"></i> ${lang.lang_layout_poll}
</span> </span>
</label> </label> <br />
<button class="btn waves-effect" style="width:60px; padding:0;" onclick="exclude('${key}')">Filter</button>` <button class="btn btn-flat waves-effect notf-exclude-btn waves-light" style="width:calc(50% - 11px); padding:0;" onclick="exclude('${key}')">Filter</button>`
if (checkNotfFilter(key)) { if (checkNotfFilter(key)) {
exclude = exclude =
exclude + exclude +
`<button class="btn red waves-effect" style="width:60px; padding:0;" onclick="resetNotfFilter('${key}')"> `<button class="btn btn-flat red-text waves-effect notf-exclude-btn waves-light" style="width:calc(50% - 11px); padding:0;" onclick="resetNotfFilter('${key}')">
Clear all Clear all
</button>` </button>`
} }
exclude = exclude + '<br>' exclude = exclude + '</div>'
notfDomain = 'dummy' notfDomain = 'dummy'
notfKey = 'dummy' notfKey = 'dummy'
} else if (acct.type == 'home') { } else if (acct.type == 'home') {
var exclude = `<a onclick="ebtToggle('${key}')" class="setting nex"> var exclude = `<a onclick="ebtToggle('${key}')" class="setting nex waves-effect">
<i class="fas fa-retweet waves-effect nex" title="${lang.lang_layout_excludingbt}" style="font-size:24px"></i> <i class="fas fa-retweet nex" title="${lang.lang_layout_excludingbt}" style="font-size: 24px"></i>
<span id="sta-bt-${key}">Off</span> <span id="sta-bt-${key}">Off</span><br />
</a>
${lang.lang_layout_excludingbt} ${lang.lang_layout_excludingbt}
<br>` </a>`
} else if (acct.type == 'tag') { } else if (acct.type == 'tag') {
if (acct.data.name) { if (acct.data.name) {
var name = acct.data.name var name = acct.data.name
@@ -328,15 +334,13 @@ function parseColumn(target, dontclose) {
var basehtml = `<div style="${css}" class="box ${animecss}" id="timeline_box_${basekey}_parentBox"></div>` var basehtml = `<div style="${css}" class="box ${animecss}" id="timeline_box_${basekey}_parentBox"></div>`
$('#timeline-container').append(basehtml) $('#timeline-container').append(basehtml)
} }
var left_hold = `<a onclick="leftFoldSet('${key}')" class="setting nex"> var left_hold = `<a onclick="leftFoldSet('${key}')" class="setting nex waves-effect">
<i class="material-icons waves-effect nex" title="${lang.lang_layout_leftFold}">view_agenda</i> <i class="material-icons waves-effect nex" title="${lang.lang_layout_leftFold}">view_agenda</i><br />
</a> ${lang.lang_layout_leftFold}</a>`
${lang.lang_layout_leftFold}<br>`
} else { } else {
var left_hold = `<a onclick="leftFoldRemove('${key}')" class="setting nex"> var left_hold = `<a onclick="leftFoldRemove('${key}')" class="setting nex waves-effect">
<i class="material-icons waves-effect nex" title="${lang.lang_layout_leftUnfold}">view_column</i> <i class="material-icons waves-effect nex" title="${lang.lang_layout_leftUnfold}">view_column</i><br />
</a> ${lang.lang_layout_leftUnfold}</a>`
${lang.lang_layout_leftUnfold}<br>`
} }
if (key === 0) { if (key === 0) {
left_hold = '' left_hold = ''
@@ -355,22 +359,21 @@ function parseColumn(target, dontclose) {
var addHeight = '' var addHeight = ''
} }
if (acct.type != 'pub' && acct.type != 'pub-media') { if (acct.type != 'pub' && acct.type != 'pub-media') {
console.log(acct.type, key) var mediaFil = `<a onclick="mediaToggle('${key}')" class="setting nex waves-effect">
var mediaFil = `<a onclick="mediaToggle('${key}')" class="setting nex"> <i class="material-icons nex" title="${lang.lang_layout_mediafil}">perm_media</i>
<i class="material-icons waves-effect nex" title="${lang.lang_layout_mediafil}">perm_media</i> <span id="sta-media-${key}">On</span><br />
<span id="sta-media-${key}">On</span> ${lang.lang_layout_mediafil}</a>`
</a>${lang.lang_layout_mediafil}`
} else { } else {
var mediaFil = `<a onclick="remoteOnly('${key}','${acct.type}')" class="setting nex"> var mediaFil = `<a onclick="remoteOnly('${key}','${acct.type}')" class="setting nex waves-effect">
<i class="material-icons waves-effect nex" title="${lang.lang_layout_remoteOnly}">perm_media</i> <i class="material-icons nex" title="${lang.lang_layout_remoteOnly}">perm_media</i><br />
<span id="sta-remote-${key}">Off</span> <span id="sta-remote-${key}">Off</span>
</a>${lang.lang_layout_remoteOnly}` ${lang.lang_layout_remoteOnly}</a>`
} }
var html = ` var html = `
<div class="boxIn" id="timeline_box_${key}_box" tlid="${key}" data-acct="${acct.domain}" style="${addHeight}"> <div class="boxIn" id="timeline_box_${key}_box" tlid="${key}" data-acct="${acct.domain}" style="${addHeight}">
<div class="notice-box z-depth-2" id="menu_${key}" style="${insert}"> <div class="notice-box z-depth-2" id="menu_${key}" style="${insert}">
<div class="area-notice"> <div class="area-notice">
<i class="material-icons waves-effect ${isMisRed}" id="notice_icon_${key}" ${notf_attr} <i class="material-icons waves-effect ${isMisRed} notice_icon_acct_${acct.domain}" id="notice_icon_${key}" ${notf_attr}
style="font-size:40px; padding-top:25%;" style="font-size:40px; padding-top:25%;"
onclick="checkStr('${acct.type}','${data}','${acct.domain}', '${key}', '${delc}','${voice}',null)" onclick="checkStr('${acct.type}','${data}','${acct.domain}', '${key}', '${delc}','${voice}',null)"
title="${lang.lang_layout_gotop}" aria-hidden="true"> title="${lang.lang_layout_gotop}" aria-hidden="true">
@@ -413,33 +416,35 @@ function parseColumn(target, dontclose) {
</div> </div>
</div> </div>
<div class="column-hide notf-indv-box z-depth-4" id="notf-box_${notfKey}"> <div class="column-hide notf-indv-box z-depth-4" id="notf-box_${notfKey}">
<div id="announce_${notfKey}" style="border: 1px solid"></div> <div class="announce_${acct.domain}" style="border: 1px solid"></div>
<div id="notifications_${notfKey}" data-notf="${notfDomain}" data-type="notf" class="notf-timeline"> <div id="notifications_${notfKey}" data-notf="${notfDomain}" data-type="notf" class="notf-timeline">
</div> </div>
</div> </div>
<div class="column-hide notf-indv-box" id="util-box_${key}" style="padding:5px;"> <div class="column-hide notf-indv-box" id="util-box_${key}" style="padding:5px;">
${exclude}
${unread} ${unread}
${exclude}${left_hold} ${left_hold}
${mediaFil}<br> ${mediaFil}
<a onclick="cardToggle('${key}')" class="setting nex"> <a onclick="cardToggle('${key}')" class="setting nex waves-effect">
<i class="material-icons waves-effect nex" title="${lang.lang_layout_linkanades}">link</i> <i class="material-icons nex" title="${lang.lang_layout_linkanades}">link</i>
<span id="sta-card-${key}">On</span> <span id="sta-card-${key}">On</span><br />
</a>
${lang.lang_layout_linkana} ${lang.lang_layout_linkana}
<br>
<a onclick="voiceToggle('${key}')" class="setting nex">
<i class="material-icons waves-effect nex" title="${lang.lang_layout_tts}">hearing</i>
<span id="sta-voice-${key}">On</span>
</a> </a>
<a onclick="voiceToggle('${key}')" class="setting nex waves-effect">
<i class="material-icons nex" title="${lang.lang_layout_tts}">hearing</i>
<span id="sta-voice-${key}">On</span><br />
${lang.lang_layout_tts} ${lang.lang_layout_tts}
TL<br> TL</a>
<a onclick="columnReload('${key}','${acct.type}')" class="setting nex ${if_misskey_hide}"> <a onclick="columnReload('${key}','${acct.type}')" class="setting nex ${if_misskey_hide} waves-effect">
<i class="material-icons waves-effect nex" title="${lang.lang_layout_reconnect}">refresh</i> <i class="material-icons nex" title="${lang.lang_layout_reconnect}">refresh</i>
</a> <br />
<span>
${lang.lang_layout_reconnect} ${lang.lang_layout_reconnect}
</span> </a>
<br> <a onclick="resetWidth('${key}')" class="setting nex waves-effect">
<i class="material-icons nex" title="${lang.lang_layout_resetWidth}">refresh</i>
<br />
${lang.lang_layout_resetWidth}
</a><br />
${lang.lang_layout_headercolor} ${lang.lang_layout_headercolor}
<br> <br>
<div id="picker_${key}" class="color-picker"></div> <div id="picker_${key}" class="color-picker"></div>
@@ -652,7 +657,7 @@ function removeColumn(tlid) {
localStorage.setItem('column', json) localStorage.setItem('column', json)
sortLoad() sortLoad()
$('#timeline_box_' + tlid + '_box').remove() $('#timeline_box_' + tlid + '_box').remove()
if(!data.left_fold) { if (!data.left_fold) {
$('#timeline_box_' + tlid + '_parentBox').remove() $('#timeline_box_' + tlid + '_parentBox').remove()
} }
} }
@@ -786,7 +791,8 @@ function webviewParse(url, key, insert, icnsert, css) {
<i class="fab fa-twitter waves-effect" id="notice_icon_${key}" style="font-size:40px; padding-top:25%;"></i> <i class="fab fa-twitter waves-effect" id="notice_icon_${key}" style="font-size:40px; padding-top:25%;"></i>
</div> </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"></div> <div class="area-sta">
</div>
<div class="area-a2"> <div class="area-a2">
<a onclick="removeColumn('${key}')" class="setting nex"> <a onclick="removeColumn('${key}')" class="setting nex">
<i class="material-icons waves-effect nex" title="${lang.lang_layout_delthis}" ${icnsert}>cancel</i> <i class="material-icons waves-effect nex" title="${lang.lang_layout_delthis}" ${icnsert}>cancel</i>
@@ -829,7 +835,7 @@ function unstreamingTL(type, key, basekey, insert, icnsert, left_fold, css, anim
${lang.lang_layout_leftUnfold} ${lang.lang_layout_leftUnfold}
</span><br>` </span><br>`
} }
if(type == 'utl') { if (type == 'utl') {
var dataHtml = false var dataHtml = false
} else { } else {
var dataHtml = data var dataHtml = data
@@ -899,13 +905,13 @@ function bookmark(key, data) {
tl('bookmark', '', data, key, 'false', voice, '') tl('bookmark', '', data, key, 'false', voice, '')
} }
function utl(key, acct_id, data) { function utl(key, acct_id, data) {
if(!data) { if (!data) {
var multi = localStorage.getItem('column') var multi = localStorage.getItem('column')
var obj = JSON.parse(multi) var obj = JSON.parse(multi)
data = obj[key].data data = obj[key].data
acct_id = obj[key].domain acct_id = obj[key].domain
} }
console.log(key, data) console.log(key, data)
if (localStorage.getItem('voice_' + key)) { if (localStorage.getItem('voice_' + key)) {
var voice = true var voice = true
@@ -930,3 +936,11 @@ function leftFoldRemove(key) {
localStorage.setItem('column', json) localStorage.setItem('column', json)
parseColumn() parseColumn()
} }
function resetWidth(key) {
var multi = localStorage.getItem('column')
var obj = JSON.parse(multi)
obj[key].width = null
var json = JSON.stringify(obj)
localStorage.setItem('column', json)
$(`#timeline_box_${key}_parentBox`).attr('style', '')
}

View File

@@ -1,24 +1,24 @@
function menu() { function menu() {
localStorage.setItem("menu-done", true); localStorage.setItem("menu-done", true)
$("#fukidashi").addClass("hide") $("#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")
if (left > $('body').width() - $('#menu').width()) { if (left > $('body').width() - $('#menu').width()) {
left = $('body').width() - $('#menu').width(); left = $('body').width() - $('#menu').width()
} else if (left < 0) { } else if (left < 0) {
left = 0; left = 0
} }
var top = localStorage.getItem("menu-top"); var top = localStorage.getItem("menu-top")
if (top > $('body').height() - $('#menu').height()) { if (top > $('body').height() - $('#menu').height()) {
top = $('body').height() - $('#menu').height(); top = $('body').height() - $('#menu').height()
} else if (top < 0) { } else if (top < 0) {
top = 0; top = 0
} }
$('#menu').css("left", left + "px") $('#menu').css("left", left + "px")
$('#menu').css("top", top + "px") $('#menu').css("top", top + "px")
var height = localStorage.getItem("menu-height"); var height = localStorage.getItem("menu-height")
var width = localStorage.getItem("menu-width"); var width = localStorage.getItem("menu-width")
if(height){ if(height){
$('#menu').css("height", height + "px") $('#menu').css("height", height + "px")
}else{ }else{
@@ -27,13 +27,13 @@ function menu() {
if(width){ if(width){
$('#menu').css("width", width + "px") $('#menu').css("width", width + "px")
} }
$('#menu').fadeIn(); $('#menu').fadeIn()
$("#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"); $("#left-menu div").removeClass("active")
$("#addColumnMenu").addClass("active"); $("#addColumnMenu").addClass("active")
$("#addColumnMenu").click(); $("#addColumnMenu").click()
} else { } else {
$('#menu').fadeOut() $('#menu').fadeOut()
$("#menu").removeClass("appear") $("#menu").removeClass("appear")
@@ -44,35 +44,35 @@ $(function () {
$("#menu").draggable({ $("#menu").draggable({
handle: "#menu-bar", 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()) {
left = $('body').width() - $('#menu').width(); left = $('body').width() - $('#menu').width()
} else if (left < 0) { } else if (left < 0) {
left = 0; left = 0
} }
var top = $('#menu').offset().top; var top = $('#menu').offset().top
if (top > $('body').height() - $('#menu').height()) { if (top > $('body').height() - $('#menu').height()) {
top = $('body').height() - $('#menu').height(); top = $('body').height() - $('#menu').height()
} else if (top < 0) { } else if (top < 0) {
top = 0; top = 0
} }
localStorage.setItem("menu-left", left); localStorage.setItem("menu-left", left)
localStorage.setItem("menu-top", top); localStorage.setItem("menu-top", top)
} }
}); })
$("#menu").resizable({ $("#menu").resizable({
minHeight: 150, minHeight: 150,
minWidth: 200, minWidth: 200,
stop: function (event, ui) { stop: function (event, ui) {
localStorage.setItem("menu-height", ui.size.height); localStorage.setItem("menu-height", ui.size.height)
localStorage.setItem("menu-width", ui.size.width); localStorage.setItem("menu-width", ui.size.width)
} }
}); })
}); })
function help() { function help() {
$("#left-menu a").removeClass("active"); $("#left-menu a").removeClass("active")
$("#helpMenu").addClass("active"); $("#helpMenu").addClass("active")
$(".menu-content").addClass("hide"); $(".menu-content").addClass("hide")
$("#help-box").removeClass("hide"); $("#help-box").removeClass("hide")
postMessage(["sendSinmpleIpc", "getLogs"], "*") postMessage(["sendSinmpleIpc", "getLogs"], "*")
} }

View File

@@ -1,32 +1,32 @@
function pip(id) { function pip(id) {
$("#pip-content").html($("[toot-id=" + id + "] .additional").html()); $("#pip-content").html($("[toot-id=" + id + "] .additional").html())
$("#pip").removeClass("hide"); $("#pip").removeClass("hide")
} }
function endPip() { function endPip() {
$("#pip-content").html(""); $("#pip-content").html("")
$("#pip").addClass("hide"); $("#pip").addClass("hide")
} }
function pipHoriz() { function pipHoriz() {
if ($("#pip").hasClass("pip-left")) { if ($("#pip").hasClass("pip-left")) {
$("#pip").removeClass("pip-left"); $("#pip").removeClass("pip-left")
$(".pip-horiz").text("chevron_left"); $(".pip-horiz").text("chevron_left")
$("#pip").addClass("pip-right"); $("#pip").addClass("pip-right")
} else { } else {
$("#pip").addClass("pip-left"); $("#pip").addClass("pip-left")
$("#pip").removeClass("pip-right"); $("#pip").removeClass("pip-right")
$(".pip-horiz").text("chevron_right"); $(".pip-horiz").text("chevron_right")
} }
} }
function pipVert() { function pipVert() {
if ($("#pip").hasClass("pip-top")) { if ($("#pip").hasClass("pip-top")) {
$("#pip").removeClass("pip-top"); $("#pip").removeClass("pip-top")
$("#pip").addClass("pip-bottom"); $("#pip").addClass("pip-bottom")
$(".pip-vert").text("expand_less"); $(".pip-vert").text("expand_less")
} else { } else {
$("#pip").addClass("pip-top"); $("#pip").addClass("pip-top")
$("#pip").removeClass("pip-bottom"); $("#pip").removeClass("pip-bottom")
$(".pip-vert").text("expand_more"); $(".pip-vert").text("expand_more")
} }
} }

View File

@@ -101,7 +101,6 @@ if (location.search) {
$('.mini-btn').text('expand_less') $('.mini-btn').text('expand_less')
} }
} }
window.onload = initPostbox
function initPostbox() { function initPostbox() {
$('#posttgl').click(function (e) { $('#posttgl').click(function (e) {
if (!$('#post-box').hasClass('appear')) { if (!$('#post-box').hasClass('appear')) {
@@ -126,11 +125,6 @@ function initPostbox() {
localStorage.removeItem('nohide') localStorage.removeItem('nohide')
srcBox('close') srcBox('close')
}) })
$('#contextWrap').click(function (e) {
$('#contextWrap').addClass('hide')
$('.contextMenu').addClass('hide')
$('.act-icon').text('expand_more')
})
$('#textarea,#cw-text').focusout(function (e) { $('#textarea,#cw-text').focusout(function (e) {
localStorage.setItem('nohide', true) localStorage.setItem('nohide', true)
var countup = function () { var countup = function () {

View File

@@ -1,38 +1,38 @@
var r = document.getElementById("radio"); var r = document.getElementById("radio")
function Rtoggle() { function Rtoggle() {
if ($("#radio").hasClass("play")) { if ($("#radio").hasClass("play")) {
Rstop(); Rstop()
} else { } else {
$("#radio-view").toggleClass("hide"); $("#radio-view").toggleClass("hide")
$("#radio-view").toggleClass("show"); $("#radio-view").toggleClass("show")
$("#radio-input").addClass("hide"); $("#radio-input").addClass("hide")
} }
} }
function Rplay(url, name) { function Rplay(url, name) {
$("#radio").attr('src', url); $("#radio").attr('src', url)
r.load(); r.load()
r.play(); r.play()
$("#radio").addClass("play"); $("#radio").addClass("play")
$("#radio-btn").addClass("teal-text"); $("#radio-btn").addClass("teal-text")
$("#radio-sta").html("<br>Now Playing:" + name); $("#radio-sta").html("<br>Now Playing:" + name)
} }
function Rstop() { function Rstop() {
$("#radio").attr("src", ""); $("#radio").attr("src", "")
r.pause(); r.pause()
$("#radio").removeClass("play"); $("#radio").removeClass("play")
$("#radio-btn").removeClass("teal-text"); $("#radio-btn").removeClass("teal-text")
$("#radio-sta").html(""); $("#radio-sta").html("")
} }
function Ryourself() { function Ryourself() {
$("#radio-input").removeClass("hide"); $("#radio-input").removeClass("hide")
$("#radio-view").addClass("hide"); $("#radio-view").addClass("hide")
} }
function Rselect() { function Rselect() {
$("#radio-input").addClass("hide"); $("#radio-input").addClass("hide")
$("#radio-view").removeClass("hide"); $("#radio-view").removeClass("hide")
} }
function Rinput() { function Rinput() {
var url = $("#radio-url").val(); var url = $("#radio-url").val()
Rplay(url, url) Rplay(url, url)
} }
/* /*

View File

@@ -80,22 +80,6 @@ var postView = new Vue({
}) })
//設定ボタン押した。 //設定ボタン押した。
function settings() { function settings() {
var cd = $('[name=theme]:checked').val()
var ct = $('[data-ct=' + cd + ']').html()
if (cd == 'custom' && !$('#custom-sel-sel').val()) {
var theme = localStorage.getItem('theme')
if (!theme) {
var theme = 'white'
}
$('#' + theme).prop('checked', true)
} else {
if (cd != localStorage.getItem('theme')) {
M.toast({ html: lang.lang_setting_theme.replace('{{set}}', ct), displayLength: 3000 })
}
//テーマはこの場で設定
themes(cd)
localStorage.setItem('theme', cd)
}
var fontd = $('#font').val() var fontd = $('#font').val()
if (fontd) { if (fontd) {
if (fontd != localStorage.getItem('font')) { if (fontd != localStorage.getItem('font')) {
@@ -114,6 +98,10 @@ function settings() {
//読み込み時の設定ロード //読み込み時の設定ロード
function load() { function load() {
var currentLang = lang.language
console.log(currentLang)
$(`#langsel-sel`).val(currentLang)
$('#langsel-sel').formSelect()
var max = envView.config.length var max = envView.config.length
for (var i = 0; i < max; i++) { for (var i = 0; i < max; i++) {
var ls = envView.config[i].storage var ls = envView.config[i].storage
@@ -167,10 +155,10 @@ function load() {
var font = '' var font = ''
} }
$('#font').val(font) $('#font').val(font)
$('#c1-file').text(localStorage.getItem('custom1')) $('#c1-file').text(localStorage.getItem('custom1') != 'null' ? localStorage.getItem('custom1') : '')
$('#c2-file').text(localStorage.getItem('custom2')) $('#c2-file').text(localStorage.getItem('custom2') != 'null' ? localStorage.getItem('custom2') : '')
$('#c3-file').text(localStorage.getItem('custom3')) $('#c3-file').text(localStorage.getItem('custom3') != 'null' ? localStorage.getItem('custom3') : '')
$('#c4-file').text(localStorage.getItem('custom4')) $('#c4-file').text(localStorage.getItem('custom4') != 'null' ? localStorage.getItem('custom4') : '')
var cvol = localStorage.getItem('customVol') var cvol = localStorage.getItem('customVol')
if (cvol) { if (cvol) {
$('#soundvol').val(cvol * 100) $('#soundvol').val(cvol * 100)
@@ -299,8 +287,10 @@ function oksload() {
$('#oks-3').val(localStorage.getItem('oks-3')) $('#oks-3').val(localStorage.getItem('oks-3'))
} }
} }
function changelang(lang) { function changeLang() {
postMessage(['lang', lang], '*') const lang = $('#langsel-sel').val()
console.log(lang)
if(lang) postMessage(['lang', lang], '*')
} }
function exportSettings() { function exportSettings() {
var exp = exportSettingsCore() var exp = exportSettingsCore()
@@ -372,8 +362,12 @@ function exportSettingsCore() {
//tags //tags
var tagarr = localStorage.getItem('tag') var tagarr = localStorage.getItem('tag')
var favtag = JSON.parse(tagarr) var favtag = JSON.parse(tagarr)
exp.favoriteTags = favtag //plugins
exp.revisons = 2.1 var plugins = localStorage.getItem('plugins')
var plugin = JSON.parse(plugins)
exp.plugins = plugin
exp.revisons = 2.2
exp.meta = {} exp.meta = {}
exp.meta.date = new Date() exp.meta.date = new Date()
exp.meta.thedesk = localStorage.getItem('ver') exp.meta.thedesk = localStorage.getItem('ver')
@@ -411,6 +405,7 @@ function importSettingsCore(obj) {
localStorage.setItem('prof_' + key, acct.prof) localStorage.setItem('prof_' + key, acct.prof)
localStorage.setItem('domain_' + key, acct.domain) localStorage.setItem('domain_' + key, acct.domain)
localStorage.setItem('acct_' + key + '_at', acct.at) localStorage.setItem('acct_' + key + '_at', acct.at)
localStorage.setItem('acct_' + key + '_rt', acct.rt ? acct.rt : null)
} }
localStorage.setItem('column', JSON.stringify(obj.columns)) localStorage.setItem('column', JSON.stringify(obj.columns))
if (obj.config) { if (obj.config) {
@@ -508,35 +503,39 @@ function fontList(arg) {
function insertFont(name) { function insertFont(name) {
$('#font').val(name) $('#font').val(name)
} }
$('.color-picker').each(function (i, elem) { function copyColor(from, to) {
pickerDefine(i, 'fff') let props = [
}) 'background', 'subcolor', 'text', 'accent',
function pickerDefine(i, color) { 'modal', 'modalFooter', 'third', 'forth',
var pickr = new Pickr({ 'bottom', 'emphasized', 'postbox', 'active',
el: '#color-picker' + i, 'selected', 'selectedWithShared'
default: color, ]
showAlways: true, let i = 0
appendToBody: true, let color
closeWithKey: 'Escape', for (tag of props) {
comparison: false, if (tag == from) {
components: { let used = $(`#use-color_${i}`).prop('checked')
preview: true, // Left side color comparison if (!used) {
opacity: false, // Opacity slider Swal.fire({
hue: true, // Hue slider type: 'error',
interaction: { title: 'Not checked',
rgba: false, // rgba option (red green blue and alpha) })
input: true, // input / output element break
}, }
}, color = $(`#color-picker${i}_value`).val()
strings: { break
save: 'Save', // Default for save button }
clear: 'Clear', // Default for clear button i++
}, }
}) if (!color) return false
pickr.on('change', (...args) => { for (tag of props) {
var rgb = 'rgb(' + args[0].toRGBA()[0] + ',' + args[0].toRGBA()[1] + ',' + args[0].toRGBA()[2] + ')' if (tag == to) {
$('#color-picker' + i + '_value').val(rgb) $(`#color-picker${i}_value`).val(color)
}) $(`#use-color_${i}`).prop('checked', true)
break
}
i++
}
} }
function customComp() { function customComp() {
var nameC = $('#custom_name').val() var nameC = $('#custom_name').val()
@@ -544,59 +543,32 @@ function customComp() {
return false return false
} }
var descC = $('#custom_desc').val() var descC = $('#custom_desc').val()
var primaryC = $('#color-picker0_value').val() var bgC = $('#color-picker0_value').val()
if (!primaryC) { var subcolorC = $('#color-picker2_value').val()
primaryC = 'rgb(255,255,255)' var textC = $('#color-picker1_value').val()
} var accentC = $('#color-picker3_value').val()
var secondaryC = $('#color-picker1_value').val()
if (!secondaryC) {
secondaryC = 'rgb(255,255,255)'
}
var textC = $('#color-picker2_value').val()
if (!textC) {
textC = 'rgb(255,255,255)'
}
var multi = localStorage.getItem('multi') var multi = localStorage.getItem('multi')
if ($('#pickers').hasClass('advanceTheme')) { let advanced = [
var accentC = $('#color-picker3_value').val() 'modal', 'modalFooter', 'third', 'forth',
if (!accentC) { 'bottom', 'emphasized', 'postbox', 'active',
accentC = null 'selected', 'selectedWithShared'
]
var advanceTheme = {}
let i = 4
for (tag of advanced) {
let used = $(`#use-color_${i}`).prop('checked')
if (used) {
advanceTheme[tag] = $(`#color-picker${i}_value`).val()
} }
var activeC = $('#color-picker4_value').val() i++
if (!activeC) {
activeC = null
}
var modalC = $('#color-picker5_value').val()
if (!modalC) {
modalC = null
}
var bottomC = $('#color-picker6_value').val()
if (!bottomC) {
bottomC = null
}
var postboxC = $('#color-picker7_value').val()
if (!postboxC) {
postboxC = null
}
var subcolorC = $('#color-picker8_value').val()
if (!subcolorC) {
subcolorC = null
}
var advanceTheme = {
TheDeskAccent: accentC,
TheDeskActive: activeC,
TheDeskModal: modalC,
TheDeskBottom: bottomC,
TheDeskPostbox: postboxC,
TheDeskSubcolor: subcolorC,
}
} else {
var advanceTheme = {}
} }
var my = JSON.parse(multi)[0].name var my = JSON.parse(multi)[0].name
var id = $('#custom-edit-sel').val() var id = $('#custom-edit-sel').val()
if (id == 'add_new') { const defaults = [
'black', 'blue', 'brown', 'green', 'indigo', 'polar', 'snow', 'white'
]
if (id == 'add_new' || defaults.includes(id)) {
id = makeCID() id = makeCID()
} }
localStorage.setItem('customtheme-id', id) localStorage.setItem('customtheme-id', id)
@@ -605,26 +577,48 @@ function customComp() {
author: my, author: my,
desc: descC, desc: descC,
base: $('[name=direction]:checked').val(), base: $('[name=direction]:checked').val(),
vars: { primary: {
primary: primaryC, background: bgC,
secondary: secondaryC, subcolor: subcolorC,
text: textC, text: textC,
accent: accentC
}, },
props: advanceTheme, advanced: advanceTheme,
id: id, id: id,
version: '2'
} }
$('#custom_json').val(JSON.stringify(json)) $('#custom_json').val(JSON.stringify(json))
themes('custom') let timerInterval
$('#custom').prop('checked', true) Swal.fire({
$('#custom_name').val('') title: 'Saving...',
$('#custom_desc').val('') html: '',
$('#dark').prop('checked', true) timer: 1000,
$('#custom_json').val('') timerProgressBar: true,
for (var i = 0; i <= 8; i++) { onBeforeOpen: () => {
$('#color-picker' + i + '-wrap').html('<div class="color-picker" id="color-picker' + i + '"></div>') Swal.showLoading()
$('#color-picker' + i + '_value').val('') },
pickerDefine(i, 'fff') onClose: () => {
} clearInterval(timerInterval)
}
}).then((result) => {
themes()
ctLoad()
Swal.fire({
title: 'Refreshing...',
html: '',
timer: 1000,
timerProgressBar: true,
onBeforeOpen: () => {
Swal.showLoading()
},
onClose: () => {
clearInterval(timerInterval)
}
}).then((result) => {
$('#custom-edit-sel').val(id)
$('select').formSelect()
})
})
postMessage(['themeJsonCreate', JSON.stringify(json)], '*') postMessage(['themeJsonCreate', JSON.stringify(json)], '*')
} }
function deleteIt() { function deleteIt() {
@@ -633,34 +627,34 @@ function deleteIt() {
$('#custom_desc').val('') $('#custom_desc').val('')
$('#dark').prop('checked', true) $('#dark').prop('checked', true)
$('#custom_json').val('') $('#custom_json').val('')
for (var i = 0; i <= 8; i++) { for (var i = 0; i <= 13; i++) {
$('#color-picker' + i + '-wrap').html('<div class="color-picker" id="color-picker' + i + '"></div>') if (i >= 4) $(`#use-color_${i}`).prop('checked', false)
$('#color-picker' + i + '_value').val('') $('#color-picker' + i + '_value').val('')
pickerDefine(i, 'fff')
} }
postMessage(['themeJsonDelete', id], '*') postMessage(['themeJsonDelete', id + '.thedesktheme'], '*')
} }
function ctLoad() { function ctLoad() {
postMessage(['sendSinmpleIpc', 'theme-json-list'], '*') postMessage(['sendSinmpleIpc', 'theme-json-list'], '*')
} }
function ctLoadCore(args) { function ctLoadCore(args) {
var templete = '' var template = ''
var editTemplate = ''
Object.keys(args).forEach(function (key) { Object.keys(args).forEach(function (key) {
var theme = args[key] var theme = args[key]
var themeid = theme.id var themeid = theme.id
templete = templete + '<option value="' + themeid + '">' + theme.name + '</option>' template = template + `<option value="${themeid}">${theme.name}${theme.compatible ? `(${lang.lang_setting_compat})` : ''}</option>`
if (!theme.compatible) editTemplate = editTemplate + `<option value="${themeid}">${theme.name}</option>`
}) })
if (args[0]) { $('#custom-sel-sel').html(template)
localStorage.setItem('customtheme-id', args[0].id) editTemplate = '<option value="add_new">' + $('#edit-selector').attr('data-add') + '</option>' + editTemplate
} $('#custom-edit-sel').html(editTemplate)
$('#custom-sel-sel').html(templete) $('#custom-sel-sel').val(localStorage.getItem('customtheme-id'))
templete = '<option value="add_new">' + $('#edit-selector').attr('data-add') + '</option>' + templete
$('#custom-edit-sel').html(templete)
$('select').formSelect() $('select').formSelect()
} }
function customSel() { function customSel() {
var id = $('#custom-sel-sel').val() var id = $('#custom-sel-sel').val()
localStorage.setItem('customtheme-id', id) localStorage.setItem('customtheme-id', id)
themes(id)
} }
function custom() { function custom() {
var id = $('#custom-edit-sel').val() var id = $('#custom-edit-sel').val()
@@ -669,58 +663,47 @@ function custom() {
$('#custom_desc').val('') $('#custom_desc').val('')
$('#dark').prop('checked', true) $('#dark').prop('checked', true)
$('#custom_json').val('') $('#custom_json').val('')
for (var i = 0; i <= 8; i++) { for (var i = 0; i <= 13; i++) {
$('#color-picker' + i + '-wrap').html('<div class="color-picker" id="color-picker' + i + '"></div>') if (i >= 4) $(`#use-color_${i}`).prop('checked', false)
$('#color-picker' + i + '_value').val('') $('#color-picker' + i + '_value').val('')
pickerDefine(i, 'fff')
} }
$('#delTheme').addClass('disabled') $('#delTheme').addClass('disabled')
} else { } else {
$('#delTheme').removeClass('disabled') $('#delTheme').removeClass('disabled')
postMessage(['themeJsonRequest', id], '*') postMessage(['themeJsonRequest', id + '.thedesktheme'], '*')
} }
} }
function customConnect(raw) { function customConnect(raw) {
var args = raw[0] var args = raw[0]
$('#custom_name').val(args.name) $('#custom_name').val(`${args.name} ${args.default ? 'Customed' : ''}`)
$('#custom_desc').val(args.desc) $('#custom_desc').val(args.default ? 'TheDesk default theme with some changes by user' : args.desc)
$('#' + args.base).prop('checked', true) $('#' + args.base).prop('checked', true)
//Primary //Background
$('#color-picker0-wrap').html('<div class="color-picker" id="color-picker0"></div>') $('#color-picker0_value').val(args.primary.background)
pickerDefine(0, rgbToHex(args.vars.primary))
$('#color-picker0_value').val(args.vars.primary)
//Secondary
$('#color-picker1-wrap').html('<div class="color-picker" id="color-picker1"></div>')
pickerDefine(1, rgbToHex(args.vars.secondary))
$('#color-picker1_value').val(args.vars.secondary)
//Text //Text
$('#color-picker2-wrap').html('<div class="color-picker" id="color-picker2"></div>') $('#color-picker1_value').val(args.primary.text)
$('#color-picker2_value').val(args.vars.text) //Subcolor
pickerDefine(2, rgbToHex(args.vars.text)) $('#color-picker2_value').val(args.primary.subcolor)
//TheDesk Only //Accent
advancedConncet(args, 'TheDeskAccent', 'secondary', 3) $('#color-picker3_value').val(args.primary.accent)
advancedConncet(args, 'TheDeskActive', 'primary', 4) let advanced = [
advancedConncet(args, 'TheDeskModal', 'secondary', 5) 'modal', 'modalFooter', 'third', 'forth',
advancedConncet(args, 'TheDeskBottom', 'primary', 6) 'bottom', 'emphasized', 'postbox', 'active',
advancedConncet(args, 'TheDeskPostbox', 'primary', 7) 'selected', 'selectedWithShared'
advancedConncet(args, 'TheDeskSubcolor', 'primary', 8) ]
$('#custom_json').val(raw[1]) let i = 4
} for (tag of advanced) {
function advancedConncet(args, tar, sub, i) { if (args.advanced[tag]) {
if (args.props) { $(`#color-picker${i}_value`).val(args.advanced[tag])
if (args.props[tar]) {
var color = args.props[tar]
$('#pickers').addClass('advanceTheme')
$('.advanced').removeClass('hide')
} else {
var color = args.vars[sub]
} }
} else { $(`#use-color_${i}`).prop('checked', true)
var color = args.vars[sub] i++
}
$('#custom_json').val(raw[1])
if (args.default) {
$('#delTheme').addClass('disabled')
} }
$('#color-picker' + i + '-wrap').html('<div class="color-picker" id="color-picker' + i + '"></div>')
$('#color-picker' + i + '_value').val(color)
pickerDefine(i, rgbToHex(color))
} }
function customImp() { function customImp() {
var json = $('#custom_import').val() var json = $('#custom_import').val()
@@ -754,7 +737,108 @@ function customSound(key) {
} }
function customSoundSave(key, file) { function customSoundSave(key, file) {
localStorage.setItem('custom' + key, file) localStorage.setItem('custom' + key, file)
$('#c1-file').text(file) $(`#c${key}-file`).text(file)
}
function pluginLoad() {
$('#plugin-edit-sel').val('add_new')
$(".plugin_delete").addClass('disabled')
var template = ''
var pgns = localStorage.getItem('plugins')
var args = JSON.parse(pgns ? pgns : '[]')
Object.keys(args).forEach(function (key) {
var theme = args[key]
var themeid = theme.id
template = template + `<option value="${themeid}">${getMeta(theme.content).name}</option>`
})
template = '<option value="add_new">' + $('#plugin-selector').attr('data-add') + '</option>' + template
$('#plugin-edit-sel').html(template)
$('select').formSelect()
}
function pluginEdit() {
var id = $('#plugin-edit-sel').val()
$('#plugin').attr('data-id', id)
if (id == 'add_new') {
$('#plugin').val('')
$(".plugin_delete").addClass('disabled')
} else {
$(".plugin_delete").removeClass('disabled')
var pgns = localStorage.getItem('plugins')
var args = JSON.parse(pgns ? pgns : '[]')
Object.keys(args).forEach(function (key) {
var plugin = args[key]
var targetId = plugin.id
if (targetId == id) $('#plugin').val(plugin.content)
})
}
}
function completePlugin(comp) {
var pgns = localStorage.getItem('plugins')
var args = JSON.parse(pgns ? pgns : '[]')
var id = $('#plugin').attr('data-id')
var inputPlugin = $('#plugin').val()
var meta = getMeta(inputPlugin)
if (!meta) {
Swal.fire({
icon: 'error',
title: 'error',
})
return false
}
if (!meta.name || !meta.version || !meta.event || !meta.author) {
Swal.fire({
icon: 'error',
title: 'error',
})
return false
}
if (id == 'add_new') {
id = makeCID()
args.push({
id: id,
content: inputPlugin
})
} else {
Object.keys(args).forEach(function (key) {
var plugin = args[key]
var targetId = plugin.id
if (targetId == id) args[key].content = inputPlugin
})
}
var ss = args
localStorage.setItem('plugins', JSON.stringify(ss))
if(comp) return false
$('#plugin').attr('data-id', 'add_new')
$('#plugin').val('')
pluginLoad()
}
async function deletePlugin() {
const alert = await Swal.fire({
title: 'delete',
icon: 'warning',
showCancelButton: true
})
if (!alert) return false
$('#plugin').val('')
var pgns = localStorage.getItem('plugins')
var args = JSON.parse(pgns ? pgns : '[]')
var id = $('#plugin').attr('data-id')
$('#plugin').attr('data-id', 'add_new')
var ss = []
Object.keys(args).forEach(function (key) {
var plugin = args[key]
var targetId = plugin.id
if (targetId != id) ss.push(plugin)
})
localStorage.setItem('plugins', JSON.stringify(ss))
pluginLoad()
}
function execEditPlugin() {
completePlugin(true)
var id = $('#plugin').attr('data-id')
var inputPlugin = $('#plugin').val()
var meta = getMeta(inputPlugin)
execPlugin(id, meta.event, { acct_id: 0, id: null })
} }
window.onload = function () { window.onload = function () {
//最初に読む //最初に読む
@@ -766,6 +850,7 @@ window.onload = function () {
voiceSettingLoad() voiceSettingLoad()
oksload() oksload()
ctLoad() ctLoad()
pluginLoad()
$('body').addClass(localStorage.getItem('platform')) $('body').addClass(localStorage.getItem('platform'))
} }
//設定画面で未読マーカーは要らない //設定画面で未読マーカーは要らない
@@ -832,3 +917,5 @@ function lastFmSet() {
} }
M.toast({ html: 'Complete: last.fm', displayLength: 3000 }) M.toast({ html: 'Complete: last.fm', displayLength: 3000 })
} }
function stopVideo() { return false }

View File

@@ -1,44 +1,44 @@
//ソートデータ読み込み //ソートデータ読み込み
function sortLoad () { function sortLoad () {
$("#sort").html(""); $("#sort").html("")
var col = localStorage.getItem("column"); var col = localStorage.getItem("column")
if (col) { if (col) {
var obj = JSON.parse(col); var obj = JSON.parse(col)
} }
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
var acct = obj[key]; var acct = obj[key]
var flag = "false"; var flag = "false"
if (localStorage.getItem("card_" + key) == "true") { if (localStorage.getItem("card_" + key) == "true") {
flag = "true" flag = "true"
} }
var insert = ""; var insert = ""
if (acct.background) { if (acct.background) {
if (acct.text == "def") { if (acct.text == "def") {
} else { } else {
if (acct.text == "black") { if (acct.text == "black") {
var txhex = "000000"; var txhex = "000000"
} else if (acct.text == "white") { } else if (acct.text == "white") {
var txhex = "ffffff"; var txhex = "ffffff"
} }
insert = ' style="background-color:#' + acct.background + '; color: #' + txhex + '" '; insert = ' style="background-color:#' + acct.background + '; color: #' + txhex + '" '
} }
} }
var user = localStorage.getItem("user_" + acct.domain); var user = localStorage.getItem("user_" + acct.domain)
var domain = localStorage.getItem("domain_" + acct.domain); var domain = localStorage.getItem("domain_" + acct.domain)
if (!user || !domain) { if (!user || !domain) {
var acctdata = ""; var acctdata = ""
} else { } else {
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, 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)
}); })
drag(); drag()
} }
//TLのタイトル //TLのタイトル
@@ -62,59 +62,59 @@ function Scap(type, data) {
} else if (type == "tootsearch") { } else if (type == "tootsearch") {
return "tootsearch(" + data + ")" return "tootsearch(" + data + ")"
} else { } else {
console.error("unknown timeline type: " + type); console.error("unknown timeline type: " + type)
} }
} }
//jquery-ui依存 //jquery-ui依存
function drag() { function drag() {
$('#sort').sortable(); $('#sort').sortable()
$('#sort').disableSelection(); $('#sort').disableSelection()
} }
//ソート指定 //ソート指定
function sort() { function sort() {
var arr = []; var arr = []
var flags = []; var flags = []
$(".drag-content").each(function (i, elem) { $(".drag-content").each(function (i, elem) {
var id = $(this).attr("data-id"); var id = $(this).attr("data-id")
var flag = $(this).attr("data-flag"); var flag = $(this).attr("data-flag")
arr.push(id) arr.push(id)
flags.push(flag); flags.push(flag)
}); })
var col = localStorage.getItem("column"); var col = localStorage.getItem("column")
var obj = JSON.parse(col); var obj = JSON.parse(col)
var newobj = []; var newobj = []
for (i = 0; i < arr.length; i++) { for (i = 0; i < arr.length; i++) {
var data = obj[arr[i]]; var data = obj[arr[i]]
var add = { var add = {
domain: data.domain, domain: data.domain,
type: data.type, type: data.type,
data: data.data, data: data.data,
background: data.background, background: data.background,
text: data.text text: data.text
}; }
newobj.push(add); newobj.push(add)
if (flags[i] == "true") { if (flags[i] == "true") {
localStorage.setItem("card_" + i, "true"); localStorage.setItem("card_" + i, "true")
} else { } else {
localStorage.removeItem("card_" + i); localStorage.removeItem("card_" + i)
} }
} }
var json = JSON.stringify(newobj); var json = JSON.stringify(newobj)
localStorage.setItem("column", json); localStorage.setItem("column", json)
$("#sort").html(""); $("#sort").html("")
M.toast({ html: "Sorted", displayLength: 3000 }) M.toast({ html: "Sorted", displayLength: 3000 })
sortLoad(); sortLoad()
parseColumn(); parseColumn()
sortMenu() sortMenu()
} }
//ソートボタントグル //ソートボタントグル
function sortMenu() { function sortMenu() {
$("#left-menu a").removeClass("active"); $("#left-menu a").removeClass("active")
$("#sortMenu").addClass("active"); $("#sortMenu").addClass("active")
$(".menu-content").addClass("hide"); $(".menu-content").addClass("hide")
$("#sort-box").removeClass("hide"); $("#sort-box").removeClass("hide")
$("#sort").html(""); $("#sort").html("")
sortLoad(); sortLoad()
} }

View File

@@ -32,7 +32,7 @@ function spotifyDisconnect() {
console.error(error) console.error(error)
}) })
.then(function (json) { .then(function (json) {
if(!json.success) alert('error') if (!json.success) alert('error')
localStorage.removeItem('spotify-token') localStorage.removeItem('spotify-token')
checkSpotify() checkSpotify()
}) })
@@ -62,6 +62,12 @@ function checkSpotify() {
} else { } else {
$('#amw_no').prop('checked', true) $('#amw_no').prop('checked', true)
} }
var flag3 = localStorage.getItem('control-center-np')
if (flag3) {
$('#cmw_yes').prop('checked', true)
} else {
$('#cmw_no').prop('checked', true)
}
} }
function spotifyFlagSave() { function spotifyFlagSave() {
var awk = $('[name=awk]:checked').val() var awk = $('[name=awk]:checked').val()
@@ -83,6 +89,16 @@ function aMusicFlagSave() {
M.toast({ html: lang.lang_spotify_imgno, displayLength: 3000 }) M.toast({ html: lang.lang_spotify_imgno, displayLength: 3000 })
} }
} }
function cMusicFlagSave() {
var awk = $('[name=cmw]:checked').val()
if (awk == 'yes') {
localStorage.setItem('control-center-np', 'yes')
M.toast({ html: 'コントロールセンターNPをオンにしました', displayLength: 3000 })
} else {
localStorage.removeItem('control-center-np')
M.toast({ html: 'コントロールセンターNPをオフにしました', displayLength: 3000 })
}
}
function nowplaying(mode) { function nowplaying(mode) {
if (mode == 'spotify') { if (mode == 'spotify') {
var start = 'https://spotify.thedesk.top/current-playing?code=' + localStorage.getItem('spotify-token') var start = 'https://spotify.thedesk.top/current-playing?code=' + localStorage.getItem('spotify-token')
@@ -155,6 +171,8 @@ function nowplaying(mode) {
} }
} else if (mode == 'itunes') { } else if (mode == 'itunes') {
postMessage(['itunes', ''], '*') postMessage(['itunes', ''], '*')
} else if (mode == 'anynp') {
postMessage(['itunes', 'anynp'], '*')
} else if (mode == 'lastFm') { } else if (mode == 'lastFm') {
var user = localStorage.getItem('lastFmUser') var user = localStorage.getItem('lastFmUser')
var start = 'https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=' + user + '&limit=1&api_key=8f113803bfea951b6dde9e56d32458b2&format=json' var start = 'https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=' + user + '&limit=1&api_key=8f113803bfea951b6dde9e56d32458b2&format=json'
@@ -188,9 +206,8 @@ function nowplaying(mode) {
var item = json.recenttracks.track[0] var item = json.recenttracks.track[0]
if (!item['@attr']) return false if (!item['@attr']) return false
var img = item.image[3]['#text'] var img = item.image[3]['#text']
var isImg = item.streamable * 1
var flag = localStorage.getItem('artwork') var flag = localStorage.getItem('artwork')
if (flag && isImg && img) { if (flag && img != 'https://lastfm.freetls.fastly.net/i/u/300x300/2a96cbd8b46e442fc41c2b86b821562f.png' && img) {
postMessage(['bmpImage', [img, 0]], '*') postMessage(['bmpImage', [img, 0]], '*')
} }
var content = localStorage.getItem('np-temp') var content = localStorage.getItem('np-temp')
@@ -229,6 +246,16 @@ function nowplaying(mode) {
} }
async function npCore(arg) { async function npCore(arg) {
console.table(arg) console.table(arg)
if(arg.anynp) {
var flag = localStorage.getItem('artwork')
var q = arg.title
if (flag && localStorage.getItem('complete-artwork')) {
aaw = await getUnknownAA(q)
postMessage(['bmpImage', [aaw.aaw, 0]], '*')
}
$('#textarea').val(q)
return false
}
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}'

View File

@@ -1,35 +1,20 @@
//テーマ適用 //テーマ適用
function themes(theme) { function themes(theme) {
if (!theme) { if (!theme) {
var theme = localStorage.getItem('theme') var theme = localStorage.getItem('customtheme-id')
if (!theme) { if (!theme) {
var theme = 'black' localStorage.setItem('customtheme-id', 'black')
localStorage.setItem('theme', 'black') theme = 'black'
} }
} }
postMessage(['themeCSSRequest', theme + '.thedesktheme'], '*')
var el = document.getElementsByTagName('html')[0] var el = document.getElementsByTagName('html')[0]
el.style.backgroundColor = 'var(--bg)'
el.classList.remove('indigotheme')
el.classList.remove('greentheme')
el.classList.remove('browntheme')
el.classList.remove('blacktheme')
el.classList.remove('bluetheme')
el.classList.remove('polartheme')
el.classList.remove('snowtheme')
el.classList.remove('customtheme')
el.classList.add(theme + 'theme')
var font = localStorage.getItem('font') var font = localStorage.getItem('font')
if (font) { if(font) {
font = font.replace(/"(.+)"/, '$1') el.style.fontFamily = font
el.style.fontFamily = '"' + font + '"'
} else { } else {
el.style.fontFamily = '' el.style.fontFamily = ''
} }
if (theme == 'custom') {
if (localStorage.getItem('customtheme-id')) {
postMessage(['themeCSSRequest', localStorage.getItem('customtheme-id')], '*')
}
}
el.style.backgroundColor = 'var(--bg)'
} }
themes() themes()

View File

@@ -19,7 +19,7 @@ function bottomReverse() {
localStorage.setItem('reverse', 'true') localStorage.setItem('reverse', 'true')
} }
} }
function tips(mode) { function tips(mode, custom) {
postMessage(['sendSinmpleIpc', 'endmem'], '*') postMessage(['sendSinmpleIpc', 'endmem'], '*')
clearInterval(clockint) clearInterval(clockint)
clearInterval(spotStart) clearInterval(spotStart)
@@ -57,22 +57,31 @@ function tips(mode) {
tipsToggle() tipsToggle()
localStorage.setItem('tips', 'itunes') localStorage.setItem('tips', 'itunes')
itunestips() itunestips()
} else if (mode == 'custom') {
tipsToggle()
localStorage.setItem('tips', `custom:${custom}`)
execPlugin(custom, 'tips', null)
} }
} }
//メモリ //メモリ
function startmem() { function startmem() {
postMessage(['sendSinmpleIpc', 'startmem'], '*') postMessage(['sendSinmpleIpc', 'startmem'], '*')
} }
function renderMem(use, cpu, total) { function renderMem(use, cpu, total, core, uptime) {
let day = Math.floor(uptime / 60 / 60 / 24)
let hour = Math.floor(uptime / 60 /60 % 24)
if(hour < 10) hour = '0' + hour
let min = Math.floor(uptime / 60 % 60)
if(min < 10) min = '0' + min
let sec = Math.floor(uptime % 60)
if(sec < 10) sec = '0' + sec
let time = `${day ? day + ' days ' : ''}${hour ? hour + ':' : ''}${min}:${sec}`
//Intel
cpu = cpu.replace('Intel(R)', '').replace('(TM)', '').replace(' CPU', '')
//AMD
cpu = cpu.replace('AMD ', '').replace(/\s[0-9]{1,3}-Core\sProcessor/, '')
$('#tips-text').html( $('#tips-text').html(
escapeHTML(cpu) + `${escapeHTML(cpu)} x ${core}<br />RAM: ${Math.floor(use / 1024 / 1024 / 102.4) / 10}/${Math.floor(total / 1024 / 1024 / 102.4) / 10}GB(${Math.floor((use / total) * 100)}%) UP:${time}`
'<br>Memory:' +
Math.floor(use / 1024 / 1024 / 102.4) / 10 +
'/' +
Math.floor(total / 1024 / 1024 / 102.4) / 10 +
'GB(' +
Math.floor((use / total) * 100) +
'%)'
) )
} }
//トレンドタグ //トレンドタグ
@@ -196,12 +205,10 @@ function spotifytips() {
<i class="material-icons pointer" onclick="nowplaying('spotify');show()" style="font-size:20px">send</i> <i class="material-icons pointer" onclick="nowplaying('spotify');show()" style="font-size:20px">send</i>
</div> </div>
<div id="spot-cover"> <div id="spot-cover">
<img src="${img}" id="spot-img"> <img src="${img}" id="spot-img" draggable="false">
</div> </div>
<div id="spot-name"> <div id="spot-name">
${escapeHTML(item.name)} ${escapeHTML(item.name)}
</div>
<div id="spot-artist">
<span class="gray sml" id="spot-art">${artisttxt}</span> <span class="gray sml" id="spot-art">${artisttxt}</span>
</div> </div>
<div id="spot-time"> <div id="spot-time">

File diff suppressed because it is too large Load Diff

View File

@@ -1,65 +1,65 @@
//プロフ編集 //プロフ編集
//文字系 //文字系
function profedit() { function profedit() {
var acct_id = $('#his-data').attr("use-acct"); var acct_id = $('#his-data').attr("use-acct")
todo("Updating..."); todo("Updating...")
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/accounts/update_credentials"; var start = "https://" + domain + "/api/v1/accounts/update_credentials"
var name = $("#his-name-val").val(); var name = $("#his-name-val").val()
var des = $("#his-des-val").val(); var des = $("#his-des-val").val()
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest()
httpreq.open('PATCH', start, true); httpreq.open('PATCH', 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({
display_name: name, display_name: name,
note: des, note: des,
})); }))
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
$('#his-data').modal('close'); $('#his-data').modal('close')
todc(); todc()
} }
} }
} }
//画像系 //画像系
function imgChange(imgfile, target) { 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.warn("No Image to upload"); console.warn("No Image to upload")
return; return
} }
var file = imgfile.files[0]; var file = imgfile.files[0]
var fr = new FileReader(); var fr = new FileReader()
fr.onload = function (evt) { fr.onload = function (evt) {
var b64 = this.result; var b64 = this.result
var blob = toBlob(b64, 'image/png'); var blob = toBlob(b64, 'image/png')
var fd = new FormData(); var fd = new FormData()
fd.append(target, blob); fd.append(target, blob)
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/accounts/update_credentials"; var start = "https://" + domain + "/api/v1/accounts/update_credentials"
var httpreq = new XMLHttpRequest(); var httpreq = new XMLHttpRequest()
httpreq.open('PATCH', start, true); httpreq.open('PATCH', start, true)
httpreq.upload.addEventListener("progress", progshow, false); httpreq.upload.addEventListener("progress", progshow, false)
httpreq.setRequestHeader('Authorization', 'Bearer ' + at); httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.responseType = "json"; httpreq.responseType = "json"
httpreq.send(fd); httpreq.send(fd)
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response; var json = httpreq.response
if(this.status!==200){ setLog(start, this.status, this.response); } if(this.status!==200){ setLog(start, this.status, this.response) }
$('#his-data').modal('close'); $('#his-data').modal('close')
todc(); todc()
localStorage.removeItem("image"); localStorage.removeItem("image")
} }
} }
} }
$("#prof-change").html($("#prof-change").html()); $("#prof-change").html($("#prof-change").html())
$("#header-change").html($("#header-change").html()); $("#header-change").html($("#header-change").html())
fr.readAsDataURL(file); fr.readAsDataURL(file)
} }

View File

@@ -1,31 +1,31 @@
//ユーザーデータ表示 //ユーザーデータ表示
localStorage.removeItem("history"); localStorage.removeItem("history")
//コード受信 //コード受信
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=(.+)/)
var mode = m[1]; var mode = m[1]
var codex = m[2]; var codex = m[2]
if (mode == "user") { if (mode == "user") {
udgEx(codex, "main"); udgEx(codex, "main")
} }
} }
function udgEx(user, acct_id) { function udgEx(user, acct_id) {
if (user == "selector") { if (user == "selector") {
user = $("#his-acct").attr("fullname"); user = $("#his-acct").attr("fullname")
} }
if (acct_id == "selector") { if (acct_id == "selector") {
acct_id = $("#user-acct-sel").val(); acct_id = $("#user-acct-sel").val()
} }
if (acct_id == "main") { if (acct_id == "main") {
acct_id = localStorage.getItem("main"); acct_id = localStorage.getItem("main")
} }
console.log("Get user data of " + 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") { if (localStorage.getItem("mode_" + domain) == "misskey") {
return false; return false
} }
var at = localStorage.getItem("acct_" + acct_id + "_at"); var at = localStorage.getItem("acct_" + acct_id + "_at")
var start = "https://" + domain + "/api/v2/search?resolve=true&q=" + encodeURIComponent(user); var start = "https://" + domain + "/api/v2/search?resolve=true&q=" + encodeURIComponent(user)
fetch(start, { fetch(start, {
method: "GET", method: "GET",
headers: { headers: {
@@ -36,39 +36,39 @@ function udgEx(user, acct_id) {
.then(function(response) { .then(function(response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function(text) {
setLog(response.url, response.status, text); setLog(response.url, response.status, text)
}); })
} }
return response.json(); return response.json()
}) })
.catch(function(error) { .catch(function(error) {
todo(error); todo(error)
setLog(start, "JSON", error); setLog(start, "JSON", error)
console.error(error); console.error(error)
}) })
.then(function(json) { .then(function(json) {
if (json.accounts[0]) { if (json.accounts[0]) {
var id = json.accounts[0].id; var id = json.accounts[0].id
udg(id, acct_id); udg(id, acct_id)
} else { } else {
postMessage(["openUrl", user], "*"); postMessage(["openUrl", user], "*")
} }
}); })
return true; return true
} }
function udg(user, acct_id) { 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)
} }
todo("User Data Loading..."); todo("User Data Loading...")
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id)
if (localStorage.getItem("mode_" + domain) == "misskey") { if (localStorage.getItem("mode_" + domain) == "misskey") {
misskeyUdg(user, acct_id); misskeyUdg(user, acct_id)
return; return
} }
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
fetch(start, { fetch(start, {
method: "GET", method: "GET",
headers: { headers: {
@@ -79,188 +79,188 @@ function udg(user, acct_id) {
.then(function(response) { .then(function(response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function(text) {
setLog(response.url, response.status, text); setLog(response.url, response.status, text)
}); })
} }
return response.json(); return response.json()
}) })
.catch(function(error) { .catch(function(error) {
todo(error); todo(error)
setLog(start, "JSON", error); setLog(start, "JSON", error)
console.error(error); console.error(error)
}) })
.then(function(json) { .then(function(json) {
//一つ前のユーザーデータ //一つ前のユーザーデータ
if (!localStorage.getItem("history")) { if (!localStorage.getItem("history")) {
$("#his-history-btn").prop("disabled", true); $("#his-history-btn").prop("disabled", true)
} else { } else {
$("#his-history-btn").prop("disabled", false); $("#his-history-btn").prop("disabled", false)
$("#his-data").attr("history", localStorage.getItem("history")); $("#his-data").attr("history", localStorage.getItem("history"))
} }
//moved設定時 //moved設定時
if (json.moved) { if (json.moved) {
M.toast({ M.toast({
html: lang.lang_showontl_movetxt + '<button class="btn-flat toast-action" onclick="udg(\'' + json.moved.id + "','" + acct_id + "')\">" + lang.lang_showontl_movebtn + "</button>", html: lang.lang_showontl_movetxt + '<button class="btn-flat toast-action" onclick="udg(\'' + json.moved.id + "','" + acct_id + "')\">" + lang.lang_showontl_movebtn + "</button>",
displayLength: 4000 displayLength: 4000
}); })
} }
$("#his-data").modal("open"); $("#his-data").modal("open")
$("#his-data").attr("user-id", user); $("#his-data").attr("user-id", user)
$("#his-data").attr("use-acct", acct_id); $("#his-data").attr("use-acct", acct_id)
if (json.username != json.acct) { if (json.username != json.acct) {
//Remote //Remote
$("#his-data").attr("remote", "true"); $("#his-data").attr("remote", "true")
var fullname = json.acct; var fullname = json.acct
} else { } else {
$("#his-data").attr("remote", "false"); $("#his-data").attr("remote", "false")
var fullname = json.acct + "@" + domain; var fullname = json.acct + "@" + domain
} }
utlShow(json.id, "", acct_id); utlShow(json.id, "", acct_id)
flw(json.id, "", acct_id); flw(json.id, "", 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]
} else { } else {
var actemojick = false; var actemojick = false
} }
//絵文字があれば //絵文字があれば
if (actemojick) { if (actemojick) {
Object.keys(json.emojis).forEach(function(key5) { Object.keys(json.emojis).forEach(function(key5) {
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 + '" class="emoji-img" data-emoji="' + shortcode + '" draggable="false">'; var emoji_url = '<img src="' + emoji.url + '" 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の解析 //noteの解析
//var tags = '<a onclick="tl(\'tag\',\'$1\',' + acct_id +',\'add\')" class="pointer parsed">#$1</a>'; //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>'; //var mens = '<a onclick="udgEx(\'$1\',' + acct_id +')" class="pointer parsed">@$1</a>';
//note=note.replace(/#(\S+)/gi, tags) //note=note.replace(/#(\S+)/gi, tags)
//note=note.replace(/\s@([a-zA-Z_0-9@.-]+)/gi, mens) //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)
$("#his-prof").attr("src", json.avatar); $("#his-prof").attr("src", json.avatar)
$("#his-data").css("background-image", "url(" + json.header + ")"); $("#his-data").css("background-image", "url(" + json.header + ")")
$("#his-sta").text(json.statuses_count); $("#his-sta").text(json.statuses_count)
$("#his-follow").text(json.following_count); $("#his-follow").text(json.following_count)
var flerc = json.followers_count; var flerc = json.followers_count
if (flerc < 0) { if (flerc < 0) {
flerc = "-"; flerc = "-"
} }
$("#his-follower").text(flerc); $("#his-follower").text(flerc)
$("#his-since").text(crat(json.created_at)); $("#his-since").text(crat(json.created_at))
$("#his-openin").attr("data-href", json.url); $("#his-openin").attr("data-href", json.url)
if (json.fields) { if (json.fields) {
var table = ""; var table = ""
if (json.fields.length > 0) { if (json.fields.length > 0) {
$("#his-des").css("max-height", "250px"); $("#his-des").css("max-height", "250px")
table = '<table id="his-field">'; table = '<table id="his-field">'
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
if (json.fields[i].verified_at) { if (json.fields[i].verified_at) {
var when = lang.lang_showontl_verified + ":" + crat(json.fields[i].verified_at); var when = lang.lang_showontl_verified + ":" + crat(json.fields[i].verified_at)
var color = "rgba(121,189,154,.25);"; var color = "rgba(121,189,154,.25);"
} else { } else {
var when = ""; var when = ""
var color = "inherit"; var color = "inherit"
} }
table = table + '<tr><td class="his-field-title">' + escapeHTML(fname) + '</td><td class="his-field-content" title="' + when + '" style="background-color:' + color + '">' + fval + "</td></tr>"; table = table + '<tr><td class="his-field-title">' + escapeHTML(fname) + '</td><td class="his-field-content" title="' + when + '" style="background-color:' + color + '">' + fval + "</td></tr>"
} }
table = table + "</table>"; table = table + "</table>"
$("#his-des").html(twemoji.parse(note)); $("#his-des").html(twemoji.parse(note))
} else { } else {
$("#his-des").css("max-height", "400px"); $("#his-des").css("max-height", "400px")
} }
$("#his-table").html(twemoji.parse(table)); $("#his-table").html(twemoji.parse(table))
} else { } else {
$("#his-des").css("max-height", "400px"); $("#his-des").css("max-height", "400px")
} }
$("#his-des").html(twemoji.parse(note)); $("#his-des").html(twemoji.parse(note))
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-des").attr("data-acct", acct_id)
$("#his-data").css("background-size", "cover"); $("#his-data").css("background-size", "cover")
$("#his-float-timeline").css("height", $("#his-data-show").height() + "px"); $("#his-float-timeline").css("height", $("#his-data-show").height() + "px")
localStorage.setItem("history", user); localStorage.setItem("history", user)
//自分の時 //自分の時
if (json.acct == localStorage.getItem("user_" + acct_id)) { if (json.acct == localStorage.getItem("user_" + acct_id)) {
showFav("", acct_id); showFav("", acct_id)
showBlo("", acct_id); showBlo("", acct_id)
showMut("", acct_id); showMut("", acct_id)
showDom("", acct_id); showDom("", acct_id)
showReq("", acct_id); showReq("", 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) {
if (json.fields[0]) { if (json.fields[0]) {
$("#his-f1-name").val(json.fields[0].name); $("#his-f1-name").val(json.fields[0].name)
$("#his-f1-val").val($.strip_tags(json.fields[0].value)); $("#his-f1-val").val($.strip_tags(json.fields[0].value))
} }
if (json.fields[1]) { if (json.fields[1]) {
$("#his-f2-name").val(json.fields[1].name); $("#his-f2-name").val(json.fields[1].name)
$("#his-f2-val").val($.strip_tags(json.fields[1].value)); $("#his-f2-val").val($.strip_tags(json.fields[1].value))
} }
if (json.fields[2]) { if (json.fields[2]) {
$("#his-f3-name").val(json.fields[2].name); $("#his-f3-name").val(json.fields[2].name)
$("#his-f3-val").val($.strip_tags(json.fields[2].value)); $("#his-f3-val").val($.strip_tags(json.fields[2].value))
} }
if (json.fields[3]) { if (json.fields[3]) {
$("#his-f4-name").val(json.fields[3].name); $("#his-f4-name").val(json.fields[3].name)
$("#his-f4-val").val($.strip_tags(json.fields[3].value)); $("#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")
des = $.strip_tags(des); des = $.strip_tags(des)
$("#his-des-val").val(des); $("#his-des-val").val(des)
$("#his-follow-btn").hide(); $("#his-follow-btn").hide()
$("#his-block-btn").hide(); $("#his-block-btn").hide()
$("#his-mute-btn").hide(); $("#his-mute-btn").hide()
$("#his-notf-btn").hide(); $("#his-notf-btn").hide()
$("#his-domain-btn").hide(); $("#his-domain-btn").hide()
$("#his-emp-btn").hide(); $("#his-emp-btn").hide()
$(".only-my-data").show(); $(".only-my-data").show()
$(".only-his-data").hide(); $(".only-his-data").hide()
if (localStorage.getItem("main") == acct_id) { if (localStorage.getItem("main") == acct_id) {
$("#his-main-acct").hide(); $("#his-main-acct").hide()
} }
} else { } else {
relations(user, acct_id); relations(user, acct_id)
$(".only-my-data").hide(); $(".only-my-data").hide()
$(".only-his-data").show(); $(".only-his-data").show()
} }
todc(); todc()
if(json.locked) { if(json.locked) {
$('#his-data').addClass('locked') $('#his-data').addClass('locked')
} else { } else {
$('#his-data').removeClass('locked') $('#his-data').removeClass('locked')
} }
//外部データ取得(死かもしれないので) //外部データ取得(死かもしれないので)
udAdd(acct_id, user, json.url); udAdd(acct_id, user, 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)
} }
todo("User Data Loading..."); todo("User Data Loading...")
var domain = localStorage.getItem("domain_" + acct_id); var domain = localStorage.getItem("domain_" + acct_id)
if (localStorage.getItem("mode_" + domain) != "misskey") { if (localStorage.getItem("mode_" + domain) != "misskey") {
udg(user, acct_id); udg(user, acct_id)
return; return
} }
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"
fetch(start, { fetch(start, {
method: "POST", method: "POST",
headers: { headers: {
@@ -274,127 +274,127 @@ function misskeyUdg(user, acct_id) {
.then(function(response) { .then(function(response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function(text) {
setLog(response.url, response.status, text); setLog(response.url, response.status, text)
}); })
} }
return response.json(); return response.json()
}) })
.catch(function(error) { .catch(function(error) {
todo(error); todo(error)
setLog(start, "JSON", error); setLog(start, "JSON", error)
console.error(error); console.error(error)
}) })
.then(function(json) { .then(function(json) {
//一つ前のユーザーデータ //一つ前のユーザーデータ
if (!localStorage.getItem("history")) { if (!localStorage.getItem("history")) {
$("#his-history-btn").prop("disabled", true); $("#his-history-btn").prop("disabled", true)
} else { } else {
$("#his-history-btn").prop("disabled", false); $("#his-history-btn").prop("disabled", false)
$("#his-data").attr("history", localStorage.getItem("history")); $("#his-data").attr("history", localStorage.getItem("history"))
} }
$("#his-data").modal("open"); $("#his-data").modal("open")
$("#his-data").attr("user-id", user); $("#his-data").attr("user-id", user)
$("#his-data").attr("use-acct", acct_id); $("#his-data").attr("use-acct", acct_id)
if (json.host) { if (json.host) {
//Remote //Remote
$("#his-data").attr("remote", "false"); $("#his-data").attr("remote", "false")
var fullname = json.username + "@" + json.host; var fullname = json.username + "@" + json.host
} else { } else {
$("#his-data").attr("remote", "false"); $("#his-data").attr("remote", "false")
var fullname = json.acct + "@" + domain; var fullname = json.acct + "@" + domain
} }
utlShow(json.id, "", acct_id); utlShow(json.id, "", acct_id)
flw(json.id, "", acct_id); flw(json.id, "", acct_id)
fer(json.id, "", acct_id); fer(json.id, "", acct_id)
if (json.name) { if (json.name) {
var dis_name = escapeHTML(json.name); var dis_name = escapeHTML(json.name)
dis_name = twemoji.parse(dis_name); dis_name = twemoji.parse(dis_name)
} else { } else {
var dis_name = json.name; var dis_name = json.name
} }
$("#his-name").html(dis_name); $("#his-name").html(dis_name)
$("#his-acct").text(json.username); $("#his-acct").text(json.username)
$("#his-acct").attr("fullname", fullname); $("#his-acct").attr("fullname", fullname)
$("#his-prof").attr("src", json.avatarUrl); $("#his-prof").attr("src", json.avatarUrl)
$("#his-data").css("background-image", "url(" + json.bannerUrl + ")"); $("#his-data").css("background-image", "url(" + json.bannerUrl + ")")
$("#his-sta").text(json.notesCount); $("#his-sta").text(json.notesCount)
$("#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 = escapeHTML(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("😺"))
} }
$("#his-data").css("background-size", "cover"); $("#his-data").css("background-size", "cover")
localStorage.setItem("history", user); localStorage.setItem("history", user)
//自分の時 //自分の時
if (json.username == localStorage.getItem("user_" + acct_id) && !json.host) { if (json.username == localStorage.getItem("user_" + acct_id) && !json.host) {
//showFav('', acct_id); //showFav('', acct_id);
//showMut('', acct_id); //showMut('', acct_id);
//showReq('', acct_id); //showReq('', acct_id);
showFrl("", acct_id); showFrl("", acct_id)
$("#his-name-val").val(json.name); $("#his-name-val").val(json.name)
var des = json.note; var des = json.note
des = nl2br(des); des = nl2br(des)
des = $.strip_tags(des); des = $.strip_tags(des)
$("#his-des-val").val(des); $("#his-des-val").val(des)
$("#his-follow-btn").hide(); $("#his-follow-btn").hide()
$("#his-block-btn").hide(); $("#his-block-btn").hide()
$("#his-mute-btn").hide(); $("#his-mute-btn").hide()
$("#his-notf-btn").hide(); $("#his-notf-btn").hide()
$("#his-domain-btn").hide(); $("#his-domain-btn").hide()
$("#his-emp-btn").hide(); $("#his-emp-btn").hide()
$(".only-my-data").show(); $(".only-my-data").show()
$(".only-his-data").hide(); $(".only-his-data").hide()
if (localStorage.getItem("main") == acct_id) { if (localStorage.getItem("main") == acct_id) {
$("#his-main-acct").hide(); $("#his-main-acct").hide()
} }
} else { } else {
if (json.isFollowing) { if (json.isFollowing) {
//自分がフォローしている //自分がフォローしている
$("#his-data").addClass("following"); $("#his-data").addClass("following")
$("#his-follow-btn-text").text(lang.lang_status_unfollow); $("#his-follow-btn-text").text(lang.lang_status_unfollow)
hisList(user, acct_id); hisList(user, acct_id)
} else { } else {
$("#his-follow-btn-text").text(lang.lang_status_follow); $("#his-follow-btn-text").text(lang.lang_status_follow)
} }
if (json.isFollowed) { if (json.isFollowed) {
//フォローされてる //フォローされてる
$("#his-relation").text(lang.lang_showontl_followed); $("#his-relation").text(lang.lang_showontl_followed)
} }
$("#his-block-btn").hide(); $("#his-block-btn").hide()
if (json.isMuted) { if (json.isMuted) {
$("#his-data").addClass("muting"); $("#his-data").addClass("muting")
$("#his-mute-btn-text").text(lang.lang_status_unmute); $("#his-mute-btn-text").text(lang.lang_status_unmute)
} else { } else {
$("#his-mute-btn-text").text(lang.lang_status_mute); $("#his-mute-btn-text").text(lang.lang_status_mute)
} }
$(".only-my-data").hide(); $(".only-my-data").hide()
$(".only-his-data").show(); $(".only-his-data").show()
} }
todc(); todc()
}); })
} }
//一つ前のユーザーデータ表示 //一つ前のユーザーデータ表示
function historyShow() { function historyShow() {
var acct_id = $("#his-data").attr("use-acct"); var acct_id = $("#his-data").attr("use-acct")
var user = $("#his-data").attr("history"); var user = $("#his-data").attr("history")
udg(user, acct_id, "true"); udg(user, acct_id, "true")
} }
//選択アカウントのプロフ //選択アカウントのプロフ
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)
udg(user, acct_id); udg(user, acct_id)
hide(); hide()
} }
//FF関係取得 //FF関係取得
function relations(user, acct_id) { function relations(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")
var start = "https://" + domain + "/api/v1/accounts/relationships?id=" + user; var start = "https://" + domain + "/api/v1/accounts/relationships?id=" + user
fetch(start, { fetch(start, {
method: "GET", method: "GET",
headers: { headers: {
@@ -405,18 +405,18 @@ function relations(user, acct_id) {
.then(function(response) { .then(function(response) {
if (!response.ok) { if (!response.ok) {
response.text().then(function(text) { response.text().then(function(text) {
setLog(response.url, response.status, text); setLog(response.url, response.status, text)
}); })
} }
return response.json(); return response.json()
}) })
.catch(function(error) { .catch(function(error) {
todo(error); todo(error)
setLog(start, "JSON", error); setLog(start, "JSON", error)
console.error(error); console.error(error)
}) })
.then(function(json) { .then(function(json) {
var json = json[0]; var json = json[0]
if(json.requested) { if(json.requested) {
//フォロリク中 //フォロリク中
$('#his-data').addClass('following') $('#his-data').addClass('following')
@@ -425,138 +425,140 @@ function relations(user, acct_id) {
if (json.following) { if (json.following) {
//自分がフォローしている //自分がフォローしている
$("#his-data").addClass("following") $("#his-data").addClass("following")
$("#his-follow-btn-text").text(lang.lang_status_unfollow); $("#his-follow-btn-text").text(lang.lang_status_unfollow)
hisList(user, acct_id); hisList(user, acct_id)
} else { } else {
$("#his-follow-btn-text").text(lang.lang_status_follow); $("#his-follow-btn-text").text(lang.lang_status_follow)
} }
if (json.followed_by) { if (json.followed_by) {
//フォローされてる //フォローされてる
$("#his-relation").text(lang.lang_showontl_followed); $("#his-relation").text(lang.lang_showontl_followed)
} }
if (json.blocking) { if (json.blocking) {
$("#his-data").addClass("blocking"); $("#his-data").addClass("blocking")
$("#his-block-btn-text").text(lang.lang_status_unblock); $("#his-block-btn-text").text(lang.lang_status_unblock)
} else { } else {
$("#his-block-btn-text").text(lang.lang_status_block); $("#his-block-btn-text").text(lang.lang_status_block)
} }
if (json.muting) { if (json.muting) {
$("#his-data").addClass("muting"); $("#his-data").addClass("muting")
$("#his-mute-btn-text").text(lang.lang_status_unmute); $("#his-mute-btn-text").text(lang.lang_status_unmute)
} else { } else {
$("#his-mute-btn-text").text(lang.lang_status_mute); $("#his-mute-btn-text").text(lang.lang_status_mute)
} }
if (json.muting_notifications) { if (json.muting_notifications) {
$("#his-data").addClass("mutingNotf"); $("#his-data").addClass("mutingNotf")
$("#his-notf-btn-text").text(lang.lang_showontl_notf + lang.lang_status_unmute); $("#his-notf-btn-text").text(lang.lang_showontl_notf + lang.lang_status_unmute)
} else { } else {
$("#his-notf-btn-text").text(lang.lang_showontl_notf + lang.lang_status_mute); $("#his-notf-btn-text").text(lang.lang_showontl_notf + lang.lang_status_mute)
} }
if (json.domain_blocking) { if (json.domain_blocking) {
$("#his-data").addClass("blockingDom"); $("#his-data").addClass("blockingDom")
$("#his-domain-btn-text").text(lang.lang_showontl_domain + lang.lang_status_unblock); $("#his-domain-btn-text").text(lang.lang_showontl_domain + lang.lang_status_unblock)
} else { } else {
$("#his-domain-btn-text").text(lang.lang_showontl_domain + lang.lang_status_block); $("#his-domain-btn-text").text(lang.lang_showontl_domain + lang.lang_status_block)
} }
//Endorsed //Endorsed
if (json.endorsed) { if (json.endorsed) {
$("#his-end-btn").addClass("endorsed"); $("#his-end-btn").addClass("endorsed")
$("#his-end-btn-text").text(lang.lang_status_unendorse); $("#his-end-btn-text").text(lang.lang_status_unendorse)
} else { } else {
$("#his-end-btn").removeClass("endorsed"); $("#his-end-btn").removeClass("endorsed")
$("#his-end-btn-text").text(lang.lang_status_endorse); $("#his-end-btn-text").text(lang.lang_status_endorse)
} }
//Blocked //Blocked
if (json.blocked_by) { if (json.blocked_by) {
$("#my-data-nav .btn").addClass("disabled"); $("#my-data-nav .btn").addClass("disabled")
$(".his-var-content").hide(); $(".his-var-content").hide()
$("#his-float-blocked").show(); $("#his-float-blocked").show()
$("#his-follow-btn").hide(); $("#his-follow-btn").hide()
} }
}); })
} }
function profbrws() { function profbrws() {
var url = $("#his-openin").attr("data-href"); var url = $("#his-openin").attr("data-href")
postMessage(["openUrl", url], "*"); postMessage(["openUrl", url], "*")
} }
function setMain() { function setMain() {
var acct_id = $("#his-data").attr("use-acct"); var acct_id = $("#his-data").attr("use-acct")
localStorage.setItem("main", acct_id); localStorage.setItem("main", acct_id)
multiSelector(true); multiSelector(true)
M.toast({ html: lang.lang_manager_mainAcct, displayLength: 3000 }); M.toast({ html: lang.lang_manager_mainAcct, displayLength: 3000 })
} }
//オールリセット //オールリセット
function hisclose() { function hisclose() {
$("#his-data").modal("close"); $("#his-data").modal("close")
reset(); reset()
$("#his-data").attr("history", ""); $("#his-data").attr("history", "")
localStorage.removeItem("history"); localStorage.removeItem("history")
} }
function reset() { function reset() {
$(".his-var-content:eq(0)").show(); $(".his-var-content:eq(0)").show()
$(".his-var-content:gt(0)").hide(); $(".his-var-content:gt(0)").hide()
$("#my-data-nav .btn").removeClass("disabled"); $("#my-data-nav .btn").removeClass("disabled")
$(".active-back").removeClass("active-back"); $(".active-back").removeClass("active-back")
$(".column-first").addClass("active-back"); $(".column-first").addClass("active-back")
$("#his-name").text("Loading"); $("#his-name").text("Loading")
$("#his-acct").text(""); $("#his-acct").text("")
$("#his-prof").attr("src", "../../img/loading.svg"); $("#his-prof").attr("src", "../../img/loading.svg")
$("#his-data").css("background-image", "url(../../img/loading.svg)"); $("#his-data").css("background-image", "url(../../img/loading.svg)")
$("#his-sta").text(""); $("#his-sta").text("")
$("#his-follow").text(""); $("#his-follow").text("")
$("#his-follower").text(""); $("#his-follower").text("")
$("#his-des").html(""); $("#his-des").html("")
$("#his-data").css("background-size", "cover"); $("#his-data").css("background-size", "cover")
$("#his-since").text(""); $("#his-since").text("")
$("#his-data").removeClass("following"); $("#his-data").removeClass("following")
$("#his-data").removeClass("muting"); $("#his-data").removeClass("muting")
$("#his-data").removeClass("blocking"); $("#his-data").removeClass("blocking")
$("#his-data").removeClass("mutingNotf"); $("#his-data").removeClass("mutingNotf")
$("#his-data").removeClass("blockingDom"); $("#his-data").removeClass("blockingDom")
$("#his-end-btn").removeClass("endorsed"); $("#his-end-btn").removeClass("endorsed")
$("#his-des").css("max-height", "250px"); $("#his-des").css("max-height", "250px")
$("#his-bot").html(""); $("#his-bot").html("")
$("#his-follow-btn").show(); $("#his-follow-btn").show()
$("#his-block-btn").show(); $("#his-block-btn").show()
$("#his-mute-btn").show(); $("#his-mute-btn").show()
$("#his-notf-btn").show(); $("#his-notf-btn").show()
$("#his-domain-btn").show(); $("#his-domain-btn").show()
$("#his-emp-btn").show(); $("#his-emp-btn").show()
$("#his-follow-btn-text").text(lang.lang_status_follow); $("#his-follow-btn-text").text(lang.lang_status_follow)
$("#his-mute-btn-text").text(lang.lang_status_mute); $("#his-mute-btn-text").text(lang.lang_status_mute)
$("#his-block-btn-text").text(lang.lang_status_block); $("#his-block-btn-text").text(lang.lang_status_block)
$("#his-notf-btn").text(lang.lang_showontl_notf + lang.lang_status_mute); $("#his-notf-btn").text(lang.lang_showontl_notf + lang.lang_status_mute)
$("#his-domain-btn").text(lang.lang_showontl_domain + lang.lang_status_block); $("#his-domain-btn").text(lang.lang_showontl_domain + lang.lang_status_block)
$("#his-relation").text(""); $("#his-relation").text("")
$(".cont-series").html(""); $(".cont-series").html("")
$("#domainblock").val(""); $("#domainblock").val("")
$("#his-lists-a").html(lang.lang_showontl_listwarn); $("#his-lists-a").html(lang.lang_showontl_listwarn)
$("#his-lists-b").html(""); $("#his-lists-b").html("")
$("#his-name-val").val(""); $("#his-name-val").val("")
$("#his-des-val").val(""); $("#his-des-val").val("")
$("#his-f1-name").val(""); $("#his-f1-name").val("")
$("#his-f1-val").val(""); $("#his-f1-val").val("")
$("#his-f2-name").val(""); $("#his-f2-name").val("")
$("#his-f2-val").val(""); $("#his-f2-val").val("")
$("#his-f3-name").val(""); $("#his-f3-name").val("")
$("#his-f3-val").val(""); $("#his-f3-val").val("")
$("#his-f4-name").val(""); $("#his-f4-name").val("")
$("#his-f4-val").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-timeline").show()
$("#his-float-blocked").hide(); $("#his-float-blocked").hide()
$("#his-main-acct").show(); $("#his-main-acct").show()
$("#his-proof-prof").html(""); $("#his-proof-prof").html("")
$('#his-data').removeClass('locked') $('#his-data').removeClass('locked')
$('#his-data').removeClass('requesting') $('#his-data').removeClass('requesting')
} }
$("#my-data-nav .anc-link").on("click", function() { $("#my-data-nav .anc-link").on("click", function() {
var target = $(this).attr("go"); var target = $(this).attr("go")
if (target) { if (target) {
$("#my-data-nav .anc-link").removeClass("active-back"); const title = $(this).html()
$(this).addClass("active-back"); $('#his-data-title').html(title)
$(target).show(); $("#my-data-nav .anc-link").removeClass("active-back")
$(".his-var-content:not(" + target + ")").hide(); $(this).addClass("active-back")
$(target).show()
$(".his-var-content:not(" + target + ")").hide()
} }
}); })

View File

@@ -124,7 +124,6 @@ function createWindow() {
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 ha_path = join(app.getPath('userData'), 'hardwareAcceleration') var ha_path = join(app.getPath('userData'), 'hardwareAcceleration')
var ua_path = join(app.getPath('userData'), 'useragent') var ua_path = join(app.getPath('userData'), 'useragent')
var frame_path = join(app.getPath('userData'), 'frame')
try { try {
fs.readFileSync(ha_path, 'utf8') fs.readFileSync(ha_path, 'utf8')
app.disableHardwareAcceleration() app.disableHardwareAcceleration()
@@ -152,19 +151,6 @@ function createWindow() {
y: 'string', y: 'string',
} // デフォルトバリュー } // デフォルトバリュー
} }
try {
var frameRaw = fs.readFileSync(frame_path, 'utf8')
if (frameRaw == 'false') {
var frame = false
var frameTitle = 'hidden'
} else {
var frame = true
var frameTitle = 'default'
}
} catch {
var frame = true
}
// メイン画面の表示。ウィンドウの幅、高さを指定できる // メイン画面の表示。ウィンドウの幅、高さを指定できる
var platform = process.platform var platform = process.platform
var bit = process.arch var bit = process.arch
@@ -173,6 +159,7 @@ function createWindow() {
webviewTag: true, webviewTag: true,
nodeIntegration: false, nodeIntegration: false,
contextIsolation: true, contextIsolation: true,
spellcheck: false,
preload: join(__dirname, 'js', 'platform', 'preload.js'), preload: join(__dirname, 'js', 'platform', 'preload.js'),
}, },
width: window_size.width, width: window_size.width,
@@ -180,7 +167,6 @@ function createWindow() {
x: window_size.x, x: window_size.x,
y: window_size.y, y: window_size.y,
show: false, show: false,
frame: frame,
} }
if (platform == 'linux') { if (platform == 'linux') {
arg.resizable = true arg.resizable = true
@@ -189,7 +175,6 @@ function createWindow() {
arg.simpleFullscreen = true arg.simpleFullscreen = true
} else if (platform == 'darwin') { } else if (platform == 'darwin') {
arg.simpleFullscreen = true arg.simpleFullscreen = true
arg.titleBarStyle = frameTitle
} }
mainWindow = new BrowserWindow(arg) mainWindow = new BrowserWindow(arg)
mainWindow.once('page-title-updated', () => { mainWindow.once('page-title-updated', () => {
@@ -200,6 +185,13 @@ function createWindow() {
mainWindow.maximize() mainWindow.maximize()
} }
}) })
mainWindow.webContents.on('page-title-updated', () => {
const url = mainWindow.webContents.getURL()
if(url.match(/https:\/\/crowdin.com\/profile/)) {
app.relaunch()
app.exit()
}
})
if (!packaged) mainWindow.toggleDevTools() if (!packaged) mainWindow.toggleDevTools()
electron.session.defaultSession.clearCache(() => {}) electron.session.defaultSession.clearCache(() => {})
if (process.argv) { if (process.argv) {
@@ -245,9 +237,12 @@ function createWindow() {
} }
const promise = new Promise(function (resolve) { const promise = new Promise(function (resolve) {
mainWindow.webContents.send('asReadEnd', '') mainWindow.webContents.send('asReadEnd', '')
let wait = 3000
const url = mainWindow.webContents.getURL()
if(!url.match(/index.html/)) wait = 0
setTimeout(function () { setTimeout(function () {
resolve() resolve()
}, 3000) }, wait)
}) })
promise.then(function (response) { promise.then(function (response) {
closeArg = true closeArg = true
@@ -293,10 +288,7 @@ function createWindow() {
var platform = process.platform var platform = process.platform
var bit = process.arch var bit = process.arch
Menu.setApplicationMenu(Menu.buildFromTemplate(language.template(lang, mainWindow, packaged, dir, dirname, frame))) Menu.setApplicationMenu(Menu.buildFromTemplate(language.template(lang, mainWindow, packaged, dir, dirname)))
if (!frame) {
mainWindow.setMenu(null)
}
//CSS //CSS
css.css(mainWindow) css.css(mainWindow)
//アップデータとダウンロード //アップデータとダウンロード

View File

@@ -31,119 +31,246 @@ function css(mainWindow) {
} }
}) })
ipc.on('theme-json-delete', function (e, arg) { ipc.on('theme-json-delete', function (e, arg) {
var themecss = join(app.getPath("userData"), arg + ".thedesktheme"); try{
console.log(themecss); var themecss = join(app.getPath("userData"), arg);
fs.unlink(themecss, function (err) { console.log(themecss);
e.sender.webContents.send('theme-json-delete-complete', ""); fs.unlink(themecss, function (err) {
}); e.sender.webContents.send('theme-json-delete-complete', "");
});
} catch {
e.sender.webContents.send('theme-json-delete-complete', 'cannot delete');
}
}) })
ipc.on('theme-json-request', function (e, arg) { ipc.on('theme-json-request', function (e, arg) {
var themecss = join(app.getPath("userData"), arg + ".thedesktheme"); try {
var raw = fs.readFileSync(themecss, 'utf8') var themecss = join(app.getAppPath(), '/source/themes', arg)
var json = JSON5.parse(raw); var raw = fs.readFileSync(themecss, 'utf8')
var json = JSON5.parse(raw)
} catch {
var themecss = join(app.getPath("userData"), arg)
var raw = fs.readFileSync(themecss, 'utf8')
var json = JSON5.parse(raw)
}
e.sender.webContents.send('theme-json-response', [json, raw]); e.sender.webContents.send('theme-json-response', [json, raw]);
}) })
ipc.on('theme-css-request', function (e, arg) { ipc.on('theme-css-request', function (e, arg) {
var themecss = join(app.getPath("userData"), arg + ".thedesktheme");
try { try {
var json = JSON5.parse(fs.readFileSync(themecss, 'utf8')); var themecss = join(app.getAppPath(), '/source/themes', arg)
var json = JSON5.parse(fs.readFileSync(themecss, 'utf8'))
} catch {
var themecss = join(app.getPath("userData"), arg)
var json = JSON5.parse(fs.readFileSync(themecss, 'utf8'))
}
var primary = json.vars.primary; try {
var secondary = json.vars.secondary; var css
var text = json.vars.text; if (json.version) {
if (json.base == "light") { var bg = json.primary.background
var drag = "rgba(255, 255, 255, 0.8)"; var subcolor = json.primary.subcolor
var beforehover = "#757575"; var text = json.primary.text
var selected = "#3f3f3f" var accent = json.primary.accent
var selectedWithShare = "#b2babd" if (json.base == "light") {
var gray = "#757575" var drag = "rgba(255, 255, 255, 0.8)";
} else { var beforehover = "#757575";
var drag = "rgba(0, 0, 0, 0.8)"; var selected = "#3f3f3f"
var beforehover = "#9e9e9e"; var selectedWithShare = "#b2babd"
var selected = "#c0c0c0" var gray = "#757575"
var selectedWithShare = "#003a30" var hisData = 'rgba(255, 255, 255, 0.9)'
var gray = "#cccccc"
}
if (json.props) {
if (json.props.TheDeskAccent) {
var emphasized = json.props.TheDeskAccent
} else { } else {
var emphasized = secondary var drag = "rgba(0, 0, 0, 0.8)";
var beforehover = "#9e9e9e";
var selected = "#c0c0c0"
var selectedWithShare = "#003a30"
var gray = "#cccccc"
var hisData = 'rgba(0, 0, 0, 0.8)'
} }
if (json.props.TheDeskActive) { if (!json.advanced) {
var active = json.props.TheDeskActive json.advanced = {}
}
if (json.advanced.modal) {
var modal = json.advanced.modal
} else { } else {
var active = primary var modal = bg
} }
if (json.props.TheDeskModal) { if (json.advanced.modalFooter) {
var modal = json.props.TheDeskModal var modalFooter = json.advanced.modalFooter
} else { } else {
var modal = secondary var modalFooter = bg
if (modal != bg) modalFooter = modal
} }
if (json.props.TheDeskBottom) { if (json.advanced.thirdColor) {
var bottom = json.props.TheDeskBottom var thirdColor = json.advanced.thirdColor
} else { } else {
var bottom = primary var thirdColor = subcolor
} }
if (json.props.TheDeskPostbox) { if (json.advanced.forthColor) {
var postbox = json.props.TheDeskPostbox var forthColor = json.advanced.forthColor
} else { } else {
var postbox = primary var forthColor = subcolor
if (thirdColor != subcolor) forthColor = thirdColor
} }
if (json.props.TheDeskSubcolor) { if (json.advanced.bottom) {
var subcolor = json.props.TheDeskSubcolor var bottom = json.advanced.bottom
} else { } else {
var subcolor = primary var bottom = subcolor
}
if (json.advanced.emphasized) {
var emphasized = json.advanced.emphasized
} else {
var emphasized = accent
}
if (json.advanced.postbox) {
var postbox = json.advanced.postbox
} else {
var postbox = subcolor
}
if (json.advanced.active) {
var active = json.advanced.active
} else {
var active = accent
}
if (json.advanced.selected) {
var selected = json.advanced.selected
}
if (json.advanced.selectedWithShare) {
var selectedWithShare = json.advanced.selectedWithShare
} }
} else {
var emphasized = primary
var acs = secondary
var active = primary
var modal = secondary
var bottom = primary
var postbox = primary
var subcolor = primary
}
var css = ".customtheme {--bg:" + secondary + ";--drag:" + drag + ";" + var css = ":root {--bg:" + bg + ";--drag:" + drag + ";" +
"--color:" + text + ";--beforehover:" + beforehover + ";--modal:" + "--text:" + text + ";--beforehover:" + beforehover + ";--modal:" +
modal + ";--subcolor:" + subcolor + ";--box:" + subcolor + modal + ";--thirdColor:" + thirdColor + ";--subcolor:" + forthColor +
";--sidebar:" + bottom + ";--shared:" + emphasized + ";" + ";--bottom:" + bottom + ";--accent:" + accent + ";" + ";--emphasized:" + emphasized + ";--his-data:" +
"--notfbox:" + secondary + ";--emphasized:" + active + ";--his-data:" + hisData +
secondary + ";--active:" + active + ";--postbox:" + postbox + ";--modalfooter:" +
";--active:" + active + ";--postbox:" + postbox + ";--modalfooter:" + modalFooter + ";--selected:" + selected + ";--selectedWithShare:" + selectedWithShare +
primary + ";--gray:" + gray + ";}" +
";--accentbtn:" + subcolor + ";--selected:" + selected + ";--selectedWithShare:" + selectedWithShare + "}"+ ".customtheme #imagemodal{background: url(\"../img/pixel.svg\");}";
"--gray:" + gray + ";"+ } else {
".customtheme #imagemodal{background: url(\"../img/pixel.svg\");}"; var css = compatibleTheme(json)
}
e.sender.webContents.send('theme-css-response', css); e.sender.webContents.send('theme-css-response', css);
} catch (e) { } catch (e) {
var css = ""; var css = "";
} }
}) })
ipc.on('theme-json-list', function (e, arg) { function compatibleTheme(json) {
fs.readdir(app.getPath("userData"), function (err, files) { var primary = json.vars.primary;
if (err || !files) throw err; var secondary = json.vars.secondary;
var fileList = files.filter(function (file) { var text = json.vars.text;
if(file.match(/\.thedesktheme$/)){ if (json.base == "light") {
var tfile = join(app.getPath("userData"), file) var drag = "rgba(255, 255, 255, 0.8)";
return fs.statSync(tfile).isFile() && /.*\.thedesktheme$/.test(tfile) var beforehover = "#757575";
}else{ var selected = "#3f3f3f"
return null var selectedWithShare = "#b2babd"
} var gray = "#757575"
}) } else {
var themes = []; var drag = "rgba(0, 0, 0, 0.8)";
for (var i = 0; i < fileList.length; i++) { var beforehover = "#9e9e9e";
var themecss = join(app.getPath("userData"), fileList[i]); var selected = "#c0c0c0"
var json = JSON5.parse(fs.readFileSync(themecss, 'utf8')); var selectedWithShare = "#003a30"
themes.push({ var gray = "#cccccc"
name: json.name, }
id: json.id if (json.advanced) {
}) if (json.advanced.TheDeskAccent) {
var emphasized = json.advanced.TheDeskAccent
} else {
var emphasized = secondary
} }
e.sender.webContents.send('theme-json-list-response', themes); if (json.advanced.TheDeskActive) {
}); var active = json.advanced.TheDeskActive
} else {
var active = primary
}
if (json.advanced.TheDeskModal) {
var modal = json.advanced.TheDeskModal
} else {
var modal = secondary
}
if (json.advanced.TheDeskBottom) {
var bottom = json.advanced.TheDeskBottom
} else {
var bottom = primary
}
if (json.advanced.TheDeskPostbox) {
var postbox = json.advanced.TheDeskPostbox
} else {
var postbox = primary
}
if (json.advanced.TheDeskSubcolor) {
var subcolor = json.advanced.TheDeskSubcolor
} else {
var subcolor = primary
}
} else {
var emphasized = primary
var acs = secondary
var active = primary
var modal = secondary
var bottom = primary
var postbox = primary
var subcolor = primary
}
var css = ".customtheme {--bg:" + secondary + ";--drag:" + drag + ";" +
"--text:" + text + ";--beforehover:" + beforehover + ";--modal:" +
modal + ";--thirdColor:" + subcolor + ";--subcolor:" + subcolor +
";--bottom:" + bottom + ";--accent:" + emphasized + ";" +
"--subcolor:" + secondary + ";--emphasized:" + active + ";--his-data:" +
secondary +
";--active:" + active + ";--postbox:" + postbox + ";--modalfooter:" +
primary +
";--active:" + subcolor + ";--selected:" + selected + ";--selectedWithShare:" + selectedWithShare + "}" +
"--gray:" + gray + ";" +
".customtheme #imagemodal{background: url(\"../img/pixel.svg\");}";
return css
}
ipc.on('theme-json-list', function (e, arg) {
var files1 = fs.readdirSync(join(app.getAppPath(), '/source/themes'))
var file1List = files1.filter(function (file) {
if (file.match(/\.thedesktheme$/)) {
var tfile = join(app.getAppPath(), '/source/themes', file)
return fs.statSync(tfile).isFile() && /.*\.thedesktheme$/.test(tfile)
} else {
return null
}
})
var themes = [];
for (var i = 0; i < file1List.length; i++) {
var themecss = join(app.getAppPath(), '/source/themes', file1List[i]);
var json = JSON5.parse(fs.readFileSync(themecss, 'utf8'));
let compat = true
if (json.version) compat = false
themes.push({
name: json.name,
id: json.id,
compatible: compat,
default: true
})
}
var files2 = fs.readdirSync(app.getPath("userData"))
var file2List = files2.filter(function (file) {
if (file.match(/\.thedesktheme$/)) {
var tfile = join(app.getPath("userData"), file)
return fs.statSync(tfile).isFile() && /.*\.thedesktheme$/.test(tfile)
} else {
return null
}
})
for (var i = 0; i < file2List.length; i++) {
var themecss = join(app.getPath("userData"), file2List[i]);
var json = JSON5.parse(fs.readFileSync(themecss, 'utf8'));
let compat = true
if (json.version) compat = false
themes.push({
name: json.name,
id: json.id,
compatible: compat,
default: false
})
}
e.sender.webContents.send('theme-json-list-response', themes);
}) })
} }
exports.css = css; exports.css = css;

View File

@@ -28,6 +28,7 @@ function dl(mainWindow, lang_path, base, dirname) {
show: false show: false
}) })
var lang = fs.readFileSync(lang_path, 'utf8') var lang = fs.readFileSync(lang_path, 'utf8')
//updatewin.toggleDevTools()
updatewin.loadURL(base + lang + '/update.html') updatewin.loadURL(base + lang + '/update.html')
updatewin.webContents.once('dom-ready', () => { updatewin.webContents.once('dom-ready', () => {
updatewin.show() updatewin.show()

View File

@@ -1,5 +1,5 @@
// Create the Application's main menu // Create the Application's main menu
function templete(lang, mainWindow, packaged, dir, dirname, frame) { function templete(lang, mainWindow, packaged, dir, dirname) {
//フレーム //フレーム
if(lang !="ja" && lang != "en"){ if(lang !="ja" && lang != "en"){
lang = "en" lang = "en"
@@ -9,11 +9,6 @@ function templete(lang, mainWindow, packaged, dir, dirname, frame) {
const app = electron.app; const app = electron.app;
const BrowserWindow = electron.BrowserWindow; const BrowserWindow = electron.BrowserWindow;
const join = require('path').join; const join = require('path').join;
ipc.on("frameCheck", function(e, arg) {
if(!frame) {
e.sender.webContents.send("frame", "");
}
});
const dict = { const dict = {
"application": { "application": {
"ja": "アプリケーション", "ja": "アプリケーション",

View File

@@ -1,13 +1,24 @@
const { execSync } = require('child_process')
const { join } = require('path')
function np(mainWindow) { function np(mainWindow) {
var platform = process.platform
if (platform !== 'darwin') return false
const electron = require('electron') const electron = require('electron')
const ipc = electron.ipcMain const ipc = electron.ipcMain
ipc.on('itunes', async (e, args) => { ipc.on('itunes', async (e, args) => {
console.log('Access') console.log('Access')
if (args[0] == 'set') { if (args == 'anynp') {
const dir = join(__dirname, "..", "main", "script", "macOSNP.scpt").replace("app.asar","app.asar.unpacked")
const stdout = execSync(`osascript ${dir}`).toString()
const title = stdout.substring(0, stdout.length - 100).match(/"(.+)?"/)[1].replace('\"','"')
const ret = {
title: title,
anynp: true
}
e.sender.webContents.send('itunes-np', ret)
} else { } else {
var platform = process.platform
var bit = process.arch
if (platform == 'darwin') {
try { try {
const nowplaying = require('itunes-nowplaying-mac') const nowplaying = require('itunes-nowplaying-mac')
let value = await nowplaying() let value = await nowplaying()
@@ -27,8 +38,6 @@ function np(mainWindow) {
console.error(error) console.error(error)
e.sender.webContents.send('itunes-np', error) e.sender.webContents.send('itunes-np', error)
} }
} else {
}
} }
}) })

Binary file not shown.

Binary file not shown.

View File

@@ -188,8 +188,8 @@ function system(mainWindow, dir, lang, dirname) {
}) })
function mems() { function mems() {
var mem = os.totalmem() - os.freemem() var mem = os.totalmem() - os.freemem()
if (mainWindow) { if (mainWindow && event.webContents) {
event.webContents.send('memory', [mem, os.cpus()[0].model, os.totalmem()]) event.webContents.send('memory', [mem, os.cpus()[0].model, os.totalmem(), os.cpus().length, os.uptime()])
} }
} }
ipc.on('endmem', (e, arg) => { ipc.on('endmem', (e, arg) => {

View File

@@ -1,5 +1,4 @@
[ [
"TheDeskは自称ステイホームの必須アイテム",
"あと数秒でPCのファンが全力で回り始める", "あと数秒でPCのファンが全力で回り始める",
"カラムの数だけ夢があるがネットワークは逼迫する", "カラムの数だけ夢があるがネットワークは逼迫する",
"朝起きたらストリーミングが止まっていた…", "朝起きたらストリーミングが止まっていた…",
@@ -50,5 +49,11 @@
"N押すとトゥートのボックスが出て、すぐ打ち込める。", "N押すとトゥートのボックスが出て、すぐ打ち込める。",
"Xを押すとトゥートのボックスは出るけど、打ち込めない。その代わりもう一度押すと消せる。", "Xを押すとトゥートのボックスは出るけど、打ち込めない。その代わりもう一度押すと消せる。",
"トゥートした後ボックスを閉じるとかそのままにしておくとかは、設定で変えられます。", "トゥートした後ボックスを閉じるとかそのままにしておくとかは、設定で変えられます。",
"OpenStickerへの登録データ募集中" "OpenStickerへの登録データ募集中",
] "Microsoft Store版のアップデートは向こうに止められてます",
"いのちの輝き版ロゴ",
"いのちの輝き版ロゴ",
"いのちの輝き版ロゴ",
"いのちの輝き版ロゴ",
"いのちの輝き版ロゴ"
]

View File

@@ -6,6 +6,7 @@
<link href="./css/tl.css" type="text/css" rel="stylesheet" /> <link href="./css/tl.css" type="text/css" rel="stylesheet" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" /> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />
<link href="./node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet"> <link href="./node_modules/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="./node_modules/grapheme-splitter/index.js"></script>
<title>TheDesk Nano</title> <title>TheDesk Nano</title>
<style> <style>
html { html {
@@ -15,7 +16,7 @@
height: 100vh; height: 100vh;
overflow: hidden; overflow: hidden;
font-family: sans-serif; font-family: sans-serif;
color: var(--color) !important; color: var(--text) !important;
} }
body { body {
@@ -44,7 +45,7 @@
textarea { textarea {
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
color: var(--color) !important; color: var(--text) !important;
} }
::-webkit-scrollbar { ::-webkit-scrollbar {
@@ -82,12 +83,16 @@
.cvo { .cvo {
grid-template-rows: auto 1rem 1fr auto 2rem; grid-template-rows: auto 1rem 1fr auto 2rem;
} }
.voice {
display: none;
}
</style> </style>
</head> </head>
<body> <body>
<script type="text/javascript" src="./node_modules/jquery/dist/jquery.js"></script> <script type="text/javascript" src="./node_modules/jquery/dist/jquery.js"></script>
<script> <script>
var pwa = false
$.strip_tags = function(str, allowed) { $.strip_tags = function(str, allowed) {
if (!str) { if (!str) {
return ""; return "";
@@ -141,7 +146,7 @@
} }
</script> </script>
<script src="https://twemoji.maxcdn.com/2/twemoji.min.js?2.7"></script> <script src="https://twemoji.maxcdn.com/2/twemoji.min.js?2.7"></script>
<script type="text/javascript" src="view/en/main.js"></script> <script type="text/javascript" src="./js/platform/first.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/post.js"></script> <script type="text/javascript" src="./js/post/post.js"></script>
<script type="text/javascript" src="./js/post/use-txtbox.js"></script> <script type="text/javascript" src="./js/post/use-txtbox.js"></script>

View File

@@ -75,7 +75,7 @@
</head> </head>
<body class="center" style="overflow: hidden;"> <body class="center" style="overflow: hidden;">
<img src="./img/desk-animation.svg" style="max-width: 62%;" /> <img src="./img/desk-animation.svg" id="leader" style="max-width: 62%;" />
<h1>TheDesk</h1> <h1>TheDesk</h1>
<span id="ver"></span><br /> <span id="ver"></span><br />
<span class="loading"></span><br /> <span class="loading"></span><br />
@@ -84,11 +84,12 @@
<script> <script>
if (location.search) { if (location.search) {
var m = location.search.match(/\?ver=([0-9.]+)&codename=([a-zA-Z]+)&maxim=(.+)/) var m = location.search.match(/\?ver=([0-9.]+)&codename=([a-zA-Z]+)&maxim=(.+)/)
var maxim = decodeURI(m[3])
if(maxim == 'いのちの輝き版ロゴ') document.getElementById('leader').setAttribute('src', './img/2025.svg')
var ver = m[1] var ver = m[1]
var code = m[2] var code = m[2]
var maxim = m[3]
document.getElementById('ver').innerText = `${ver}(${code})` document.getElementById('ver').innerText = `${ver}(${code})`
document.getElementById('maxim').innerText = `${decodeURI(maxim)}` document.getElementById('maxim').innerText = maxim
} }
</script> </script>
</div> </div>

View File

@@ -1,21 +1,28 @@
{ {
"name": "thedesk", "name": "thedesk",
"version": "21.0.5", "version": "22.1.0",
"codename": "Mayu", "codename": "Koume",
"description": "TheDesk is a Mastodon client for PC.", "description": "TheDesk is a Mastodon client for PC.",
"repository": "https://github.com/cutls/TheDesk", "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 --automatic && cd ../../", "construct": "cd view/make && node make --automatic && cd ../../ && browserify aiscript.js -o js/platform/aiscript.js",
"construct:store": "cd view/make && node make --automatic --store && cd ../../ && browserify aiscript.js -o js/platform/aiscript.js",
"dev": "npx electron ./ --dev", "dev": "npx electron ./ --dev",
"dist": "build --linux snap", "dist": "build --linux snap",
"watchview": "node view/make/make.js --automatic --watch", "watchview": "node view/make/make.js --automatic --watch",
"build:js": "node build.js", "build:js": "node build.js",
"build": "node view/make/make.js --automatic && npx electron-builder", "build": "node view/make/make.js --automatic && npx electron-builder",
"build:all": "npx electron-builder --win --linux", "build:pwa": "node view/make/make.js --automatic --pwa",
"build:win": "npx electron-builder --win", "build:win:web": "node view/make/make.js --automatic && npx electron-builder --win",
"build:pwa": "node view/make/make.js --automatic --pwa" "build:win:msstore": "node view/make/make.js --automatic --store && npx electron-builder --win appx",
"build:linux:web": "node view/make/make.js --automatic && npx electron-builder --linux",
"build:linux:snapstore": "node view/make/make.js --automatic --store && npx electron-builder --linux",
"build:mac:web": "node view/make/make.js --automatic && npx electron-builder --mac",
"build:mac:homebrew": "node view/make/make.js --automatic --store && npx electron-builder --mac",
"lint:fix": "eslint js --fix",
"lint": "eslint js"
}, },
"keywords": [ "keywords": [
"mastodon", "mastodon",
@@ -33,7 +40,8 @@
"url": "https://cutls.dev", "url": "https://cutls.dev",
"email": "p@cutls.com" "email": "p@cutls.com"
}, },
"contributor": [{ "contributor": [
{
"name": "とねぢ", "name": "とねぢ",
"url": "https://minohdon.jp/@toneji", "url": "https://minohdon.jp/@toneji",
"email": "solfa.tono@gmail.com" "email": "solfa.tono@gmail.com"
@@ -51,35 +59,39 @@
], ],
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-free": "^5.14.0", "@fortawesome/fontawesome-free": "^5.15.2",
"custom-electron-titlebar": "^3.2.3", "@syuilo/aiscript": "^0.11.1",
"electron-dl": "^3.0.1", "electron-dl": "^3.0.2",
"jimp": "^0.14.0", "jimp": "^0.16.1",
"jquery": "^3.5.1", "jquery": "^3.5.1",
"jquery-ui-dist": "^1.12.1", "jquery-ui-dist": "^1.12.1",
"json5": "^2.1.3", "json5": "^2.2.0",
"lodash": "^4.17.19", "lodash": "^4.17.20",
"materialize-css": "git://github.com/cutls/materialize#v1-dev", "materialize-css": "git://github.com/cutls/materialize#v1-dev",
"sanitize-html": "^2.3.2",
"sumchecker": "^3.0.1", "sumchecker": "^3.0.1",
"sweetalert2": "^9.17.0", "sweetalert2": "^10.14.0",
"system-font-families": "^0.4.1", "system-font-families": "^0.4.1",
"vue": "^2.6.11" "vue": "^2.6.12"
}, },
"optionalDependencies": { "optionalDependencies": {
"itunes-nowplaying-mac": "0.3.1" "itunes-nowplaying-mac": "0.3.1"
}, },
"devDependencies": { "devDependencies": {
"chokidar": "^3.4.1", "browserify": "^17.0.0",
"electron": "^9.1.1", "chokidar": "^3.5.1",
"electron-builder": "^22.7.0", "electron": "^10.1.5",
"electron-rebuild": "^1.11.0", "electron-builder": "^22.9.1",
"electron-rebuild": "^2.3.2",
"eslint": "^7.13.0",
"readline-sync": "1.4.10" "readline-sync": "1.4.10"
}, },
"build": { "build": {
"productName": "TheDesk", "productName": "TheDesk",
"appId": "top.thedesk", "appId": "top.thedesk",
"asarUnpack": [ "asarUnpack": [
"node_modules/itunes-nowplaying-mac" "node_modules/itunes-nowplaying-mac",
"main/script"
], ],
"directories": { "directories": {
"output": "../build" "output": "../build"
@@ -88,8 +100,8 @@
"icon": "build/thedesk.ico", "icon": "build/thedesk.ico",
"target": [ "target": [
"nsis", "nsis",
"portable", "appx",
"appx" "portable"
] ]
}, },
"appx": { "appx": {
@@ -111,6 +123,7 @@
"icon": "build/icons", "icon": "build/icons",
"target": [ "target": [
"zip", "zip",
"appImage",
"snap", "snap",
"deb" "deb"
], ],
@@ -127,4 +140,4 @@
}, },
"electronVersion": "9.0.5" "electronVersion": "9.0.5"
} }
} }

BIN
app/source/bubble.wav Normal file

Binary file not shown.

View File

@@ -0,0 +1,27 @@
{
name: 'Black',
author: 'TheDesk',
desc: 'TheDesk Default Theme',
base: 'dark',
primary: {
background: '#212121',
subcolor: '#424242',
text: '#fff',
accent: '#004d40',
},
advanced: {
modal: '#000',
modalFooter: '#212121',
third: '#212121',
forth: '#333333',
bottom: '#424242',
emphasized: '#4e342e',
postbox: '#424242',
active: '#3f51b5',
selected: '#3f3f3f',
selectedWithShared: '#003a30',
},
id: 'black',
version: '2',
default: true
}

View File

@@ -0,0 +1,27 @@
{
name: 'Blue',
author: 'TheDesk',
desc: 'TheDesk Default Theme',
base: 'light',
primary: {
background: '#c9e1ec',
subcolor: '#dff1ff',
text: '#000',
accent: '#e0ffe4',
},
advanced: {
modal: '#b2ebf2',
modalFooter: '#2196f3',
third: '#90caf9',
forth: '#90caf9',
bottom: '#b6e6f5',
emphasized: '#c5e1a5',
postbox: '#dff1ff',
active: '#2f7bb7',
selected: '#9dcade',
selectedWithShared: '#c1dac4',
},
id: 'blue',
version: '2',
default: true
}

View File

@@ -0,0 +1,27 @@
{
name: 'Brown',
author: 'TheDesk',
desc: 'TheDesk Default Theme',
base: 'dark',
primary: {
background: '#261411',
subcolor: '#4e342e',
text: '#fff',
accent: '#004d40',
},
advanced: {
modal: '#261411',
modalFooter: '#261411',
third: '#4e342e',
forth: '#4e342e',
bottom: '#4e342e',
emphasized: '#0d47a1',
postbox: '#4e342e',
active: '#827717',
selected: '#6d352b',
selectedWithShared: '#003a30',
},
id: 'brown',
version: '2',
default: true
}

View File

@@ -0,0 +1,27 @@
{
name: 'Green',
author: 'TheDesk',
desc: 'TheDesk Default Theme',
base: 'light',
primary: {
background: '#c8e6c9',
subcolor: '#a5d6a7',
text: '#000',
accent: '#ffcc80',
},
advanced: {
modal: '#81c784',
modalFooter: '#81c784',
third: '#a5d6a7',
forth: '#81c784',
bottom: '#c5e1a5',
emphasized: '#9e9d24',
postbox: '#a5d6a7',
active: '#33691e',
selected: '#78c17a',
selectedWithShared: '#caa266',
},
id: 'green',
version: '2',
default: true
}

View File

@@ -0,0 +1,27 @@
{
name: 'Indigo',
author: 'TheDesk',
desc: 'TheDesk Default Theme',
base: 'dark',
primary: {
background: '#031833',
subcolor: '#1a237e',
text: '#fff',
accent: '#004d40',
},
advanced: {
modal: '#0d1351',
modalFooter: '#031833',
third: '#0d1351',
forth: '#0d47a1',
bottom: '#0d1351',
emphasized: '#4e342e',
postbox: '#1a237e',
active: '#00acc1',
selected: '#214f8a',
selectedWithShared: '#003a30',
},
id: 'indigo',
version: '2',
default: true
}

View File

@@ -0,0 +1,27 @@
{
name: 'Polar Night',
author: 'TheDesk',
desc: 'TheDesk Default Theme',
base: 'dark',
primary: {
background: '#2e3440',
subcolor: '#434c5e',
text: '#ffffff',
accent: '#2d3b58',
},
advanced: {
modal: '#3b4252',
modalFooter: '#485166',
third: '#434c5e',
forth: '#4c566a',
bottom: '#3b4252',
emphasized: '#2f4b86',
postbox: '#434c5e',
active: '#2f4b86',
selected: '#464f61',
selectedWithShared: '#3e527e',
},
id: 'polar',
version: '2',
default: true
}

View File

@@ -0,0 +1,27 @@
{
name: 'Snow Storm',
author: 'TheDesk',
desc: 'TheDesk Default Theme',
base: 'light',
primary: {
background: '#eceff4',
subcolor: '#d8dee9',
text: '#36425a',
accent: '#c3d4e6',
},
advanced: {
modal: '#e5e9f0',
modalFooter: '#b2bed4',
third: '#d8dee9',
forth: '#4c566a',
bottom: '#eeeeee',
emphasized: '#88c0d0',
postbox: '#d8dee9',
active: '#81a1c1',
selected: '#b4bdd0',
selectedWithShared: '#a3afbb',
},
id: 'snow',
version: '2',
default: true
}

View File

@@ -0,0 +1,27 @@
{
name: 'White',
author: 'TheDesk',
desc: 'TheDesk Default Theme',
base: 'light',
primary: {
background: '#fff',
subcolor: '#fff',
text: '#000',
accent: '#cfd8dc',
},
advanced: {
modal: '#fff',
modalFooter: '#fafafa',
third: '#e0e0e0',
forth: '#fff',
bottom: '#eeeeee',
emphasized: '#81c784',
postbox: '#fff',
active: '#009688',
selected: '#c0c0c0',
selectedWithShared: '#b2babd',
},
id: 'white',
version: '2',
default: true
}

View File

@@ -1,5 +1,7 @@
{ {
"latest":[], "latest":[],
"3.2.0": [],
"3.1.5": [],
"3.1.4": [ "3.1.4": [
"リモート限定の連合タイムライン" "リモート限定の連合タイムライン"
], ],

View File

@@ -1,154 +1,133 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="@@lang@@"> <html lang="@@lang@@">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link
href="../../@@node_base@@/materialize-css/dist/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/tl.css" rel="stylesheet" type="text/css" />
<link href="../../css/userdata.css" rel="stylesheet" type="text/css" />
<link
href="../../@@node_base@@/@fortawesome/fontawesome-free/css/all.min.css"
type="text/css"
rel="stylesheet"
/>
<link href="../../css/acct.css" rel="stylesheet" type="text/css" />
<meta charset="utf-8" />
@@comment-start@@
<script type="text/javascript">
var _jipt = []
_jipt.push(['project', 'thedesk'])
</script>
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
@@comment-end@@
@@pwa@@
</head>
<body id="mainView" class="@@pwaClass@@"> <head>
<script type="text/javascript" src="../../@@node_base@@/jquery/dist/jquery.js"></script> <title>Account Manager - TheDesk</title>
<script type="text/javascript" src="../../js/platform/first.js"></script> <meta content="width=device-width,initial-scale=1.0" name="viewport" />
<script <link href="../../css/themes.css" type="text/css" rel="stylesheet">
type="text/javascript" <link href="../../@@node_base@@/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet" />
src="../../@@node_base@@/materialize-css/dist/js/materialize.js" <link href="../../css/master.css" type="text/css" rel="stylesheet" />
></script> <link href="../../css/tl.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="main.js"></script> <link href="../../css/userdata.css" rel="stylesheet" type="text/css" />
<script <link href="../../@@node_base@@/@fortawesome/fontawesome-free/css/all.min.css" type="text/css" rel="stylesheet" />
type="text/javascript" <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
src="../../@@node_base@@/sweetalert2/dist/sweetalert2.all.min.js" <link href="../../css/acct.css" rel="stylesheet" type="text/css" />
></script> <meta charset="utf-8" />
<script> @@comment-start@@
var misskeytoken = false <script type="text/javascript">
</script> var _jipt = []
<script type="text/javascript" src="../../js/common/time.js"></script> _jipt.push(['project', 'thedesk'])
<div class="hide-first"> </script>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;" <script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
>@@back@@</a @@comment-end@@
><br /> @@pwa@@ @@store@@
<h5>@@list@@</h5> </head>
<div id="acct-list"></div>
<div class="divider"></div> <body id="mainView" class="@@pwaClass@@">
</div> <script type="text/javascript" src="../../@@node_base@@/jquery/dist/jquery.js"></script>
<div class="hide-second"> <script type="text/javascript" src="../../js/platform/first.js"></script>
<a href="setting.html">@@haveExported@@</a> <script type="text/javascript" src="../../@@node_base@@/materialize-css/dist/js/materialize.js"></script>
</div> <script type="text/javascript" src="main.js"></script>
<div> <script type="text/javascript" src="../../@@node_base@@/sweetalert2/dist/sweetalert2.all.min.js"></script>
<h5>@@add@@</h5> <script>
<br /> var misskeytoken = false
<div id="add"> </script>
<div class="row"> <script type="text/javascript" src="../../js/common/time.js"></script>
<div class="col s8"> <div class="hide-first">
@@addAcct@@<br /> <a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">@@back@@</a><br />
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp" /> <h5>@@list@@</h5>
<div id="ins-suggest"></div> <div id="acct-list"></div>
<button class="btn waves-effect" onclick="instance()">Login</button><br /> <div class="divider"></div>
<div class="pwa"> </div>
@@codesetupwarn@@<br /> <div class="hide-second">
<label> <a href="setting.html">@@haveExported@@</a>
<input type="checkbox" class="filled-in" id="linux" /> </div>
<span>@@codesetup@@</span> <div>
</label> <h5>@@add@@</h5>
<br /> <br />
</div> <div id="add">
<div class="row">
<div class="col s8">
@@addAcct@@<br />
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp" />
<div id="ins-suggest"></div>
<button class="btn waves-effect" onclick="instance()">Login</button><br />
<div class="pwa">
@@codesetupwarn@@<br />
<label> <label>
<input type="checkbox" class="filled-in" id="misskey" /> <input type="checkbox" class="filled-in" id="linux" />
<span>@@thisismisskey@@</span> </label <span>@@codesetup@@</span>
><br /> </label>
</div> <br />
<div class="col s4 scr" aria-hidden="true">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div> </div>
<label>
<input type="checkbox" class="filled-in" id="misskey" />
<span>@@thisismisskey@@</span> </label><br />
</div>
<div class="col s4 scr" aria-hidden="true">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div> </div>
</div> </div>
<div id="auth" style="display:none"> </div>
@@codepastewarn@@<br /> <div id="auth" style="display:none">
<input type="text" id="code" placeholder="@@codepaste@@" required /> @@codepastewarn@@<br />
<button class="btn waves-effect" onclick="code()">Auth</button><br /> <input type="text" id="code" placeholder="@@codepaste@@" required />
<br /> <button class="btn waves-effect" onclick="code()">Auth</button><br />
<a onclick="atSetup()" class="pointer">@@accessTokenSetup@@</a> <br />
<div id="compt" style="display:none" class="scr"> <a onclick="atSetup()" class="pointer">@@accessTokenSetup@@</a>
<h5>ログイン前に必ずご確認ください</h5> <div id="compt" style="display:none" class="scr">
<span id="compt-instance"></span>はバージョンが<span id="compt-ver"></span <h5>ログイン前に必ずご確認ください</h5>
>のため以下の機能がご利用いただけません。 <span id="compt-instance"></span>はバージョンが<span id="compt-ver"></span>のため以下の機能がご利用いただけません。
<span id="compt-warn" style="display:none" <span id="compt-warn"
>また、このインスタンスはMastodonではなくそのAPI上の互換実装であり、TheDeskでは利用を想定していないため非保証となります。</span style="display:none">また、このインスタンスはMastodonではなくそのAPI上の互換実装であり、TheDeskでは利用を想定していないため非保証となります。</span>
> <ul id="compt-list"></ul>
<ul id="compt-list"></ul>
</div>
</div>
<div id="misskeylogin" style="display:none">
<h5>AppSecret</h5>
@@misskeylogin@@<br />
<input type="hidden" id="misskey-url" />
<input type="text" id="misskey-key" placeholder="@@codepaste@@" required />
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br />
<br />
<a onclick="atSetup('misskey')" class="pointer">@@accessTokenSetup@@</a>
</div> </div>
</div> </div>
<div class="hide-first"> <div id="misskeylogin" style="display:none">
<h5>@@mainacct@@</h5> <h5>AppSecret</h5>
<div class="input-field" style="width:300px"> @@misskeylogin@@<br />
<span data-trans="your_acct">@@selacct@@</span> <input type="hidden" id="misskey-url" />
<br /> <input type="text" id="misskey-key" placeholder="@@codepaste@@" required />
<select <button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br />
id="main-acct-sel" <br />
class="acct-sel" <a onclick="atSetup('misskey')" class="pointer">@@accessTokenSetup@@</a>
style="color:black"
onchange="mainacct()"
></select>
<label></label>
</div>
<ul id="domain-list" class="collection transparent"></ul>
<div id="instance-data">
Some instance data by
<a href="https://instances.social" target="_blank">instances.social API</a><br />
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br />
<span id="ins-desc"></span><br />
<img src="../../img/loading.svg" id="ins-prof" width="200" /><br />
<br />
@@domain@@:<span id="ins-name"></span><br />
@@connect@@:<span id="ins-connect"></span>@@ko@@<br />
@@toots@@:<span id="ins-toot"></span>@@ko@@<br />
@@users@@:<span id="ins-user"></span>@@users@@<br />
@@safety@@:<span id="ins-per"></span>%<br />
@@ver@@:<span id="ins-ver"></span>@<span id="ins-upd"></span><br />
</div>
</div> </div>
<script type="text/javascript" src="../../js/ui/theme.js"></script> </div>
<script type="text/javascript" src="../../js/ui/tips.js"></script> <div class="hide-first">
<script type="text/javascript" src="../../js/platform/end.js"></script> <h5>@@mainacct@@</h5>
<script type="text/javascript" src="../../js/common/sha256.js"></script> <div class="input-field" style="width:300px">
<script type="text/javascript" src="../../@@node_base@@/lodash/lodash.min.js"></script> <span data-trans="your_acct">@@selacct@@</span>
<script type="text/javascript" src="../../js/login/instance.js"></script> <br />
<script type="text/javascript" src="../../js/login/manager.js"></script> <select id="main-acct-sel" class="acct-sel" style="color:black" onchange="mainacct()"></select>
<script type="text/javascript" src="../../js/tl/date.js"></script> <label></label>
<script>$('body').addClass(localStorage.getItem('platform'))</script> </div>
</body> <ul id="domain-list" class="collection transparent"></ul>
</html> <div id="instance-data">
Some instance data by
<a href="https://instances.social" target="_blank">instances.social API</a><br />
<h5 id="ins-title"></h5>
Administered by:<a id="ins-admin"></a><br />
<span id="ins-desc"></span><br />
<img src="../../img/loading.svg" id="ins-prof" width="200" /><br />
<br />
@@domain@@:<span id="ins-name"></span><br />
@@connect@@:<span id="ins-connect"></span>@@ko@@<br />
@@toots@@:<span id="ins-toot"></span>@@ko@@<br />
@@users@@:<span id="ins-user"></span>@@users@@<br />
@@safety@@:<span id="ins-per"></span>%<br />
@@ver@@:<span id="ins-ver"></span>@<span id="ins-upd"></span><br />
</div>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/ui/tips.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="../../@@node_base@@/lodash/lodash.min.js"></script>
<script type="text/javascript" src="../../js/login/instance.js"></script>
<script type="text/javascript" src="../../js/login/manager.js"></script>
<script type="text/javascript" src="../../js/tl/date.js"></script>
<script>$('body').addClass(localStorage.getItem('platform'))</script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,7 @@
{ {
"draghere": "Drag here to upload", "draghere": "Drag here to upload",
"nowOffline": "OFFLINE: all of your post is in the draft box and you should reload after re-connect to the Internet",
"reOnline": "Now we are in the Internet, you should reload...",
"close": "Close", "close": "Close",
"webSrc": "Search on Web", "webSrc": "Search on Web",
"tsSrc": "Search on tootsearch", "tsSrc": "Search on tootsearch",
@@ -45,6 +47,7 @@
"thingsEmoji": "Emojis of tools", "thingsEmoji": "Emojis of tools",
"symbolEmoji": "Emojis of symbols", "symbolEmoji": "Emojis of symbols",
"flagsEmoji": "Emojis of flags", "flagsEmoji": "Emojis of flags",
"draft": "Draft",
"poll": "Poll", "poll": "Poll",
"pollDdisabled": "Polls: Disabled", "pollDdisabled": "Polls: Disabled",
"pollProvider": "Provider of Poll", "pollProvider": "Provider of Poll",
@@ -130,7 +133,7 @@
"notf": "Notifications", "notf": "Notifications",
"bookmark": "Bookmarks", "bookmark": "Bookmarks",
"showThisTL": "Show this TL:", "showThisTL": "Show this TL:",
"webviewWarn": "TweetDeck with customed TJDeck(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>). Keyboard shortcuts will irritate you. When you feel so, you check 'Prefer WebView' on top of the column.", "webviewWarn": "TweetDeck with customed TJDeck(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>).",
"add": "Add", "add": "Add",
"search": "Search", "search": "Search",
"sortSet": "Sort", "sortSet": "Sort",

View File

@@ -49,6 +49,7 @@
"lang_manager_godev": "Open DevCenter of Misskey. We show also an official documents to refer.", "lang_manager_godev": "Open DevCenter of Misskey. We show also an official documents to refer.",
"lang_manager_logout": "Logout", "lang_manager_logout": "Logout",
"lang_manager_maxChars": "Max chars of toots", "lang_manager_maxChars": "Max chars of toots",
"lang_manager_refreshAt": "Login with this domain",
"lang_bbmd_misskey": "TheDesk regards \"@\" as reply, but put other parameter. Unlisted on Mastodon means Home on Misskey.", "lang_bbmd_misskey": "TheDesk regards \"@\" as reply, but put other parameter. Unlisted on Mastodon means Home on Misskey.",
"lang_emoji_get": "Get emojis", "lang_emoji_get": "Get emojis",
"lang_emoji_custom": "Custom emojis", "lang_emoji_custom": "Custom emojis",
@@ -71,6 +72,7 @@
"lang_post_btn3": "Continue to post", "lang_post_btn3": "Continue to post",
"lang_post_unfinishedMedia": "The server has not finished processing your media. Retry.", "lang_post_unfinishedMedia": "The server has not finished processing your media. Retry.",
"lang_post_retry": "Retry", "lang_post_retry": "Retry",
"lang_post_offline": "Add to the drafts because of offline",
"lang_status_favWarn": "It will take a miunte to favourite a remote toot.", "lang_status_favWarn": "It will take a miunte to favourite a remote toot.",
"lang_status_btWarn": "It will take a miunte to boost a remote toot.", "lang_status_btWarn": "It will take a miunte to boost a remote toot.",
"lang_status_follow": "Follow", "lang_status_follow": "Follow",
@@ -87,6 +89,9 @@
"lang_status_endorse": "Feature on profile", "lang_status_endorse": "Feature on profile",
"lang_status_followers": "Followers", "lang_status_followers": "Followers",
"lang_status_active": "Last status", "lang_status_active": "Last status",
"lang_secure_draft": "Add to draft",
"lang_secure_useThis": "Use this",
"lang_secure_deleteThis": "Delete this",
"lang_suggest_nodata": "Please get emojis list in order to show suggestion.", "lang_suggest_nodata": "Please get emojis list in order to show suggestion.",
"lang_usetxtbox_reply": "Reply Mode. Ctrl+Shift+C to clear.", "lang_usetxtbox_reply": "Reply Mode. Ctrl+Shift+C to clear.",
"lang_cards_check": " check", "lang_cards_check": " check",
@@ -131,13 +136,17 @@
"lang_layout_linkana": "Auto Link Analyzer", "lang_layout_linkana": "Auto Link Analyzer",
"lang_layout_linkanades": "Auto link analyzer", "lang_layout_linkanades": "Auto link analyzer",
"lang_layout_tts": "Text to speech ", "lang_layout_tts": "Text to speech ",
"lang_layout_reconnect": "Reload this column", "lang_layout_reconnect": "Reload",
"lang_layout_headercolor": "Header color of this column", "lang_layout_headercolor": "Header color of this column",
"lang_layout_nodata": "[No data]<br>F5/⌘+R to reload", "lang_layout_nodata": "[No data]<br>F5/⌘+R to reload",
"lang_layout_dm": "Direct Message", "lang_layout_dm": "Direct Message",
"lang_layout_webviewmode": "Prefer WebView", "lang_layout_webviewmode": "Prefer WebView",
"lang_excluded": "Excluded type of notification", "lang_layout_excluded": "Excluded type of notification",
"lang_layout_excludingbt": "Show BT mode(OFF/Exclude BT/Only BT)", "lang_layout_mention": "Mentions",
"lang_layout_fav": "Favourites",
"lang_layout_bt": "Boosts",
"lang_layout_poll": "Polls",
"lang_layout_excludingbt": "Show BT mode",
"lang_layout_leftFold": "Stack to the left", "lang_layout_leftFold": "Stack to the left",
"lang_layout_leftUnfold": "Dock on the right", "lang_layout_leftUnfold": "Dock on the right",
"lang_layout_deleteColumn": "Delete this column", "lang_layout_deleteColumn": "Delete this column",
@@ -145,6 +154,7 @@
"lang_layout_unread": "Unread", "lang_layout_unread": "Unread",
"lang_layout_tagManager": "Tag timeline manager", "lang_layout_tagManager": "Tag timeline manager",
"lang_layout_announ": "Announcement: the counter is the number of your unread announcements. If not shown, it means announcements are all marked as read.", "lang_layout_announ": "Announcement: the counter is the number of your unread announcements. If not shown, it means announcements are all marked as read.",
"lang_layout_resetWidth": "Stretch this column",
"lang_sort_gothis": "Go to this column", "lang_sort_gothis": "Go to this column",
"lang_sort_remthis": "Delete this column", "lang_sort_remthis": "Delete this column",
"lang_spotify_img": "Attach an album artwork", "lang_spotify_img": "Attach an album artwork",
@@ -222,6 +232,7 @@
"lang_parse_html": "Show embed HTML", "lang_parse_html": "Show embed HTML",
"lang_parse_notffilter": "Show this user's notifications", "lang_parse_notffilter": "Show this user's notifications",
"lang_parse_hidden": "Unvisible quoted toot", "lang_parse_hidden": "Unvisible quoted toot",
"lang_parse_disconnected": "Streaming has been disconnected(retry after 3s)",
"lang_misskeyparse_renote": "Repost", "lang_misskeyparse_renote": "Repost",
"lang_misskeyparse_renoteqt": "Renote", "lang_misskeyparse_renoteqt": "Renote",
"lang_misskeyparse_reaction": "Reaction", "lang_misskeyparse_reaction": "Reaction",
@@ -236,6 +247,7 @@
"lang_misskeyparse_reacted": " reacted your following post.", "lang_misskeyparse_reacted": " reacted your following post.",
"lang_setting_time": "Time format:{{set}}", "lang_setting_time": "Time format:{{set}}",
"lang_setting_theme": "Theme:{{set}}", "lang_setting_theme": "Theme:{{set}}",
"lang_setting_compat": "Compatible",
"lang_setting_nsfw": "Sensitive media:{{set}}", "lang_setting_nsfw": "Sensitive media:{{set}}",
"lang_setting_cw": "CW:{{set}}", "lang_setting_cw": "CW:{{set}}",
"lang_setting_cwtext": "Default CW text:{{set}}", "lang_setting_cwtext": "Default CW text:{{set}}",

View File

@@ -24,10 +24,11 @@
"nativenotf": "Native notification", "nativenotf": "Native notification",
"nnwarn": "This does not work on Windows Portable ver.", "nnwarn": "This does not work on Windows Portable ver.",
"nntest": "Notification test", "nntest": "Notification test",
"minwidth": "Minimum width of columns", "width": "Width of columns",
"minwidthwarn": "Scroll bar will be shown when your window size is more than ammounts of columns.", "widthwarn": "Scroll bar will be shown when your window size is more than ammounts of columns.",
"fixwidth": "Minimum width of TweetDeck browser", "fixwidth": "Minimum width of TweetDeck browser",
"fixwidthwarn": "", "fixwidthwarn": "",
"margin": "Margin between timelines",
"above": "above", "above": "above",
"font": "Font", "font": "Font",
"fontwarn": "Select your favorite font to 'Select'(Windows/ macOS only)", "fontwarn": "Select your favorite font to 'Select'(Windows/ macOS only)",
@@ -43,26 +44,31 @@
"srcUrl": "Search engine", "srcUrl": "Search engine",
"srcUrlWarn": "{q} will be replaced to query.", "srcUrlWarn": "{q} will be replaced to query.",
"themeSel": "Select theme", "themeSel": "Select theme",
"customtheme": "Edit and add custom themes", "customtheme": "Edit and add themes",
"customthemeDirection": "Color scheme", "customthemeDirection": "Color scheme",
"advanced": "Advanced options(6 additional colors)", "advanced": "Advanced options",
"advancedWarn": "Advanced options will be <i>null</i> if you set nothing, while basic 3 options will be white(<i>fff</i>). They(adv. options) will be reset if you saved with advanced panel closed.", "advancedWarn": "",
"active": "Background of Show or CW buttons, selected options...", "use": "Use this",
"modal": "Background of modals", "copyFrom": "Copy from",
"bottom": "Background of bottom bar", "bg": "Background color",
"postbox": "Background of post box and menu", "subcolor": "Distinguishable from background",
"subcolor": "Subcolor, has harmony with secondary color",
"primary": "Background color",
"secondarycolor": "Background of components",
"text": "Text color", "text": "Text color",
"accent": "Background of boosts", "accent": "Background of boosts",
"modal": "Background of modal window",
"modalFooter": "Background of modal window's footer",
"thirdColor": "Backgroud of tag buttons, etc(near to Background)",
"forthColor": "Title bar(same scheme to Background)",
"bottom": "Background of menu-bar at bottom of window",
"emphasized": "Emphasized toot's background",
"postbox": "Background of post-box and menu",
"active": "Background of 'active' elements",
"selected": "Background of selected with arrow keys",
"selectedWithShare": "Background of selected with arrow keys(boosted toots)",
"add_new": "Add new", "add_new": "Add new",
"name": "Name", "name": "Name",
"desc": "About this theme", "desc": "About this theme",
"customShare": "Share this code with other TheDesk. Do not share this code with MiAS.",
"customImport": "Import of custom themes", "customImport": "Import of custom themes",
"delete": "Delete", "delete": "Delete",
"cImpWarn": "Get more themes on <a href=\"https://assets.msky.cafe/\" target=\"_blank\">MiAS</a>",
"timeline": "Timeline Preferences", "timeline": "Timeline Preferences",
"timemode": "Time format", "timemode": "Time format",
"relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"", "relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"",
@@ -101,8 +107,8 @@
"or": "or", "or": "or",
"imgheight": "Height of images", "imgheight": "Height of images",
"imgheightwarn": "Option:Set \"full\" to uncrop.", "imgheightwarn": "Option:Set \"full\" to uncrop.",
"ticker": "Enable #InstanceTicker", "ticker": "Enable OpenSticker",
"tickerwarn": "Show colorful stickers about the server. <a href=\"https://github.com/MiyonMiyon/InstanceTicker_List\">About #InstanceTicker</a> (c)2018-2020 MiyonMiyon. Released under the MIT License.", "tickerwarn": "Show the instance name and favicon of tooters <a href=\"https://opensticker.0px.io\">About OpenSticker</a>",
"animation": "Animation of timelines", "animation": "Animation of timelines",
"markers": "Markers(mark as read) on HTL and notifications", "markers": "Markers(mark as read) on HTL and notifications",
"markerswarn": "Mastodon 3.0~. Shared on WebUI and third-party supported clients.", "markerswarn": "Mastodon 3.0~. Shared on WebUI and third-party supported clients.",
@@ -136,6 +142,10 @@
"notqt": "Disabled(Hide buttons on TLs)", "notqt": "Disabled(Hide buttons on TLs)",
"apiQuote": "API(only some instances)", "apiQuote": "API(only some instances)",
"showBookmarkAction": "Show a bookmarking toot button", "showBookmarkAction": "Show a bookmarking toot button",
"scrollBar": "Height of the scroll bar",
"thin": "Thin",
"normal": "Normal",
"thick": "Thick",
"main": "Default accounts of actions", "main": "Default accounts of actions",
"mainwarn": "Main account can be set on Account Manager.", "mainwarn": "Main account can be set on Account Manager.",
"lastacct": "Account you used recently", "lastacct": "Account you used recently",
@@ -150,6 +160,9 @@
"keysc": "Keyboard shortcut Preferences", "keysc": "Keyboard shortcut Preferences",
"iks": "Easy inserter", "iks": "Easy inserter",
"okswarn": "You can insert any letters and emojis with only 3 keys", "okswarn": "You can insert any letters and emojis with only 3 keys",
"plugin": "Plugins",
"howToWritePlugin": "Japanese docs of AiScript TheDesk plugins",
"pluginList": "Plugin list",
"muteemp": "Mute & Emphasis Preferences", "muteemp": "Mute & Emphasis Preferences",
"climute": "Client Mute", "climute": "Client Mute",
"cliemp": "Client Emphasis", "cliemp": "Client Emphasis",

View File

@@ -1,5 +1,7 @@
{ {
"draghere": "Drag here to upload", "draghere": "Drag here to upload",
"nowOffline": "OFFLINE: all of your post is in the draft box and you should reload after re-connect to the Internet",
"reOnline": "Now we are in the Internet, you should reload...",
"close": "Close", "close": "Close",
"webSrc": "Search on Web", "webSrc": "Search on Web",
"tsSrc": "Search on tootsearch", "tsSrc": "Search on tootsearch",
@@ -45,6 +47,7 @@
"thingsEmoji": "Emojis of tools", "thingsEmoji": "Emojis of tools",
"symbolEmoji": "Emojis of symbols", "symbolEmoji": "Emojis of symbols",
"flagsEmoji": "Emojis of flags", "flagsEmoji": "Emojis of flags",
"draft": "Draft",
"poll": "Poll", "poll": "Poll",
"pollDdisabled": "Polls: Disabled", "pollDdisabled": "Polls: Disabled",
"pollProvider": "Provider of Poll", "pollProvider": "Provider of Poll",
@@ -130,7 +133,7 @@
"notf": "Notifications", "notf": "Notifications",
"bookmark": "Bookmarks", "bookmark": "Bookmarks",
"showThisTL": "Show this TL:", "showThisTL": "Show this TL:",
"webviewWarn": "TweetDeck with customed TJDeck(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>). Keyboard shortcuts will irritate you. When you feel so, you check 'Prefer WebView' on top of the column.", "webviewWarn": "TweetDeck with customed TJDeck(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>).",
"add": "Add", "add": "Add",
"search": "Search", "search": "Search",
"sortSet": "Sort", "sortSet": "Sort",

View File

@@ -49,6 +49,7 @@
"lang_manager_godev": "Open DevCenter of Misskey. We show also an official documents to refer.", "lang_manager_godev": "Open DevCenter of Misskey. We show also an official documents to refer.",
"lang_manager_logout": "Logout", "lang_manager_logout": "Logout",
"lang_manager_maxChars": "Max chars of toots", "lang_manager_maxChars": "Max chars of toots",
"lang_manager_refreshAt": "Login with this domain",
"lang_bbmd_misskey": "TheDesk regards \"@\" as reply, but put other parameter. Unlisted on Mastodon means Home on Misskey.", "lang_bbmd_misskey": "TheDesk regards \"@\" as reply, but put other parameter. Unlisted on Mastodon means Home on Misskey.",
"lang_emoji_get": "Get emojis", "lang_emoji_get": "Get emojis",
"lang_emoji_custom": "Custom emojis", "lang_emoji_custom": "Custom emojis",
@@ -71,6 +72,7 @@
"lang_post_btn3": "Continue to post", "lang_post_btn3": "Continue to post",
"lang_post_unfinishedMedia": "The server has not finished processing your media. Retry.", "lang_post_unfinishedMedia": "The server has not finished processing your media. Retry.",
"lang_post_retry": "Retry", "lang_post_retry": "Retry",
"lang_post_offline": "Add to the drafts because of offline",
"lang_status_favWarn": "It will take a miunte to favourite a remote toot.", "lang_status_favWarn": "It will take a miunte to favourite a remote toot.",
"lang_status_btWarn": "It will take a miunte to boost a remote toot.", "lang_status_btWarn": "It will take a miunte to boost a remote toot.",
"lang_status_follow": "Follow", "lang_status_follow": "Follow",
@@ -87,6 +89,9 @@
"lang_status_endorse": "Feature on profile", "lang_status_endorse": "Feature on profile",
"lang_status_followers": "Followers", "lang_status_followers": "Followers",
"lang_status_active": "Last status", "lang_status_active": "Last status",
"lang_secure_draft": "Add to draft",
"lang_secure_useThis": "Use this",
"lang_secure_deleteThis": "Delete this",
"lang_suggest_nodata": "Please get emojis list in order to show suggestion.", "lang_suggest_nodata": "Please get emojis list in order to show suggestion.",
"lang_usetxtbox_reply": "Reply Mode. Ctrl+Shift+C to clear.", "lang_usetxtbox_reply": "Reply Mode. Ctrl+Shift+C to clear.",
"lang_cards_check": " check", "lang_cards_check": " check",
@@ -131,13 +136,17 @@
"lang_layout_linkana": "Auto Link Analyzer", "lang_layout_linkana": "Auto Link Analyzer",
"lang_layout_linkanades": "Auto link analyzer", "lang_layout_linkanades": "Auto link analyzer",
"lang_layout_tts": "Text to speech ", "lang_layout_tts": "Text to speech ",
"lang_layout_reconnect": "Reload this column", "lang_layout_reconnect": "Reload",
"lang_layout_headercolor": "Header color of this column", "lang_layout_headercolor": "Header color of this column",
"lang_layout_nodata": "[No data]<br>F5/⌘+R to reload", "lang_layout_nodata": "[No data]<br>F5/⌘+R to reload",
"lang_layout_dm": "Direct Message", "lang_layout_dm": "Direct Message",
"lang_layout_webviewmode": "Prefer WebView", "lang_layout_webviewmode": "Prefer WebView",
"lang_excluded": "Excluded type of notification", "lang_layout_excluded": "Excluded type of notification",
"lang_layout_excludingbt": "Show BT mode(OFF/Exclude BT/Only BT)", "lang_layout_mention": "Mentions",
"lang_layout_fav": "Favourites",
"lang_layout_bt": "Boosts",
"lang_layout_poll": "Polls",
"lang_layout_excludingbt": "Show BT mode",
"lang_layout_leftFold": "Stack to the left", "lang_layout_leftFold": "Stack to the left",
"lang_layout_leftUnfold": "Dock on the right", "lang_layout_leftUnfold": "Dock on the right",
"lang_layout_deleteColumn": "Delete this column", "lang_layout_deleteColumn": "Delete this column",
@@ -145,6 +154,7 @@
"lang_layout_unread": "Unread", "lang_layout_unread": "Unread",
"lang_layout_tagManager": "Tag timeline manager", "lang_layout_tagManager": "Tag timeline manager",
"lang_layout_announ": "Announcement: the counter is the number of your unread announcements. If not shown, it means announcements are all marked as read.", "lang_layout_announ": "Announcement: the counter is the number of your unread announcements. If not shown, it means announcements are all marked as read.",
"lang_layout_resetWidth": "Stretch this column",
"lang_sort_gothis": "Go to this column", "lang_sort_gothis": "Go to this column",
"lang_sort_remthis": "Delete this column", "lang_sort_remthis": "Delete this column",
"lang_spotify_img": "Attach an album artwork", "lang_spotify_img": "Attach an album artwork",
@@ -222,6 +232,7 @@
"lang_parse_html": "Show embed HTML", "lang_parse_html": "Show embed HTML",
"lang_parse_notffilter": "Show this user's notifications", "lang_parse_notffilter": "Show this user's notifications",
"lang_parse_hidden": "Unvisible quoted toot", "lang_parse_hidden": "Unvisible quoted toot",
"lang_parse_disconnected": "Streaming has been disconnected(retry after 3s)",
"lang_misskeyparse_renote": "Repost", "lang_misskeyparse_renote": "Repost",
"lang_misskeyparse_renoteqt": "Renote", "lang_misskeyparse_renoteqt": "Renote",
"lang_misskeyparse_reaction": "Reaction", "lang_misskeyparse_reaction": "Reaction",
@@ -236,6 +247,7 @@
"lang_misskeyparse_reacted": " reacted your following post.", "lang_misskeyparse_reacted": " reacted your following post.",
"lang_setting_time": "Time format:{{set}}", "lang_setting_time": "Time format:{{set}}",
"lang_setting_theme": "Theme:{{set}}", "lang_setting_theme": "Theme:{{set}}",
"lang_setting_compat": "Compatible",
"lang_setting_nsfw": "Sensitive media:{{set}}", "lang_setting_nsfw": "Sensitive media:{{set}}",
"lang_setting_cw": "CW:{{set}}", "lang_setting_cw": "CW:{{set}}",
"lang_setting_cwtext": "Default CW text:{{set}}", "lang_setting_cwtext": "Default CW text:{{set}}",

View File

@@ -24,10 +24,11 @@
"nativenotf": "Native notification", "nativenotf": "Native notification",
"nnwarn": "This does not work on Windows Portable ver.", "nnwarn": "This does not work on Windows Portable ver.",
"nntest": "Notification test", "nntest": "Notification test",
"minwidth": "Minimum width of columns", "width": "Width of columns",
"minwidthwarn": "Scroll bar will be shown when your window size is more than ammounts of columns.", "widthwarn": "Scroll bar will be shown when your window size is more than ammounts of columns.",
"fixwidth": "Minimum width of TweetDeck browser", "fixwidth": "Minimum width of TweetDeck browser",
"fixwidthwarn": "", "fixwidthwarn": "",
"margin": "Margin between timelines",
"above": "above", "above": "above",
"font": "Font", "font": "Font",
"fontwarn": "Select your favorite font to 'Select'(Windows/ macOS only)", "fontwarn": "Select your favorite font to 'Select'(Windows/ macOS only)",
@@ -43,26 +44,31 @@
"srcUrl": "Search engine", "srcUrl": "Search engine",
"srcUrlWarn": "{q} will be replaced to query.", "srcUrlWarn": "{q} will be replaced to query.",
"themeSel": "Select theme", "themeSel": "Select theme",
"customtheme": "Edit and add custom themes", "customtheme": "Edit and add themes",
"customthemeDirection": "Color scheme", "customthemeDirection": "Color scheme",
"advanced": "Advanced options(6 additional colors)", "advanced": "Advanced options",
"advancedWarn": "Advanced options will be <i>null</i> if you set nothing, while basic 3 options will be white(<i>fff</i>). They(adv. options) will be reset if you saved with advanced panel closed.", "advancedWarn": "",
"active": "Background of Show or CW buttons, selected options...", "use": "Use this",
"modal": "Background of modals", "copyFrom": "Copy from",
"bottom": "Background of bottom bar", "bg": "Background color",
"postbox": "Background of post box and menu", "subcolor": "Distinguishable from background",
"subcolor": "Subcolor, has harmony with secondary color",
"primary": "Background color",
"secondarycolor": "Background of components",
"text": "Text color", "text": "Text color",
"accent": "Background of boosts", "accent": "Background of boosts",
"modal": "Background of modal window",
"modalFooter": "Background of modal window's footer",
"thirdColor": "Backgroud of tag buttons, etc(near to Background)",
"forthColor": "Title bar(same scheme to Background)",
"bottom": "Background of menu-bar at bottom of window",
"emphasized": "Emphasized toot's background",
"postbox": "Background of post-box and menu",
"active": "Background of 'active' elements",
"selected": "Background of selected with arrow keys",
"selectedWithShare": "Background of selected with arrow keys(boosted toots)",
"add_new": "Add new", "add_new": "Add new",
"name": "Name", "name": "Name",
"desc": "About this theme", "desc": "About this theme",
"customShare": "Share this code with other TheDesk. Do not share this code with MiAS.",
"customImport": "Import of custom themes", "customImport": "Import of custom themes",
"delete": "Delete", "delete": "Delete",
"cImpWarn": "Get more themes on <a href=\"https://assets.msky.cafe/\" target=\"_blank\">MiAS</a>",
"timeline": "Timeline Preferences", "timeline": "Timeline Preferences",
"timemode": "Time format", "timemode": "Time format",
"relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"", "relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"",
@@ -101,8 +107,8 @@
"or": "or", "or": "or",
"imgheight": "Height of images", "imgheight": "Height of images",
"imgheightwarn": "Option:Set \"full\" to uncrop.", "imgheightwarn": "Option:Set \"full\" to uncrop.",
"ticker": "Enable #InstanceTicker", "ticker": "Enable OpenSticker",
"tickerwarn": "Show colorful stickers about the server. <a href=\"https://github.com/MiyonMiyon/InstanceTicker_List\">About #InstanceTicker</a> (c)2018-2020 MiyonMiyon. Released under the MIT License.", "tickerwarn": "Show the instance name and favicon of tooters <a href=\"https://opensticker.0px.io\">About OpenSticker</a>",
"animation": "Animation of timelines", "animation": "Animation of timelines",
"markers": "Markers(mark as read) on HTL and notifications", "markers": "Markers(mark as read) on HTL and notifications",
"markerswarn": "Mastodon 3.0~. Shared on WebUI and third-party supported clients.", "markerswarn": "Mastodon 3.0~. Shared on WebUI and third-party supported clients.",
@@ -136,6 +142,10 @@
"notqt": "Disabled(Hide buttons on TLs)", "notqt": "Disabled(Hide buttons on TLs)",
"apiQuote": "API(only some instances)", "apiQuote": "API(only some instances)",
"showBookmarkAction": "Show a bookmarking toot button", "showBookmarkAction": "Show a bookmarking toot button",
"scrollBar": "Height of the scroll bar",
"thin": "Thin",
"normal": "Normal",
"thick": "Thick",
"main": "Default accounts of actions", "main": "Default accounts of actions",
"mainwarn": "Main account can be set on Account Manager.", "mainwarn": "Main account can be set on Account Manager.",
"lastacct": "Account you used recently", "lastacct": "Account you used recently",
@@ -150,6 +160,9 @@
"keysc": "Keyboard shortcut Preferences", "keysc": "Keyboard shortcut Preferences",
"iks": "Easy inserter", "iks": "Easy inserter",
"okswarn": "You can insert any letters and emojis with only 3 keys", "okswarn": "You can insert any letters and emojis with only 3 keys",
"plugin": "Plugins",
"howToWritePlugin": "Japanese docs of AiScript TheDesk plugins",
"pluginList": "Plugin list",
"muteemp": "Mute & Emphasis Preferences", "muteemp": "Mute & Emphasis Preferences",
"climute": "Client Mute", "climute": "Client Mute",
"cliemp": "Client Emphasis", "cliemp": "Client Emphasis",

View File

@@ -1,5 +1,7 @@
{ {
"draghere": "Плъзнете тук за да качите", "draghere": "Плъзнете тук за да качите",
"nowOffline": "OFFLINE: all of your post is in the draft box and you should reload after re-connect to the Internet",
"reOnline": "Now we are in the Internet, you should reload...",
"close": "Затвори", "close": "Затвори",
"webSrc": "Search on Web", "webSrc": "Search on Web",
"tsSrc": "Search on tootsearch", "tsSrc": "Search on tootsearch",
@@ -45,6 +47,7 @@
"thingsEmoji": "Емоти с инструменти", "thingsEmoji": "Емоти с инструменти",
"symbolEmoji": "Емоти със символи", "symbolEmoji": "Емоти със символи",
"flagsEmoji": "Емоти с флагове", "flagsEmoji": "Емоти с флагове",
"draft": "Draft",
"poll": "Анкета", "poll": "Анкета",
"pollDdisabled": "Анкети: Деактивирани", "pollDdisabled": "Анкети: Деактивирани",
"pollProvider": "Доставчик на Анкета", "pollProvider": "Доставчик на Анкета",

View File

@@ -49,6 +49,7 @@
"lang_manager_godev": "Отворете DevCenter на Misskey. Ние показваме официални документи, на които се позоваваме.", "lang_manager_godev": "Отворете DevCenter на Misskey. Ние показваме официални документи, на които се позоваваме.",
"lang_manager_logout": "Излизане", "lang_manager_logout": "Излизане",
"lang_manager_maxChars": "Max chars of toots", "lang_manager_maxChars": "Max chars of toots",
"lang_manager_refreshAt": "Login with this domain",
"lang_bbmd_misskey": "TheDesk разглежда \"@\" като отговор, но поставя друг параметър. Ако не е включено в Mastodon това означава, че е в Home на Misskey.", "lang_bbmd_misskey": "TheDesk разглежда \"@\" като отговор, но поставя друг параметър. Ако не е включено в Mastodon това означава, че е в Home на Misskey.",
"lang_emoji_get": "Вземи емотикони", "lang_emoji_get": "Вземи емотикони",
"lang_emoji_custom": "Персонализирани емотикони", "lang_emoji_custom": "Персонализирани емотикони",
@@ -71,6 +72,7 @@
"lang_post_btn3": "Продължете към публикуването", "lang_post_btn3": "Продължете към публикуването",
"lang_post_unfinishedMedia": "The server has not finished processing your media. Retry.", "lang_post_unfinishedMedia": "The server has not finished processing your media. Retry.",
"lang_post_retry": "Retry", "lang_post_retry": "Retry",
"lang_post_offline": "Add to the drafts because of offline",
"lang_status_favWarn": "Ще отнеме минута раздумката отдалечено да стане любима.", "lang_status_favWarn": "Ще отнеме минута раздумката отдалечено да стане любима.",
"lang_status_btWarn": "Ще отнеме минута раздумката отдалечено да бъде подсилена.", "lang_status_btWarn": "Ще отнеме минута раздумката отдалечено да бъде подсилена.",
"lang_status_follow": "Следване", "lang_status_follow": "Следване",
@@ -87,6 +89,9 @@
"lang_status_endorse": "Функция в профила", "lang_status_endorse": "Функция в профила",
"lang_status_followers": "Последователи", "lang_status_followers": "Последователи",
"lang_status_active": "Последно състояние", "lang_status_active": "Последно състояние",
"lang_secure_draft": "Add to draft",
"lang_secure_useThis": "Use this",
"lang_secure_deleteThis": "Изтрийте тази раздумка",
"lang_suggest_nodata": "Моля, вземете списък с емотикони за да покажете състояние.", "lang_suggest_nodata": "Моля, вземете списък с емотикони за да покажете състояние.",
"lang_usetxtbox_reply": "Режим на отговор. Ctrl+Shift+C за изчистване.", "lang_usetxtbox_reply": "Режим на отговор. Ctrl+Shift+C за изчистване.",
"lang_cards_check": " проверка", "lang_cards_check": " проверка",
@@ -136,7 +141,11 @@
"lang_layout_nodata": "[Няма данни]<br>F5/⌘+R за презареждане", "lang_layout_nodata": "[Няма данни]<br>F5/⌘+R за презареждане",
"lang_layout_dm": "Директни съобщения", "lang_layout_dm": "Директни съобщения",
"lang_layout_webviewmode": "Предпочитания за WebView", "lang_layout_webviewmode": "Предпочитания за WebView",
"lang_excluded": "Изключване на вид уведомление", "lang_layout_excluded": "Excluded type of notification",
"lang_layout_mention": "Mentions",
"lang_layout_fav": "Favourites",
"lang_layout_bt": "Boosts",
"lang_layout_poll": "Polls",
"lang_layout_excludingbt": "Показване в BT режим (ИЗКЛ./Изключване BT/ Само в BT)", "lang_layout_excludingbt": "Показване в BT режим (ИЗКЛ./Изключване BT/ Само в BT)",
"lang_layout_leftFold": "Стъпка наляво", "lang_layout_leftFold": "Стъпка наляво",
"lang_layout_leftUnfold": "Док отдясно", "lang_layout_leftUnfold": "Док отдясно",
@@ -145,6 +154,7 @@
"lang_layout_unread": "Непрочетени", "lang_layout_unread": "Непрочетени",
"lang_layout_tagManager": "Мениджър на таговете на времевата линия", "lang_layout_tagManager": "Мениджър на таговете на времевата линия",
"lang_layout_announ": "Announcement: the counter is the number of your unread announcements. If not shown, it means announcements are all marked as read.", "lang_layout_announ": "Announcement: the counter is the number of your unread announcements. If not shown, it means announcements are all marked as read.",
"lang_layout_resetWidth": "Stretch this column",
"lang_sort_gothis": "Отидете в тази колона", "lang_sort_gothis": "Отидете в тази колона",
"lang_sort_remthis": "Премахване на тази колона", "lang_sort_remthis": "Премахване на тази колона",
"lang_spotify_img": "Добавете към албум произведенията на изкуството", "lang_spotify_img": "Добавете към албум произведенията на изкуството",
@@ -222,6 +232,7 @@
"lang_parse_html": "Показване на вграденият HTML код", "lang_parse_html": "Показване на вграденият HTML код",
"lang_parse_notffilter": "Показване на известията от този потребител", "lang_parse_notffilter": "Показване на известията от този потребител",
"lang_parse_hidden": "Unvisible quoted toot", "lang_parse_hidden": "Unvisible quoted toot",
"lang_parse_disconnected": "Streaming has been disconnected(retry after 3s)",
"lang_misskeyparse_renote": "Повторно публикуване", "lang_misskeyparse_renote": "Повторно публикуване",
"lang_misskeyparse_renoteqt": "Повторна бележка", "lang_misskeyparse_renoteqt": "Повторна бележка",
"lang_misskeyparse_reaction": "Реакция", "lang_misskeyparse_reaction": "Реакция",
@@ -236,6 +247,7 @@
"lang_misskeyparse_reacted": " реагирали на следващата ви публикация.", "lang_misskeyparse_reacted": " реагирали на следващата ви публикация.",
"lang_setting_time": "Времеви формат:{{set}}", "lang_setting_time": "Времеви формат:{{set}}",
"lang_setting_theme": "Тема:{{set}}", "lang_setting_theme": "Тема:{{set}}",
"lang_setting_compat": "Compatible",
"lang_setting_nsfw": "NSFW:{{set}}", "lang_setting_nsfw": "NSFW:{{set}}",
"lang_setting_cw": "CW:{{set}}", "lang_setting_cw": "CW:{{set}}",
"lang_setting_cwtext": "Default CW text:{{set}}", "lang_setting_cwtext": "Default CW text:{{set}}",

View File

@@ -24,10 +24,11 @@
"nativenotf": "Вътрешно уведомяване", "nativenotf": "Вътрешно уведомяване",
"nnwarn": "Това не работи в Windows Portable вер.", "nnwarn": "Това не работи в Windows Portable вер.",
"nntest": "Тест за уведомяване", "nntest": "Тест за уведомяване",
"minwidth": "Минимална ширина на колоните", "width": "Width of columns",
"minwidthwarn": "Лентата за превъртане ще се покаже, когато размерът на прозореца е по-голям от размера на колони.", "widthwarn": "Scroll bar will be shown when your window size is more than ammounts of columns.",
"fixwidth": "Минимална ширина на браузъра TweetDeck", "fixwidth": "Минимална ширина на браузъра TweetDeck",
"fixwidthwarn": "", "fixwidthwarn": "",
"margin": "Margin between timelines",
"above": "над", "above": "над",
"font": "Шрифт", "font": "Шрифт",
"fontwarn": "Изберете любимия си шрифт с „Избор“ (само за Windows / macOS)", "fontwarn": "Изберете любимия си шрифт с „Избор“ (само за Windows / macOS)",
@@ -45,24 +46,29 @@
"themeSel": "Изберете тема", "themeSel": "Изберете тема",
"customtheme": "Редактирайте и добавете персонализирани теми", "customtheme": "Редактирайте и добавете персонализирани теми",
"customthemeDirection": "Цветова схема", "customthemeDirection": "Цветова схема",
"advanced": "Advanced options(6 additional colors)", "advanced": "Advanced options",
"advancedWarn": "Advanced options will be <i>null</i> if you set nothing, while basic 3 options will be white(<i>fff</i>). They(adv. options) will be reset if you saved with advanced panel closed.", "advancedWarn": "",
"active": "Background of Show or CW buttons, selected options...", "use": "Use this",
"modal": "Background of modals", "copyFrom": "Copy from",
"bottom": "Background of bottom bar", "bg": "Background color",
"postbox": "Background of post box and menu", "subcolor": "Distinguishable from background",
"subcolor": "Subcolor, has harmony with secondary color",
"primary": "Цвят на фона",
"secondarycolor": "Компоненти на фона",
"text": "Цвят на текста", "text": "Цвят на текста",
"accent": "Фон на подсилването", "accent": "Фон на подсилването",
"modal": "Background of modal window",
"modalFooter": "Background of modal window's footer",
"thirdColor": "Backgroud of tag buttons, etc(near to Background)",
"forthColor": "Title bar(same scheme to Background)",
"bottom": "Background of menu-bar at bottom of window",
"emphasized": "Emphasized toot's background",
"postbox": "Background of post-box and menu",
"active": "Background of 'active' elements",
"selected": "Background of selected with arrow keys",
"selectedWithShare": "Background of selected with arrow keys(boosted toots)",
"add_new": "Добавяне на нов", "add_new": "Добавяне на нов",
"name": "Име", "name": "Име",
"desc": "Относно тази тема", "desc": "Относно тази тема",
"customShare": "Споделете този код с друг TheDesk. Не споделяйте този код с MiAS.",
"customImport": "Импортиране на персонализирани теми", "customImport": "Импортиране на персонализирани теми",
"delete": "Изтрий", "delete": "Изтрий",
"cImpWarn": "Вземете още теми от <a href=\"https://assets.msky.cafe/\" target=\"_blank\">MiAS</a>",
"timeline": "Предпочитания за времевата линия", "timeline": "Предпочитания за времевата линия",
"timemode": "Времеви формат", "timemode": "Времеви формат",
"relativetime": "Относителен формат: „преди 1 минута“, „преди 3 дни“", "relativetime": "Относителен формат: „преди 1 минута“, „преди 3 дни“",
@@ -101,7 +107,7 @@
"or": "или", "or": "или",
"imgheight": "Height of images", "imgheight": "Height of images",
"imgheightwarn": "Option:Set \"full\" to uncrop.", "imgheightwarn": "Option:Set \"full\" to uncrop.",
"ticker": "Enable #InstanceTicker", "ticker": "Enable OpenSticker",
"tickerwarn": "Show colorful stickers about the server. <a href=\"https://cdn.weep.me/mastodon/\">About #InstanceTicker</a> Copyright 2018 weepjp, kyori19.", "tickerwarn": "Show colorful stickers about the server. <a href=\"https://cdn.weep.me/mastodon/\">About #InstanceTicker</a> Copyright 2018 weepjp, kyori19.",
"animation": "Анимация на времевата линия", "animation": "Анимация на времевата линия",
"markers": "Markers(mark as read) on HTL and notifications", "markers": "Markers(mark as read) on HTL and notifications",
@@ -136,6 +142,10 @@
"notqt": "Disabled(Hide buttons on TLs)", "notqt": "Disabled(Hide buttons on TLs)",
"apiQuote": "API(only some instances)", "apiQuote": "API(only some instances)",
"showBookmarkAction": "Show a bookmarking toot button", "showBookmarkAction": "Show a bookmarking toot button",
"scrollBar": "Height of the scroll bar",
"thin": "Thin",
"normal": "Normal",
"thick": "Thick",
"main": "Default accounts of actions", "main": "Default accounts of actions",
"mainwarn": "Main account can be set on Account Manager.", "mainwarn": "Main account can be set on Account Manager.",
"lastacct": "Account you used recently", "lastacct": "Account you used recently",
@@ -150,6 +160,9 @@
"keysc": "Keyboard shortcut Preferences", "keysc": "Keyboard shortcut Preferences",
"iks": "Easy inserter", "iks": "Easy inserter",
"okswarn": "Можете да вмъкнете всякакви букви и емотикони само с 3 клавиша", "okswarn": "Можете да вмъкнете всякакви букви и емотикони само с 3 клавиша",
"plugin": "Plugins",
"howToWritePlugin": "Japanese docs of AiScript TheDesk plugins",
"pluginList": "Plugin list",
"muteemp": "Mute & Emphasis Preferences", "muteemp": "Mute & Emphasis Preferences",
"climute": "Client Mute", "climute": "Client Mute",
"cliemp": "Client Emphasis", "cliemp": "Client Emphasis",

View File

@@ -1,5 +1,7 @@
{ {
"draghere": "Drag here to upload", "draghere": "Drag here to upload",
"nowOffline": "OFFLINE: all of your post is in the draft box and you should reload after re-connect to the Internet",
"reOnline": "Now we are in the Internet, you should reload...",
"close": "Close", "close": "Close",
"webSrc": "Search on Web", "webSrc": "Search on Web",
"tsSrc": "Search on tootsearch", "tsSrc": "Search on tootsearch",
@@ -45,6 +47,7 @@
"thingsEmoji": "Emojis of tools", "thingsEmoji": "Emojis of tools",
"symbolEmoji": "Emojis of symbols", "symbolEmoji": "Emojis of symbols",
"flagsEmoji": "Emojis of flags", "flagsEmoji": "Emojis of flags",
"draft": "Draft",
"poll": "Poll", "poll": "Poll",
"pollDdisabled": "Polls: Disabled", "pollDdisabled": "Polls: Disabled",
"pollProvider": "Provider of Poll", "pollProvider": "Provider of Poll",
@@ -130,7 +133,7 @@
"notf": "Notifications", "notf": "Notifications",
"bookmark": "Bookmarks", "bookmark": "Bookmarks",
"showThisTL": "Show this TL:", "showThisTL": "Show this TL:",
"webviewWarn": "TweetDeck with customed TJDeck(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>). Keyboard shortcuts will irritate you. When you feel so, you check 'Prefer WebView' on top of the column.", "webviewWarn": "TweetDeck with customed TJDeck(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>).",
"add": "Add", "add": "Add",
"search": "Search", "search": "Search",
"sortSet": "Sort", "sortSet": "Sort",

View File

@@ -49,6 +49,7 @@
"lang_manager_godev": "Open DevCenter of Misskey. We show also an official documents to refer.", "lang_manager_godev": "Open DevCenter of Misskey. We show also an official documents to refer.",
"lang_manager_logout": "Logout", "lang_manager_logout": "Logout",
"lang_manager_maxChars": "Max chars of toots", "lang_manager_maxChars": "Max chars of toots",
"lang_manager_refreshAt": "Login with this domain",
"lang_bbmd_misskey": "TheDesk regards \"@\" as reply, but put other parameter. Unlisted on Mastodon means Home on Misskey.", "lang_bbmd_misskey": "TheDesk regards \"@\" as reply, but put other parameter. Unlisted on Mastodon means Home on Misskey.",
"lang_emoji_get": "Get emojis", "lang_emoji_get": "Get emojis",
"lang_emoji_custom": "Custom emojis", "lang_emoji_custom": "Custom emojis",
@@ -71,6 +72,7 @@
"lang_post_btn3": "Continue to post", "lang_post_btn3": "Continue to post",
"lang_post_unfinishedMedia": "The server has not finished processing your media. Retry.", "lang_post_unfinishedMedia": "The server has not finished processing your media. Retry.",
"lang_post_retry": "Retry", "lang_post_retry": "Retry",
"lang_post_offline": "Add to the drafts because of offline",
"lang_status_favWarn": "It will take a miunte to favourite a remote toot.", "lang_status_favWarn": "It will take a miunte to favourite a remote toot.",
"lang_status_btWarn": "It will take a miunte to boost a remote toot.", "lang_status_btWarn": "It will take a miunte to boost a remote toot.",
"lang_status_follow": "Follow", "lang_status_follow": "Follow",
@@ -87,6 +89,9 @@
"lang_status_endorse": "Feature on profile", "lang_status_endorse": "Feature on profile",
"lang_status_followers": "Followers", "lang_status_followers": "Followers",
"lang_status_active": "Last status", "lang_status_active": "Last status",
"lang_secure_draft": "Add to draft",
"lang_secure_useThis": "Use this",
"lang_secure_deleteThis": "Delete this",
"lang_suggest_nodata": "Please get emojis list in order to show suggestion.", "lang_suggest_nodata": "Please get emojis list in order to show suggestion.",
"lang_usetxtbox_reply": "Reply Mode. Ctrl+Shift+C to clear.", "lang_usetxtbox_reply": "Reply Mode. Ctrl+Shift+C to clear.",
"lang_cards_check": " check", "lang_cards_check": " check",
@@ -131,13 +136,17 @@
"lang_layout_linkana": "Auto Link Analyzer", "lang_layout_linkana": "Auto Link Analyzer",
"lang_layout_linkanades": "Auto link analyzer", "lang_layout_linkanades": "Auto link analyzer",
"lang_layout_tts": "Text to speech ", "lang_layout_tts": "Text to speech ",
"lang_layout_reconnect": "Reload this column", "lang_layout_reconnect": "Reload",
"lang_layout_headercolor": "Header color of this column", "lang_layout_headercolor": "Header color of this column",
"lang_layout_nodata": "[No data]<br>F5/⌘+R to reload", "lang_layout_nodata": "[No data]<br>F5/⌘+R to reload",
"lang_layout_dm": "Direct Message", "lang_layout_dm": "Direct Message",
"lang_layout_webviewmode": "Prefer WebView", "lang_layout_webviewmode": "Prefer WebView",
"lang_excluded": "Excluded type of notification", "lang_layout_excluded": "Excluded type of notification",
"lang_layout_excludingbt": "Show BT mode(OFF/Exclude BT/Only BT)", "lang_layout_mention": "Mentions",
"lang_layout_fav": "Favourites",
"lang_layout_bt": "Boosts",
"lang_layout_poll": "Polls",
"lang_layout_excludingbt": "Show BT mode",
"lang_layout_leftFold": "Stack to the left", "lang_layout_leftFold": "Stack to the left",
"lang_layout_leftUnfold": "Dock on the right", "lang_layout_leftUnfold": "Dock on the right",
"lang_layout_deleteColumn": "Delete this column", "lang_layout_deleteColumn": "Delete this column",
@@ -145,6 +154,7 @@
"lang_layout_unread": "Unread", "lang_layout_unread": "Unread",
"lang_layout_tagManager": "Tag timeline manager", "lang_layout_tagManager": "Tag timeline manager",
"lang_layout_announ": "Announcement: the counter is the number of your unread announcements. If not shown, it means announcements are all marked as read.", "lang_layout_announ": "Announcement: the counter is the number of your unread announcements. If not shown, it means announcements are all marked as read.",
"lang_layout_resetWidth": "Stretch this column",
"lang_sort_gothis": "Go to this column", "lang_sort_gothis": "Go to this column",
"lang_sort_remthis": "Delete this column", "lang_sort_remthis": "Delete this column",
"lang_spotify_img": "Attach an album artwork", "lang_spotify_img": "Attach an album artwork",
@@ -222,6 +232,7 @@
"lang_parse_html": "Show embed HTML", "lang_parse_html": "Show embed HTML",
"lang_parse_notffilter": "Show this user's notifications", "lang_parse_notffilter": "Show this user's notifications",
"lang_parse_hidden": "Unvisible quoted toot", "lang_parse_hidden": "Unvisible quoted toot",
"lang_parse_disconnected": "Streaming has been disconnected(retry after 3s)",
"lang_misskeyparse_renote": "Repost", "lang_misskeyparse_renote": "Repost",
"lang_misskeyparse_renoteqt": "Renote", "lang_misskeyparse_renoteqt": "Renote",
"lang_misskeyparse_reaction": "Reaction", "lang_misskeyparse_reaction": "Reaction",
@@ -236,6 +247,7 @@
"lang_misskeyparse_reacted": " reacted your following post.", "lang_misskeyparse_reacted": " reacted your following post.",
"lang_setting_time": "Time format:{{set}}", "lang_setting_time": "Time format:{{set}}",
"lang_setting_theme": "Theme:{{set}}", "lang_setting_theme": "Theme:{{set}}",
"lang_setting_compat": "Compatible",
"lang_setting_nsfw": "Sensitive media:{{set}}", "lang_setting_nsfw": "Sensitive media:{{set}}",
"lang_setting_cw": "CW:{{set}}", "lang_setting_cw": "CW:{{set}}",
"lang_setting_cwtext": "Default CW text:{{set}}", "lang_setting_cwtext": "Default CW text:{{set}}",

View File

@@ -24,10 +24,11 @@
"nativenotf": "Native notification", "nativenotf": "Native notification",
"nnwarn": "This does not work on Windows Portable ver.", "nnwarn": "This does not work on Windows Portable ver.",
"nntest": "Notification test", "nntest": "Notification test",
"minwidth": "Minimum width of columns", "width": "Width of columns",
"minwidthwarn": "Scroll bar will be shown when your window size is more than ammounts of columns.", "widthwarn": "Scroll bar will be shown when your window size is more than ammounts of columns.",
"fixwidth": "Minimum width of TweetDeck browser", "fixwidth": "Minimum width of TweetDeck browser",
"fixwidthwarn": "", "fixwidthwarn": "",
"margin": "Margin between timelines",
"above": "above", "above": "above",
"font": "Font", "font": "Font",
"fontwarn": "Select your favorite font to 'Select'(Windows/ macOS only)", "fontwarn": "Select your favorite font to 'Select'(Windows/ macOS only)",
@@ -43,26 +44,31 @@
"srcUrl": "Search engine", "srcUrl": "Search engine",
"srcUrlWarn": "{q} will be replaced to query.", "srcUrlWarn": "{q} will be replaced to query.",
"themeSel": "Select theme", "themeSel": "Select theme",
"customtheme": "Edit and add custom themes", "customtheme": "Edit and add themes",
"customthemeDirection": "Color scheme", "customthemeDirection": "Color scheme",
"advanced": "Advanced options(6 additional colors)", "advanced": "Advanced options",
"advancedWarn": "Advanced options will be <i>null</i> if you set nothing, while basic 3 options will be white(<i>fff</i>). They(adv. options) will be reset if you saved with advanced panel closed.", "advancedWarn": "",
"active": "Background of Show or CW buttons, selected options...", "use": "Use this",
"modal": "Background of modals", "copyFrom": "Copy from",
"bottom": "Background of bottom bar", "bg": "Background color",
"postbox": "Background of post box and menu", "subcolor": "Distinguishable from background",
"subcolor": "Subcolor, has harmony with secondary color",
"primary": "Background color",
"secondarycolor": "Background of components",
"text": "Text color", "text": "Text color",
"accent": "Background of boosts", "accent": "Background of boosts",
"modal": "Background of modal window",
"modalFooter": "Background of modal window's footer",
"thirdColor": "Backgroud of tag buttons, etc(near to Background)",
"forthColor": "Title bar(same scheme to Background)",
"bottom": "Background of menu-bar at bottom of window",
"emphasized": "Emphasized toot's background",
"postbox": "Background of post-box and menu",
"active": "Background of 'active' elements",
"selected": "Background of selected with arrow keys",
"selectedWithShare": "Background of selected with arrow keys(boosted toots)",
"add_new": "Add new", "add_new": "Add new",
"name": "Name", "name": "Name",
"desc": "About this theme", "desc": "About this theme",
"customShare": "Share this code with other TheDesk. Do not share this code with MiAS.",
"customImport": "Import of custom themes", "customImport": "Import of custom themes",
"delete": "Delete", "delete": "Delete",
"cImpWarn": "Get more themes on <a href=\"https://assets.msky.cafe/\" target=\"_blank\">MiAS</a>",
"timeline": "Timeline Preferences", "timeline": "Timeline Preferences",
"timemode": "Time format", "timemode": "Time format",
"relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"", "relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"",
@@ -101,8 +107,8 @@
"or": "or", "or": "or",
"imgheight": "Height of images", "imgheight": "Height of images",
"imgheightwarn": "Option:Set \"full\" to uncrop.", "imgheightwarn": "Option:Set \"full\" to uncrop.",
"ticker": "Enable #InstanceTicker", "ticker": "Enable OpenSticker",
"tickerwarn": "Show colorful stickers about the server. <a href=\"https://github.com/MiyonMiyon/InstanceTicker_List\">About #InstanceTicker</a> (c)2018-2020 MiyonMiyon. Released under the MIT License.", "tickerwarn": "Show the instance name and favicon of tooters <a href=\"https://opensticker.0px.io\">About OpenSticker</a>",
"animation": "Animation of timelines", "animation": "Animation of timelines",
"markers": "Markers(mark as read) on HTL and notifications", "markers": "Markers(mark as read) on HTL and notifications",
"markerswarn": "Mastodon 3.0~. Shared on WebUI and third-party supported clients.", "markerswarn": "Mastodon 3.0~. Shared on WebUI and third-party supported clients.",
@@ -136,6 +142,10 @@
"notqt": "Disabled(Hide buttons on TLs)", "notqt": "Disabled(Hide buttons on TLs)",
"apiQuote": "API(only some instances)", "apiQuote": "API(only some instances)",
"showBookmarkAction": "Show a bookmarking toot button", "showBookmarkAction": "Show a bookmarking toot button",
"scrollBar": "Height of the scroll bar",
"thin": "Thin",
"normal": "Normal",
"thick": "Thick",
"main": "Default accounts of actions", "main": "Default accounts of actions",
"mainwarn": "Main account can be set on Account Manager.", "mainwarn": "Main account can be set on Account Manager.",
"lastacct": "Account you used recently", "lastacct": "Account you used recently",
@@ -150,6 +160,9 @@
"keysc": "Keyboard shortcut Preferences", "keysc": "Keyboard shortcut Preferences",
"iks": "Easy inserter", "iks": "Easy inserter",
"okswarn": "You can insert any letters and emojis with only 3 keys", "okswarn": "You can insert any letters and emojis with only 3 keys",
"plugin": "Plugins",
"howToWritePlugin": "Japanese docs of AiScript TheDesk plugins",
"pluginList": "Plugin list",
"muteemp": "Mute & Emphasis Preferences", "muteemp": "Mute & Emphasis Preferences",
"climute": "Client Mute", "climute": "Client Mute",
"cliemp": "Client Emphasis", "cliemp": "Client Emphasis",

View File

@@ -1,5 +1,7 @@
{ {
"draghere": "Přetáhněte sem pro nahrání", "draghere": "Přetáhněte sem pro nahrání",
"nowOffline": "OFFLINE: all of your post is in the draft box and you should reload after re-connect to the Internet",
"reOnline": "Now we are in the Internet, you should reload...",
"close": "Zavřít", "close": "Zavřít",
"webSrc": "Search on Web", "webSrc": "Search on Web",
"tsSrc": "Search on tootsearch", "tsSrc": "Search on tootsearch",
@@ -45,6 +47,7 @@
"thingsEmoji": "Emojis of tools", "thingsEmoji": "Emojis of tools",
"symbolEmoji": "Emojis of symbols", "symbolEmoji": "Emojis of symbols",
"flagsEmoji": "Emojis of flags", "flagsEmoji": "Emojis of flags",
"draft": "Draft",
"poll": "Anketa", "poll": "Anketa",
"pollDdisabled": "Polls: Disabled", "pollDdisabled": "Polls: Disabled",
"pollProvider": "Provider of Poll", "pollProvider": "Provider of Poll",

View File

@@ -49,6 +49,7 @@
"lang_manager_godev": "Otevřené vývojářské centrum softwaru Misskey. Zobrazujeme také oficiální dokumentaci.", "lang_manager_godev": "Otevřené vývojářské centrum softwaru Misskey. Zobrazujeme také oficiální dokumentaci.",
"lang_manager_logout": "Logout", "lang_manager_logout": "Logout",
"lang_manager_maxChars": "Max chars of toots", "lang_manager_maxChars": "Max chars of toots",
"lang_manager_refreshAt": "Login with this domain",
"lang_bbmd_misskey": "TheDesk považuje „@“ za odpověď, ale vkládá ho do jiných parametrů. „Neuvedeno“ na Mastodonu znamená „Domů“ na Misskey.", "lang_bbmd_misskey": "TheDesk považuje „@“ za odpověď, ale vkládá ho do jiných parametrů. „Neuvedeno“ na Mastodonu znamená „Domů“ na Misskey.",
"lang_emoji_get": "Získat emoji", "lang_emoji_get": "Získat emoji",
"lang_emoji_custom": "Vlastní emoji", "lang_emoji_custom": "Vlastní emoji",
@@ -71,6 +72,7 @@
"lang_post_btn3": "Pokračovat k přispívání", "lang_post_btn3": "Pokračovat k přispívání",
"lang_post_unfinishedMedia": "The server has not finished processing your media. Retry.", "lang_post_unfinishedMedia": "The server has not finished processing your media. Retry.",
"lang_post_retry": "Retry", "lang_post_retry": "Retry",
"lang_post_offline": "Add to the drafts because of offline",
"lang_status_favWarn": "Oblíbení vzdáleného tootu bude chvíli trvat.", "lang_status_favWarn": "Oblíbení vzdáleného tootu bude chvíli trvat.",
"lang_status_btWarn": "Boostnutí vzdáleného tootu bude chvíli trvat.", "lang_status_btWarn": "Boostnutí vzdáleného tootu bude chvíli trvat.",
"lang_status_follow": "Sledovat", "lang_status_follow": "Sledovat",
@@ -87,6 +89,9 @@
"lang_status_endorse": "Představit na profilu", "lang_status_endorse": "Představit na profilu",
"lang_status_followers": "Followers", "lang_status_followers": "Followers",
"lang_status_active": "Last status", "lang_status_active": "Last status",
"lang_secure_draft": "Add to draft",
"lang_secure_useThis": "Use this",
"lang_secure_deleteThis": "Smazat tento toot",
"lang_suggest_nodata": "Pro zobrazení návrhu prosím získejte seznam emoji.", "lang_suggest_nodata": "Pro zobrazení návrhu prosím získejte seznam emoji.",
"lang_usetxtbox_reply": "Režim odpovězení. Pro vymazání stiskněte Ctrl+Shift+C.", "lang_usetxtbox_reply": "Režim odpovězení. Pro vymazání stiskněte Ctrl+Shift+C.",
"lang_cards_check": " kontrolovat", "lang_cards_check": " kontrolovat",
@@ -136,7 +141,11 @@
"lang_layout_nodata": "[Žádná data]<br>Obnovte stránku klávesami F5/⌘+R", "lang_layout_nodata": "[Žádná data]<br>Obnovte stránku klávesami F5/⌘+R",
"lang_layout_dm": "Přímá zpráva", "lang_layout_dm": "Přímá zpráva",
"lang_layout_webviewmode": "Preferovat WebView", "lang_layout_webviewmode": "Preferovat WebView",
"lang_excluded": "Excluded type of notification", "lang_layout_excluded": "Excluded type of notification",
"lang_layout_mention": "Mentions",
"lang_layout_fav": "Favourites",
"lang_layout_bt": "Boosts",
"lang_layout_poll": "Polls",
"lang_layout_excludingbt": "Show BT mode(OFF/Exclude BT/Only BT)", "lang_layout_excludingbt": "Show BT mode(OFF/Exclude BT/Only BT)",
"lang_layout_leftFold": "Stack to the left", "lang_layout_leftFold": "Stack to the left",
"lang_layout_leftUnfold": "Dock on the right", "lang_layout_leftUnfold": "Dock on the right",
@@ -145,6 +154,7 @@
"lang_layout_unread": "Unread", "lang_layout_unread": "Unread",
"lang_layout_tagManager": "Tag timeline manager", "lang_layout_tagManager": "Tag timeline manager",
"lang_layout_announ": "Announcement: the counter is the number of your unread announcements. If not shown, it means announcements are all marked as read.", "lang_layout_announ": "Announcement: the counter is the number of your unread announcements. If not shown, it means announcements are all marked as read.",
"lang_layout_resetWidth": "Stretch this column",
"lang_sort_gothis": "Go to this column", "lang_sort_gothis": "Go to this column",
"lang_sort_remthis": "Delete this column", "lang_sort_remthis": "Delete this column",
"lang_spotify_img": "Attach an album artwork", "lang_spotify_img": "Attach an album artwork",
@@ -222,6 +232,7 @@
"lang_parse_html": "Show embed HTML", "lang_parse_html": "Show embed HTML",
"lang_parse_notffilter": "Show this user's notifications", "lang_parse_notffilter": "Show this user's notifications",
"lang_parse_hidden": "Unvisible quoted toot", "lang_parse_hidden": "Unvisible quoted toot",
"lang_parse_disconnected": "Streaming has been disconnected(retry after 3s)",
"lang_misskeyparse_renote": "Znovusdílení", "lang_misskeyparse_renote": "Znovusdílení",
"lang_misskeyparse_renoteqt": "Renotování", "lang_misskeyparse_renoteqt": "Renotování",
"lang_misskeyparse_reaction": "Reakce", "lang_misskeyparse_reaction": "Reakce",
@@ -236,6 +247,7 @@
"lang_misskeyparse_reacted": " reagoval/a na váš následující příspěvek.", "lang_misskeyparse_reacted": " reagoval/a na váš následující příspěvek.",
"lang_setting_time": "Časový formát: {{set}}", "lang_setting_time": "Časový formát: {{set}}",
"lang_setting_theme": "Motiv: {{set}}", "lang_setting_theme": "Motiv: {{set}}",
"lang_setting_compat": "Compatible",
"lang_setting_nsfw": "Citlivý obsah: {{set}}", "lang_setting_nsfw": "Citlivý obsah: {{set}}",
"lang_setting_cw": "Varování: {{set}}", "lang_setting_cw": "Varování: {{set}}",
"lang_setting_cwtext": "Výchozí text varování: {{set}}", "lang_setting_cwtext": "Výchozí text varování: {{set}}",

View File

@@ -24,10 +24,11 @@
"nativenotf": "Native notification", "nativenotf": "Native notification",
"nnwarn": "This does not work on Windows Portable ver.", "nnwarn": "This does not work on Windows Portable ver.",
"nntest": "Odskoušet oznámení", "nntest": "Odskoušet oznámení",
"minwidth": "Minimum width of columns", "width": "Width of columns",
"minwidthwarn": "Scroll bar will be shown when your window size is more than ammounts of columns.", "widthwarn": "Scroll bar will be shown when your window size is more than ammounts of columns.",
"fixwidth": "Minimální šířka TweetDeck prohlížeče", "fixwidth": "Minimální šířka TweetDeck prohlížeče",
"fixwidthwarn": "", "fixwidthwarn": "",
"margin": "Margin between timelines",
"above": "above", "above": "above",
"font": "Písmo", "font": "Písmo",
"fontwarn": "Select your favorite font to 'Select'(Windows/ macOS only)", "fontwarn": "Select your favorite font to 'Select'(Windows/ macOS only)",
@@ -45,24 +46,29 @@
"themeSel": "Vybrat motiv", "themeSel": "Vybrat motiv",
"customtheme": "Edit and add custom themes", "customtheme": "Edit and add custom themes",
"customthemeDirection": "Color scheme", "customthemeDirection": "Color scheme",
"advanced": "Advanced options(6 additional colors)", "advanced": "Advanced options",
"advancedWarn": "Advanced options will be <i>null</i> if you set nothing, while basic 3 options will be white(<i>fff</i>). They(adv. options) will be reset if you saved with advanced panel closed.", "advancedWarn": "",
"active": "Background of Show or CW buttons, selected options...", "use": "Use this",
"modal": "Background of modals", "copyFrom": "Copy from",
"bottom": "Background of bottom bar", "bg": "Background color",
"postbox": "Background of post box and menu", "subcolor": "Distinguishable from background",
"subcolor": "Subcolor, has harmony with secondary color",
"primary": "Background color",
"secondarycolor": "Background of components",
"text": "Text color", "text": "Text color",
"accent": "Background of boosts", "accent": "Background of boosts",
"modal": "Background of modal window",
"modalFooter": "Background of modal window's footer",
"thirdColor": "Backgroud of tag buttons, etc(near to Background)",
"forthColor": "Title bar(same scheme to Background)",
"bottom": "Background of menu-bar at bottom of window",
"emphasized": "Emphasized toot's background",
"postbox": "Background of post-box and menu",
"active": "Background of 'active' elements",
"selected": "Background of selected with arrow keys",
"selectedWithShare": "Background of selected with arrow keys(boosted toots)",
"add_new": "Add new", "add_new": "Add new",
"name": "Name", "name": "Name",
"desc": "About this theme", "desc": "About this theme",
"customShare": "Share this code with other TheDesk. Do not share this code with MiAS.",
"customImport": "Import of custom themes", "customImport": "Import of custom themes",
"delete": "Delete", "delete": "Delete",
"cImpWarn": "Get more themes on <a href=\"https://assets.msky.cafe/\" target=\"_blank\">MiAS</a>",
"timeline": "Timeline Preferences", "timeline": "Timeline Preferences",
"timemode": "Časový formát", "timemode": "Časový formát",
"relativetime": "Relativní formát: „před 1 minutou“, „před 3 dny“", "relativetime": "Relativní formát: „před 1 minutou“, „před 3 dny“",
@@ -136,6 +142,10 @@
"notqt": "Disabled(Hide buttons on TLs)", "notqt": "Disabled(Hide buttons on TLs)",
"apiQuote": "API(only some instances)", "apiQuote": "API(only some instances)",
"showBookmarkAction": "Show a bookmarking toot button", "showBookmarkAction": "Show a bookmarking toot button",
"scrollBar": "Height of the scroll bar",
"thin": "Thin",
"normal": "Normal",
"thick": "Thick",
"main": "Default accounts of actions", "main": "Default accounts of actions",
"mainwarn": "Main account can be set on Account Manager.", "mainwarn": "Main account can be set on Account Manager.",
"lastacct": "Account you used recently", "lastacct": "Account you used recently",
@@ -150,6 +160,9 @@
"keysc": "Keyboard shortcut Preferences", "keysc": "Keyboard shortcut Preferences",
"iks": "Easy inserter", "iks": "Easy inserter",
"okswarn": "You can insert any letters and emojis with only 3 keys", "okswarn": "You can insert any letters and emojis with only 3 keys",
"plugin": "Plugins",
"howToWritePlugin": "Japanese docs of AiScript TheDesk plugins",
"pluginList": "Plugin list",
"muteemp": "Mute & Emphasis Preferences", "muteemp": "Mute & Emphasis Preferences",
"climute": "Client Mute", "climute": "Client Mute",
"cliemp": "Client Emphasis", "cliemp": "Client Emphasis",

View File

@@ -1,5 +1,7 @@
{ {
"draghere": "Drag here to upload", "draghere": "Drag here to upload",
"nowOffline": "OFFLINE: all of your post is in the draft box and you should reload after re-connect to the Internet",
"reOnline": "Now we are in the Internet, you should reload...",
"close": "Close", "close": "Close",
"webSrc": "Search on Web", "webSrc": "Search on Web",
"tsSrc": "Search on tootsearch", "tsSrc": "Search on tootsearch",
@@ -45,6 +47,7 @@
"thingsEmoji": "Emojis of tools", "thingsEmoji": "Emojis of tools",
"symbolEmoji": "Emojis of symbols", "symbolEmoji": "Emojis of symbols",
"flagsEmoji": "Emojis of flags", "flagsEmoji": "Emojis of flags",
"draft": "Draft",
"poll": "Poll", "poll": "Poll",
"pollDdisabled": "Polls: Disabled", "pollDdisabled": "Polls: Disabled",
"pollProvider": "Provider of Poll", "pollProvider": "Provider of Poll",
@@ -130,7 +133,7 @@
"notf": "Notifications", "notf": "Notifications",
"bookmark": "Bookmarks", "bookmark": "Bookmarks",
"showThisTL": "Show this TL:", "showThisTL": "Show this TL:",
"webviewWarn": "TweetDeck with customed TJDeck(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>). Keyboard shortcuts will irritate you. When you feel so, you check 'Prefer WebView' on top of the column.", "webviewWarn": "TweetDeck with customed TJDeck(<a href='https://gist.github.com/cutls/8787a55d2c1c53274e68a427966046a6' target='_blank'>Code</a>/<a href='https://gist.github.com/totoraj930/d1394dadb51d75666a76829f61e7280c' target='_blank'>TJDeck</a>).",
"add": "Add", "add": "Add",
"search": "Search", "search": "Search",
"sortSet": "Sort", "sortSet": "Sort",

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