Compare commits

...

139 Commits

Author SHA1 Message Date
dependabot[bot]
68576673a6 Bump sweetalert2 from 11.0.17 to 11.0.18 in /app
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 11.0.17 to 11.0.18.
- [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/v11.0.17...v11.0.18)

---
updated-dependencies:
- dependency-name: sweetalert2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-21 20:03:35 +00:00
cutls
ab460d1401 introduce uuid yeah 2021-06-19 19:16:08 +09:00
cutls
679151e8ea TheDesk 22.3.0 2021-06-18 17:06:45 +09:00
cutls
da76c6732d Merge branch 'master' of https://github.com/cutls/TheDesk 2021-06-18 16:29:07 +09:00
Cutls
b108f0e09d Update README.md 2021-06-18 16:29:01 +09:00
cutls
8d30d5d6dc dependabot 2021-06-18 16:22:32 +09:00
cutls
8b5a9520b2 git 2021-06-18 16:21:51 +09:00
Cutls
0f99a1098e Merge pull request #509 from cutls/dependabot/npm_and_yarn/app/dotenv-10.0.0
Bump dotenv from 9.0.2 to 10.0.0 in /app
2021-06-18 16:21:25 +09:00
Cutls
a773315bf6 Merge branch 'master' into dependabot/npm_and_yarn/app/dotenv-10.0.0 2021-06-18 16:21:19 +09:00
Cutls
6e247502da Merge pull request #519 from cutls/dependabot/npm_and_yarn/app/eslint-7.28.0
Bump eslint from 7.27.0 to 7.28.0 in /app
2021-06-18 16:20:49 +09:00
Cutls
3151ed383e Merge branch 'master' into dependabot/npm_and_yarn/app/eslint-7.28.0 2021-06-18 16:20:42 +09:00
Cutls
607a6a204b Merge pull request #520 from cutls/dependabot/npm_and_yarn/app/vue-2.6.14
Bump vue from 2.6.12 to 2.6.14 in /app
2021-06-18 16:20:18 +09:00
Cutls
0dae100c84 Merge pull request #521 from cutls/dependabot/npm_and_yarn/app/electron-13.1.2
Bump electron from 13.0.1 to 13.1.2 in /app
2021-06-18 16:20:09 +09:00
Cutls
d011c94ea2 Merge branch 'master' into dependabot/npm_and_yarn/app/electron-13.1.2 2021-06-18 16:20:04 +09:00
Cutls
cd59a644a5 Merge pull request #522 from cutls/dependabot/npm_and_yarn/app/normalize-url-4.5.1
Bump normalize-url from 4.5.0 to 4.5.1 in /app
2021-06-18 16:19:39 +09:00
Cutls
31ebb2df3f Merge pull request #524 from cutls/dependabot/npm_and_yarn/app/electron-builder-22.11.7
Bump electron-builder from 22.11.5 to 22.11.7 in /app
2021-06-18 16:19:30 +09:00
Cutls
9c49a78318 New Crowdin updates (#527)
* New translations index.json (Romanian)

* New translations index.json (Polish)

* New translations index.json (Cornish)

* New translations index.json (Sinhala)

* New translations index.json (Spanish, Argentina)

* New translations index.json (Portuguese, Brazilian)

* New translations index.json (Vietnamese)

* New translations index.json (Chinese Traditional)

* New translations index.json (Chinese Simplified)

* New translations index.json (Ukrainian)

* New translations index.json (Turkish)

* New translations index.json (Swedish)

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

* New translations index.json (Russian)

* New translations index.json (Portuguese)

* New translations index.json (Norwegian)

* New translations index.json (French)

* New translations index.json (Dutch)

* New translations index.json (Italian)

* New translations index.json (Hungarian)

* New translations index.json (Hebrew)

* New translations index.json (Finnish)

* New translations index.json (Greek)

* New translations index.json (German)

* New translations index.json (Danish)

* New translations index.json (Czech)

* New translations index.json (Catalan)

* New translations index.json (Bulgarian)

* New translations index.json (Arabic)

* New translations index.json (Afrikaans)

* New translations index.json (Spanish)

* New translations index.json (English)
2021-06-18 16:19:19 +09:00
Cutls
e3c10550d5 Merge pull request #525 from cutls/dependabot/npm_and_yarn/app/sweetalert2-11.0.17
Bump sweetalert2 from 11.0.12 to 11.0.17 in /app
2021-06-18 16:19:08 +09:00
Cutls
75dd9174a8 Merge pull request #526 from cutls/dependabot/npm_and_yarn/app/chokidar-3.5.2
Bump chokidar from 3.5.1 to 3.5.2 in /app
2021-06-18 16:18:58 +09:00
cutls
d62bc57368 add new fi 2021-06-18 16:16:37 +09:00
dependabot[bot]
184a2bf3aa Bump chokidar from 3.5.1 to 3.5.2 in /app
Bumps [chokidar](https://github.com/paulmillr/chokidar) from 3.5.1 to 3.5.2.
- [Release notes](https://github.com/paulmillr/chokidar/releases)
- [Commits](https://github.com/paulmillr/chokidar/compare/3.5.1...3.5.2)

---
updated-dependencies:
- dependency-name: chokidar
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-15 20:04:49 +00:00
dependabot[bot]
49c4c3f23f Bump sweetalert2 from 11.0.12 to 11.0.17 in /app
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 11.0.12 to 11.0.17.
- [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/v11.0.12...v11.0.17)

---
updated-dependencies:
- dependency-name: sweetalert2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-14 20:03:35 +00:00
dependabot[bot]
aa377b78e0 Bump electron-builder from 22.11.5 to 22.11.7 in /app
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.11.5 to 22.11.7.
- [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.11.5...v22.11.7)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-11 20:03:24 +00:00
dependabot[bot]
a64813d2d9 Bump normalize-url from 4.5.0 to 4.5.1 in /app
Bumps [normalize-url](https://github.com/sindresorhus/normalize-url) from 4.5.0 to 4.5.1.
- [Release notes](https://github.com/sindresorhus/normalize-url/releases)
- [Commits](https://github.com/sindresorhus/normalize-url/commits)

---
updated-dependencies:
- dependency-name: normalize-url
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-10 10:31:59 +00:00
dependabot[bot]
ffcbe71ecb Bump electron from 13.0.1 to 13.1.2 in /app
Bumps [electron](https://github.com/electron/electron) from 13.0.1 to 13.1.2.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v13.0.1...v13.1.2)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-09 20:02:54 +00:00
dependabot[bot]
f9462ad5ae Bump vue from 2.6.12 to 2.6.14 in /app
Bumps [vue](https://github.com/vuejs/vue) from 2.6.12 to 2.6.14.
- [Release notes](https://github.com/vuejs/vue/releases)
- [Commits](https://github.com/vuejs/vue/compare/v2.6.12...v2.6.14)

---
updated-dependencies:
- dependency-name: vue
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-07 20:05:18 +00:00
dependabot[bot]
bb73a7eda7 Bump eslint from 7.27.0 to 7.28.0 in /app
Bumps [eslint](https://github.com/eslint/eslint) from 7.27.0 to 7.28.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.27.0...v7.28.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-07 20:04:47 +00:00
cutls
36ad187296 with acct lookup 2021-06-02 15:59:36 +09:00
cutls
5621ffbe42 fix and merge 2021-06-02 15:20:31 +09:00
cutls
9758a2a7d8 Merge branch 'master' of https://github.com/cutls/TheDesk 2021-06-02 15:20:09 +09:00
cutls
d6fd519086 fix keyboard layout 2021-06-02 15:19:58 +09:00
dependabot[bot]
b9ff0ec817 Bump dotenv from 9.0.2 to 10.0.0 in /app
Bumps [dotenv](https://github.com/motdotla/dotenv) from 9.0.2 to 10.0.0.
- [Release notes](https://github.com/motdotla/dotenv/releases)
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/motdotla/dotenv/compare/v9.0.2...v10.0.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-30 19:29:30 +00:00
Cutls
3601bfc664 Merge pull request #508 from cutls/dependabot/npm_and_yarn/app/sanitize-html-2.4.0
Bump sanitize-html from 2.3.3 to 2.4.0 in /app
2021-05-31 04:27:48 +09:00
Cutls
73a8a117b0 Merge pull request #512 from cutls/dependabot/npm_and_yarn/app/eslint-7.27.0
Bump eslint from 7.26.0 to 7.27.0 in /app
2021-05-31 04:27:30 +09:00
Cutls
4af29e0caa Merge pull request #513 from cutls/dependabot/npm_and_yarn/app/electron-13.0.1
Bump electron from 12.0.8 to 13.0.1 in /app
2021-05-31 04:27:19 +09:00
Cutls
8519980638 Merge pull request #514 from cutls/dependabot/npm_and_yarn/app/sweetalert2-11.0.12
Bump sweetalert2 from 11.0.8 to 11.0.12 in /app
2021-05-31 04:27:09 +09:00
Cutls
c7df190d79 New Crowdin updates (#506)
* New translations main.json (Russian)

* New translations main.json (Portuguese)

* New translations main.json (Polish)

* New translations main.json (Norwegian)

* New translations main.json (Dutch)

* New translations main.json (Italian)

* New translations main.json (Hungarian)

* New translations main.json (Chinese Traditional)

* New translations main.json (Chinese Simplified)

* New translations main.json (Ukrainian)

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

* New translations main.json (Turkish)

* New translations main.json (Swedish)

* New translations main.json (Hebrew)

* New translations main.json (Bulgarian)

* New translations main.json (Arabic)

* New translations main.json (Afrikaans)

* New translations main.json (Spanish)

* New translations main.json (French)

* New translations main.json (Romanian)

* New translations main.json (Catalan)

* New translations main.json (Finnish)

* New translations main.json (Greek)

* New translations main.json (German)

* New translations main.json (Czech)

* New translations main.json (Danish)

* New translations main.json (Cornish)

* New translations main.json (Sinhala)

* New translations main.json (Spanish, Argentina)

* New translations main.json (Portuguese, Brazilian)

* New translations main.json (Vietnamese)

* New translations main.json (English)

* New translations index.json (Italian)

* New translations main.json (Italian)
2021-05-31 04:26:46 +09:00
dependabot[bot]
9290c146e3 Bump sweetalert2 from 11.0.8 to 11.0.12 in /app
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 11.0.8 to 11.0.12.
- [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/v11.0.8...v11.0.12)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-27 20:04:32 +00:00
dependabot[bot]
7769113b3c Bump electron from 12.0.8 to 13.0.1 in /app
Bumps [electron](https://github.com/electron/electron) from 12.0.8 to 13.0.1.
- [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/v12.0.8...v13.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-25 20:03:03 +00:00
dependabot[bot]
dafc36b01d Bump eslint from 7.26.0 to 7.27.0 in /app
Bumps [eslint](https://github.com/eslint/eslint) from 7.26.0 to 7.27.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.26.0...v7.27.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-24 20:06:14 +00:00
dependabot[bot]
55a3571edd Bump sanitize-html from 2.3.3 to 2.4.0 in /app
Bumps [sanitize-html](https://github.com/apostrophecms/sanitize-html) from 2.3.3 to 2.4.0.
- [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.3...2.4.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-20 20:03:30 +00:00
cutls
bdae21bd12 plist resolutions to take xmldom's security fix 2021-05-20 15:26:42 +09:00
cutls
ac26f2ca6b Merge branch 'master' of https://github.com/cutls/TheDesk 2021-05-20 15:17:02 +09:00
cutls
723ff59a21 improve some styles with rounded-button 2021-05-20 15:16:58 +09:00
Cutls
c3feca504c Merge pull request #503 from cutls/dependabot/npm_and_yarn/app/electron-12.0.8
Bump electron from 12.0.7 to 12.0.8 in /app
2021-05-20 15:14:56 +09:00
Cutls
a294b1143b Merge branch 'master' into dependabot/npm_and_yarn/app/electron-12.0.8 2021-05-20 15:14:52 +09:00
Cutls
541826f2fd Merge pull request #504 from cutls/dependabot/npm_and_yarn/app/sweetalert2-11.0.8
Bump sweetalert2 from 10.16.7 to 11.0.8 in /app
2021-05-20 15:14:08 +09:00
Cutls
aa6c2ad186 Merge pull request #505 from cutls/dependabot/npm_and_yarn/app/electron-builder-22.11.5
Bump electron-builder from 22.11.2 to 22.11.5 in /app
2021-05-20 15:13:59 +09:00
dependabot[bot]
c51dae6d60 Bump electron-builder from 22.11.2 to 22.11.5 in /app
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.11.2 to 22.11.5.
- [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.11.2...v22.11.5)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-19 20:04:58 +00:00
dependabot[bot]
b2a87ae99d Bump sweetalert2 from 10.16.7 to 11.0.8 in /app
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 10.16.7 to 11.0.8.
- [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.16.7...v11.0.8)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-19 20:04:17 +00:00
dependabot[bot]
5230c6d672 Bump electron from 12.0.7 to 12.0.8 in /app
Bumps [electron](https://github.com/electron/electron) from 12.0.7 to 12.0.8.
- [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/v12.0.7...v12.0.8)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-18 20:04:44 +00:00
Cutls
29d0e80f24 Merge pull request #497 from cutls/dependabot/npm_and_yarn/app/dotenv-9.0.2
Bump dotenv from 9.0.1 to 9.0.2 in /app
2021-05-12 01:26:44 +09:00
Cutls
4b147593ca Merge pull request #498 from cutls/dependabot/npm_and_yarn/app/electron-builder-22.11.2
Bump electron-builder from 22.11.1 to 22.11.2 in /app
2021-05-12 01:26:34 +09:00
dependabot[bot]
b1137d175a Bump electron-builder from 22.11.1 to 22.11.2 in /app
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.11.1 to 22.11.2.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/compare/v22.11.1...v22.11.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-10 20:06:15 +00:00
dependabot[bot]
bbc90b6d6f Bump dotenv from 9.0.1 to 9.0.2 in /app
Bumps [dotenv](https://github.com/motdotla/dotenv) from 9.0.1 to 9.0.2.
- [Release notes](https://github.com/motdotla/dotenv/releases)
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/motdotla/dotenv/compare/v9.0.1...v9.0.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-10 20:05:34 +00:00
Cutls
9fe9bcd04e Merge pull request #495 from cutls/dependabot/npm_and_yarn/app/eslint-7.26.0
Bump eslint from 7.23.0 to 7.26.0 in /app
2021-05-11 03:13:57 +09:00
dependabot[bot]
79ae11aea8 Bump eslint from 7.23.0 to 7.26.0 in /app
Bumps [eslint](https://github.com/eslint/eslint) from 7.23.0 to 7.26.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.23.0...v7.26.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-10 18:12:40 +00:00
Cutls
50582d49f0 New Crowdin updates (#478)
* New translations index.json (German)

* New translations setting.json (Russian)

* New translations setting.json (Turkish)

* New translations setting.json (Swedish)

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

* New translations setting.json (Portuguese)

* New translations setting.json (Polish)

* New translations setting.json (Norwegian)

* New translations setting.json (Dutch)

* New translations setting.json (Cornish)

* New translations setting.json (Sinhala)

* New translations setting.json (Spanish, Argentina)

* New translations setting.json (Portuguese, Brazilian)

* New translations setting.json (Ukrainian)

* New translations setting.json (Vietnamese)

* New translations setting.json (Chinese Traditional)

* New translations setting.json (Chinese Simplified)

* New translations setting.json (Bulgarian)

* New translations setting.json (Arabic)

* New translations setting.json (Afrikaans)

* New translations setting.json (Spanish)

* New translations setting.json (Romanian)

* New translations setting.json (French)

* New translations setting.json (Catalan)

* New translations setting.json (Italian)

* 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 (Russian)

* New translations setting.json (Turkish)

* New translations setting.json (Swedish)

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

* New translations setting.json (Portuguese)

* New translations setting.json (Polish)

* New translations setting.json (Norwegian)

* New translations setting.json (Dutch)

* New translations setting.json (Cornish)

* New translations setting.json (Sinhala)

* New translations setting.json (Spanish, Argentina)

* New translations setting.json (Portuguese, Brazilian)

* New translations setting.json (Ukrainian)

* New translations setting.json (Vietnamese)

* New translations setting.json (Chinese Traditional)

* New translations setting.json (Chinese Simplified)

* New translations setting.json (Bulgarian)

* New translations setting.json (Arabic)

* New translations setting.json (Afrikaans)

* New translations setting.json (Spanish)

* New translations setting.json (Romanian)

* New translations setting.json (French)

* New translations setting.json (Catalan)

* New translations setting.json (Italian)

* 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 index.json (Catalan)

* New translations index.json (Bulgarian)

* New translations index.json (Arabic)

* New translations index.json (Afrikaans)

* New translations index.json (Romanian)

* New translations index.json (French)

* New translations index.json (Spanish)

* New translations index.json (Chinese Simplified)

* New translations index.json (Ukrainian)

* New translations index.json (Turkish)

* New translations index.json (Swedish)

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

* New translations index.json (Chinese Traditional)

* New translations index.json (Cornish)

* New translations index.json (Sinhala)

* New translations index.json (Spanish, Argentina)

* New translations index.json (Portuguese, Brazilian)

* New translations index.json (Vietnamese)

* New translations index.json (Russian)

* New translations index.json (Finnish)

* New translations index.json (Greek)

* New translations index.json (German)

* New translations index.json (Danish)

* New translations index.json (Czech)

* New translations index.json (Hebrew)

* New translations index.json (Portuguese)

* New translations index.json (Norwegian)

* New translations index.json (Dutch)

* New translations index.json (Polish)

* New translations index.json (Italian)

* New translations index.json (Hungarian)

* New translations index.json (English)

* New translations main.json (Russian)

* New translations setting.json (Russian)

* New translations main.json (Russian)

* New translations main.json (Russian)

* New translations setting.json (Russian)

* New translations index.json (Spanish, Argentina)

* New translations setting.json (Spanish, Argentina)
2021-05-11 03:11:28 +09:00
Cutls
897fb3082d Merge pull request #494 from cutls/dependabot/npm_and_yarn/app/electron-builder-22.11.1
Bump electron-builder from 22.10.5 to 22.11.1 in /app
2021-05-11 03:10:55 +09:00
Cutls
947d0b77bd Merge pull request #496 from cutls/dependabot/npm_and_yarn/app/dotenv-9.0.1
Bump dotenv from 8.2.0 to 9.0.1 in /app
2021-05-11 03:10:45 +09:00
dependabot[bot]
e07e79a918 Bump dotenv from 8.2.0 to 9.0.1 in /app
Bumps [dotenv](https://github.com/motdotla/dotenv) from 8.2.0 to 9.0.1.
- [Release notes](https://github.com/motdotla/dotenv/releases)
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/motdotla/dotenv/compare/v8.2.0...v9.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-10 18:05:46 +00:00
dependabot[bot]
cdc3b22752 Bump electron-builder from 22.10.5 to 22.11.1 in /app
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.10.5 to 22.11.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.10.5...v22.11.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-10 18:04:57 +00:00
Cutls
0988728bb2 Merge pull request #491 from cutls/dependabot/npm_and_yarn/app/electron-builder-22.11.1
Bump electron-builder from 22.10.5 to 22.11.1 in /app
2021-05-11 03:04:12 +09:00
dependabot-preview[bot]
0ad628b259 Bump electron-builder from 22.10.5 to 22.11.1 in /app
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.10.5 to 22.11.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.10.5...v22.11.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-10 18:03:22 +00:00
Cutls
44af72f9e6 Merge pull request #486 from cutls/dependabot/npm_and_yarn/app/eslint-7.25.0
Bump eslint from 7.23.0 to 7.25.0 in /app
2021-05-11 03:02:51 +09:00
Cutls
2d0316035f Merge pull request #489 from cutls/dependabot/npm_and_yarn/app/sweetalert2-10.16.7
Bump sweetalert2 from 10.15.7 to 10.16.7 in /app
2021-05-11 03:02:36 +09:00
Cutls
735c2e153e Merge pull request #487 from cutls/dependabot/add-v2-config-file
Upgrade to GitHub-native Dependabot
2021-05-11 03:02:27 +09:00
Cutls
6f9d6cb35f Merge pull request #473 from cutls/dependabot/npm_and_yarn/app/sanitize-html-2.3.3
Bump sanitize-html from 2.3.2 to 2.3.3 in /app
2021-05-11 03:02:09 +09:00
Cutls
de796db39a Merge pull request #474 from cutls/dependabot/npm_and_yarn/app/fortawesome/fontawesome-free-5.15.3
Bump @fortawesome/fontawesome-free from 5.15.2 to 5.15.3 in /app
2021-05-11 03:02:01 +09:00
Cutls
88cb706ff5 Merge pull request #492 from cutls/dependabot/npm_and_yarn/app/electron-12.0.7
Bump electron from 12.0.2 to 12.0.7 in /app
2021-05-11 03:01:34 +09:00
Cutls
6bc19354c9 Merge pull request #493 from cutls/dependabot/npm_and_yarn/app/postcss-8.2.14
[Security] Bump postcss from 8.2.3 to 8.2.14 in /app
2021-05-11 03:01:22 +09:00
dependabot-preview[bot]
c70b69d043 [Security] Bump postcss from 8.2.3 to 8.2.14 in /app
Bumps [postcss](https://github.com/postcss/postcss) from 8.2.3 to 8.2.14. **This update includes a security fix.**
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.2.3...8.2.14)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-10 15:35:46 +00:00
dependabot-preview[bot]
f53e0f4550 Bump electron from 12.0.2 to 12.0.7 in /app
Bumps [electron](https://github.com/electron/electron) from 12.0.2 to 12.0.7.
- [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/v12.0.2...v12.0.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-07 20:14:15 +00:00
dependabot-preview[bot]
672de930ce Bump sweetalert2 from 10.15.7 to 10.16.7 in /app
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 10.15.7 to 10.16.7.
- [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.15.7...v10.16.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-03 20:15:58 +00:00
dependabot-preview[bot]
d3d3d6a0aa Upgrade to GitHub-native Dependabot 2021-04-29 15:09:09 +00:00
dependabot-preview[bot]
2ba4d2303a Bump eslint from 7.23.0 to 7.25.0 in /app
Bumps [eslint](https://github.com/eslint/eslint) from 7.23.0 to 7.25.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.23.0...v7.25.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-27 23:37:00 +00:00
cutls
8acf86d9cb fetch the data with dialog 2021-04-18 19:11:39 +09:00
cutls
5de0ede4e1 font select 2021-04-18 18:47:30 +09:00
cutls
7db8989cd8 add dialog dropdown for hashtag and suggestion, add custom emojis suggestion 2021-04-18 16:14:41 +09:00
cutls
b047c80768 some design improve 2021-04-18 04:28:10 +09:00
cutls
d224e597fd fediversearch 2021-04-18 04:25:10 +09:00
cutls
f5956fed06 right click 2021-04-18 04:24:52 +09:00
cutls
28f6ccbfee second instance to customurl 2021-04-18 04:23:45 +09:00
cutls
e9aa22f5cf test 2021-04-16 21:14:00 +09:00
cutls
2c3fc66b0f animation 2021-04-15 16:33:34 +09:00
cutls
d2ac0f8421 readme 2021-04-15 15:47:41 +09:00
cutls
d20d7c622f readme 2021-04-15 15:43:52 +09:00
cutls
297306491e readme 2021-04-15 15:41:42 +09:00
cutls
70f5fefeab DL from TheDesk 2021-04-15 15:29:56 +09:00
cutls
da054f0a2e arm64 2021-04-15 15:08:24 +09:00
cutls
ef1a16516f build 2021-04-15 14:50:54 +09:00
cutls
f570ed36e8 readme 2021-04-15 14:32:49 +09:00
cutls
8bcd23c0ea build name changed 2021-04-15 14:30:29 +09:00
cutls
b3d6d582d9 tgz 2021-04-15 14:26:21 +09:00
cutls
bfcda76819 created 2021-04-15 13:58:07 +09:00
cutls
6a48143b20 deb upload 2021-04-15 13:51:38 +09:00
cutls
05ca174df8 macOS build on Actions 2021-04-15 13:49:27 +09:00
cutls
a7349d574d TheDesk 22.2.0(Koume) 2021-04-15 13:00:29 +09:00
cutls
3e0a048e28 Add Theme Preview 2021-04-15 05:45:14 +09:00
cutls
54031da417 Add header height and notification tile style 2021-04-15 05:02:33 +09:00
cutls
fcedefe815 change sweetalert theme 2021-04-15 05:02:14 +09:00
cutls
c35a27eda6 new readme 2021-04-14 16:13:22 +09:00
cutls
b6b8fa27d5 minimum readme 2021-04-14 15:45:19 +09:00
cutls
59a0aae887 listed 2021-04-14 15:29:42 +09:00
cutls
0698ce07fd license of other assets 2021-04-14 15:28:28 +09:00
cutls
77e4dd6c41 move 2021-04-14 15:24:12 +09:00
cutls
db90eddf31 intro Wiki 2021-04-14 15:21:00 +09:00
cutls
a8f060578a add programatic and command line build tool with TypeScript declaration 2021-04-14 13:58:21 +09:00
cutls
8621b66203 add arm64 platform 2021-04-14 13:11:33 +09:00
cutls
cff6be6af0 change 2021-04-13 16:28:35 +09:00
cutls
57b4518b61 only mac 2021-04-13 16:19:24 +09:00
cutls
de13191674 typo 2021-04-13 16:19:02 +09:00
cutls
6b609a1877 new build 2021-04-13 16:16:22 +09:00
cutls
901c536974 publish never 2021-04-13 15:54:31 +09:00
cutls
f719caab4b prevent GH upload? 2021-04-13 15:09:41 +09:00
cutls
6a1e5e9e40 Merge branch 'master' of github.com:cutls/TheDesk 2021-04-13 14:57:12 +09:00
cutls
4b30c22cfb build.js update 2021-04-13 14:56:58 +09:00
Cutls
6384d0ea8c Update build.yml 2021-04-13 14:52:58 +09:00
Cutls
77f832447e Create build.yml 2021-04-13 14:41:39 +09:00
cutls
d7eadd03f2 tmp delete actions 2021-04-13 14:41:11 +09:00
cutls
c7b55f6edb gh-a error 2021-04-13 14:37:23 +09:00
cutls
48b98eb55a Merge branch 'master' of github.com:cutls/TheDesk 2021-04-13 14:33:27 +09:00
cutls
7d318a688c travis 2021-04-13 14:33:15 +09:00
Cutls
93b5b98f23 Update build.yml 2021-04-13 14:31:52 +09:00
Cutls
f27737158c fix 2021-04-13 14:30:37 +09:00
Cutls
63bcb03abd Use GitHub Actions to create Windows assets 2021-04-13 14:26:29 +09:00
cutls
660c91e230 travis 2021-04-13 14:03:38 +09:00
cutls
594a8c9494 travis 2021-04-13 14:01:36 +09:00
cutls
83dee56266 2 2021-04-13 13:48:59 +09:00
cutls
4e2f3ad68a 22.1.2 beta test 2021-04-13 13:11:55 +09:00
cutls
36d1293759 test 2021-04-13 13:10:55 +09:00
cutls
6ba75c93e4 update 2021-04-13 12:50:52 +09:00
cutls
ef8074b9cb fix 2021-04-13 12:35:31 +09:00
cutls
ad5d15b0c3 typo 2021-04-13 12:31:54 +09:00
cutls
aa7d5e4586 new build method with Apple notarize, electron-build programatic API 2021-04-13 12:31:17 +09:00
Cutls
e2c0fda4c9 New Crowdin updates (#477)
* New translations setting.json (Russian)

* New translations setting.json (Turkish)

* New translations setting.json (Swedish)

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

* New translations setting.json (Portuguese)

* New translations setting.json (Polish)

* New translations setting.json (Norwegian)

* New translations setting.json (Dutch)

* New translations setting.json (Cornish)

* New translations setting.json (Sinhala)

* New translations setting.json (Spanish, Argentina)

* New translations setting.json (Portuguese, Brazilian)

* New translations setting.json (Ukrainian)

* New translations setting.json (Vietnamese)

* New translations setting.json (Chinese Traditional)

* New translations setting.json (Chinese Simplified)

* New translations main.json (Catalan)

* New translations setting.json (Bulgarian)

* New translations setting.json (Arabic)

* New translations setting.json (Afrikaans)

* New translations setting.json (Spanish)

* New translations setting.json (Romanian)

* New translations setting.json (French)

* New translations setting.json (Catalan)

* New translations setting.json (Italian)

* 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)
2021-04-09 17:19:46 +09:00
cutls
b42105fabe Revival TweetDeck Integration 2021-04-09 16:35:40 +09:00
dependabot-preview[bot]
7feea86cf7 Bump @fortawesome/fontawesome-free from 5.15.2 to 5.15.3 in /app
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.15.2 to 5.15.3.
- [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.2...5.15.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-01 20:14:49 +00:00
dependabot-preview[bot]
269405a40f Bump sanitize-html from 2.3.2 to 2.3.3 in /app
Bumps [sanitize-html](https://github.com/apostrophecms/sanitize-html) from 2.3.2 to 2.3.3.
- [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.2...2.3.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-01 20:14:23 +00:00
182 changed files with 14466 additions and 12313 deletions

49
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,49 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/app"
schedule:
interval: daily
time: "20:00"
open-pull-requests-limit: 10
ignore:
- dependency-name: font-manager
versions:
- "> 0.3.0, < 0.4"
- dependency-name: sweetalert2
versions:
- 10.14.1
- 10.15.0
- 10.15.1
- 10.15.2
- 10.15.3
- 10.15.5
- 10.15.6
- 10.16.0
- 10.16.2
- 10.16.5
- dependency-name: electron
versions:
- 11.2.1
- 12.0.2
- 12.0.3
- 12.0.4
- dependency-name: eslint
versions:
- 7.18.0
- 7.19.0
- 7.20.0
- 7.21.0
- 7.22.0
- 7.24.0
- dependency-name: itunes-nowplaying-mac
versions:
- 0.4.0
- dependency-name: electron-dl
versions:
- 3.0.3
- 3.1.0
- 3.2.0
- dependency-name: electron-rebuild
versions:
- 2.3.4

43
.github/workflows/build-linux.yml vendored Normal file
View File

@@ -0,0 +1,43 @@
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Linux build
on:
release:
types:
- created
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- run: cd app && yarn
- run: cd app && yarn build:all
- uses: shogo82148/actions-upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: "build/*.zip"
- uses: shogo82148/actions-upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: "build/*.snap"
- uses: shogo82148/actions-upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: "build/*.deb"
- uses: shogo82148/actions-upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: "build/*.AppImage"

42
.github/workflows/build-macos.yml vendored Normal file
View File

@@ -0,0 +1,42 @@
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: macOS build
on:
release:
types:
- created
jobs:
build:
runs-on: macos-latest
environment:
name: build
env:
APPLEID: ${{ secrets.APPLEID }}
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
CSC_LINK: ${{ secrets.CSC_LINK}}
strategy:
matrix:
node-version: [14.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- run: cd app && yarn
- run: cd app && yarn build:all
- uses: shogo82148/actions-upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: "build/*.zip"
- uses: shogo82148/actions-upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: "build/*.dmg"

35
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Windows build
on:
release:
types:
- created
jobs:
build:
runs-on: windows-latest
strategy:
matrix:
node-version: [14.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- run: cd app && yarn
- run: cd app && yarn build:all
- uses: shogo82148/actions-upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: "build/*.exe"
- uses: shogo82148/actions-upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: "build/*.appx"

9
.gitignore vendored
View File

@@ -21,15 +21,20 @@ app/view/cs
app/view/ps
app/view/es-AR
app/view/it-IT
app/view/pl-PL
app/git
*.code-workspace
releasenote.md
app/yarn-error.log
app/js/platform/aiscript.js
app/js/platform/native.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
app/view/pt-BR
app/build.js
app/view/make/make.js
app/view/make/makeCli.ts
app/.env

8
.prettierrc Normal file
View File

@@ -0,0 +1,8 @@
{
"tabWidth": 4,
"useTabs": true,
"semi": false,
"singleQuote": true,
"printWidth": 200,
"jsxBracketSameLine": true
}

View File

@@ -1,54 +1,19 @@
os:
- windows
- linux
- osx
matrix:
include:
- os: osx
osx_image: xcode11.3
language: node_js
env:
- YARN_GPG=no
node_js:
- '12.17.0'
- '14.16.1'
cache:
yarn: true
script: node -v
before_deploy:
- yarn global add electron-builder
- yarn global add browserify
- cd app
- 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 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
- 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 cd ../build;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 cd ../app;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then electron-builder --win --ia32 -p never;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../build;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then ls;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then mv TheDesk-setup.exe TheDesk-setup-ia32.exe;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then mv *$VERSION.exe TheDesk-ia32.exe;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../app;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then electron-builder --win --x64 -p never;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../build;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then ls;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then mv ../build/TheDesk-setup.exe ../build/TheDesk-setup.exe;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then mv ../build/*$VERSION.exe ../build/TheDesk.exe;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../app;else :;fi
- yarn
- yarn build:all
- cd ../
- ls build
deploy:

175
README.md
View File

@@ -1,9 +1,14 @@
<img src="https://thedesk.top/img/top.png" width="300" align="left">
<img src="https://thedesk.top/img/desk.png" width="150" align="right">
# TheDesk
**English** | [日本語](README_ja.md)
[![Build Status](https://travis-ci.org/cutls/TheDesk.svg?branch=master)](https://travis-ci.org/cutls/TheDesk)
<div align="center">
<img src="https://thedesk.top/img/desk.png" width="150" align="center">
<h1 align="center">TheDesk</h1>
[![Windows build](https://github.com/cutls/TheDesk/actions/workflows/build.yml/badge.svg)](https://github.com/cutls/TheDesk/actions/workflows/build.yml)
[![Linux build](https://github.com/cutls/TheDesk/actions/workflows/build-linux.yml/badge.svg)](https://github.com/cutls/TheDesk/actions/workflows/build-linux.yml)
[![Linux build](https://github.com/cutls/TheDesk/actions/workflows/build-macos.yml/badge.svg)](https://github.com/cutls/TheDesk/actions/workflows/build-macos.yml)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/thedesk/localized.svg)](https://translate.thedesk.top/project/thedesk)
[![FOSSA Status](https://bit.ly/2N4cLd1)](https://bit.ly/31zqMmZ)
[![Version](https://flat.badgen.net/github/release/cutls/TheDesk)](https://github.com/cutls/TheDesk/releases)
@@ -11,158 +16,40 @@
Mastodon/Misskey client for PC(Windows/Linux/macOS)
オープンソースSNSマストドン/MisskeyのPC向けクライアント[日本語はこちら](README_ja.md)
Download:[TheDesk](https://thedesk.top)
[![Download from TheDesk Official Website](https://thedesk.top/img/dlfrom-thedesk.svg?7)](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)
</div>
<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>
![Screenshots1](https://thedesk.top/img/scr1.png)
## License
## Build and Development
[GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)
See [Wiki](https://github.com/cutls/TheDesk/wiki)
The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/)
[Press Kit](https://d2upiril6ywqp9.cloudfront.net/press/TheDesk+PressKit.zip)
* [PNG 512x512](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.png)
* [SVG 4095x4096](https://d2upiril6ywqp9.cloudfront.net/press/thedesk-fullcolor.svg)
* [ico 256x256](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ico)
* [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/)
## Privacy Policy
* [プライバシーポリシー(Privacy Policy(ja))](https://thedesk.top/priv.html)
## Language
* 日本語(Japanese)
* 日本語, 関西(Japanese, Kansai)
* English
* български(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
Crowdin project is available! Visit: https://translate.thedesk.top
### Run on developer mode
`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
Build for macOS(Now: Travis CI)
* [toneji](https://minohdon.jp/@toneji)
Build for Linux(Now: Travis CI)
* [popn_ja](https://popon.pptdn.jp/@popn_ja)
Fellow coder
* [kPherox](https://pl.kpherox.dev/kPherox)
## Build
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
```sh
git clone https://github.com/cutls/TheDesk
cd TheDesk/app
npm install
npm install --only=dev
npm run construct
```
### yarn
```sh
git clone https://github.com/cutls/TheDesk
cd TheDesk/app
# Linux or macOS
yarn install --no-lockfile
# Windows
yarn install
yarn construct
```
run `yarn dev` to launch developer version with console(click `view`)
### electron-builder(Recommended)
Use scripts(they can work well with npm, **yarn**).
```sh
# Build for current platform
yarn build
# Select build target
## Windows
yarn build:win
## Windows and Linux (The macOS target should run on macOS. So, this option hasn't include the build for macOS)
yarn build:all
```
Config is all on package.json
### electron-packager
`yarn --D electron-rebuild`
Linux/macOS
`./node_modules/.bin/electron-rebuild`
Windows
`.\node_modules\.bin\electron-rebuild.cmd`
To install Python 2.x and Visual C++ for Windows, before running `npm install --save-dev electron-rebuild`
`npm install --global windows-build-tools`
Windows
```
electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --win32metadata.CompanyName="TheDesk&Cutls.com" --win32metadata.FileDescription="TheDesk" --win32metadata.OriginalFilename="TheDesk" --win32metadata.InternalName="TheDesk" --win32metadata.ProductName="TheDesk" --platform=win32 --arch=all --electron-version=4.0.5 --icon=.\app\thedesk.ico --overwrite
```
Linux
```
electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=linux --arch=x64,ia32 --electron-version=4.0.5 --overwrite
```
macOS
```
electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=darwin --arch=all --electron-version=4.0.5 --icon=./app/icon.icns --overwrite
```
### PWA support
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 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.)
[![Netlify Status](https://api.netlify.com/api/v1/badges/6916503b-2882-43f7-9681-ab814e6d28f9/deploy-status)](https://app.netlify.com/sites/thedesk/deploys)
## Pleroma support
Did you find a bug with Pleroma accounts?
Pleroma **does not** follow Mastodon API rules completely although Pleroma developers say so.
Please write issues to improve TheDesk affinity with Pleroma.
## Vulnerabilities when `yarn install`???
## License
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.
* [GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)
* [License of other assets](https://github.com/cutls/TheDesk/wiki/License-of-other-assets)
* [プライバシーポリシー(Privacy Policy(ja))](https://thedesk.top/priv.html)
## Contributors
[![](https://opencollective.com/TheDesk/contributors.svg?width=400&button=false)](https://github.com/cutls/TheDesk/graphs/contributors)
## Support
<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!" height="30"></a>
<a href="https://liberapay.com/cutls/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg" height="30"></a>
<a href="https://cutls.fanbox.cc"><img alt="PixivFANBOX" src="https://thedesk.top/img/fanbox.png" height="30"></a>
Or [others](https://cutls.dev) to support me.

View File

@@ -1,160 +1,34 @@
<img src="https://thedesk.top/img/top.png" width="300" align="left">
<img src="https://thedesk.top/img/desk.png" width="150" align="right">
# TheDesk
[English](README.md) | **日本語**
[![Build Status](https://travis-ci.org/cutls/TheDesk.svg?branch=master)](https://travis-ci.org/cutls/TheDesk)
<div align="center">
<img src="https://thedesk.top/img/desk.png" width="150" align="center">
<h1 align="center">TheDesk</h1>
[![Windows build](https://github.com/cutls/TheDesk/actions/workflows/build.yml/badge.svg)](https://github.com/cutls/TheDesk/actions/workflows/build.yml)
[![Linux build](https://github.com/cutls/TheDesk/actions/workflows/build-linux.yml/badge.svg)](https://github.com/cutls/TheDesk/actions/workflows/build-linux.yml)
[![Linux build](https://github.com/cutls/TheDesk/actions/workflows/build-macos.yml/badge.svg)](https://github.com/cutls/TheDesk/actions/workflows/build-macos.yml)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/thedesk/localized.svg)](https://translate.thedesk.top/project/thedesk)
[![FOSSA Status](https://bit.ly/2N4cLd1)](https://bit.ly/31zqMmZ)
[![Version](https://flat.badgen.net/github/release/cutls/TheDesk)](https://github.com/cutls/TheDesk/releases)
![Contributors](https://flat.badgen.net/github/contributors/cutls/TheDesk)
Mastodon/Misskey client for PC(Windows/Linux/macOS)
オープンソースSNSマストドン/MisskeyのPC向けクライアント
Download:[TheDesk](https://thedesk.top)
[Pixiv FANBOX](https://www.pixiv.net/fanbox/creator/28105985)
[![Download from TheDesk Official Website](https://thedesk.top/img/dlfrom-thedesk.svg?7)](https://thedesk.top)
`-store.*`とあるアセットはストアやパッケージマネージャ向けのもので、アップデートの確認をソフト本体で行いません。
</div>
![Screenshots1](https://thedesk.top/img/scr1.png)
## ライセンス
[GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)
アイコンは[クリエイティブ・コモンズ 表示-非営利-継承](https://creativecommons.org/licenses/by-nc-sa/4.0/)で提供されています。
[プレスキット](https://d2upiril6ywqp9.cloudfront.net/press/TheDesk+PressKit.zip)
* [PNG 512x512](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.png)
* [SVG 4095x4096](https://d2upiril6ywqp9.cloudfront.net/press/thedesk-fullcolor.svg)
* [ico 256x256](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ico)
* [icns old](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.icns)
* [Illustrator .ai](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ai)
標準の通知音は [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/) で提供されています。
## プライバシーポリシー
* [プライバシーポリシー](https://thedesk.top/priv.html)
## 言語
* 日本語
* 日本語(関西)
* English(英語)
* ドイツ語, チェコ語, ブルガリア語, イタリア語, スペイン語アルゼンチン方言 (from [Crowdin](https://translate.thedesk.top))
### 翻訳
## 翻訳
Crowdinから翻訳に参加してみませんか: https://translate.thedesk.top
以下、`yarn ***`は全て`npm run ***`で実行できます。(yarnが推奨)
## ビルドと開発
### デベロッパーモード
`yarn dev``app`フォルダ内で実行。
ただし、最初に`yarn construct`必須。
watchモード(ホットリロードはしません): `yarn construct`の代わりに`yarn watchview`
HTMLや言語定義の変更について、このコマンドで継続監視します。その他のアセットの変更には不要です。
プロセス1つを占拠するので、`yarn dev`は他のプロセスで行ってください。
## 主なコントリビューター
macOSビルダー(現在はTravis CI)
* [とねぢ](https://minohdon.jp/@toneji)
Linuxビルダー(現在はTravis CI)
* [ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja)
コーダー
* [kPherox](https://pl.kpherox.dev/kPherox)
## ビルド
npmでもyarnでも好きな方を選んでください。Windows環境ではyarnを強く推奨します。
### npm
```sh
git clone https://github.com/cutls/TheDesk
cd TheDesk/app
npm install
npm install --only=dev
npm run construct
```
### yarn
```sh
git clone https://github.com/cutls/TheDesk
cd TheDesk/app
# Linux or macOS
yarn install --no-lockfile
# Windows
yarn install
yarn construct
```
### electron-builder(推奨)
scriptsを利用します
```sh
# 実行している環境向けにビルド
yarn build
# ターゲットを指定してビルド
## Windows
yarn build:win
## macOS向けのビルドにはmacOSで実行する必要があるためこのコマンドではビルドされません
yarn build:all
```
ビルド設定はすべてpackage.jsonに記載しています。
### electron-packager(非推奨)
`yarn -D electron-rebuild`
Linux/macOS
`./node_modules/.bin/electron-rebuild`
Windows
`.\node_modules\.bin\electron-rebuild.cmd`
WindowsでPython 2.xやVisualC++を一発でインストールできるツールもあります(`npm install --save-dev electron-rebuild`の前に)
`npm install --global windows-build-tools`
日本語話者向けですが、macOSビルドにはXCodeが要るとの情報があります。([とねぢ](https://minohdon.jp/@toneji)氏談)
Windows
```
electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --win32metadata.CompanyName="TheDesk&Cutls.com" --win32metadata.FileDescription="TheDesk" --win32metadata.OriginalFilename="TheDesk" --win32metadata.InternalName="TheDesk" --win32metadata.ProductName="TheDesk" --platform=win32 --arch=all --electron-version=4.0.5 --icon=.\app\thedesk.ico --overwrite
```
Linux
```
electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=linux --arch=x64,ia32 --electron-version=4.0.5 --overwrite
```
macOS
```
electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=darwin --arch=all --electron-version=4.0.5 --icon=./app/icon.icns --overwrite
```
### PWAとして実行
TheDeskはウェブ技術を使用して作られているので、ブラウザで動かすこともできます。もちろん、Electron向けに設計されているので一部機能は動きません。
`yarn build:pwa`でビルドできます。PWAに必要な`manifest.json`やサービスワーカーなども用意されています。
**`node_modules`を`dependencies`にリネームしないと動きません。(Netlifyの制限ですが、Netlify以外で動かす場合にも必須です)**
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)
[Wiki](https://github.com/cutls/TheDesk/wiki)を参照。
## Pleromaのサポート
@@ -165,7 +39,22 @@ Issuesに書いてある問題についてはなるべく対処しますので
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)
## `yarn install`したら脆弱性あるって言われた
## ライセンス
materialize-cssの脆弱性(CVE-2019-11002/3/4)については[こちら](https://github.com/Dogfalo/materialize/issues/6286)で本当に脆弱性かどうか議論しています。
実際には害が無いものと思われます。
* [GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)
* [License of other assets](https://github.com/cutls/TheDesk/wiki/License-of-other-assets)
* [プライバシーポリシー](https://thedesk.top/priv.html)
## 主なコントリビューター
* <img src="https://user-images.githubusercontent.com/17561618/66582029-162df380-ebbc-11e9-8a6f-1832b3a35d89.png" width="20">[とねぢ](https://minohdon.jp/@toneji) macOSビルダー(現在はTravis CI)
* <img src="https://avatars3.githubusercontent.com/u/24523508?s=88&v=4" width="20">[ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja) Linuxビルダー(現在はTravis CI)
* <img src="https://user-images.githubusercontent.com/17561618/66582379-a3714800-ebbc-11e9-8402-d81a35a3be9f.png" width="20">[kPherox](https://pl.kpherox.dev/kPherox)
## 支援
<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!" height="30"></a>
<a href="https://liberapay.com/cutls/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg" height="30"></a>
<a href="https://cutls.fanbox.cc"><img alt="PixivFANBOX" src="https://thedesk.top/img/fanbox.png" height="30"></a>
[その他の支援法](https://cutls.dev)

View File

@@ -1,139 +1,134 @@
<!DOCTYPE html>
<html lang="ja">
<head>
<title>TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link href="./node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet" />
<link href="./css/font-awesome.css" rel="stylesheet" type="text/css" />
<link href="./css/themes.css" type="text/css" rel="stylesheet" />
<link href="./css/master.css" type="text/css" rel="stylesheet" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet" />
<meta charset="utf-8" />
<style>
body {
font-family: 'Open Sans';
-webkit-app-region: drag;
cursor: move;
padding: 5px;
padding-top: 15px;
}
a,
button {
-webkit-app-region: no-drag;
}
<head>
<title>TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link href="./node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet" />
<link href="./css/font-awesome.css" rel="stylesheet" type="text/css" />
<link href="./css/themes.css" type="text/css" rel="stylesheet" />
<link href="./css/master.css" type="text/css" rel="stylesheet" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet" />
<meta charset="utf-8" />
<style>
body {
font-family: 'Open Sans';
-webkit-app-region: drag;
cursor: move;
padding: 5px;
padding-top: 15px;
}
a,
button {
-webkit-app-region: no-drag;
}
.container {
width: 100%;
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr 1fr;
grid-template-areas: 'name1 data1' 'name2 data2' 'name3 data3' 'name4 data4' 'name5 data5' 'name6 data6';
text-align: left;
margin: 5px;
}
.area-name1 {
grid-area: name1;
}
.area-data1 {
grid-area: data1;
}
.area-name2 {
grid-area: name2;
}
.area-data2 {
grid-area: data2;
}
.area-name3 {
grid-area: name3;
}
.area-data3 {
grid-area: data3;
}
.area-name4 {
grid-area: name4;
}
.area-data4 {
grid-area: data4;
}
.area-name5 {
grid-area: name5;
}
.area-data5 {
grid-area: data5;
}
.area-name6 {
grid-area: name6;
}
.area-data6 {
grid-area: data6;
}
</style>
</head>
.container {
width: 100%;
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr 1fr;
grid-template-areas: 'name1 data1' 'name2 data2' 'name3 data3' 'name4 data4' 'name5 data5' 'name6 data6';
text-align: left;
margin: 5px;
}
<body class="center" style="overflow: hidden;">
<script type="text/javascript" src="./node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
<script type="text/javascript" src="./node_modules/materialize-css/dist/js/materialize.js"></script>
<img src="./img/desk.svg" style="max-width: 58%;" />
<h5>TheDesk</h5>
<div class="container">
<div class="area-name1">Display version</div>
<div class="area-data1" id="now"></div>
<div class="area-name2">Internal version</div>
<div class="area-data2" id="ver"></div>
<div class="area-name3">Commit(7chars)</div>
<div class="area-data3" id="hash"></div>
<div class="area-name4">Chromium</div>
<div class="area-data4" id="chrome"></div>
<div class="area-name5">Electron</div>
<div class="area-data5" id="electron"></div>
<div class="area-name6">Node.js</div>
<div class="area-data6" id="node"></div>
</div>
<div class="cp">
Copyright &copy; TheDesk 2018<br /> Main developer(author): <a href="https://1m.cutls.com/@Cutls" target="_blank">Cutls P</a><br />
<a href="https://github.com/cutls/TheDesk/graphs/contributors" style="text-align: center; user-select: none;"><img src="https://opencollective.com/TheDesk/contributors.svg?width=700&button=false" style="width: 100%"></a>
<br /><a href="https://thedesk.top" target="_blank">Web site</a>
</div>
<button onclick="window.close()" class="btn waves-effect indigo" style="width: calc(100% - 10px);"><i class="material-icons left">close</i>Close</button>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script>
var about = JSON.parse(localStorage.getItem('about'))
$('#now').text(localStorage.getItem('ver'))
$('#node').text(about[0])
$('#chrome').text(about[1])
$('#electron').text(about[2])
if (location.search) {
var m = location.search.match(/\?ver=([a-zA-Z-0-9.]+)/)
var ver = m[1]
$('#ver').text(ver)
}
$('#hash').html('<a href="https://github.com/cutls/TheDesk/commits/' + about[3] + '" target="_blank">' + about[3].slice(0, 7) + '</a>')
$(document).on('click', 'a', (e) => {
var url = $(e.target).attr('href')
postMessage(['openUrl', url], '*')
return false
})
</script>
</body>
.area-name1 {
grid-area: name1;
}
.area-data1 {
grid-area: data1;
}
.area-name2 {
grid-area: name2;
}
.area-data2 {
grid-area: data2;
}
.area-name3 {
grid-area: name3;
}
.area-data3 {
grid-area: data3;
}
.area-name4 {
grid-area: name4;
}
.area-data4 {
grid-area: data4;
}
.area-name5 {
grid-area: name5;
}
.area-data5 {
grid-area: data5;
}
.area-name6 {
grid-area: name6;
}
.area-data6 {
grid-area: data6;
}
</style>
</head>
<body class="center" style="overflow: hidden;">
<script type="text/javascript" src="./node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
<script type="text/javascript" src="./node_modules/materialize-css/dist/js/materialize.js"></script>
<img src="./img/desk.svg" style="max-width: 62%;" />
<h5>TheDesk</h5>
<div class="container">
<div class="area-name1">Display version</div>
<div class="area-data1" id="now"></div>
<div class="area-name2">Internal version</div>
<div class="area-data2" id="ver"></div>
<div class="area-name3">Commit(7chars)</div>
<div class="area-data3" id="hash"></div>
<div class="area-name4">Chromium</div>
<div class="area-data4" id="chrome"></div>
<div class="area-name5">Electron</div>
<div class="area-data5" id="electron"></div>
<div class="area-name6">Node.js</div>
<div class="area-data6" id="node"></div>
</div>
<div class="cp">
Copyright &copy; TheDesk 2018<br />
Main developer(author): <a href="https://cutls.com/@Cutls" target="_blank">Cutls P</a><br />
Thanks:<a href="https://minohdon.jp/@toneji" target="_blank">toneji</a>/<a href="https://popon.pptdn.jp/@popn_ja" target="_blank">popn_ja</a>/<a
href="https://pl.kpherox.dev/kPherox"
target="_blank"
>kPherox</a
>
and all users
<img draggable="false" style="width: 0.8rem; top: 1px; margin-left: 1px; position: relative;" alt="❤️" title=":heart:" src="https://twemoji.maxcdn.com/2/72x72/2764.png" />
<br /><a href="https://thedesk.top" target="_blank">Web site</a>
</div>
<button onclick="window.close()" class="btn waves-effect indigo" style="width: calc(100% - 10px);"><i class="material-icons left">close</i>Close</button>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script>
var about = JSON.parse(localStorage.getItem('about'))
$('#now').text(localStorage.getItem('ver'))
$('#node').text(about[0])
$('#chrome').text(about[1])
$('#electron').text(about[2])
if (location.search) {
var m = location.search.match(/\?ver=([a-zA-Z-0-9.]+)/)
var ver = m[1]
$('#ver').text(ver)
}
$('#hash').html('<a href="https://github.com/cutls/TheDesk/commits/' + about[3] + '" target="_blank">' + about[3].slice(0, 7) + '</a>')
$(document).on('click', 'a', (e) => {
var url = $(e.target).attr('href')
postMessage(['openUrl', url], '*')
return false
})
</script>
</body>
</html>
</html>

14
app/build.d.ts vendored Normal file
View File

@@ -0,0 +1,14 @@
declare function _exports(options?: {
onlyStore?: boolean;
withStore?: boolean;
withIa32?: boolean;
withArm64?: boolean;
windows?: boolean;
linux?: boolean;
macOS?: boolean;
skipWindows?: boolean;
skipLinux?: boolean;
skipMacOS?: boolean;
unnotarize?: boolean;
}): void;
export = _exports;

View File

@@ -1,112 +1,226 @@
const builder = require("electron-builder");
const fs = require('fs');
const os = process.platform;
const builder = require('electron-builder')
const path = require('path')
const fs = require('fs')
const basefile = __dirname + '/'
const package = fs.readFileSync(basefile + 'package.json')
const data = JSON.parse(package)
const version = data.version
const codename = data.codename
const ver = `${version} (${codename})`
const construct = require('./view/make/make.js')
const { platform, arch } = process
const Platform = builder.Platform
const Arch = builder.Arch
const targets = new Map();
const archToType = new Map();
const pref = {
productName: "TheDesk",
appId: "top.thedesk",
asarUnpack: [
"node_modules/itunes-nowplaying-mac"
],
const artifactName = 'TheDesk-setup-${arch}.${ext}'
const config = {
productName: 'TheDesk',
appId: 'top.thedesk',
asarUnpack: ['node_modules/itunes-nowplaying-mac', 'main/script'],
afterSign: 'build/notarize.js',
directories: {
output: "../build/"
output: '../build',
},
win: {
icon: "build/thedesk.ico",
target: [
"nsis",
"portable",
"appx"
]
icon: 'build/thedesk.ico',
target: ['nsis', 'appx', 'portable'],
publish: []
},
appx: {
identityName: "53491Cutls.TheDesk",
applicationId: "Cutls.TheDesk",
publisherDisplayName: "Cutls",
publisher: "CN=629757F5-A5EE-474F-9562-B304A89A9FD1",
languages: [
"JA-JP",
"EN-US"
]
identityName: '53491Cutls.TheDesk',
applicationId: 'Cutls.TheDesk',
publisherDisplayName: 'Cutls',
publisher: 'CN=629757F5-A5EE-474F-9562-B304A89A9FD1',
languages: ['JA-JP', 'EN-US'],
},
nsis: {
oneClick: false,
allowToChangeInstallationDirectory: true
allowToChangeInstallationDirectory: true,
artifactName: 'TheDesk-setup-${arch}.${ext}',
},
linux: {
icon: "build/icons",
target: [
"zip",
"snap"
],
category: "Network"
target: ['zip', 'appImage', 'snap', 'deb'],
category: 'Network',
},
mac: {
target: [
"dmg",
"zip"
]
hardenedRuntime: true,
gatekeeperAssess: false,
entitlements: 'build/entitlements.mac.plist',
entitlementsInherit: 'build/entitlements.mac.plist',
},
electronDownload: {
version: "5.0.1"
dmg: {
sign: false,
},
electronVersion: "5.0.1"
}
const json = JSON.parse(fs.readFileSync("package.json", 'utf8'));
const version = json.version;
if (os == "win32") {
archToType.set(Arch.ia32, []);
targets.set(Platform.WINDOWS, archToType);
} else if (os == "linux") {
archToType.set(Arch.x64, []);
archToType.set(Arch.ia32, []);
targets.set(Platform.LINUX, archToType);
} else if (os == "darwin") {
archToType.set(Arch.x64, []);
targets.set(Platform.MAC, archToType);
} else {
async function build(os, arch, config) {
let targets = new Map()
let archToType = new Map()
archToType.set(arch, [])
targets.set(os, archToType)
await builder.build({
targets: targets,
config: config,
publish: 'never'
})
}
async function cmd(options) {
if (isTrue(options, 'help', 'h')) {
return console.log(help())
}
if (isTrue(options, 'onlyStore') || isTrue(options, 'withStore')) {
console.log('start building for application stores')
construct(ver, basefile, false, true)
if ((platform == 'win32' && !isTrue(options, 'skiWindows')) || isTrue(options, 'windows', 'w')) {
if ((isTrue(options, 'withIa32') && arch == 'x64') || arch == 'ia32') {
config.nsis.artifactName = artifactName.replace('${arch}', 'ia32')
await build(Platform.WINDOWS, Arch.ia32, config)
fs.renameSync(
`../build/TheDesk ${version}.exe`,
'../build/TheDesk-ia32-store.exe'
)
fs.renameSync(
`../build/TheDesk-setup-ia32.exe`,
'../build/TheDesk-setup-ia32-store.exe'
)
}
if (arch == 'x64') {
config.nsis.artifactName = artifactName.replace('${arch}', 'x64')
await build(Platform.WINDOWS, Arch.x64, config)
fs.renameSync(
`../build/TheDesk ${version}.exe`,
'../build/TheDesk-store.exe'
)
fs.renameSync(
`../build/TheDesk-setup-x64.exe`,
'../build/TheDesk-setup-store.exe'
)
}
}
if ((platform == 'linux' && !isTrue(options, 'skipLinux')) || isTrue(options, 'linux', 'l')) {
if (arch == 'ia32') {
await build(Platform.LINUX, Arch.ia32, config)
}
if ((isTrue(options, 'withIa32') && arch == 'x64')) {
console.log('snapcraft does not curretly support builing i386 on amd64')
}
if (arch == 'x64') {
await build(Platform.LINUX, Arch.x64, config)
if (!isTrue(options, 'onlyStore')) {
fs.renameSync(
`../build/thedesk_${version}_amd64.snap`,
`../build/thedesk_${version}_amd64-store.snap`
)
}
}
}
}
if (!isTrue(options, 'onlyStore')) {
console.log('start building for normal usage')
construct(ver, basefile, false, false)
if ((platform == 'win32' && !isTrue(options, 'skiWindows')) || isTrue(options, 'windows', 'w')) {
if ((isTrue(options, 'withIa32') && arch == 'x64') || arch == 'ia32') {
config.nsis.artifactName = artifactName.replace('${arch}', 'ia32')
await build(Platform.WINDOWS, Arch.ia32, config)
fs.renameSync(
`../build/TheDesk ${version}.exe`,
'../build/TheDesk-ia32.exe'
)
}
if (arch == 'x64') {
config.nsis.artifactName = artifactName.replace('${arch}', 'x64')
await build(Platform.WINDOWS, Arch.x64, config)
fs.renameSync(
`../build/TheDesk ${version}.exe`,
'../build/TheDesk.exe'
)
fs.renameSync(
`../build/TheDesk-setup-x64.exe`,
'../build/TheDesk-setup.exe'
)
}
if ((isTrue(options, 'withArm64') && arch == 'x64') || arch == 'arm64') {
config.nsis.artifactName = artifactName.replace('${arch}', 'arm64')
await build(Platform.WINDOWS, Arch.arm64, config)
fs.renameSync(
`../build/TheDesk ${version}.exe`,
'../build/TheDesk-arm64.exe'
)
}
}
if ((platform == 'linux' && !isTrue(options, 'skipLinux')) || isTrue(options, 'linux', 'l')) {
if (arch == 'ia32') {
await build(Platform.LINUX, Arch.ia32, config)
}
if (isTrue(options, 'withIa32') && arch == 'x64') {
console.log('snapcraft does not curretly support builing i386 on amd64')
}
if (arch == 'x64') {
await build(Platform.LINUX, Arch.x64, config)
fs.renameSync(
`../build/thedesk_${version}_amd64.snap`,
`../build/thedesk_${version}_amd64-normal.snap`
)
if (isTrue(options, 'onlyStore') || isTrue(options, 'withStore')) {
fs.renameSync(
`../build/thedesk_${version}_amd64-store.snap`,
`../build/thedesk_${version}_amd64.snap`
)
}
}
}
if (platform == 'darwin' && !isTrue(options, 'skipMacOS')) {
if(isTrue(options, 'unnotarize')) delete config.afterSign
await build(Platform.MAC, Arch.x64, config)
}
}
}
function isTrue(options, long, short) {
const { argv } = process
if (options ? options[long] : 0) return true
if (argv.includes(`--${long}`)) return true
if (short && argv.includes(`-${short}`)) return true
return false
}
builder.build({
targets: targets,
config: pref
})
.then(() => {
console.log("Done on "+os)
if (os == "win32") {
console.log("Windows")
fs.renameSync('../build/TheDesk ' + version + '.exe', '../build/TheDesk-ia32.exe');
fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup-ia32.exe');
retry()
}else if (os == "linux") {
console.log("Linux")
fs.renameSync('../build/thedesk-' + version + '.zip', '../build/TheDesk.zip');
fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup-ia32.exe');
}
})
.catch((error) => {
// handle error
})
function retry(){
console.log("Windows x64")
const targetsAlt = new Map();
const archToTypeAlt = new Map();
targetsAlt.set(Platform.WINDOWS, archToTypeAlt);
archToTypeAlt.set(Arch.x64, []);
builder.build({
targets: targetsAlt,
config: pref
})
.then(() => {
fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup.exe');
fs.renameSync('../build/TheDesk ' + version + '.exe', '../build/TheDesk.exe');
})
.catch((error) => {
// handle error
})
}
function help() {
return `
TheDesk Builder command tool
yarn build [options] (or node build.js [options])
yarn build:[preset] (check package.json)
--help or -h: show help
[Build for other platforms]
--windows (-w)
--linux (-l)
--skipWindows
--skipLinux
--skipMacOS
To skip building for itself platform.
[only Windows, Linux]
--onlyStore: application store of platforms assets(without update check)
--withStore: application store assets and normal version
[only Windows]
--withIa32: ia32 build on x64 system(if your machine is ia32, it will be built if this arg is not passed)
--withArm64(beta) arm64 build on x64 system(if your machine is arm64, it will be built if this arg is not passed, and not build store build for arm64)
[only macOS]
--unnotarize: Without notarize
`
}
/**
* Builder
* @module builder
* @param {Object} [options] - Options
* @param {boolean} [options.onlyStore] - App Store of platforms assets(without update check)
* @param {boolean} [options.withStore] - App Store of platforms assets(without update check) assets and normal version
* @param {boolean} [options.withIa32] - [Windows only] ia32 build on x64 system(if your machine is ia32, it will be built if this arg is not passed)
* @param {boolean} [options.withArm64] - [Windows only(beta)] arm64 build on x64 system(if your machine is arm64, it will be built if this arg is not passed, and not build store build for arm64)
* @return {void}
*/
module.exports = cmd

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
</dict>
</plist>

23
app/build/notarize.js Normal file
View File

@@ -0,0 +1,23 @@
require('dotenv').config()
const { notarize } = require('electron-notarize')
// Notarizeをしない場合、下のuseNotarizeをtrueからfalseに変更してください。
const useNotarize = true
exports.default = async function notarizing(context) {
const { electronPlatformName, appOutDir } = context
if (electronPlatformName !== 'darwin' || !useNotarize) return
const appName = context.packager.appInfo.productFilename
console.log(`start notarize: ${appOutDir}/${appName}.app`)
try {
return await notarize({
appBundleId: 'top.thedesk',
appPath: `${appOutDir}/${appName}.app`,
appleId: process.env.APPLEID,
appleIdPassword: process.env.APPLEIDPASS,
})
} catch (e) {
throw console.log(e)
}
}

2
app/buildCli.js Normal file
View File

@@ -0,0 +1,2 @@
const cmd = require('./build')
cmd()

View File

@@ -91,4 +91,19 @@ i.left {
}
.text-line-icon {
font-size: 1rem;
}
.loginBtnWrap {
padding-top: 10px !important;
}
#add {
max-width: 1000px;
}
.autocomplete-content {
min-width: 450px;
}
.autocomplete-content li {
white-space: nowrap;
text-overflow: ellipsis;
word-break: break-word;
overflow: hidden;
}

View File

@@ -28,7 +28,9 @@ html {
text-transform: none;
height: 2.76rem;
line-height: 2.76rem;
border-radius: 0.5rem;
}
.markdown {
display: none;
}
@@ -88,22 +90,21 @@ option {
#imagewrap {
width: 100%;
height: 100%;
height: calc(100% - 4px);
}
#imagewrap img.rotate-90 {
transform: rotate(-90deg)
transform: rotate(-90deg);
}
#imagewrap img.rotate-180 {
transform: rotate(-180deg)
transform: rotate(-180deg);
}
#imagewrap img.rotate-270 {
transform: rotate(-270deg)
transform: rotate(-270deg);
}
.pointer {
cursor: pointer;
}
.badge {
min-width: 0 !important;
margin-left: 0.4rem !important;
}
.unvisible {
@@ -235,6 +236,12 @@ blockquote:before,
right: 0;
top: 0;
}
.menu-icon {
font-size: 1.4rem !important;
top: 0.3rem;
line-height: 1rem !important;
position: relative;
}
#start {
display: none;
position: fixed;
@@ -330,8 +337,26 @@ blockquote:before,
.collapsible-header:focus {
background-color: var(--thirdColor) !important;
}
.modal-footer {
.modal .modal-footer {
background-color: var(--modalfooter) !important;
border-radius: 0;
padding: 0;
}
.modal {
border-radius: 1.5rem;
}
.progress .determinate,
.progress .indeterminate {
background-color: var(--active);
}
.nomargin {
margin: 0;
}
#imginfo {
float: left;
padding-top: 0.23rem;
line-height: normal;
padding-left: 1rem;
}
.font {
font-size: 1.5rem;
@@ -343,7 +368,8 @@ blockquote:before,
.release-do {
border: solid 2px;
border-color: var(--text);
padding: 5px;
padding: 1.5rem;
border-radius: 0.5rem;
}
#pickers {
display: flex;
@@ -393,7 +419,8 @@ input[type='color']::-webkit-color-swatch {
color: var(--text);
}
#left-menu a:hover {
background-color: var(--beforehover);
background-color: var(--emphasized);
filter: brightness(80%);
}
#left-menu span {
margin-left: 0.4rem;
@@ -402,7 +429,9 @@ input[type='color']::-webkit-color-swatch {
background-color: var(--emphasized);
}
#left-menu a.active span {
text-decoration: underline;
text-decoration: none;
border-bottom: 1px solid;
padding-bottom: 0.5px;
}
#right-menu {
width: 100%;
@@ -418,16 +447,27 @@ input[type='color']::-webkit-color-swatch {
display: flex;
flex-wrap: wrap;
align-items: center;
width: 13rem;
height: 3.1rem;
min-width: 150px;
width: 50%;
height: 2.5rem;
cursor: pointer;
color: var(--text);
}
#tltype .type div {
margin-left: 5px;
margin-right: 5px;
margin-top: 3px;
}
#tltype .type span {
width: calc(100% - 2.3rem);
width: calc(100% - 4rem);
white-space: nowrap;
text-overflow: ellipsis;
word-break: break-word;
overflow: hidden;
}
#tltype .type:hover {
background-color: var(--beforehover);
background-color: var(--emphasized);
filter: brightness(80%);
}
#tltype .active {
background-color: var(--emphasized);
@@ -499,13 +539,25 @@ textarea {
font-size: 1rem !important;
font-family: inherit;
}
.swal2-popup {
.swal2-popup,
.swal2-header {
background-color: var(--subcolor) !important;
}
.swal2-title,
.swal2-content {
color: var(--text) !important;
}
h2.swal2-title {
margin: 0;
line-height: 100%;
}
.swal2-close:focus {
background-color: inherit !important;
box-shadow: none !important;
}
.swal2-actions {
background-color: var(--modalfooter);
}
#src-contents svg {
margin-right: 0.4rem;
}
@@ -548,6 +600,7 @@ textarea {
background-color: var(--emphasized);
}
#pageSrc {
border-radius: 10px;
position: absolute;
top: 0;
left: calc(50vw - 11.53rem);
@@ -555,10 +608,22 @@ textarea {
max-width: 100%;
background-color: var(--subcolor);
z-index: 501;
padding: 0.4rem;
}
#pageSrcInput {
width: 12.3rem;
.pageSrcBtn:hover {
background-color: var(--selected);
}
.srcQ {
margin-top: 0.4rem;
padding-left: 0.5rem;
padding-right: 0.5rem;
border-bottom: 1px solid;
}
.lastPSB {
margin-bottom: 0.4rem;
}
.pageSrcBtn {
padding-left: 0.5rem;
padding-right: 0.5rem;
}
.voice {
clip: rect(1px, 1px, 1px, 1px);
@@ -679,10 +744,19 @@ button {
}
.pluginNex {
width: 2rem;
text-align: center;
text-align: center;
}
.pluginNex span {
font-size: 2rem;
position: relative;
top: -4px;
}
position: relative;
top: -4px;
}
#fonts {
overflow-y: scroll;
width: 22rem;
height: 40rem;
position: absolute;
background-color: var(--bg);
z-index: 2;
padding: 5px;
}

View File

@@ -69,6 +69,20 @@ textarea {
overflow-y: scroll;
overflow-x: hidden;
}
#suggest {
position: absolute;
top: 0;
left: 0;
background-color: var(--bg);
z-index: 2;
border-radius: 0.5rem;
display: none;
max-height: 10rem;
}
#suggest a {
margin-left: 0.5rem;
margin-right: 0.5rem;
}
#emoji-list {
width: 100%;
height: 15.4rem;

File diff suppressed because it is too large Load Diff

View File

@@ -260,7 +260,7 @@ iframe,
width: 100%;
display: grid;
grid-template-columns: 3.3rem 2fr 1fr;
grid-template-rows: auto 1.6rem 1fr auto 2.5rem;
grid-template-rows: auto 1.6rem 1fr auto 1.9rem;
grid-template-areas: 'notice notice notice' 'icon display_name display_name' 'space toot toot' 'space additional additional' 'vis actions side';
}
.hide-actions {
@@ -353,15 +353,26 @@ iframe,
.area-actions {
padding: 0;
margin: 0;
top: -0.4rem;
position: relative;
display: flex;
justify-content: space-around;
max-width: 100%;
grid-area: actions;
}
.area-actions .btn-flat {
height: 1.3rem;
line-height: 1.3rem;
}
.area-actions .btn-flat,
.area-vis i,
.area-side .btn-flat {
margin: 0;
}
.area-side i {
line-height: initial;
}
.area-vis {
margin: 0.4rem;
margin: 0.2rem;
grid-area: vis;
text-align: center;
}
@@ -373,7 +384,16 @@ iframe,
margin: 0.15rem;
grid-area: side;
}
.notf-udg-text {
white-space: nowrap;
text-overflow: ellipsis;
word-break: break-word;
overflow: hidden;
max-width: calc(100% - 150px);
display: inline-block;
position: relative;
top: 0.2rem;
}
.cusr {
user-select: text;
padding-left: 0.4rem;
@@ -398,6 +418,12 @@ iframe,
margin-top: 0.46rem;
margin-left: 0.46rem;
}
.landing {
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
}
.quote-inline {
display: none;
@@ -431,6 +457,12 @@ iframe,
.btn-flat {
color: var(--text);
}
.sublink {
font-size: 1.4rem !important;
position: relative;
top: 0.4rem;
cursor: pointer;
}
.area-side i {
margin-left: 0.75rem;
}
@@ -441,6 +473,9 @@ iframe,
font-size: 1.2rem;
margin-right: 0.15rem;
}
.action li i {
margin-right: 0.5rem;
}
.action .fa-quote-right {
margin-top: 0.15rem;
}
@@ -534,15 +569,67 @@ p:not(:last-child) {
grid-template-rows: 2.3rem 2.3rem;
grid-template-areas: 'notice notice_name notice_name a2' 'notice a1 sta a3' 'notf-box notf-box notf-box notf-box';
}
.small-header.notice-box {
min-height: 2rem;
grid-template-columns: 2.3rem 1fr 5rem 2rem 2rem;
grid-template-rows: 1.8rem;
grid-template-areas: 'notice notice_name a1 a3 a2';
}
.small-header.has-notf.notice-box {
min-height: 2rem;
grid-template-columns: 2.3rem 1fr 8rem 5rem 2rem 2rem;
grid-template-rows: 1.8rem;
grid-template-areas: 'notice notice_name sta a1 a3 a2';
}
.emp {
font-weight: bold;
text-decoration: underline;
}
.rotate-90 {
transform: rotate(90deg);
}
.area-notice {
grid-area: notice;
}
.small-header .area-notice {
margin: 0;
}
.small-header .area-sta {
display: none;
}
.small-header.has-notf .area-sta {
overflow-x: scroll;
overflow-y: hidden;
height: 2rem;
width: 8rem;
display: flex;
}
.small-header .area-sta::-webkit-scrollbar {
height: 5px;
}
#tagContextMenu {
position: absolute;
top: 0;
left: 0;
background-color: var(--subcolor);
z-index: 2;
border-radius: 0.4rem;
}
#tagContextMenu a {
display: block;
color: var(--text);
padding-left: 0.5rem;
padding-right: 0.5rem;
}
#tagContextMenu a:hover {
background-color: var(--selected);
}
.firstTCM {
margin-top: 0.4rem;
}
.lastTCM {
margin-bottom: 0.4rem;
}
.area-notice_name {
grid-area: notice_name;
overflow: hidden;
@@ -558,6 +645,10 @@ p:not(:last-child) {
grid-area: a1;
}
.area-sta {
display: none;
}
.has-notf .area-sta {
display: block;
text-align: center;
grid-area: sta;
}
@@ -624,24 +715,37 @@ p:not(:last-child) {
border: thin solid gray;
border-bottom: 2px solid white;
grid-area: notf-box;
box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12),
0 5px 5px -3px rgba(0, 0, 0, 0.3), 0px -10px 10px 0px rgba(0, 0, 0, 0.3) inset;
box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.3), 0px -10px 10px 0px rgba(0, 0, 0, 0.3) inset;
}
.notf-indv-box label span {
padding-left: 23px !important;
margin-right: 5px;
}
.columnSettings {
display: flex;
flex-wrap: wrap;
}
.notf-indv-box .setting {
font-size: 1rem;
width: calc(25% - 3px);
text-align: left;
padding: 5px;
height: 70px;
width: calc(25% - 6px);
margin: 3px;
height: 100px;
text-align: center;
display: flex;
flex-direction: column;
padding-top: 17px;
border: 1px solid;
border-radius: 5px;
}
.notf-indv-box .setting:hover {
color: var(--text);
}
.notf-exclude-btn {
border: 1px solid;
}
.notf-exclude-btn:hover {
background-color: inherit !important;
border: 1px solid;
filter: brightness(70%);
}
.type-b {
display: none;
@@ -673,6 +777,9 @@ p:not(:last-child) {
overflow: hidden;
position: relative;
}
.dropdown-content li {
padding-top: 0.4rem;
}
.fa-2x > .emoji-img {
width: 2.3rem !important;
height: 2.3rem !important;
@@ -756,7 +863,9 @@ p:not(:last-child) {
width: 100%;
height: 100%;
}
.fav_ct, .rt_ct, .rep_ct {
.fav_ct,
.rt_ct,
.rep_ct {
font-size: 1.1rem;
}
.shared.selectedToot {
@@ -856,6 +965,14 @@ audio {
.box .ui-resizable-se {
display: none !important;
}
.small-header .top-icon {
font-size: 2rem !important;
padding-top: 0%;
}
.top-icon {
font-size: 40px !important;
padding-top: 25%;
}
.announcement {
padding: 0.38rem;
border-bottom: 1px solid;
@@ -883,4 +1000,4 @@ audio {
}
.reactionsPack {
display: flex;
}
}

View File

@@ -24,21 +24,20 @@
}
#his-float-data {
height: 100%;
overflow-y: hidden;
overflow-y: hidden;
}
#his-leftside {
width: 28.4rem;
max-width: 30vw;
width: 28.4rem;
max-width: 30vw;
}
#his-float-timeline {
max-width: 47.5rem;
min-width: calc(100% - 29.4rem);
max-width: 47.5rem;
width: calc(100% - 28.4rem);
height: 100%;
overflow-y: hidden;
}
#his-basic-prof {
display: flex;
display: flex;
min-height: 10rem;
}
#his-field {
@@ -150,13 +149,24 @@
background-color: var(--bg);
}
#hisdropdown li a {
color: white;
color: var(--text);
}
#hisdropdown li:hover {
background-color: var(--active);
}
#his-data-title {
#his-data-title-wrap {
width: 100%;
text-align: center;
font-size: 1.5rem;
display: flex;
justify-content: center;
align-items: center;
}
#his-data-title .material-icons {
position: relative;
top: 5px;
margin-right: 3px;
}
#his-data-title a {
color: white;
}

6
app/gitHash.js Normal file
View File

@@ -0,0 +1,6 @@
const fs = require('fs')
const execSync = require('child_process').execSync
const gitHash = execSync('git rev-parse HEAD')
.toString()
.trim()
fs.writeFileSync('git', gitHash)

View File

@@ -5,20 +5,6 @@ function verck(ver, jp) {
$('body').addClass(localStorage.getItem('platform'))
var date = new Date()
var showVer = false
//Spotify
if (localStorage.getItem('spotify')) {
localStorage.removeItem('spotify')
localStorage.removeItem('spotify-refresh')
var spDc = 'Spotify NowPlaying sysytem was changed, please re-login to Spotify'
if(lang.language == 'ja') {
spDc = 'Spotify NowPlayingの機能が変更されたため、もう一度ログインしてください'
}
Swal.fire({
type: 'info',
title: spDc,
})
}
//Spotify(e)
if (localStorage.getItem('ver') != ver && localStorage.getItem('winstore')) {
showVer = true
console.log('%c Thank you for your update🎉', 'color: red;font-size:200%;')
@@ -44,10 +30,7 @@ function verck(ver, jp) {
localStorage.setItem('ver', ver)
if (!showVer) {
console.log(showVer)
if (
date.getFullYear() * 100 + date.getMonth() + 1 >= localStorage.getItem('showSupportMe') ||
!localStorage.getItem('showSupportMe')
) {
if (!localStorage.getItem('showSupportMe')) {
if (date.getMonth() == 11) {
var yrs = date.getFullYear() + 1
var nextmonth = yrs * 100 + 1
@@ -55,21 +38,35 @@ function verck(ver, jp) {
var yrs = date.getFullYear()
var nextmonth = yrs * 100 + date.getMonth() + 2
}
if (lang.language != 'ja') {
$('#support-btm-ja').addClass('hide')
$('#support-btm-en').removeClass('hide')
}
localStorage.setItem('showSupportMe', nextmonth)
$('#support-btm').removeClass('hide')
$('#support-btm').animate(
{
bottom: '0'
},
{
duration: 300
} else {
if (
date.getFullYear() * 100 + date.getMonth() + 1 >= localStorage.getItem('showSupportMe')
) {
if (date.getMonth() == 11) {
var yrs = date.getFullYear() + 1
var nextmonth = yrs * 100 + 1
} else {
var yrs = date.getFullYear()
var nextmonth = yrs * 100 + date.getMonth() + 2
}
)
localStorage.setItem('showSupportMe', nextmonth)
if (lang.language != 'ja') {
$('#support-btm-ja').addClass('hide')
$('#support-btm-en').removeClass('hide')
}
$('#support-btm').removeClass('hide')
$('#support-btm').animate(
{
bottom: '0'
},
{
duration: 300
}
)
}
}
}
var platform = localStorage.getItem('platform')
console.log('Your platform:' + platform)
@@ -114,11 +111,6 @@ function verck(ver, jp) {
.then(function(mess) {
console.table(mess)
if (mess) {
//askjp_jp_ua: 2019年10月24日、mstdn.jpによるユーザーエージェントアクセス制限
if (jp && mess.jp_ua && !localStorage.getItem('askjp_jp_ua')) {
localStorage.setItem('askjp_jp_ua', true)
$('#askjp_jp_ua').removeClass('hide')
}
var platform = localStorage.getItem('platform')
if (platform == 'darwin') {
var newest = mess.desk_mac

View File

@@ -537,9 +537,10 @@ function multiSelector(parseC) {
}
last = last + ''
var sel
const webview = localStorage.getItem('webview_setting') === 'true'
if (obj.length < 1) {
$('#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>${webview ? `<option value="webview">TweetDeck</option>` : ''}`)
} else {
Object.keys(obj).forEach(function (key) {
var acct = obj[key]
@@ -610,7 +611,7 @@ function multiSelector(parseC) {
$('#add-acct-sel').append(
'<option value="noauth">' +
lang.lang_login_noauth +
'</option><!--option value="webview">Twitter</option-->'
`</option>${webview ? `<option value="webview">TweetDeck</option>` : ''}`
)
$('#dir-acct-sel').append('<option value="noauth">' + lang.lang_login_noauth + '</option>')
}

View File

@@ -205,8 +205,6 @@ function multiDel(target) {
text: obj[target]['user'] + '@' + obj[target]['domain'] + lang.lang_manager_confirm,
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: lang.lang_yesno,
cancelButtonText: lang.lang_no
}).then(result => {
@@ -299,8 +297,6 @@ function multiDel2(target) {
text: obj[target]['user'] + '@' + obj[target]['domain'] + lang.lang_manager_confirm,
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: lang.lang_yesno,
cancelButtonText: lang.lang_no
}).then(result => {
@@ -427,10 +423,6 @@ function login(url) {
versionChecker(url)
$('#add').hide()
postMessage(['openUrl', auth], '*')
if ($('#linux:checked').val() == 'on') {
} else {
postMessage(['sendSinmpleIpc', 'quit'], '*')
}
}
}
}
@@ -629,15 +621,16 @@ function misskeyAuth(url, mkc) {
//テキストボックスにURL入れた
function instance() {
var url = $('#url').val()
var url = $('#autocomplete-input').val()
if (url.indexOf('@') != -1 || url.indexOf('https') != -1) {
alert('入力形式が違います。(Cutls@mstdn.jpにログインする場合、入力するのは"mstdn.jp"です。)')
return false
}
login(url)
login(url)
}
//コード入れてAccessTokenゲット
function code(code) {
var red = localStorage.getItem('redirect')
localStorage.removeItem('redirect')
if (!code) {
var code = $('#code').val()
@@ -700,7 +693,7 @@ function code(code) {
}
return
} else {
var red = 'urn:ietf:wg:oauth:2.0:oob'
if (!red) red = 'urn:ietf:wg:oauth:2.0:oob'
if (~url.indexOf('pixelfed')) {
red = 'https://thedesk.top/hello.html'
}
@@ -724,6 +717,7 @@ function code(code) {
if (httpreq.readyState === 4) {
var json = httpreq.response
if (this.status !== 200) {
M.toast({ html: lang.lang_fatalerroroccured + 'Error: cannot complete', displayLength: 5000 })
setLog(start, this.status, json)
}
if (json['access_token']) {
@@ -1093,15 +1087,14 @@ function coloradd(key, bg, txt) {
//入力時にハッシュタグと@をサジェスト
var timer = null
var input = document.getElementById('url')
var input = document.getElementById('autocomplete-input')
var prev_val = input.value
var oldSuggest
var suggest
input.addEventListener(
'focus',
function () {
$('#ins-suggest').html('')
const instance = M.Autocomplete.getInstance(input)
window.clearInterval(timer)
timer = window.setInterval(function () {
var new_val = input.value
@@ -1112,7 +1105,7 @@ input.addEventListener(
method: 'GET',
headers: {
'content-type': 'application/json',
}
}
})
.then(function (response) {
if (!response.ok) {
@@ -1129,21 +1122,20 @@ input.addEventListener(
})
.then(function (json) {
if (!json.error) {
var urls = 'Suggest:'
let data = {}
Object.keys(json.data).forEach(function (key) {
var url = json.data[key]
urls =
urls +
`<a onclick="login('${url.uri}')" class="pointer" title="${url.uri}">${escapeHTML(url.title ? url.title : url.uri)}</a>, `
data[url.uri] = escapeHTML(url.title ? url.title : url.uri)
})
$('#ins-suggest').html(urls)
instance.updateData(data)
instance.open()
} else {
console.error(json.error)
}
})
}
oldSuggest = suggest
prev_value = new_val
prev_val = new_val
}
}, 1000)
},
@@ -1161,3 +1153,12 @@ input.addEventListener(
function asReadEnd() {
postMessage(['asReadComp', ''], '*')
}
// Or with jQuery
$(document).ready(function(){
$('input.autocomplete').autocomplete({
data: {},
});
});

View File

@@ -29,7 +29,7 @@ $(document).on('click', 'a', e => {
acct_id = 0
}
$a.parent().addClass('loadp')
$a.parent().text('Loading...')
detEx(url, acct_id)
}
} else if (tags) {
@@ -186,7 +186,7 @@ onmessage = function (e) {
} else if (e.data[0] == 'asReadEnd') {
asReadEnd()
} else if (e.data[0] == 'accessibility') {
console.log('atrue')
console.log('accessibility mode')
$('body').addClass('accessibility')
$('.window-title').before('<div class="accessMark">Screen Reader Optimized</div>')
} else if (e.data[0] == 'logData') {
@@ -198,6 +198,24 @@ onmessage = function (e) {
type: 'info',
title: e.data[1]
})
} else if (e.data[0] == 'twitterLoginComplete') {
location.reload()
} else if (e.data[0] == 'customUrl') {
const mode = e.data[1][0]
const codex = e.data[1][1]
if (mode === 'share') {
$('textarea').focus()
$('#textarea').val(decodeURI(codex))
show()
$('body').removeClass('mini-post')
$('.mini-btn').text('expand_less')
} else if (mode === 'manager' || mode === 'login') {
code(codex)
} else if (mode === 'spotify') {
var coder = codex.split(':')
localStorage.setItem('spotify', coder[0])
localStorage.setItem('spotify-refresh', coder[1])
}
}
}
/* PWA */
@@ -234,3 +252,34 @@ const connection = function (event) {
}
window.onoffline = connection
window.ononline = connection
let lastSelection = null
let isSame = true
$(document).on('keyup mouseup', function (e) {
lastSelection = (window.getSelection().toString() !== '') ? window.getSelection().getRangeAt(0) : null
if (!isSame) $('#pageSrc').addClass('hide')
})
// カスタム右クリックメニュー
$(document).on('contextmenu', function (e) {
// テキスト選択中であれば何もしない
if (lastSelection !== null) {
const currentSelection = window.getSelection().getRangeAt(0)
for (let key in currentSelection) {
if (currentSelection[key] != lastSelection[key]) {
isSame = false
break
}
}
if (isSame && currentSelection != '') {
$('#pageSrc').removeClass('hide')
$('#pageSrc').css('left', e.pageX)
$('#pageSrc').css('top', e.pageY)
$('.srcQ').text(currentSelection)
}
}
})
$('textarea, input').on('contextmenu', function (e) {
postMessage(['textareaContextMenu', { x: e.pageX, y: e.pageY }], '*')
})

View File

@@ -1,292 +1,303 @@
window.onload = function () {
console.log('loaded')
initPostbox()
connection()
initPlugin(plugins)
if(localStorage.getItem('control-center-np')) $('#ccnp').removeClass('hide')
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) {
return ''
}
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('')
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi
return str.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''
})
$.strip_tags = function(str, allowed) {
if (!str) {
return ''
}
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('')
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''
})
}
function escapeHTML(str) {
if (!str) {
return ''
}
return str
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;')
if (!str) {
return ''
}
return str
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;')
}
//PHPのnl2brと同様
function nl2br(str) {
if (!str) {
return ''
}
str = str.replace(/\r\n/g, '<br />')
str = str.replace(/(\n|\r)/g, '<br />')
return str
if (!str) {
return ''
}
str = str.replace(/\r\n/g, '<br />')
str = str.replace(/(\n|\r)/g, '<br />')
return str
}
function br2nl(str) {
if (!str) {
return ''
}
str = str.replace(/<br \/>/g, '\r\n')
return str
if (!str) {
return ''
}
str = str.replace(/<br \/>/g, '\r\n')
return str
}
function formattime(date) {
var str = date.getFullYear() + '-'
if (date.getMonth() + 1 < 10) {
str = str + '0' + (date.getMonth() + 1) + '-'
} else {
str = str + (date.getMonth() + 1) + '-'
}
if (date.getDate() < 10) {
str = str + '0' + date.getDate()
} else {
str = str + date.getDate()
}
str = str + 'T'
if (date.getHours() < 10) {
str = str + '0' + date.getHours() + ':'
} else {
str = str + date.getHours() + ':'
}
if (date.getMinutes() < 10) {
str = str + '0' + date.getMinutes()
} else {
str = str + date.getMinutes()
}
return escapeHTML(str)
var str = date.getFullYear() + '-'
if (date.getMonth() + 1 < 10) {
str = str + '0' + (date.getMonth() + 1) + '-'
} else {
str = str + (date.getMonth() + 1) + '-'
}
if (date.getDate() < 10) {
str = str + '0' + date.getDate()
} else {
str = str + date.getDate()
}
str = str + 'T'
if (date.getHours() < 10) {
str = str + '0' + date.getHours() + ':'
} else {
str = str + date.getHours() + ':'
}
if (date.getMinutes() < 10) {
str = str + '0' + date.getMinutes()
} else {
str = str + date.getMinutes()
}
return escapeHTML(str)
}
function formattimeutc(date) {
var str = date.getUTCFullYear() + '-'
if (date.getUTCMonth() + 1 < 10) {
str = str + '0' + (date.getUTCMonth() + 1) + '-'
} else {
str = str + (date.getUTCMonth() + 1) + '-'
}
if (date.getUTCDate() < 10) {
str = str + '0' + date.getUTCDate()
} else {
str = str + date.getUTCDate()
}
str = str + 'T'
if (date.getUTCHours() < 10) {
str = str + '0' + date.getUTCHours() + ':'
} else {
str = str + date.getUTCHours() + ':'
}
if (date.getUTCMinutes() < 10) {
str = str + '0' + date.getUTCMinutes()
} else {
str = str + date.getUTCMinutes()
}
return escapeHTML(str)
var str = date.getUTCFullYear() + '-'
if (date.getUTCMonth() + 1 < 10) {
str = str + '0' + (date.getUTCMonth() + 1) + '-'
} else {
str = str + (date.getUTCMonth() + 1) + '-'
}
if (date.getUTCDate() < 10) {
str = str + '0' + date.getUTCDate()
} else {
str = str + date.getUTCDate()
}
str = str + 'T'
if (date.getUTCHours() < 10) {
str = str + '0' + date.getUTCHours() + ':'
} else {
str = str + date.getUTCHours() + ':'
}
if (date.getUTCMinutes() < 10) {
str = str + '0' + date.getUTCMinutes()
} else {
str = str + date.getUTCMinutes()
}
return escapeHTML(str)
}
postMessage(['sendSinmpleIpc', 'custom-css-request'], '*')
function makeCID() {
let chars = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("")
for (let i = 0, len = chars.length; i < len; i++) {
switch (chars[i]) {
case "x":
chars[i] = Math.floor(Math.random() * 16).toString(16)
break
case "y":
chars[i] = (Math.floor(Math.random() * 4) + 8).toString(16)
break
}
}
return chars.join("")
}
function randomStr(l) {
// 生成する文字列に含める文字セット
var c = 'abcdefghijklmnopqrstuvwxyz0123456789'
var cl = c.length
var r = ''
for (var i = 0; i < l; i++) {
r += c[Math.floor(Math.random() * cl)]
}
return r
return uuid()
}
function rgbToHex(color) {
// HEXに変換したものを代入する変数
var hex = ''
// HEXに変換したものを代入する変数
var hex = ''
// 第1引数がHEXのとき変換処理は必要ないのでそのままreturn
// IE8の場合はjQueryのcss()関数でHEXを返すので除外
if (color.match(/^#[a-f\d]{3}$|^#[a-f\d]{6}$/i)) {
return color
}
// 第1引数がHEXのとき変換処理は必要ないのでそのままreturn
// IE8の場合はjQueryのcss()関数でHEXを返すので除外
if (color.match(/^#[a-f\d]{3}$|^#[a-f\d]{6}$/i)) {
return color
}
// 正規表現
var regex = color.match(/^rgb\(([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\)$/)
// 正規表現
var regex = color.match(/^rgb\(([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\)$/)
// 正規表現でマッチしたとき
if (regex) {
var rgb = [
// RGBからHEXへ変換
parseInt(regex[1]).toString(16),
parseInt(regex[2]).toString(16),
parseInt(regex[3]).toString(16)
]
// 正規表現でマッチしたとき
if (regex) {
var rgb = [
// RGBからHEXへ変換
parseInt(regex[1]).toString(16),
parseInt(regex[2]).toString(16),
parseInt(regex[3]).toString(16)
]
for (var i = 0; i < rgb.length; ++i) {
// rgb(1,1,1)のようなときHEXに変換すると1桁になる
// 1桁のときは前に0を足す
if (rgb[i].length == 1) {
rgb[i] = '0' + rgb[i]
}
hex += rgb[i]
}
for (var i = 0; i < rgb.length; ++i) {
// rgb(1,1,1)のようなときHEXに変換すると1桁になる
// 1桁のときは前に0を足す
if (rgb[i].length == 1) {
rgb[i] = '0' + rgb[i]
}
hex += rgb[i]
}
return hex
}
return hex
}
console.error(color + ':第1引数はRGB形式で入力')
console.error(color + ':第1引数はRGB形式で入力')
}
/*マルチバイト用切り出し*/
$.isSurrogatePear = function (upper, lower) {
return 0xd800 <= upper && upper <= 0xdbff && 0xdc00 <= lower && lower <= 0xdfff
$.isSurrogatePear = function(upper, lower) {
return 0xd800 <= upper && upper <= 0xdbff && 0xdc00 <= lower && lower <= 0xdfff
}
$.mb_strlen = function (str) {
var splitter = new GraphemeSplitter()
var arr = splitter.splitGraphemes(str)
return arr.length
$.mb_strlen = function(str) {
var splitter = new GraphemeSplitter()
var arr = splitter.splitGraphemes(str)
return arr.length
}
$.mb_substr = function (str, begin, end) {
//配列にする
var splitter = new GraphemeSplitter()
var arr = splitter.splitGraphemes(str)
var newarr = []
for (var i = 0; i < arr.length; i++) {
if (i >= begin && i <= end) {
newarr.push(arr[i])
}
}
return newarr.join('')
}
//ソートするやつ
$.mb_substr = function(str, begin, end) {
//配列にする
var splitter = new GraphemeSplitter()
var arr = splitter.splitGraphemes(str)
var newarr = []
for (var i = 0; i < arr.length; i++) {
if (i >= begin && i <= end) {
newarr.push(arr[i])
}
}
return newarr.join('')
}
//ソートするやつ
function object_array_sort(data, key, order, fn) {
var num_a = -1
var num_b = 1
if (order === 'asc') {
num_a = 1
num_b = -1
}
data = data.sort(function (a, b) {
var x = a[key]
var y = b[key]
if (x > y) return num_a
if (x < y) return num_b
return 0
})
var arrObj = {}
for (var i = 0; i < data.length; i++) {
arrObj[data[i]['family']] = data[i]
}
data = []
for (var key in arrObj) {
data.push(arrObj[key])
}
fn(data)
var num_a = -1
var num_b = 1
if (order === 'asc') {
num_a = 1
num_b = -1
}
data = data.sort(function(a, b) {
var x = a[key]
var y = b[key]
if (x > y) return num_a
if (x < y) return num_b
return 0
})
var arrObj = {}
for (var i = 0; i < data.length; i++) {
arrObj[data[i]['family']] = data[i]
}
data = []
for (var key in arrObj) {
data.push(arrObj[key])
}
fn(data)
}
function setLog(txt1, txt2, txt3) {
//url,statuscode,responsetext
var text = new Date().toUTCString()
text = text + ',' + txt1 + ',' + txt2 + ',' + escapeCsv(txt3)
console.error(text)
postMessage(['log', text], '*')
//url,statuscode,responsetext
var text = new Date().toUTCString()
text = text + ',' + txt1 + ',' + txt2 + ',' + escapeCsv(txt3)
console.error(text)
postMessage(['log', text], '*')
}
function escapeCsv(str) {
if (!str) {
return str
}
var result
result = str.toString().replace(/\"/g, '""')
if (result.indexOf(',') >= 0) {
result = '"' + result + '"'
}
return result
if (!str) {
return str
}
var result
result = str.toString().replace(/\"/g, '""')
if (result.indexOf(',') >= 0) {
result = '"' + result + '"'
}
return result
}
function evalAttr(json, attr, lenCk) {
if (json[attr]) {
if (lenCk) {
if (json[attr][0]) {
return true
} else {
return false
}
} else {
return true
}
} else {
return false
}
if (json[attr]) {
if (lenCk) {
if (json[attr][0]) {
return true
} else {
return false
}
} else {
return true
}
} else {
return false
}
}
function statusModel(now) {
if (!now) {
var now = new Date().toString()
}
return {
id: '',
created_at: now,
in_reply_to_id: null,
in_reply_to_account_id: null,
sensitive: false,
spoiler_text: '',
visibility: 'public',
language: 'en',
uri: '',
url: '',
replies_count: 0,
reblogs_count: 0,
favourites_count: 0,
favourited: false,
reblogged: false,
muted: false,
bookmarked: false,
pinned: false,
content: '<p><i>No status here</i></p>',
reblog: null,
application: {
name: null,
website: null
},
account: {
id: '',
username: '',
acct: '',
display_name: '',
locked: false,
bot: false,
created_at: now,
note: '',
url: '',
avatar: '',
avatar_static: '',
header: '',
header_static: '',
followers_count: 0,
following_count: 0,
statuses_count: 0,
last_status_at: now,
emojis: [],
fields: []
},
media_attachments: [],
mentions: [],
tags: [],
card: null,
poll: null
}
if (!now) {
var now = new Date().toString()
}
return {
id: '',
created_at: now,
in_reply_to_id: null,
in_reply_to_account_id: null,
sensitive: false,
spoiler_text: '',
visibility: 'public',
language: 'en',
uri: '',
url: '',
replies_count: 0,
reblogs_count: 0,
favourites_count: 0,
favourited: false,
reblogged: false,
muted: false,
bookmarked: false,
pinned: false,
content: '<p><i>No status here</i></p>',
reblog: null,
application: {
name: null,
website: null
},
account: {
id: '',
username: '',
acct: '',
display_name: '',
locked: false,
bot: false,
created_at: now,
note: '',
url: '',
avatar: '',
avatar_static: '',
header: '',
header_static: '',
followers_count: 0,
following_count: 0,
statuses_count: 0,
last_status_at: now,
emojis: [],
fields: []
},
media_attachments: [],
mentions: [],
tags: [],
card: null,
poll: null
}
}
function webviewFinder() {
const webview = document.querySelector('webview')
webview.addEventListener('did-navigate', (e) => {
const url = webview.getURL()
if (url.match('https://mobile.twitter.com/login')) {
postMessage(['twitterLogin', null], '*')
} else if (url.match('https://mobile.twitter.com/logout')) {
postMessage(['twitterLogin', true], '*')
}
})
}
function initWebviewEvent() {
if (document.querySelector('webview')) { webviewFinder() } else {
const timerWV = setInterval(function() {
document.querySelector('webview') ?
(webviewFinder(), clearInterval(timerWV)) :
console.log('まだロード中')
}, 500)
}
}

View File

@@ -54,6 +54,8 @@ onmessage = function(e) {
ipc.send('theme-json-request', e.data[1])
} else if (e.data[0] == 'ha') {
ipc.send('ha', e.data[1])
} else if (e.data[0] == 'webviewSetting') {
ipc.send('webview', e.data[1])
} else if (e.data[0] == 'frameSet') {
ipc.send('frameSet', e.data[1])
} else if (e.data[0] == 'ua') {
@@ -64,7 +66,9 @@ onmessage = function(e) {
console.log('NowPlaying')
ipc.send('itunes', e.data[1])
} else if (e.data[0] == 'themeCSSRequest') {
ipc.send('theme-css-request', e.data[1])
ipc.send('theme-css-request', e.data)
} else if (e.data[0] == 'themeCSSPreview') {
ipc.send('theme-css-request', e.data)
} else if (e.data[0] == 'customCSSRequest') {
ipc.send('custom-css-request', e.data[1])
} else if (e.data[0] == 'downloadButton') {
@@ -77,6 +81,10 @@ onmessage = function(e) {
ipc.send('copy', e.data[1])
} else if (e.data[0] == 'log') {
ipc.send('log', e.data[1])
} else if (e.data[0] == 'twitterLogin') {
ipc.send('twitterLogin', e.data[1])
} else if (e.data[0] == 'textareaContextMenu') {
ipc.send('textareaContextMenu', e.data[1])
}
}
//version.js
@@ -227,9 +235,12 @@ ipc.on('asReadEnd', function(event, arg) {
ipc.on('accessibility', function(event, arg) {
postMessage(['accessibility', 'true'], '*')
})
var webviewDom = document.getElementById('webview')
if (webviewDom) {
webviewDom.addEventListener('new-window', function(e) {
shell.openExternal(e.url)
})
}
ipc.on('twitterLoginComplete', function(event, arg) {
postMessage(['twitterLoginComplete', ''], '*')
})
ipc.on('alert', function(event, arg) {
postMessage(['alert', arg], '*')
})
ipc.on('customUrl', function(event, args) {
postMessage(['customUrl', args], '*')
})

View File

@@ -19,7 +19,7 @@ function emojiToggle(reaction) {
if (width) {
width = width.replace('px', '') * 1 + 300
} else {
width = 600
width = reaction ? 300 : 600
}
$('#post-box').css('width', width + 'px')
$('#suggest').html('')
@@ -126,8 +126,10 @@ function emojiGet(parse, started) {
md['if_categorized'] = if_categorized
localStorage.setItem('emojis_' + acct_id, JSON.stringify(md))
localStorage.setItem(`emojis_raw_${acct_id}`, JSON.stringify(json))
} else {
localStorage.setItem('emojis_' + acct_id, JSON.stringify(md))
localStorage.setItem(`emojis_raw_${acct_id}`, JSON.stringify(json))
}
localStorage.setItem('emojiseek', 0)
if (!started) {

View File

@@ -276,8 +276,6 @@ function deleteImage(key) {
title: lang.lang_postimg_delete,
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: lang.lang_yesno,
cancelButtonText: lang.lang_no
}).then(result => {

View File

@@ -55,8 +55,6 @@ function post(mode, postvis, dry) {
text: lang.lang_post_cwtxt + plus,
type: 'info',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#3085d6',
confirmButtonText: lang.lang_post_btn2,
cancelButtonText: lang.lang_post_btn3,
showCloseButton: true,

File diff suppressed because it is too large Load Diff

View File

@@ -9,183 +9,162 @@ var suggest
input.addEventListener(
'focus',
function() {
function () {
localStorage.removeItem('cursor')
var acct_id = $('#post-acct-sel').val()
$('#suggest').html('')
$('#suggest').hide()
window.clearInterval(timer)
timer = window.setInterval(function() {
timer = window.setInterval(function () {
var new_val = input.value
if (new_val == '') {
$('#suggest').html('')
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) {
$('#right-side').hide()
$('#right-side').css('width', '300px')
$('#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')
}
$('#suggest').hide()
return
}
if (prev_val != new_val) {
var tag = new_val.match(/#(\S{3,})/)
var acct = new_val.match(/@(\S{3,})/)
if (tag && tag[1]) {
var q = tag[1]
} else if (acct && acct[1]) {
var q = acct[1]
const pos = input.selectionStart
let startI = pos - 1
let hasDomain = false
let hasDomainOnce = false
for (startI = pos - 1; startI >= 0; startI--) {
if (new_val[startI].match(/\./)) hasDomain = true
if (new_val[startI].match(/#|@|:/) && !hasDomain) break
if (new_val[startI].match(/@/) && hasDomainOnce) break
if (new_val[startI].match(/@/) && !hasDomainOnce) hasDomainOnce = true
}
const target = new_val.substr(startI, pos - startI)
var tag = target.match(/#(\S{3,})/g)
var acct = target.match(/@(\S{3,})(@(\S{3,}))?/g)
var emoji = target.match(/:(\S{1,})/g)
if (emoji && emoji[0]) {
const l = emoji[0]
const emojis = localStorage.getItem('emojis_raw_' + acct_id)
const json = emojis ? JSON.parse(emojis) : []
const reg = new RegExp(`${emoji[0]}`)
let listHtml = ''
for (const emoji of json) {
const { shortcode, url } = emoji
if (`:${shortcode}`.match(reg)) {
listHtml = listHtml + `${listHtml ? `<br>` : ``}<a onclick="tagInsert(':${shortcode}:','${l}')" class="pointer"><img src="${url}" width="15">:${shortcode}:</a>`
}
}
$('#suggest').html(listHtml)
$('#suggest').show()
} else if (tag && tag[0]) {
var q = tag[0]
} else if (acct && acct[0]) {
var q = acct[0]
} else {
$('#suggest').html('')
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) {
$('#right-side').hide()
$('#right-side').css('width', '300px')
$('#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')
}
$('#suggest').hide()
return
}
var domain = localStorage.getItem('domain_' + acct_id)
var at = localStorage.getItem('acct_' + acct_id + '_at')
suggest = 'https://' + domain + '/api/v2/search?q=' + q
if (suggest != oldSuggest) {
console.log('Try to get suggest at ' + suggest)
fetch(suggest, {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at
}
})
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
if (q) {
var domain = localStorage.getItem('domain_' + acct_id)
var at = localStorage.getItem('acct_' + acct_id + '_at')
suggest = 'https://' + domain + '/api/v2/search?q=' + encodeURIComponent(q)
if (suggest != oldSuggest) {
console.log('Try to get suggest at ' + suggest)
fetch(suggest, {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
console.log(['Search', json])
//ハッシュタグ
if (json.hashtags[0] && tag) {
if (tag[1]) {
var tags = []
Object.keys(json.hashtags).forEach(function(key4) {
var tag = json.hashtags[key4]
var his = tag.history
var uses =
his[0].uses * 1 +
his[1].uses * 1 +
his[2].uses * 1 +
his[3].uses * 1 +
his[4].uses * 1 +
his[5].uses * 1 +
his[6].uses * 1
tagHTML = `<br><a onclick="tagInsert('#${escapeHTML(
tag.name
)}','#${q}')" class="pointer">#${escapeHTML(tag.name)}</a>&nbsp;${uses}toot(s)`
.then(function (response) {
if (!response.ok) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
console.log(['Search', json])
//ハッシュタグ
if (json.hashtags[0] && tag) {
if (tag[0]) {
var tags = []
Object.keys(json.hashtags).forEach(function (key4) {
var tag = json.hashtags[key4]
var his = tag.history
var uses =
his[0].uses * 1 +
his[1].uses * 1 +
his[2].uses * 1 +
his[3].uses * 1 +
his[4].uses * 1 +
his[5].uses * 1 +
his[6].uses * 1
tagHTML = `<br><a onclick="tagInsert('#${escapeHTML(
tag.name
)}','${q}')" class="pointer">#${escapeHTML(tag.name)}</a>&nbsp;${uses}toot(s)`
var item = {
uses: uses,
html: tagHTML
}
tags.push(item)
})
var num_a = -1
var num_b = 1
tags = tags.sort(function(a, b) {
var x = a['uses']
var y = b['uses']
if (x > y) return num_a
if (x < y) return num_b
return 0
})
var ins = ''
var nev = false
Object.keys(tags).forEach(function(key7) {
ins = ins + tags[key7].html
if (key7 <= 0 && !nev) {
ins = ins + '<br>'
nev = true
}
})
$('#suggest').html(ins)
$('#right-side').show()
$('#right-side').css('width', '200px')
$('#left-side').css('width', 'calc(100% - 200px)')
var width = localStorage.getItem('postbox-width')
if (width) {
width = width.replace('px', '') * 1 + 200
} else {
width = 500
var item = {
uses: uses,
html: tagHTML
}
tags.push(item)
})
var num_a = -1
var num_b = 1
tags = tags.sort(function (a, b) {
var x = a['uses']
var y = b['uses']
if (x > y) return num_a
if (x < y) return num_b
return 0
})
var ins = ''
var nev = false
Object.keys(tags).forEach(function (key7) {
ins = ins + tags[key7].html
if (key7 <= 0 && !nev) {
//ins = ins + '<br>'
nev = true
}
})
$('#suggest').html(ins)
$('#suggest').show()
}
$('#post-box').css('width', width + 'px')
$('#poll').addClass('hide')
$('#emoji').addClass('hide')
$('#draft').addClass('hide')
}
} else if (json.accounts[0] && acct[1]) {
var accts = ''
Object.keys(json.accounts).forEach(function(key3) {
var acct = json.accounts[key3]
if (acct.acct != q) {
//Instance Actorって…
if (acct.username.indexOf('.') < 0) {
accts =
accts +
`<a onclick="tagInsert('@${acct.acct}','@${q}')" class="pointer">@${acct.acct}</a><br>`
} else if (json.accounts[0] && acct[0]) {
var accts = ''
Object.keys(json.accounts).forEach(function (key3) {
var acct = json.accounts[key3]
if (acct.acct != q) {
//Instance Actorって…
if (acct.username.indexOf('.') < 0) {
accts =
accts +
`<a onclick="tagInsert('@${acct.acct}','${q}')" class="pointer">@${acct.acct}</a><br>`
}
}
}
})
$('#right-side').show()
$('#right-side').css('width', '200px')
$('#left-side').css('width', 'calc(100% - 200px)')
var width = localStorage.getItem('postbox-width')
if (width) {
width = width.replace('px', '') * 1 + 200
})
$('#suggest').html(accts)
$('#suggest').show()
} else {
width = 500
}
$('#post-box').css('width', width + 'px')
$('#suggest').html(accts)
$('#poll').addClass('hide')
$('#emoji').addClass('hide')
$('#draft').addClass('hide')
} else {
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) {
$('#right-side').hide()
$('#right-side').css('width', '300px')
$('#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')
}
}
})
})
}
}
}
oldSuggest = suggest
prev_value = new_val
prev_val = new_val
const rectTextarea = document.querySelector('#textarea')
const rect = rectTextarea.getBoundingClientRect()
const caret = getCaretCoordinates(rectTextarea, rectTextarea.selectionEnd)
$('#suggest').css('top', `calc(${caret.top}px + 1rem)`)
const left = rect.width / 2 < caret.left ? rect.width / 2 : caret.left
$('#suggest').css('left', left)
}, 1000)
},
false
@@ -193,15 +172,20 @@ input.addEventListener(
input.addEventListener(
'blur',
function() {
function () {
window.clearInterval(timer)
favTag()
},
false
)
function tagInsert(code, del) {
var blankBefore = ' '
var blankAfter = ' '
function tagInsert(code, del, emoji) {
if (localStorage.getItem('emoji-zero-width') == 'yes' && emoji) {
var blankBefore = ''
var blankAfter = ''
} else {
var blankBefore = ' '
var blankAfter = ' '
}
var textarea = document.querySelector('#textarea')
var sentence = textarea.value
var len = sentence.length
@@ -217,10 +201,10 @@ function tagInsert(code, del) {
var after = sentence.substr(pos, len)
var start = after.substr(0, 1)
if (start == ' ') blankAfter = ''
if (len == 0) {
var word = code
if (len === delLen) {
var word = code + blankAfter
} else if (len == pos) {
var word = blankBefore + code
var word = blankBefore + code + blankAfter
} else if (pos == 0) {
var word = code + blankAfter
} else {
@@ -228,17 +212,9 @@ function tagInsert(code, del) {
}
sentence = before + word + after
textarea.value = sentence
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) {
$('#right-side').hide()
$('#right-side').css('width', '300px')
$('#left-side').css('width', '50%')
var width = localStorage.getItem('postbox-width').replace('px', '') * 1
if (!width) {
width = 300
}
$('#post-box').css('width', width + 'px')
}
$('#suggest').html('')
$('#suggest').hide()
$('#textarea').focus()
}
function cgNPs(q) {
suggest = 'https://cg.toot.app/api/v1/search/light?q=' + q
@@ -250,23 +226,23 @@ function cgNPs(q) {
'content-type': 'application/json'
}
})
.then(function(response) {
.then(function (response) {
if (!response.ok) {
response.text().then(function(text) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
.then(function (json) {
if (json[0]) {
var tags = ''
Object.keys(json).forEach(function(key4) {
Object.keys(json).forEach(function (key4) {
var tag = json[key4]
tags =
tags +

View File

@@ -17,7 +17,8 @@ function additional(acct_id, tlid) {
}
if (tagThis) {
$(this).attr('href', "javascript:tagShow('" + tagThis + "')")
$(this).attr('href', "#")
$(this).attr('onclick', "tagShow('" + tagThis + "', this)")
}
})

View File

@@ -637,42 +637,48 @@ function brws() {
postMessage(['openUrl', url], '*')
}
//外部からトゥート開く
function detEx(url, acct_id) {
async function detEx(url, acct_id) {
if (acct_id == 'main') {
acct_id = localStorage.getItem('main')
}
var domain = localStorage.getItem('domain_' + acct_id)
var at = localStorage.getItem('acct_' + acct_id + '_at')
var start = 'https://' + domain + '/api/v2/search?resolve=true&q=' + encodeURIComponent(url)
fetch(start, {
Swal.fire({
title: 'Loading...',
html: lang.lang_details_fetch,
showConfirmButton: false,
showCloseButton: true,
onBeforeOpen: () => {
Swal.showLoading()
},
onClose: () => { },
}).then((result) => { })
const json = await detExCore(url, acct_id)
Swal.close()
if (!json.statuses) {
postMessage(['openUrl', url], '*')
} else {
var id = json.statuses[0].id
$('.loadp').text($('.loadp').attr('href'))
$('.loadp').removeClass('loadp')
details(id, acct_id, 0)
}
return
}
async function detExCore(url, acct_id) {
const domain = localStorage.getItem('domain_' + acct_id)
const start = 'https://' + domain + '/api/v2/search?resolve=true&q=' + encodeURIComponent(url)
const at = localStorage.getItem('acct_' + acct_id + '_at')
let promise = await fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at
}
})
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
if (!json.statuses) {
postMessage(['openUrl', url], '*')
} else {
var id = json.statuses[0].id
$('.loadp').text($('.loadp').attr('href'))
$('.loadp').removeClass('loadp')
details(id, acct_id, 0)
}
})
return
const json = await promise.json()
if (json) {
return json
} else {
return false
}
}

View File

@@ -1,76 +1,96 @@
//ディレクトリ
//ディレクトリトグル
function dirMenu() {
$("#dir-contents").html("")
directory()
$("#left-menu a").removeClass("active")
$("#dirMenu").addClass("active")
$(".menu-content").addClass("hide")
$("#dir-box").removeClass("hide")
$('#dir-contents').html('')
directory('directory')
$('#left-menu a').removeClass('active')
$('#dirMenu').addClass('active')
$('.menu-content').addClass('hide')
$('#dir-box').removeClass('hide')
}
function dirselCk() {
var acct = $("#dir-acct-sel").val()
if (acct == "noauth") {
$("#dirNoAuth").removeClass("hide")
} else {
$("#dirNoAuth").addClass("hide")
directory()
}
var acct = $('#dir-acct-sel').val()
if (acct == 'noauth') {
$('#dirNoAuth').removeClass('hide')
} else {
$('#dirNoAuth').addClass('hide')
directory('check')
}
}
function directory(isMore) {
var order = $("[name=sort]:checked").val()
if (!order) {
order = "active"
}
var local_only = $("#local_only:checked").val()
if (local_only) {
local_only = "true"
} else {
local_only = "false"
}
var acct_id = $("#dir-acct-sel").val()
if (acct_id == "noauth") {
var domain = $("#dirNoAuth-url").val()
var at = ""
} else {
var domain = localStorage.getItem("domain_" + acct_id)
var at = localStorage.getItem("acct_" + acct_id + "_at")
}
if (isMore) {
var addOffset = $("#dir-contents .cvo").length
} else {
var addOffset = 0
$("#dir-contents").html("")
}
var start = "https://" + domain + "/api/v1/directory?order=" + order + "&local=" + local_only + "&offset=" + addOffset
console.log(start)
fetch(start, {
method: "GET",
headers: {
"content-type": "application/json",
Authorization: "Bearer " + at
}
})
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
setLog(start, "JSON", error)
console.error(error)
})
.then(function(json) {
if (json) {
$("#moreDir").removeClass("disabled")
var html = userparse(json, null, acct_id, "dir", null)
$("#dir-contents").append(html)
jQuery("time.timeago").timeago()
} else {
$("#moreDir").addClass("disabled")
}
})
function dirChange(mode) {
if (mode === 'directory') $('#directoryConfig').removeClass('hide')
if (mode === 'suggest') $('#directoryConfig').addClass('hide')
directory(mode)
}
function directory(modeRaw, isMore) {
const mode = modeRaw === 'check' ? $('[name=dirsug]:checked').val() : modeRaw
var order = $('[name=sort]:checked').val()
if (!order) {
order = 'active'
}
var local_only = $('#local_only:checked').val()
if (local_only) {
local_only = 'true'
} else {
local_only = 'false'
}
var acct_id = $('#dir-acct-sel').val()
if (acct_id == 'noauth') {
var domain = $('#dirNoAuth-url').val()
var at = ''
} else {
var domain = localStorage.getItem('domain_' + acct_id)
var at = localStorage.getItem('acct_' + acct_id + '_at')
}
if (isMore) {
var addOffset = $('#dir-contents .cvo').length
$('#dir-contents').append(`<div class="progress transparent"><div class="indeterminate"></div></div>`)
} else {
var addOffset = 0
$('#dir-contents').html(`<div class="progress transparent"><div class="indeterminate"></div></div>`)
}
let start = `https://${domain}/api/v1/directory?order=${order}&local=${local_only}&offset=${addOffset}`
if (mode === 'suggest') start = `https://${domain}/api/v2/suggestions`
console.log(start)
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at,
},
})
.then(function(response) {
$('#dir-contents .progress').remove()
if (!response.ok) {
$('#dir-contents').html(`v2 follow suggestion is supported by Mastodon 3.4.0 or above.`)
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
if (json) {
$('#moreDir').removeClass('disabled')
let obj = []
if (mode === 'suggest') {
$('#moreDir').addClass('disabled')
for (const suggest of json) obj.push(suggest.account)
} else {
obj = json
}
var html = userparse(obj, null, acct_id, 'dir', null)
$('#dir-contents').append(html)
jQuery('time.timeago').timeago()
} else {
$('#moreDir').addClass('disabled')
}
})
}

File diff suppressed because it is too large Load Diff

View File

@@ -89,7 +89,7 @@ function list() {
</a>/
<a onclick="listUser('${list.id}','${acct_id}')" class="pointer">
${lang.lang_list_users}
'</a><br>`
</a><br>`
})
$('#lists').html(lists)
} else {

File diff suppressed because it is too large Load Diff

View File

@@ -1,431 +1,437 @@
//通知
//取得+Streaming接続
function notf(acct_id, tlid, sys) {
if (sys == 'direct') {
notfColumn(acct_id, tlid, sys)
} else {
notfCommon(acct_id, tlid, sys)
}
if (sys == 'direct') {
notfColumn(acct_id, tlid, sys)
} else {
notfCommon(acct_id, tlid, sys)
}
}
function notfColumn(acct_id, tlid, sys) {
todo('Notifications Loading...')
var native = localStorage.getItem('nativenotf')
var at = localStorage.getItem('acct_' + acct_id + '_at')
if (!native) {
native = 'yes'
}
var domain = localStorage.getItem('domain_' + acct_id)
var httpreq = new XMLHttpRequest()
if (localStorage.getItem('mode_' + domain) == 'misskey') {
var misskey = true
var start = 'https://' + domain + '/api/i/notifications'
httpreq.open('POST', start, true)
httpreq.setRequestHeader('Content-Type', 'application/json')
var body = JSON.stringify({
i: at
})
} else {
var misskey = false
if (localStorage.getItem('exclude-' + tlid)) {
var exc = localStorage.getItem('exclude-' + tlid)
} else {
var exc = ''
}
var start = 'https://' + domain + '/api/v1/notifications' + exc
httpreq.open('GET', start, true)
httpreq.setRequestHeader('Content-Type', 'application/json')
httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
var body = ''
}
todo('Notifications Loading...')
var native = localStorage.getItem('nativenotf')
var at = localStorage.getItem('acct_' + acct_id + '_at')
if (!native) {
native = 'yes'
}
var domain = localStorage.getItem('domain_' + acct_id)
var httpreq = new XMLHttpRequest()
if (localStorage.getItem('mode_' + domain) == 'misskey') {
var misskey = true
var start = 'https://' + domain + '/api/i/notifications'
httpreq.open('POST', start, true)
httpreq.setRequestHeader('Content-Type', 'application/json')
var body = JSON.stringify({
i: at,
})
} else {
var misskey = false
if (localStorage.getItem('exclude-' + tlid)) {
var exc = localStorage.getItem('exclude-' + tlid)
} else {
var exc = ''
}
var start = 'https://' + domain + '/api/v1/notifications' + exc
httpreq.open('GET', start, true)
httpreq.setRequestHeader('Content-Type', 'application/json')
httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
var body = ''
}
httpreq.responseType = 'json'
httpreq.send(body)
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) {
var json = httpreq.response
if (this.status !== 200) {
setLog(start, this.status, this.response)
}
var max_id = httpreq.getResponseHeader('link')
if (max_id) {
max_id = max_id.match(/[?&]{1}max_id=([0-9]+)/)[1]
}
if (json[0]) {
var templete = ''
var lastnotf = localStorage.getItem('lastnotf_' + acct_id)
localStorage.setItem('lastnotf_' + acct_id, json[0].id)
Object.keys(json).forEach(function(key) {
var obj = json[key]
if (lastnotf == obj.id && key > 0 && native == 'yes') {
var ct = key
if (key > 14) {
ct = '15+'
}
var os = localStorage.getItem('platform')
var options = {
body: ct + lang.lang_notf_new,
icon: localStorage.getItem('prof_' + acct_id)
}
var n = new Notification('TheDesk:' + domain, options)
}
var mute = getFilterTypeByAcct(acct_id, 'notif')
//Pleromaにはmoveというtypeがあるらしい。何が互換APIじゃ
if (obj.type != 'follow' && obj.type != 'move' && obj.type != 'follow_request') {
if (misskey) {
templete = templete + misskeyParse([obj], 'notf', acct_id, tlid, -1, mute)
} else {
templete = templete + parse([obj], 'notf', acct_id, tlid, -1, mute)
}
} else if (obj.type == 'follow_request') {
templete = templete + userparse([obj.account], 'request', acct_id, tlid, -1)
} else {
if (misskey) {
templete = templete + misskeyUserparse([obj], 'notf', acct_id, tlid, -1, mute)
} else {
templete = templete + userparse([obj.account], obj.type, acct_id, tlid, -1)
}
}
})
templete = templete + '<div class="hide notif-marker" data-maxid="' + max_id + '"></div>'
$('#timeline_' + tlid).html(templete)
$('#landing_' + tlid).hide()
jQuery('time.timeago').timeago()
}
$('#notf-box').addClass('fetched')
todc()
//Markers
var markers = localStorage.getItem('markers')
if (markers == 'yes') {
markers = true
} else {
markers = false
}
if (markers) {
getMarker(tlid, 'notf', acct_id)
}
}
}
if (!misskey) {
if (localStorage.getItem('streaming_' + acct_id)) {
var wss = localStorage.getItem('streaming_' + acct_id)
} else {
var wss = 'wss://' + domain
}
var start = wss + '/api/v1/streaming/?stream=user&access_token=' + at
} else {
var start = 'wss://' + domain + '/?i=' + at
}
httpreq.responseType = 'json'
httpreq.send(body)
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) {
var json = httpreq.response
if (this.status !== 200) {
$('#landing_' + tlid).append(`<div>${this.status}</div><div>${escapeHTML(this.response)}`)
setLog(start, this.status, this.response)
}
var max_id = httpreq.getResponseHeader('link')
if (max_id) {
max_id = max_id.match(/[?&]{1}max_id=([0-9]+)/)[1]
}
if (json[0]) {
var templete = ''
var lastnotf = localStorage.getItem('lastnotf_' + acct_id)
localStorage.setItem('lastnotf_' + acct_id, json[0].id)
Object.keys(json).forEach(function(key) {
var obj = json[key]
if (lastnotf == obj.id && key > 0 && native == 'yes') {
var ct = key
if (key > 14) {
ct = '15+'
}
var os = localStorage.getItem('platform')
var options = {
body: ct + lang.lang_notf_new,
icon: localStorage.getItem('prof_' + acct_id),
}
var n = new Notification('TheDesk:' + domain, options)
}
var mute = getFilterTypeByAcct(acct_id, 'notif')
//Pleromaにはmoveというtypeがあるらしい。何が互換APIじゃ
if (obj.type != 'follow' && obj.type != 'move' && obj.type != 'follow_request') {
if (misskey) {
templete = templete + misskeyParse([obj], 'notf', acct_id, tlid, -1, mute)
} else {
templete = templete + parse([obj], 'notf', acct_id, tlid, -1, mute)
}
} else if (obj.type == 'follow_request') {
templete = templete + userparse([obj.account], 'request', acct_id, tlid, -1)
} else {
if (misskey) {
templete = templete + misskeyUserparse([obj], 'notf', acct_id, tlid, -1, mute)
} else {
templete = templete + userparse([obj.account], obj.type, acct_id, tlid, -1)
}
}
})
templete = templete + '<div class="hide notif-marker" data-maxid="' + max_id + '"></div>'
$('#timeline_' + tlid).html(templete)
// $('#landing_' + tlid).hide()
jQuery('time.timeago').timeago()
}
$('#notf-box').addClass('fetched')
todc()
//Markers
var markers = localStorage.getItem('markers')
if (markers == 'yes') {
markers = true
} else {
markers = false
}
if (markers) {
getMarker(tlid, 'notf', acct_id)
}
}
}
if (!misskey) {
if (localStorage.getItem('streaming_' + acct_id)) {
var wss = localStorage.getItem('streaming_' + acct_id)
} else {
var wss = 'wss://' + domain
}
var start = wss + '/api/v1/streaming/?stream=user&access_token=' + at
} else {
var start = 'wss://' + domain + '/?i=' + at
}
}
function notfCommon(acct_id, tlid, sys, stream) {
todo('Notifications Loading...')
var native = localStorage.getItem('nativenotf')
var at = localStorage.getItem('acct_' + acct_id + '_at')
if (!native) {
native = 'yes'
}
var domain = localStorage.getItem('domain_' + acct_id)
if (localStorage.getItem('mode_' + domain) == 'misskey') {
var misskey = true
var start = 'https://' + domain + '/api/i/notifications'
var i = {
method: 'POST',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
i: at
})
}
} else {
var misskey = false
var start = 'https://' + domain + '/api/v1/notifications'
var i = {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at
}
}
}
if(stream == 'only') {
notfWS(misskey, acct_id, tlid, domain, at)
return false
}
fetch(start, i)
.then(function(response) {
console.log('header to get param:' + response.headers.get('link'))
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
if (json[0]) {
var templete = ''
var lastnotf = localStorage.getItem('lastnotf_' + acct_id)
localStorage.setItem('lastnotf_' + acct_id, json[0].id)
Object.keys(json).forEach(function(key) {
var obj = json[key]
if (lastnotf == obj.id && key > 0 && native == 'yes') {
var ct = key
if (key > 14) {
ct = '15+'
}
var os = localStorage.getItem('platform')
var options = {
body: ct + lang.lang_notf_new,
icon: localStorage.getItem('prof_' + acct_id)
}
var n = new Notification('TheDesk:' + domain, options)
}
var mute = getFilterTypeByAcct(acct_id, 'notif')
//Pleromaにはmoveというtypeがあるらしい。何が互換APIじゃ
if (obj.type != 'follow' && obj.type != 'move') {
if (misskey) {
templete = templete + misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute)
} else {
templete = templete + parse([obj], 'notf', acct_id, 'notf', -1, mute)
}
} else {
if (misskey) {
templete = templete + misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute)
} else {
templete = templete + userparse([obj.account], obj.type, acct_id, 'notf', -1)
}
}
})
$('div[data-notf=' + acct_id + ']').html(templete)
$('#landing_' + tlid).hide()
jQuery('time.timeago').timeago()
}
$('#notf-box').addClass('fetched')
todc()
if(stream != 'no') notfWS(misskey, acct_id, tlid, domain, at)
})
todo('Notifications Loading...')
var native = localStorage.getItem('nativenotf')
var at = localStorage.getItem('acct_' + acct_id + '_at')
if (!native) {
native = 'yes'
}
var domain = localStorage.getItem('domain_' + acct_id)
if (localStorage.getItem('mode_' + domain) == 'misskey') {
var misskey = true
var start = 'https://' + domain + '/api/i/notifications'
var i = {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify({
i: at,
}),
}
} else {
var misskey = false
var start = 'https://' + domain + '/api/v1/notifications'
var i = {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at,
},
}
}
if (stream == 'only') {
notfWS(misskey, acct_id, tlid, domain, at)
return false
}
fetch(start, i)
.then(function(response) {
console.log('header to get param:' + response.headers.get('link'))
if (!response.ok) {
response.text().then(function(text) {
console.log('notf error', 'div[data-notf=' + acct_id + '] .landing')
$('div[data-notf=' + acct_id + '] .landing').append(`<div>${response.status}</div><div>${escapeHTML(text)}`)
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
if (json[0]) {
var templete = ''
var lastnotf = localStorage.getItem('lastnotf_' + acct_id)
localStorage.setItem('lastnotf_' + acct_id, json[0].id)
Object.keys(json).forEach(function(key) {
var obj = json[key]
if (lastnotf == obj.id && key > 0 && native == 'yes') {
var ct = key
if (key > 14) {
ct = '15+'
}
var os = localStorage.getItem('platform')
var options = {
body: ct + lang.lang_notf_new,
icon: localStorage.getItem('prof_' + acct_id),
}
var n = new Notification('TheDesk:' + domain, options)
}
var mute = getFilterTypeByAcct(acct_id, 'notif')
//Pleromaにはmoveというtypeがあるらしい。何が互換APIじゃ
if (obj.type != 'follow' && obj.type != 'move') {
if (misskey) {
templete = templete + misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute)
} else {
templete = templete + parse([obj], 'notf', acct_id, 'notf', -1, mute)
}
} else {
if (misskey) {
templete = templete + misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute)
} else {
templete = templete + userparse([obj.account], obj.type, acct_id, 'notf', -1)
}
}
})
$('div[data-notf=' + acct_id + ']').html(templete)
// $('#landing_' + tlid).hide()
jQuery('time.timeago').timeago()
}
$('#notf-box').addClass('fetched')
todc()
if (stream != 'no') notfWS(misskey, acct_id, tlid, domain, at)
})
}
function notfWS(misskey, acct_id, tlid, domain, at) {
if(mastodonBaseWsStatus[domain] == 'available') return false
if (!misskey) {
if (localStorage.getItem('streaming_' + acct_id)) {
var wss = localStorage.getItem('streaming_' + acct_id)
} else {
var wss = 'wss://' + domain
}
var start = wss + '/api/v1/streaming/?stream=user&access_token=' + at
var wsid = websocketNotf.length
websocketNotf[acct_id] = new WebSocket(start)
websocketNotf[acct_id].onopen = function(mess) {
console.table({
acct_id: acct_id,
type: 'Connect Streaming API(Notf)',
domain: domain,
message: [mess]
})
$('i[data-notf=' + acct_id + ']').removeClass('red-text')
}
websocketNotf[acct_id].onmessage = function(mess) {
//console.log(["Receive Streaming API(Notf):" + acct_id + "(" + domain + ")", JSON.parse(JSON.parse(mess.data).payload)]);
var popup = localStorage.getItem('popup')
if (!popup) {
popup = 0
}
var obj = JSON.parse(JSON.parse(mess.data).payload)
var type = JSON.parse(mess.data).event
if (type == 'notification') {
var templete = ''
localStorage.setItem('lastnotf_' + acct_id, obj.id)
if (!$('#unread_' + tlid + ' .material-icons').hasClass('teal-text')) {
//markers show中はダメ
if (obj.type != 'follow' && obj.type != 'follow_request') {
templete = parse([obj], 'notf', acct_id, 'notf', popup)
} else if (obj.type == 'follow_request') {
templete = userparse([obj.account], 'request', acct_id, 'notf', -1)
} else {
templete = userparse([obj], obj.type, acct_id, 'notf', popup)
}
if (!$('div[data-notfIndv=' + acct_id + '_' + obj.id + ']').length) {
$('div[data-notf=' + acct_id + ']').prepend(templete)
$('div[data-const=notf_' + acct_id + ']').prepend(templete)
}
jQuery('time.timeago').timeago()
}
} else if (type == 'delete') {
$('[toot-id=' + obj + ']').hide()
$('[toot-id=' + obj + ']').remove()
}
}
websocketNotf[acct_id].onerror = function(error) {
console.error('WebSocket Error ', error)
errorct++
console.log(errorct)
if (errorct < 3) {
notfWS(misskey, acct_id, tlid, domain, at)
}
}
websocketNotf[acct_id].onclose = function(error) {
console.error('WebSocket Close ', error)
errorct++
console.log(errorct)
if (errorct < 3) {
notfWS(misskey, acct_id, tlid, domain, at)
}
}
}
function notfWS(misskey, acct_id, tlid, domain, at) {
if (mastodonBaseWsStatus[domain] == 'available') return false
if (!misskey) {
if (localStorage.getItem('streaming_' + acct_id)) {
var wss = localStorage.getItem('streaming_' + acct_id)
} else {
var wss = 'wss://' + domain
}
var start = wss + '/api/v1/streaming/?stream=user&access_token=' + at
var wsid = websocketNotf.length
websocketNotf[acct_id] = new WebSocket(start)
websocketNotf[acct_id].onopen = function(mess) {
console.table({
acct_id: acct_id,
type: 'Connect Streaming API(Notf)',
domain: domain,
message: [mess],
})
$('i[data-notf=' + acct_id + ']').removeClass('red-text')
}
websocketNotf[acct_id].onmessage = function(mess) {
$('#landing_' + tlid).hide()
//console.log(["Receive Streaming API(Notf):" + acct_id + "(" + domain + ")", JSON.parse(JSON.parse(mess.data).payload)]);
var popup = localStorage.getItem('popup')
if (!popup) {
popup = 0
}
var obj = JSON.parse(JSON.parse(mess.data).payload)
var type = JSON.parse(mess.data).event
if (type == 'notification') {
var templete = ''
localStorage.setItem('lastnotf_' + acct_id, obj.id)
if (!$('#unread_' + tlid + ' .material-icons').hasClass('teal-text')) {
//markers show中はダメ
if (obj.type != 'follow' && obj.type != 'follow_request') {
templete = parse([obj], 'notf', acct_id, 'notf', popup)
} else if (obj.type == 'follow_request') {
templete = userparse([obj.account], 'request', acct_id, 'notf', -1)
} else {
templete = userparse([obj], obj.type, acct_id, 'notf', popup)
}
if (!$('div[data-notfIndv=' + acct_id + '_' + obj.id + ']').length) {
$('div[data-notf=' + acct_id + ']').prepend(templete)
$('div[data-const=notf_' + acct_id + ']').prepend(templete)
}
jQuery('time.timeago').timeago()
}
} else if (type == 'delete') {
$('[toot-id=' + obj + ']').hide()
$('[toot-id=' + obj + ']').remove()
}
}
websocketNotf[acct_id].onerror = function(error) {
console.error('WebSocket Error ', error)
errorct++
console.log(errorct)
if (errorct < 3) {
notfWS(misskey, acct_id, tlid, domain, at)
}
}
websocketNotf[acct_id].onclose = function(error) {
console.error('WebSocket Close ', error)
errorct++
console.log(errorct)
if (errorct < 3) {
notfWS(misskey, acct_id, tlid, domain, at)
}
}
}
}
//一定のスクロールで発火
function notfmore(tlid) {
console.log({ status: 'kicked', status: moreloading })
var multi = localStorage.getItem('column')
var obj = JSON.parse(multi)
var acct_id = obj[tlid].domain
if (!type) {
var type = obj[tlid].type
} else {
var data
}
var sid = $('#timeline_' + tlid + ' .notif-marker')
.last()
.attr('data-maxid')
var at = localStorage.getItem('acct_' + acct_id + '_at')
var domain = localStorage.getItem('domain_' + acct_id)
if (sid && !moreloading) {
moreloading = true
var httpreq = new XMLHttpRequest()
if (localStorage.getItem('mode_' + domain) == 'misskey') {
var misskey = true
var start = 'https://' + domain + '/api/i/notifications'
httpreq.open(POST, start, true)
httpreq.setRequestHeader('Content-Type', 'application/json')
var body = JSON.stringify({
i: at,
untilID: sid
})
} else {
var misskey = false
if (localStorage.getItem('exclude-' + tlid)) {
var exc = localStorage.getItem('exclude-' + tlid) + '&max_id=' + sid
} else {
var exc = '?max_id=' + sid
}
var start = 'https://' + domain + '/api/v1/notifications' + exc
httpreq.open('GET', start, true)
httpreq.setRequestHeader('Content-Type', 'application/json')
httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
var body = ''
}
console.log({ status: 'kicked', status: moreloading })
var multi = localStorage.getItem('column')
var obj = JSON.parse(multi)
var acct_id = obj[tlid].domain
if (!type) {
var type = obj[tlid].type
} else {
var data
}
var sid = $('#timeline_' + tlid + ' .notif-marker')
.last()
.attr('data-maxid')
var at = localStorage.getItem('acct_' + acct_id + '_at')
var domain = localStorage.getItem('domain_' + acct_id)
if (sid && !moreloading) {
moreloading = true
var httpreq = new XMLHttpRequest()
if (localStorage.getItem('mode_' + domain) == 'misskey') {
var misskey = true
var start = 'https://' + domain + '/api/i/notifications'
httpreq.open(POST, start, true)
httpreq.setRequestHeader('Content-Type', 'application/json')
var body = JSON.stringify({
i: at,
untilID: sid,
})
} else {
var misskey = false
if (localStorage.getItem('exclude-' + tlid)) {
var exc = localStorage.getItem('exclude-' + tlid) + '&max_id=' + sid
} else {
var exc = '?max_id=' + sid
}
var start = 'https://' + domain + '/api/v1/notifications' + exc
httpreq.open('GET', start, true)
httpreq.setRequestHeader('Content-Type', 'application/json')
httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
var body = ''
}
httpreq.responseType = 'json'
httpreq.send(body)
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) {
var json = httpreq.response
if (this.status !== 200) {
setLog(start, this.status, this.response)
}
console.log(['More notifications on ' + tlid, json])
var max_id = httpreq.getResponseHeader('link').match(/[?&]{1}max_id=([0-9]+)/)[1]
if (json[0]) {
var templete = ''
var lastnotf = localStorage.getItem('lastnotf_' + acct_id)
localStorage.setItem('lastnotf_' + acct_id, json[0].id)
Object.keys(json).forEach(function(key) {
var obj = json[key]
var mute = getFilterTypeByAcct(acct_id, 'notif')
if (obj.type != 'follow') {
if (misskey) {
templete = templete + misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute)
} else {
templete = templete + parse([obj], 'notf', acct_id, 'notf', -1, mute)
}
} else {
if (misskey) {
templete = templete + misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute)
} else {
templete = templete + userparse([obj.account], obj.type, acct_id, 'notf', -1)
}
}
})
moreloading = false
templete = templete + '<div class="hide notif-marker" data-maxid="' + max_id + '"></div>'
$('#timeline_' + tlid).append(templete)
$('#landing_' + tlid).hide()
jQuery('time.timeago').timeago()
}
$('#notf-box').addClass('fetched')
todc()
}
}
}
httpreq.responseType = 'json'
httpreq.send(body)
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) {
var json = httpreq.response
if (this.status !== 200) {
setLog(start, this.status, this.response)
}
console.log(['More notifications on ' + tlid, json])
var max_id = httpreq.getResponseHeader('link').match(/[?&]{1}max_id=([0-9]+)/)[1]
if (json[0]) {
var templete = ''
var lastnotf = localStorage.getItem('lastnotf_' + acct_id)
localStorage.setItem('lastnotf_' + acct_id, json[0].id)
Object.keys(json).forEach(function(key) {
var obj = json[key]
var mute = getFilterTypeByAcct(acct_id, 'notif')
if (obj.type != 'follow') {
if (misskey) {
templete = templete + misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute)
} else {
templete = templete + parse([obj], 'notf', acct_id, 'notf', -1, mute)
}
} else {
if (misskey) {
templete = templete + misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute)
} else {
templete = templete + userparse([obj.account], obj.type, acct_id, 'notf', -1)
}
}
})
moreloading = false
templete = templete + '<div class="hide notif-marker" data-maxid="' + max_id + '"></div>'
$('#timeline_' + tlid).append(templete)
// $('#landing_' + tlid).hide()
jQuery('time.timeago').timeago()
}
$('#notf-box').addClass('fetched')
todc()
}
}
}
}
//通知トグルボタン
function notfToggle(acct, tlid) {
if ($('#notf-box_' + tlid).hasClass('column-hide')) {
$('#notf-box_' + tlid).css('display', 'block')
$('#notf-box_' + tlid).animate(
{
height: '400px'
},
{
duration: 300,
complete: function() {
$('#notf-box_' + tlid).css('overflow-y', 'scroll')
$('#notf-box_' + tlid).removeClass('column-hide')
}
}
)
} else {
$('#notf-box_' + tlid).css('overflow-y', 'hidden')
$('#notf-box_' + tlid).animate(
{
height: '0'
},
{
duration: 300,
complete: function() {
$('#notf-box_' + tlid).addClass('column-hide')
$('#notf-box_' + tlid).css('display', 'none')
}
}
)
}
notfCanceler(acct)
if ($('#notf-box_' + tlid).hasClass('column-hide')) {
$('#notf-box_' + tlid).css('display', 'block')
$('#notf-box_' + tlid).animate({
height: '400px',
}, {
duration: 300,
complete: function() {
$('#notf-box_' + tlid).css('overflow-y', 'scroll')
$('#notf-box_' + tlid).removeClass('column-hide')
},
})
} else {
$('#notf-box_' + tlid).css('overflow-y', 'hidden')
$('#notf-box_' + tlid).animate({
height: '0',
}, {
duration: 300,
complete: function() {
$('#notf-box_' + tlid).addClass('column-hide')
$('#notf-box_' + tlid).css('display', 'none')
},
})
}
notfCanceler(acct)
}
function notfCanceler(acct) {
$('.notf-reply_' + acct).text(0)
localStorage.removeItem('notf-reply_' + acct)
$('.notf-reply_' + acct).addClass('hide')
$('.notf-fav_' + acct).text(0)
localStorage.removeItem('notf-fav_' + acct)
$('.notf-fav_' + acct).addClass('hide')
$('.notf-bt_' + acct).text(0)
localStorage.removeItem('notf-bt_' + acct)
$('.notf-bt_' + acct).addClass('hide')
$('.notf-follow_' + acct).text(0)
localStorage.removeItem('notf-follow_' + acct)
$('.notf-follow_' + acct).addClass('hide')
$('.notf-icon_' + acct).removeClass('red-text')
var id = $('#announce_' + acct + ' .announcement').first().attr('data-id')
$('.notf-announ_' + acct + '_ct').text("")
if(id) {
localStorage.setItem('announ_' + acct, id)
}
$('.notf-reply_' + acct).text(0)
localStorage.removeItem('notf-reply_' + acct)
$('.notf-reply_' + acct).addClass('hide')
$('.notf-fav_' + acct).text(0)
localStorage.removeItem('notf-fav_' + acct)
$('.notf-fav_' + acct).addClass('hide')
$('.notf-bt_' + acct).text(0)
localStorage.removeItem('notf-bt_' + acct)
$('.notf-bt_' + acct).addClass('hide')
$('.notf-follow_' + acct).text(0)
localStorage.removeItem('notf-follow_' + acct)
$('.notf-follow_' + acct).addClass('hide')
$('.notf-icon_' + acct).removeClass('red-text')
var id = $('#announce_' + acct + ' .announcement')
.first()
.attr('data-id')
$('.notf-announ_' + acct + '_ct').text('')
$(`.boxIn[data-acct=${acct}] .notice-box`).removeClass('has-notf')
if (id) {
localStorage.setItem('announ_' + acct, id)
}
}
function allNotfRead() {
var multi = localStorage.getItem('multi')
if (multi) {
var obj = JSON.parse(multi)
Object.keys(obj).forEach(function(key) {
notfCanceler(key)
})
}
var multi = localStorage.getItem('multi')
if (multi) {
var obj = JSON.parse(multi)
Object.keys(obj).forEach(function(key) {
notfCanceler(key)
})
}
}
allNotfRead()
allNotfRead()

File diff suppressed because it is too large Load Diff

View File

@@ -13,7 +13,21 @@ function searchMenu() {
//検索取得
function src(mode, offset) {
if (!offset) {
$('#src-contents').html('')
$('#src-contents').html(`
<div class="preloader-wrapper small active" style="margin-left: calc(50% - 36px);">
<div class="spinner-layer spinner-blue-only">
<div class="circle-clipper left">
<div class="circle"></div>
</div>
<div class="gap-patch">
<div class="circle"></div>
</div>
<div class="circle-clipper right">
<div class="circle"></div>
</div>
</div>
</div>
`)
var add = ''
} else {
var add = '&type=accounts&offset=' + $('#src-accts .cvo').length
@@ -48,24 +62,27 @@ function src(mode, offset) {
Authorization: 'Bearer ' + at
}
})
.then(function(response) {
.then(function (response) {
if (!offset) {
$('#src-contents').html(``)
}
if (!response.ok) {
response.text().then(function(text) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
.catch(function (error) {
src('v1')
return false
})
.then(function(json) {
.then(function (json) {
console.log(['Search', json])
//ハッシュタグ
if (json.hashtags[0]) {
var tags = ''
Object.keys(json.hashtags).forEach(function(key4) {
Object.keys(json.hashtags).forEach(function (key4) {
var tag = json.hashtags[key4]
if (mode) {
tags =
@@ -116,7 +133,7 @@ function tsAdd(q) {
parseColumn('add')
}
function tootsearch(tlid, q) {
if(!q || q=='undefined') {
if (!q || q == 'undefined') {
return false
}
var start = 'https://tootsearch.chotto.moe/api/v1/search?from=0&sort=created_at%3Adesc&q=' + q
@@ -129,20 +146,20 @@ function tootsearch(tlid, q) {
'content-type': 'application/json'
}
})
.then(function(response) {
.then(function (response) {
if (!response.ok) {
response.text().then(function(text) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(raw) {
.then(function (raw) {
var templete = ''
var json = raw.hits.hits
var max_id = raw['hits'].length
@@ -180,20 +197,20 @@ function moreTs(tlid, q) {
'content-type': 'application/json'
}
})
.then(function(response) {
.then(function (response) {
if (!response.ok) {
response.text().then(function(text) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(raw) {
.then(function (raw) {
var templete = ''
var json = raw.hits.hits
var max_id = raw['hits'].length
@@ -256,8 +273,8 @@ function graphDrawCore(his, tag, acct_id) {
</div>
<div class="tagCompTag">
<a onclick="tl('tag','${escapeHTML(
tag.name
)}','${acct_id}','add')" class="pointer" title="${escapeHTML(tag.name)}">
tag.name
)}','${acct_id}','add')" class="pointer" title="${escapeHTML(tag.name)}">
#${escapeHTML(tag.name)}
</a>
</div>
@@ -290,21 +307,21 @@ function trend() {
Authorization: 'Bearer ' + at
}
})
.then(function(response) {
.then(function (response) {
if (!response.ok) {
response.text().then(function(text) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
.catch(function (error) {
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
.then(function (json) {
var tags = ''
Object.keys(json).forEach(function(keye) {
Object.keys(json).forEach(function (keye) {
var tag = json[keye]
var his = tag.history
tags = graphDrawCore(his, tag, acct_id)
@@ -314,47 +331,31 @@ function trend() {
})
}
function srcBox(mode) {
var selectedText = window.getSelection().toString()
if (mode == 'open') {
$('#pageSrc').removeClass('hide')
} else if (mode == 'close') {
if(!selectedText) {
$('#pageSrc').addClass('hide')
$('#pageSrc').removeClass('keep')
}
$('#pageSrc').addClass('hide')
$('#pageSrc').removeClass('keep')
} else {
$('#pageSrc').toggleClass('hide')
}
if(!$('#pageSrc').hasClass('keep')) {
$('#pageSrcInput').val(selectedText)
}
}
$('#pageSrcInput').click(function() {
$('#pageSrc').addClass('keep')
})
$('#pageSrcInput').on('input', function(evt) {
if(!$('#pageSrcInput').val()) {
$('#pageSrc').removeClass('keep')
}
})
document.addEventListener('selectionchange', function() {
var selectedText = window.getSelection().toString()
if (selectedText && !$('input').is(':focus') && !$('textarea').is(':focus')) {
srcBox('open')
}
})
function doSrc(type) {
$('#pageSrc').addClass('hide')
$('#pageSrc').removeClass('keep')
var q = $('#pageSrcInput').val()
if(type == 'web') {
var q = $('.srcQ').text()
if (type == 'web') {
var start = localStorage.getItem('srcUrl')
if(!start) {
if (!start) {
start = 'https://google.com/search?q={q}'
}
start = start.replace(/{q}/, q)
postMessage(["openUrl", start], "*")
} else if(type == 'ts') {
} else if (type == 'ts') {
tsAdd(q)
} else if (type == 'copy') {
execCopy(q)
} else if (type == 'toot') {
brInsert(q)
}
}

View File

@@ -9,9 +9,47 @@ if (location.search) {
}
}
//よく使うタグ
function tagShow(tag) {
console.log('[data-regTag=' + decodeURI(tag).toLowerCase() + ']')
$('[data-regTag=' + decodeURI(tag).toLowerCase() + ']').toggleClass('hide')
function tagShow(tag, elm) {
tag = decodeURIComponent(tag)
const tagTL = lang.lang_parse_tagTL.replace('{{tag}}', '#' + tag)
const tagPin = lang.lang_parse_tagpin.replace('{{tag}}', '#' + tag)
const tagToot = lang.lang_parse_tagtoot.replace('{{tag}}', '#' + tag)
$('#tagCMTL').text(tagTL)
$('#tagCMPin').text(tagPin)
$('#tagCMToot').text(tagToot)
const acct_id = $(elm).parents('.tl').attr('data-acct')
const rect = elm.getBoundingClientRect()
$('#tagContextMenu').css('top', `calc(${rect.top}px + 1rem)`)
$('#tagContextMenu').css('left', `${rect.left}px`)
$('#tagContextMenu').attr('data-tag', tag)
$('#tagContextMenu').attr('data-acct', acct_id)
$('#tagContextMenu').removeClass('hide')
setTimeout(() => tShowBox('open'), 500)
}
function tShowBox(mode) {
if (mode == 'open') {
$('#tagContextMenu').removeClass('hide')
} else if (mode == 'close') {
if (!$('#tagContextMenu').hasClass('hide')) $('#tagContextMenu').addClass('hide')
$('#tagContextMenu').removeClass('keep')
} else {
$('#tagContextMenu').toggleClass('hide')
}
}
function doTShowBox(type) {
$('#tagContextMenu').addClass('hide')
$('#tagContextMenu').removeClass('keep')
const q = $('#tagContextMenu').attr('data-tag')
const acct_id = $('#tagContextMenu').attr('data-acct')
if (type == 'tl') {
tl('tag', q, acct_id, 'add')
} else if (type == 'toot') {
brInsert(`#${q}`)
} else if (type == 'pin') {
tagPin(q)
} else if (type == 'f') {
tagFeature(q, acct_id)
}
}
//タグ追加
function tagPin(tag) {
@@ -22,7 +60,7 @@ function tagPin(tag) {
var obj = JSON.parse(tags)
}
var can
Object.keys(obj).forEach(function(key) {
Object.keys(obj).forEach(function (key) {
var tagT = obj[key]
if (tagT == tag) {
can = true
@@ -56,7 +94,7 @@ function favTag() {
}
var tags = ''
var nowPT = localStorage.getItem('stable')
Object.keys(obj).forEach(function(key) {
Object.keys(obj).forEach(function (key) {
var tag = obj[key]
if (nowPT != tag) {
console.log('stable tags:' + nowPT + '/' + tag)
@@ -69,28 +107,31 @@ function favTag() {
tag = escapeHTML(tag)
tags =
tags +
`<a onclick="tagShow('${tag}')" class="pointer">#${tag}</a>
`<a onclick="tagShowHorizon('${tag}')" class="pointer">#${tag}</a>
${nowon}<span class="hide" data-tag="${tag}" data-regTag="${tag.toLowerCase()}"> 
<a onclick=\"tagTL('tag','${tag}',false,'add')" class="pointer" title="${lang.lang_parse_tagTL.replace('{{tag}}', '#' + tag)}">
TL
</a> 
</a>
<a onclick="brInsert('#${tag}')" class="pointer" title="${lang.lang_parse_tagtoot.replace('{{tag}}', '#' + tag)}">
Toot
</a> 
</a>
<a onclick="autoToot('${tag}');" class="pointer" title="${lang.lang_tags_always}${lang.lang_parse_tagtoot.replace('{{tag}}', '#' + tag)}">
${ptt}
</a> 
</a>
<a onclick="tagRemove('${key}')" class="pointer" title="${lang.lang_tags_tagunpin.replace('{{tag}}', '#' + tag)}">
${lang.lang_del}
</a>
</span> `
})
if (obj.length > 0) {
$('#taglist').append('My Tags:' + tags)
$('#taglist').append('My Tags: ' + tags)
} else {
$('#taglist').append('')
}
}
function tagShowHorizon(tag) {
$('[data-regTag=' + decodeURI(tag).toLowerCase() + ']').toggleClass('hide')
}
function trendTag() {
$('.trendtag').remove()
var domain = 'imastodon.net'
@@ -103,28 +144,28 @@ function trendTag() {
Authorization: 'Bearer ' + at
}
})
.then(function(response) {
.then(function (response) {
if (!response.ok) {
response.text().then(function(text) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
.then(function (json) {
if (json) {
var tags = ''
json = json.score
Object.keys(json).forEach(function(tag) {
Object.keys(json).forEach(function (tag) {
tag = escapeHTML(tag)
tags =
tags +
`<a onclick="tagShow('${tag}')" class="pointer">#${tag}</a>
`<a onclick="tagShow('${tag}', this)" class="pointer">#${tag}</a>
<span class="hide" data-tag="${tag}" data-regTag="${tag.toLowerCase()}"> 
<a onclick=\"tagTL('tag','${tag}',false,'add')" class="pointer" title="#${tag}のタイムライン">TL</a> 
<a onclick="show();brInsert('#${tag}')" class="pointer" title="#${tag}でトゥート">
@@ -134,8 +175,8 @@ function trendTag() {
})
$('#taglist').append(
'<div class="trendtag">アイマストドントレンドタグ<i class="material-icons pointer" onclick="trendTag()" style="font-size:12px">refresh</i>:' +
tags +
'</div>'
tags +
'</div>'
)
trendintervalset()
} else {
@@ -182,18 +223,18 @@ function tagFeature(name, acct_id) {
name: name
})
})
.then(function(response) {
.then(function (response) {
if (!response.ok) {
response.text().then(function(text) {
response.text().then(function (text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
.catch(function (error) {
return false
})
.then(function(json) {
.then(function (json) {
console.log(json)
M.toast({ html: 'Complete: ' + escapeHTML(name), displayLength: 3000 })
})
@@ -202,7 +243,7 @@ function tagFeature(name, acct_id) {
function addTag(id) {
var columns = JSON.parse(localStorage.getItem('column'))
var column = columns[id]
if(!column.data.name) {
if (!column.data.name) {
var name = column.data
} else {
var name = column.data.name
@@ -219,7 +260,7 @@ function addTag(id) {
o[id] = obj
var json = JSON.stringify(o)
console.log(json)
localStorage.setItem('column',json)
localStorage.setItem('column', json)
columnReload(id, 'tag')
}

File diff suppressed because it is too large Load Diff

View File

@@ -21,7 +21,7 @@ function imgv(id, key, acct_id) {
if (remote_img == 'yes') {
murl = ourl
}
$(document).ready(function() {
$(document).ready(function () {
if (type == 'image') {
$('#imagemodal').modal('open')
imageXhr(id, key, murl)
@@ -62,7 +62,7 @@ function imgCont(type) {
$('#imgsec').text(0)
$('#imgmodal').attr('src', '../../img/loading.svg')
var type = $('#' + id + '-image-' + key).attr('data-type')
$(document).ready(function() {
$(document).ready(function () {
if (type == 'image') {
imageXhr(id, key, murl)
$('#imagewrap').dragScroll() // ドラッグスクロール設定
@@ -77,16 +77,22 @@ function imgCont(type) {
}
function imageXhr(id, key, murl) {
var startTime = new Date()
$('#imgmodal-progress div').removeClass('determinate')
$('#imgmodal-progress div').addClass('indeterminate')
$('#imgmodal-progress').removeClass('hide')
xhr = new XMLHttpRequest()
xhr.open('GET', murl, true)
xhr.responseType = 'arraybuffer'
xhr.addEventListener(
'progress',
function(event) {
function (event) {
if (event.lengthComputable) {
var total = event.total
var now = event.loaded
var per = (now / total) * 100
$('#imgmodal-progress div').removeClass('indeterminate')
$('#imgmodal-progress div').addClass('determinate')
$('#imgmodal-progress div').css('width', `${per}%`)
$('#imgprog').text(Math.floor(per))
}
},
@@ -94,31 +100,35 @@ function imageXhr(id, key, murl) {
)
xhr.addEventListener(
'loadend',
function(event) {
function (event) {
var total = event.total
$('#imgbyte').text(Math.floor(total / 1024))
var now = event.loaded
var per = (now / total) * 100
$('#imgprog').text(Math.floor(per))
$('#imgmodal-progress').addClass('hide')
$('#imgmodal-progress div').css('width', '0%')
$('#imgmodal-progress div').removeClass('determinate')
$('#imgmodal-progress div').addClass('indeterminate')
},
false
)
xhr.addEventListener(
'error',
function(event) {
function (event) {
$('#imgmodal').attr('src', murl)
},
false
)
xhr.onreadystatechange = function() {
xhr.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
r = new FileReader()
r.readAsDataURL(this.response)
r.onload = function() {
r.onload = function () {
var b64 = r.result
var element = new Image()
var width
element.onload = function() {
element.onload = function () {
var width = element.naturalWidth
var height = element.naturalHeight
calcNiceAspect(width, height)
@@ -146,8 +156,8 @@ function imageXhr(id, key, murl) {
xhr.responseType = 'blob'
xhr.send()
}
function calcNiceAspect( width, height ) {
if(width < 650) {
function calcNiceAspect(width, height) {
if (width < 650) {
width = 650
}
var windowH = $(window).height()
@@ -156,7 +166,7 @@ function calcNiceAspect( width, height ) {
$('#imagemodal img').css('width', 'auto')
if (height < windowH) {
$('#imagemodal').css('height', height + 100 + 'px')
$('#imagemodal img').css('height', height + 'px')
$('#imagemodal img').css('height', height + 'px')
if (width > windowW * 0.8) {
$('#imagemodal').css('width', '80vw')
$('#imagemodal img').css('width', 'auto')
@@ -188,11 +198,11 @@ function zoom(z) {
$('#imagewrap img').css('height', hgt + 'px')
}
//スマホ対応ドラッグ移動システム
(function() {
$.fn.dragScroll = function() {
(function () {
$.fn.dragScroll = function () {
var target = this
$(this)
.mousedown(function(event) {
.mousedown(function (event) {
$(this)
.data('down', true)
.data('x', event.clientX)
@@ -207,7 +217,7 @@ function zoom(z) {
})
// ウィンドウから外れてもイベント実行
$(document)
.mousemove(function(event) {
.mousemove(function (event) {
if ($(target).data('down') == true) {
// スクロール
target.scrollLeft($(target).data('scrollLeft') + $(target).data('x') - event.clientX)
@@ -215,11 +225,11 @@ function zoom(z) {
return false // 文字列選択を抑止
}
})
.mouseup(function(event) {
.mouseup(function (event) {
$(target).data('down', false)
})
$(this)
.on('touchstart', function(event) {
.on('touchstart', function (event) {
$(this)
.data('down', true)
.data('x', getX(event))
@@ -232,7 +242,7 @@ function zoom(z) {
overflow: 'hidden', // スクロールバー非表示
cursor: 'move'
}) //指が触れたか検知
$(this).on('touchmove', function(event) {
$(this).on('touchmove', function (event) {
if ($(target).data('down') === true) {
// スクロール
target.scrollLeft($(target).data('scrollLeft') + $(target).data('x') - getX(event))
@@ -241,7 +251,7 @@ function zoom(z) {
} else {
}
}) //指が動いたか検知
$(this).on('touchend', function(event) {
$(this).on('touchend', function (event) {
$(target).data('down', false)
})
@@ -258,7 +268,7 @@ function getY(event) {
}
//マウスホイールで拡大
var element = document.getElementById('imagemodal')
element.onmousewheel = function(e) {
element.onmousewheel = function (e) {
var delta = e.wheelDelta
if (delta > 0) {
zoom(1.1)

View File

@@ -52,7 +52,7 @@ function parseColumn(target, dontclose) {
localStorage.setItem('domain_' + key, acct.domain)
localStorage.setItem('acct_' + key + '_at', acct.at)
localStorage.setItem('acct_' + key + '_rt', acct.rt ? acct.rt : null)
if(!target) mastodonBaseStreaming(key)
if (!target) mastodonBaseStreaming(key)
ckdb(key)
//フィルターデータ読もう
getFilter(key)
@@ -167,11 +167,11 @@ function parseColumn(target, dontclose) {
}
var maxWidth = localStorage.getItem('max-width')
if (maxWidth) {
css = css +'max-width:' + maxWidth + 'px;'
css = css + 'max-width:' + maxWidth + 'px;'
}
var margin = localStorage.getItem('margin')
if (margin) {
css = css +'margin-right:' + margin + 'px;'
css = css + 'margin-right:' + margin + 'px;'
}
if (acct.width) {
css = css + ' min-width:' + acct.width + 'px !important;max-width:' + acct.width + 'px !important;'
@@ -185,6 +185,7 @@ function parseColumn(target, dontclose) {
}
var html = webviewParse('https://tweetdeck.twitter.com', key, insert, icnsert, css)
$('#timeline-container').append(html)
initWebviewEvent()
} else if (acct.type == 'tootsearch') {
if (!acct.left_fold) {
basekey = key
@@ -230,14 +231,14 @@ function parseColumn(target, dontclose) {
}
var unread = `<a id="unread_${key}" onclick="showUnread('${key}','${acct.type}','${acct.domain}')"
class="setting nex waves-effect" title="${lang.lang_layout_unread}">
<i class="material-icons waves-effect nex">more</i><br />${lang.lang_layout_unread}
<i class="material-icons waves-effect nex">more</i><span>${lang.lang_layout_unread}</span>
</a>`
var notfDomain = acct.domain
var notfKey = key
var if_tag = ''
var if_tag_btn = ''
if (acct.type == 'notf') {
var exclude =
var excludeNotf =
`<div style="border: 1px solid; padding: 5px; margin-top: 5px; margin-bottom: 5px;">${lang.lang_layout_excluded}:<br>
<label>
<input type="checkbox" class="filled-in" id="exc-reply-${key}" ${excludeCk(key, 'mention')} />
@@ -271,20 +272,21 @@ function parseColumn(target, dontclose) {
</label> <br />
<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)) {
exclude =
exclude +
excludeNotf =
excludeNotf +
`<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
</button>`
}
exclude = exclude + '</div>'
excludeNotf = excludeNotf + '</div>'
notfDomain = 'dummy'
notfKey = 'dummy'
var excludeHome = ''
} else if (acct.type == 'home') {
var exclude = `<a onclick="ebtToggle('${key}')" class="setting nex waves-effect">
var excludeNotf = ''
var excludeHome = `<a onclick="ebtToggle('${key}')" class="setting nex waves-effect">
<i class="fas fa-retweet nex" title="${lang.lang_layout_excludingbt}" style="font-size: 24px"></i>
<span id="sta-bt-${key}">Off</span><br />
${lang.lang_layout_excludingbt}
<span>${lang.lang_layout_excludingbt}</span><span id="sta-bt-${key}">Off</span>
</a>`
} else if (acct.type == 'tag') {
if (acct.data.name) {
@@ -312,10 +314,12 @@ function parseColumn(target, dontclose) {
<i class="material-icons waves-effect nex">note_add</i>
</a>`
unread = ''
var exclude = ''
var excludeNotf = ''
var excludeHome = ''
var if_notf = 'hide'
} else {
var exclude = ''
var excludeNotf = ''
var excludeHome = ''
unread = ''
}
@@ -325,6 +329,7 @@ function parseColumn(target, dontclose) {
} else {
markers = false
}
const smallHeader = localStorage.getItem('smallHeader') === 'yes'
if (!markers) {
unread = ''
}
@@ -335,12 +340,12 @@ function parseColumn(target, dontclose) {
$('#timeline-container').append(basehtml)
}
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><br />
${lang.lang_layout_leftFold}</a>`
<i class="material-icons waves-effect nex" title="${lang.lang_layout_leftFold}">view_agenda</i>
<span>${lang.lang_layout_leftFold}</span></a>`
} else {
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><br />
${lang.lang_layout_leftUnfold}</a>`
<i class="material-icons waves-effect nex" title="${lang.lang_layout_leftUnfold}">view_column</i>
<span>${lang.lang_layout_leftUnfold}</span></a>`
}
if (key === 0) {
left_hold = ''
@@ -361,8 +366,7 @@ function parseColumn(target, dontclose) {
if (acct.type != 'pub' && acct.type != 'pub-media') {
var mediaFil = `<a onclick="mediaToggle('${key}')" class="setting nex waves-effect">
<i class="material-icons nex" title="${lang.lang_layout_mediafil}">perm_media</i>
<span id="sta-media-${key}">On</span><br />
${lang.lang_layout_mediafil}</a>`
<span>${lang.lang_layout_mediafil}</span/><span id="sta-media-${key}">On</span></a>`
} else {
var mediaFil = `<a onclick="remoteOnly('${key}','${acct.type}')" class="setting nex waves-effect">
<i class="material-icons nex" title="${lang.lang_layout_remoteOnly}">perm_media</i><br />
@@ -371,10 +375,9 @@ function parseColumn(target, dontclose) {
}
var html = `
<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 ${smallHeader ? 'small-header' : ''} z-depth-2" id="menu_${key}" style="${insert}">
<div class="area-notice">
<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%;"
<i class="material-icons waves-effect ${isMisRed} notice_icon_acct_${acct.domain} top-icon" id="notice_icon_${key}" ${notf_attr}
onclick="checkStr('${acct.type}','${data}','${acct.domain}', '${key}', '${delc}','${voice}',null)"
title="${lang.lang_layout_gotop}" aria-hidden="true">
</i>
@@ -397,10 +400,10 @@ function parseColumn(target, dontclose) {
${if_tag_btn}
</div>
<div class="area-sta">
<span class="new badge teal notf-reply_${acct.domain} hide" data-badge-caption="Reply" aria-hidden="true">0</span>
<span class="new badge yellow black-text notf-fav_${acct.domain} hide" data-badge-caption="Fav" aria-hidden="true">0</span>
<span class="new badge teal notf-reply_${acct.domain} hide" data-badge-caption="Rp" aria-hidden="true">0</span>
<span class="new badge yellow black-text notf-fav_${acct.domain} hide" data-badge-caption="Fv" aria-hidden="true">0</span>
<span class="new badge blue notf-bt_${acct.domain} hide" data-badge-caption="BT" aria-hidden="true">0</span>
<span class="new badge orange notf-follow_${acct.domain} hide" data-badge-caption="Follow" aria-hidden="true">0</span>
<span class="new badge orange notf-follow_${acct.domain} hide" data-badge-caption="Fw" aria-hidden="true">0</span>
</div>
<div class="area-a2">
<a onclick="removeColumn('${key}')" class="setting nex">
@@ -421,39 +424,48 @@ function parseColumn(target, dontclose) {
</div>
</div>
<div class="column-hide notf-indv-box" id="util-box_${key}" style="padding:5px;">
${exclude}
${excludeNotf}
<div class="columnSettings">
${excludeHome}
${unread}
${left_hold}
${mediaFil}
<a onclick="cardToggle('${key}')" class="setting nex waves-effect">
<i class="material-icons nex" title="${lang.lang_layout_linkanades}">link</i>
<span id="sta-card-${key}">On</span><br />
${lang.lang_layout_linkana}
<span>${lang.lang_layout_linkana}</span><span id="sta-card-${key}">On</span>
</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}
TL</a>
<span>${lang.lang_layout_tts}TL</span/><span id="sta-voice-${key}">On</span>
</a>
<a onclick="columnReload('${key}','${acct.type}')" class="setting nex ${if_misskey_hide} waves-effect">
<i class="material-icons nex" title="${lang.lang_layout_reconnect}">refresh</i>
<br />
${lang.lang_layout_reconnect}
<span>${lang.lang_layout_reconnect}</span>
</a>
<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}
<br>
<i class="material-icons nex rotate-90" title="${lang.lang_layout_resetWidth}">height</i>
<span>${lang.lang_layout_resetWidth}</span>
</a></div>
<p>${lang.lang_layout_headercolor}</p>
<div id="picker_${key}" class="color-picker"></div>
</div>${if_tag}
<div class="tl-box" tlid="${key}">
<div id="timeline_${key}" class="tl ${acct.type}-timeline " tlid="${key}"
data-type="${acct.type}" data-acct="${acct.domain}" data-const="${acct.type}_${acct.domain}">
<div id="landing_${key}" style="text-align:center">
${lang.lang_layout_nodata}
<div id="landing_${key}" class="landing">
<div class="preloader-wrapper small active " style="margin-top: calc(50vh - 15px)">
<div class="spinner-layer spinner-blue-only">
<div class="circle-clipper left">
<div class="circle"></div>
</div>
<div class="gap-patch">
<div class="circle"></div>
</div>
<div class="circle-clipper right">
<div class="circle"></div>
</div>
</div>
</div>
</div>
</div>
</div>`
@@ -643,8 +655,6 @@ function removeColumn(tlid) {
text: lang.lang_layout_deleteColumnDesc,
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: lang.lang_yesno,
cancelButtonText: lang.lang_no,
}).then((result) => {
@@ -661,8 +671,6 @@ function removeColumn(tlid) {
$('#timeline_box_' + tlid + '_parentBox').remove()
}
}
$('#sort-box').removeClass('hide')
$('#sort-box').addClass('show')
})
}

View File

@@ -101,6 +101,7 @@ if (location.search) {
$('.mini-btn').text('expand_less')
}
}
function initPostbox() {
$('#posttgl').click(function (e) {
if (!$('#post-box').hasClass('appear')) {
@@ -124,6 +125,7 @@ function initPostbox() {
selectedToot = 0
localStorage.removeItem('nohide')
srcBox('close')
tShowBox('close')
})
$('#textarea,#cw-text').focusout(function (e) {
localStorage.setItem('nohide', true)

File diff suppressed because it is too large Load Diff

View File

@@ -166,7 +166,7 @@ function nowplaying(mode) {
} else {
Swal.fire({
type: 'info',
title: lang.lang_spotify_acct,
text: lang.lang_spotify_acct,
})
}
} else if (mode == 'itunes') {
@@ -239,7 +239,7 @@ function nowplaying(mode) {
} else {
Swal.fire({
type: 'info',
title: lang.lang_spotify_acct,
text: lang.lang_spotify_acct,
})
}
}

View File

@@ -117,7 +117,7 @@ function trendTagonTip() {
Object.keys(json).forEach(function(tag) {
tags =
tags +
`<a onclick="tagShow('${tag}')" class="pointer">
`<a onclick="tagShow('${tag}', this)" class="pointer">
#${escapeHTML(tag)}
</a>
<span class="hide" data-tag="${tag}" data-regTag="${tag.toLowerCase()}"> 
@@ -226,7 +226,7 @@ function spotifytips() {
} else {
Swal.fire({
type: 'info',
title: lang.lang_spotify_acct
text: lang.lang_spotify_acct
})
tips('ver')
return false

File diff suppressed because it is too large Load Diff

View File

@@ -14,12 +14,12 @@ const dl = require('./main/dl.js')
const img = require('./main/img.js')
const np = require('./main/np.js')
const systemFunc = require('./main/system.js')
const Menu = electron.Menu
const { Menu, MenuItem, BrowserWindow, ipcMain } = electron
const join = require('path').join
// ウィンドウを作成するモジュール
const BrowserWindow = electron.BrowserWindow
// メインウィンドウはGCされないようにグローバル宣言
let mainWindow
let opening = true
// アプリが多重起動しないようにする
const gotTheLock = app.requestSingleInstanceLock()
@@ -27,9 +27,12 @@ const gotTheLock = app.requestSingleInstanceLock()
if (!gotTheLock) {
app.quit()
} else {
app.on('second-instance', () => {
// 多重起動を試みた場合、既に存在するウィンドウにフォーカスを移す
// Someone tried to run a second instance, we should focus our window.
app.on('second-instance', (event, commandLine, workingDirector) => {
opening = false
const m = commandLine[2].match(/([a-zA-Z0-9]+)\/\?[a-zA-Z-0-9]+=(.+)/)
if (m) {
mainWindow.send('customUrl', [m[1], m[2]])
}
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore()
mainWindow.focus()
@@ -39,7 +42,7 @@ if (!gotTheLock) {
// 全てのウィンドウが閉じたら終了
app.on('window-all-closed', function () {
electron.session.defaultSession.clearCache(() => {})
electron.session.defaultSession.clearCache(() => { })
app.quit()
})
function isFile(file) {
@@ -76,25 +79,26 @@ function createWindow() {
if (!packaged) console.log('launch:' + lang)
//Opening
const package = fs.readFileSync(__dirname + '/package.json')
if(lang == 'ja') {
if (lang == 'ja') {
const maxims = JSON.parse(fs.readFileSync(__dirname + '/maxim.ja.json'))
var show = maxims[Math.floor(Math.random() * maxims.length)]
} else if(lang == 'ja-KS') {
} else if (lang == 'ja-KS') {
//ja-KSも作れたらいいね
const maxims = JSON.parse(fs.readFileSync(__dirname + '/maxim.ja.json'))
var show = maxims[Math.floor(Math.random() * maxims.length)]
} else{
} else {
var show = 'TheDesk 2018'
}
const data = JSON.parse(package)
const version = data.version
const codename = data.codename
var openingWindow = new BrowserWindow({
const openingWindow = new BrowserWindow({
width: 300,
height: 400,
transparent: false,
frame: false,
resizable: false,
show: opening
})
openingWindow.loadURL(`${__dirname}/opening.html?ver=${version}&codename=${codename}&maxim=${encodeURI(show)}`)
@@ -104,18 +108,18 @@ function createWindow() {
var packaged = false
console.log(
'||\\\\\\ \n' +
'|||| \\\\\\\\ \n' +
'|||| \\\\\\\\ \n' +
'|||| Am I a \\\\\\\\ \n' +
'|||| cat? ^ ^ \\\\\\\\\\ _____ _ ____ _ \n' +
'|||| (.-.) \\\\\\\\\\ |_ _| |__ ___| _ \\ ___ ___| | __\n' +
"|||| ___> ) ||||| | | | '_ \\ / _ \\ | | |/ _ \\/ __| |/ /\n" +
'|||| < _ _) ////// | | | | | | __/ |_| | __/__ \\ < \n' +
'|||| |_||_| ///// |_| |_| |_|\\___|____/ \\___||___/_|\\_\\ \n' +
'|||| ///// \n' +
'|||| /////\n' +
'|||| /////\n' +
'||||//////'
'|||| \\\\\\\\ \n' +
'|||| \\\\\\\\ \n' +
'|||| Am I a \\\\\\\\ \n' +
'|||| cat? ^ ^ \\\\\\\\\\ _____ _ ____ _ \n' +
'|||| (.-.) \\\\\\\\\\ |_ _| |__ ___| _ \\ ___ ___| | __\n' +
"|||| ___> ) ||||| | | | '_ \\ / _ \\ | | |/ _ \\/ __| |/ /\n" +
'|||| < _ _) ////// | | | | | | __/ |_| | __/__ \\ < \n' +
'|||| |_||_| ///// |_| |_| |_|\\___|____/ \\___||___/_|\\_\\ \n' +
'|||| ///// \n' +
'|||| /////\n' +
'|||| /////\n' +
'||||//////'
)
console.log('If it does not show the window, you might forget `npm run construct`.')
}
@@ -123,6 +127,7 @@ function createWindow() {
var info_path = join(app.getPath('userData'), 'window-size.json')
var max_info_path = join(app.getPath('userData'), 'max-window-size.json')
var ha_path = join(app.getPath('userData'), 'hardwareAcceleration')
var wv_path = join(app.getPath('userData'), 'webview')
var ua_path = join(app.getPath('userData'), 'useragent')
try {
fs.readFileSync(ha_path, 'utf8')
@@ -131,6 +136,8 @@ function createWindow() {
} catch {
if (!packaged) console.log('enabled: Hardware Acceleration')
}
let webviewEnabled = false
if (fs.existsSync(wv_path, 'utf8')) webviewEnabled = true
var window_size
try {
window_size = JSON.parse(fs.readFileSync(info_path, 'utf8'))
@@ -156,7 +163,7 @@ function createWindow() {
var bit = process.arch
var arg = {
webPreferences: {
webviewTag: true,
webviewTag: webviewEnabled,
nodeIntegration: false,
contextIsolation: true,
spellcheck: false,
@@ -187,13 +194,13 @@ function createWindow() {
})
mainWindow.webContents.on('page-title-updated', () => {
const url = mainWindow.webContents.getURL()
if(url.match(/https:\/\/crowdin.com\/profile/)) {
if (url.match(/https:\/\/crowdin.com\/profile/)) {
app.relaunch()
app.exit()
}
})
if (!packaged) mainWindow.toggleDevTools()
electron.session.defaultSession.clearCache(() => {})
electron.session.defaultSession.clearCache(() => { })
if (process.argv) {
if (process.argv[1]) {
var m = process.argv[1].match(/([a-zA-Z0-9]+)\/\?[a-zA-Z-0-9]+=(.+)/)
@@ -226,7 +233,7 @@ function createWindow() {
}
// ウィンドウが閉じられたらアプリも終了
mainWindow.on('closed', function () {
electron.ipcMain.removeAllListeners()
ipcMain.removeAllListeners()
mainWindow = null
})
closeArg = false
@@ -236,10 +243,10 @@ function createWindow() {
e.preventDefault()
}
const promise = new Promise(function (resolve) {
mainWindow.webContents.send('asReadEnd', '')
mainWindow.send('asReadEnd', '')
let wait = 3000
const url = mainWindow.webContents.getURL()
if(!url.match(/index.html/)) wait = 0
if (!url.match(/index.html/)) wait = 0
setTimeout(function () {
resolve()
}, wait)
@@ -249,7 +256,7 @@ function createWindow() {
mainWindow.close()
})
})
electron.ipcMain.on('sendMarkersComplete', function (e, arg) {
ipcMain.on('sendMarkersComplete', function (e, arg) {
closeArg = true
mainWindow.close()
})
@@ -283,7 +290,7 @@ function createWindow() {
})
mainWindow.on('minimize', function () {
writePos(mainWindow)
mainWindow.webContents.send('asRead', '')
mainWindow.send('asRead', '')
})
var platform = process.platform
@@ -319,7 +326,7 @@ function mouseTrack(mainWindow) {
if (unchanged > 60 && !locked) {
unchanged = 0
locked = true
mainWindow.webContents.send('asRead', '')
mainWindow.send('asRead', '')
}
}
x = xNow

View File

@@ -10,7 +10,7 @@ function css(mainWindow) {
ipc.on('custom-css-create', function (e, arg) {
fs.writeFileSync(customcss, arg);
e.sender.webContents.send('custom-css-create-complete', "");
e.sender.send('custom-css-create-complete', "");
})
ipc.on('custom-css-request', function (e, arg) {
try {
@@ -18,29 +18,29 @@ function css(mainWindow) {
} catch (e) {
var css = "";
}
e.sender.webContents.send('custom-css-response', css);
e.sender.send('custom-css-response', css);
})
ipc.on('theme-json-create', function (e, arg) {
var themecss = join(app.getPath("userData"), JSON5.parse(arg)["id"] +
".thedesktheme");
fs.writeFileSync(themecss, JSON5.stringify(JSON5.parse(arg)));
if (JSON5.parse(arg)["id"]) {
e.sender.webContents.send('theme-json-create-complete', "");
e.sender.send('theme-json-create-complete', "");
} else {
e.sender.webContents.send('theme-json-create-complete', "error");
e.sender.send('theme-json-create-complete', "error");
}
})
ipc.on('theme-json-delete', function (e, arg) {
try{
try {
var themecss = join(app.getPath("userData"), arg);
console.log(themecss);
fs.unlink(themecss, function (err) {
e.sender.webContents.send('theme-json-delete-complete', "");
e.sender.send('theme-json-delete-complete', "");
});
} catch {
e.sender.webContents.send('theme-json-delete-complete', 'cannot delete');
e.sender.send('theme-json-delete-complete', 'cannot delete');
}
})
ipc.on('theme-json-request', function (e, arg) {
try {
@@ -52,15 +52,19 @@ function css(mainWindow) {
var raw = fs.readFileSync(themecss, 'utf8')
var json = JSON5.parse(raw)
}
e.sender.webContents.send('theme-json-response', [json, raw]);
e.sender.send('theme-json-response', [json, raw]);
})
ipc.on('theme-css-request', function (e, arg) {
try {
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'))
ipc.on('theme-css-request', function (e, args) {
if (args[0] === 'themeCSSPreview') {
var json = args[1]
} else {
try {
var themecss = join(app.getAppPath(), '/source/themes', args[1])
var json = JSON5.parse(fs.readFileSync(themecss, 'utf8'))
} catch {
var themecss = join(app.getPath("userData"), args[1])
var json = JSON5.parse(fs.readFileSync(themecss, 'utf8'))
}
}
try {
@@ -149,7 +153,7 @@ function css(mainWindow) {
} else {
var css = compatibleTheme(json)
}
e.sender.webContents.send('theme-css-response', css);
e.sender.send('theme-css-response', css);
} catch (e) {
var css = "";
}
@@ -270,7 +274,7 @@ function css(mainWindow) {
default: false
})
}
e.sender.webContents.send('theme-json-list-response', themes);
e.sender.send('theme-json-list-response', themes);
})
}
exports.css = css;

View File

@@ -41,19 +41,19 @@ function dl(mainWindow, lang_path, base, dirname) {
//アプデDL
ipc.on('download-btn', async (e, args) => {
function dl(url, file, dir, e) {
e.sender.webContents.send('mess', 'Start...')
e.sender.send('mess', 'Start...')
const opts = {
directory: dir,
filename: file,
openFolderWhenDone: true,
onProgress: function(event) {
e.sender.webContents.send('prog', [event, args[2]])
e.sender.send('prog', [event, args[2]])
},
saveAs: false
}
download(updatewin, url, opts)
.then(dl => {
e.sender.webContents.send('mess', 'ダウンロードが完了しました。')
e.sender.send('mess', 'ダウンロードが完了しました。')
app.quit()
})
.catch(console.error)
@@ -111,7 +111,7 @@ function dl(mainWindow, lang_path, base, dirname) {
filename: name,
openFolderWhenDone: false,
onProgress: function(e) {
event.sender.webContents.send('general-dl-prog', e)
event.sender.send('general-dl-prog', e)
},
saveAs: false
}
@@ -126,7 +126,7 @@ function dl(mainWindow, lang_path, base, dirname) {
} else {
var name = dir
}
event.sender.webContents.send('general-dl-message', name)
event.sender.send('general-dl-message', name)
})
.catch(console.error)
})

View File

@@ -26,14 +26,14 @@ function img(mainWindow, dir) {
for (var i = 0; i < fileNames.length; i++) {
var path = fileNames[i]
var bin = fs.readFileSync(path, 'base64')
e.sender.webContents.send('resizeJudgement', [bin, 'new'])
e.sender.send('resizeJudgement', [bin, 'new'])
}
})
ipc.on('bmp-image', (e, args) => {
Jimp.read(args[0], function (err, lenna) {
if (err) throw err
lenna.getBase64(Jimp.MIME_PNG, function (err, src) {
e.sender.webContents.send('bmp-img-comp', [src, args[1]])
e.sender.send('bmp-img-comp', [src, args[1]])
})
})
})
@@ -49,7 +49,7 @@ function img(mainWindow, dir) {
Jimp.read(decodedFile, function (err, lenna) {
if (err) throw err
lenna.scaleToFit(args[1], args[1]).getBase64(Jimp[use], function (err, src) {
e.sender.webContents.send('bmp-img-comp', [src, args[1]])
e.sender.send('bmp-img-comp', [src, args[1]])
})
})
})
@@ -71,12 +71,12 @@ function img(mainWindow, dir) {
var ave = (color.r + color.g + color.b) / 3
if (ave > 128) {
image.print(font, left, top, args[1]).getBase64(Jimp.MIME_PNG, function (err, src) {
e.sender.webContents.send('bmp-img-comp', [src, args[1], true])
e.sender.send('bmp-img-comp', [src, args[1], true])
})
} else {
Jimp.loadFont(Jimp.FONT_SANS_16_WHITE).then((font) => {
image.print(font, left, top, args[1]).getBase64(Jimp.MIME_PNG, function (err, src) {
e.sender.webContents.send('bmp-img-comp', [src, args[1], true])
e.sender.send('bmp-img-comp', [src, args[1], true])
})
})
}

View File

@@ -1,13 +1,11 @@
// Create the Application's main menu
function templete(lang, mainWindow, packaged, dir, dirname) {
//フレーム
if(lang !="ja" && lang != "en"){
if (lang != "ja" && lang != "en") {
lang = "en"
}
const electron = require("electron");
const ipc = electron.ipcMain;
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const electron = require("electron")
const { Menu, MenuItem, ipcMain, BrowserWindow, app } = electron
const join = require('path').join;
const dict = {
"application": {
@@ -71,7 +69,7 @@ function templete(lang, mainWindow, packaged, dir, dirname) {
"en": "Close"
}
}
if(packaged){
if (packaged) {
var ifDev = [
{
label: dict.reload[lang],
@@ -79,12 +77,12 @@ function templete(lang, mainWindow, packaged, dir, dirname) {
click: function () { mainWindow.reload(); }
}
]
}else{
} else {
var ifDev = [
{
label: 'Toggle Developer Tools',
accelerator: 'Alt+Command+I',
click: function () { if (!packaged) { mainWindow.toggleDevTools(); } }
click: function () { mainWindow.toggleDevTools(); }
},
{
label: dict.reload[lang],
@@ -104,7 +102,7 @@ function templete(lang, mainWindow, packaged, dir, dirname) {
webviewTag: false,
nodeIntegration: false,
contextIsolation: true,
preload: join(dirname , "js", "platform", "preload.js")
preload: join(dirname, "js", "platform", "preload.js")
},
width: 300, height: 500,
"transparent": false, // ウィンドウの背景を透過
@@ -150,6 +148,28 @@ function templete(lang, mainWindow, packaged, dir, dirname) {
]
}
];
// コピペメニュー
const ctxMenu = new Menu()
ctxMenu.append(new MenuItem({
label: dict.cut[lang],
role: 'cut',
click: () => { console.log('Cut clicked!') }
}))
ctxMenu.append(new MenuItem({
label: dict.copy[lang],
role: 'copy',
click: () => { console.log('Copy clicked!') }
}))
ctxMenu.append(new MenuItem({
label: dict.paste[lang],
role: 'paste',
click: () => { console.log('Paste clicked!') }
}))
ipcMain.on('textareaContextMenu', function (e, params) {
ctxMenu.popup(mainWindow, params.x, params.y)
})
return menu;
}

View File

@@ -16,7 +16,7 @@ function np(mainWindow) {
title: title,
anynp: true
}
e.sender.webContents.send('itunes-np', ret)
e.sender.send('itunes-np', ret)
} else {
try {
@@ -27,16 +27,16 @@ function np(mainWindow) {
if(artwork) {
const base64 = artwork.toString('base64')
value.artwork = base64
e.sender.webContents.send('itunes-np', value)
e.sender.send('itunes-np', value)
}
} catch (error) {
console.error(error)
e.sender.webContents.send('itunes-np', value)
e.sender.send('itunes-np', value)
}
} catch (error) {
console.error(error)
e.sender.webContents.send('itunes-np', error)
e.sender.send('itunes-np', error)
}
}
})

Binary file not shown.

View File

@@ -9,6 +9,7 @@ function system(mainWindow, dir, lang, dirname) {
const clipboard = electron.clipboard
var tmp_img = join(app.getPath('userData'), 'tmp.png')
var ha_path = join(app.getPath('userData'), 'hardwareAcceleration')
var wv_path = join(app.getPath('userData'), 'webview')
var ua_path = join(app.getPath('userData'), 'useragent')
var lang_path = join(app.getPath('userData'), 'language')
var log_dir_path = join(app.getPath('userData'), 'logs')
@@ -35,13 +36,13 @@ function system(mainWindow, dir, lang, dirname) {
} catch {
var gitHash = null
}
e.sender.webContents.send('platform', [process.platform, process.arch, process.version, process.versions.chrome, process.versions.electron, gitHash])
e.sender.send('platform', [process.platform, process.arch, process.version, process.versions.chrome, process.versions.electron, gitHash])
})
//言語
ipc.on('lang', function (e, arg) {
console.log('set:' + arg)
fs.writeFileSync(lang_path, arg)
e.sender.webContents.send('langres', arg)
e.sender.send('langres', arg)
})
//エクスポートのダイアログ
ipc.on('exportSettings', function (e, args) {
@@ -53,7 +54,7 @@ function system(mainWindow, dir, lang, dirname) {
if (!savedFiles) {
return false
}
e.sender.webContents.send('exportSettingsFile', savedFiles)
e.sender.send('exportSettingsFile', savedFiles)
})
//インポートのダイアログ
ipc.on('importSettings', function (e, args) {
@@ -66,7 +67,7 @@ function system(mainWindow, dir, lang, dirname) {
if (!fileNames) {
return false
}
e.sender.webContents.send('config', JSON5.parse(fs.readFileSync(fileNames[0], 'utf8')))
e.sender.send('config', JSON5.parse(fs.readFileSync(fileNames[0], 'utf8')))
})
//保存フォルダのダイアログ
ipc.on('savefolder', function (e, args) {
@@ -77,7 +78,7 @@ function system(mainWindow, dir, lang, dirname) {
properties: ['openDirectory'],
}
)
e.sender.webContents.send('savefolder', fileNames[0])
e.sender.send('savefolder', fileNames[0])
})
//カスタムサウンドのダイアログ
ipc.on('customSound', function (e, arg) {
@@ -92,7 +93,7 @@ function system(mainWindow, dir, lang, dirname) {
],
}
)
e.sender.webContents.send('customSoundRender', [arg, fileNames[0]])
e.sender.send('customSoundRender', [arg, fileNames[0]])
})
//ハードウェアアクセラレーションの無効化
@@ -100,7 +101,16 @@ function system(mainWindow, dir, lang, dirname) {
if (arg == 'true') {
fs.writeFileSync(ha_path, arg)
} else {
fs.unlink(ha_path, function (err) {})
fs.unlink(ha_path, function (err) { })
}
app.relaunch()
app.exit()
})
ipc.on('webview', function (e, arg) {
if (arg == 'true') {
fs.writeFileSync(wv_path, arg)
} else {
fs.unlink(wv_path, function (err) { })
}
app.relaunch()
app.exit()
@@ -108,7 +118,7 @@ function system(mainWindow, dir, lang, dirname) {
//ユーザーエージェント
ipc.on('ua', function (e, arg) {
if (arg == '') {
fs.unlink(ua_path, function (err) {})
fs.unlink(ua_path, function (err) { })
} else {
fs.writeFileSync(ua_path, arg)
}
@@ -124,7 +134,7 @@ function system(mainWindow, dir, lang, dirname) {
//スクリーンリーダー
ipc.on('acsCheck', function (e, arg) {
if (app.accessibilitySupportEnabled) {
mainWindow.webContents.send('accessibility', 'true')
mainWindow.send('accessibility', 'true')
}
})
ipc.on('quit', (e, args) => {
@@ -188,8 +198,8 @@ function system(mainWindow, dir, lang, dirname) {
})
function mems() {
var mem = os.totalmem() - os.freemem()
if (mainWindow && event.webContents) {
event.webContents.send('memory', [mem, os.cpus()[0].model, os.totalmem(), os.cpus().length, os.uptime()])
if (mainWindow && event) {
event.send('memory', [mem, os.cpus()[0].model, os.totalmem(), os.cpus().length, os.uptime()])
}
}
ipc.on('endmem', (e, arg) => {
@@ -200,7 +210,7 @@ function system(mainWindow, dir, lang, dirname) {
ipc.on('export', (e, args) => {
fs.writeFileSync(args[0], JSON5.stringify(args[1]))
e.sender.webContents.send('exportAllComplete', '')
e.sender.send('exportAllComplete', '')
})
//フォント
function object_array_sort(data, key, order, fn) {
@@ -239,7 +249,7 @@ function system(mainWindow, dir, lang, dirname) {
var SystemFonts = require('system-font-families').default
var fm = new SystemFonts()
const fontList = fm.getFontsSync()
e.sender.webContents.send('font-list', fontList)
e.sender.send('font-list', fontList)
})
//コピー
ipc.on('copy', (e, arg) => {
@@ -276,7 +286,7 @@ function system(mainWindow, dir, lang, dirname) {
logs = todayLog + yestLog + yest2Log
})
logs = yest2Log + yestLog + todayLog
e.sender.webContents.send('logData', logs)
e.sender.send('logData', logs)
})
})
@@ -299,5 +309,28 @@ function system(mainWindow, dir, lang, dirname) {
})
}
})
ipc.on('twitterLogin', (e, args) => {
const window = new BrowserWindow({
webPreferences: {
webviewTag: false,
nodeIntegration: false,
contextIsolation: true,
preload: join(dirname, 'js', 'platform', 'preload.js'),
},
width: 414,
height: 736,
})
const login = `https://mobile.twitter.com/login?hide_message=true&redirect_after_login=https%3A%2F%2Ftweetdeck.twitter.com%2F%3Fvia_twitter_login%3Dtrue`
const logout = `https://mobile.twitter.com/logout?redirect_after_logout=https%3A%2F%2Ftweetdeck.twitter.com%2F`
window.loadURL(args ? logout : login)
window.webContents.on('did-navigate', () => {
const url = window.webContents.getURL()
if (url.match("https://tweetdeck.twitter.com")) {
window.close()
e.sender.send('twitterLoginComplete', '')
}
})
})
}
exports.system = system

View File

@@ -1,4 +1,8 @@
const { AiScript, parse, values, utils } = require('@syuilo/aiscript')
const gcc = require('textarea-caret')
const { v4: uuidv4 } = require('uuid')
global.uuid = uuidv4
global.getCaretCoordinates = gcc
global.sanitizeHtml = require('sanitize-html')
global.asValue = values
global.AiScript = AiScript

View File

@@ -1,26 +1,24 @@
{
"name": "thedesk",
"version": "22.1.1",
"version": "22.3.0",
"codename": "Koume",
"description": "TheDesk is a Mastodon client for PC.",
"repository": "https://github.com/cutls/TheDesk",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"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",
"dist": "build --linux snap",
"watchview": "node view/make/make.js --automatic --watch",
"build:js": "node build.js",
"build": "node view/make/make.js --automatic && npx electron-builder",
"build:pwa": "node view/make/make.js --automatic --pwa",
"build:win:web": "node view/make/make.js --automatic && npx electron-builder --win",
"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",
"postinstall": "run-s util:*",
"util:hash": "node gitHash.js",
"util:browserify": "browserify native.js -o js/platform/native.js",
"construct": "node view/make/makeCli.js",
"construct:store": "node view/make/makeCli.js --store",
"dev": "run-p dev:*",
"dev:run": "electron ./ --dev",
"dev:watchview": "node view/make/makeCli.js --watch",
"build": "node buildCli.js",
"build:pwa": "node view/make/makeCli.js --pwa",
"build:all:x64": "node buildCli.js --withStore",
"build:all": "node buildCli.js --withStore --withIa32 --withArm64",
"lint:fix": "eslint js --fix",
"lint": "eslint js"
},
@@ -59,85 +57,38 @@
],
"license": "GPL-3.0",
"dependencies": {
"@fortawesome/fontawesome-free": "^5.15.2",
"@fortawesome/fontawesome-free": "^5.15.3",
"@syuilo/aiscript": "^0.11.1",
"electron-dl": "^3.2.1",
"itunes-nowplaying-mac": "https://github.com/cutls/itunes-nowplaying-mac/releases/download/v0.4.0/itunes-nowplaying-mac-0.4.0.tgz",
"jimp": "^0.16.1",
"jquery": "^3.6.0",
"jquery-ui-dist": "^1.12.1",
"json5": "^2.2.0",
"lodash": "^4.17.21",
"materialize-css": "git://github.com/cutls/materialize#v1-dev",
"sanitize-html": "^2.3.2",
"sanitize-html": "^2.4.0",
"sumchecker": "^3.0.1",
"sweetalert2": "^10.15.7",
"sweetalert2": "^11.0.18",
"system-font-families": "^0.4.1",
"vue": "^2.6.12"
},
"optionalDependencies": {
"itunes-nowplaying-mac": "0.3.1"
"textarea-caret": "^3.1.0",
"uuid": "^8.3.2",
"vue": "^2.6.14"
},
"devDependencies": {
"browserify": "^17.0.0",
"chokidar": "^3.5.1",
"electron": "^10.2.0",
"electron-builder": "^22.10.5",
"chokidar": "^3.5.2",
"dotenv": "^10.0.0",
"electron": "^13.1.2",
"electron-builder": "^22.11.7",
"electron-notarize": "^1.0.0",
"electron-rebuild": "^2.3.5",
"eslint": "^7.23.0",
"eslint": "^7.28.0",
"npm-run-all": "^4.1.5",
"readline-sync": "1.4.10"
},
"build": {
"productName": "TheDesk",
"appId": "top.thedesk",
"asarUnpack": [
"node_modules/itunes-nowplaying-mac",
"main/script"
],
"directories": {
"output": "../build"
},
"win": {
"icon": "build/thedesk.ico",
"target": [
"nsis",
"appx",
"portable"
]
},
"appx": {
"identityName": "53491Cutls.TheDesk",
"applicationId": "Cutls.TheDesk",
"publisherDisplayName": "Cutls",
"publisher": "CN=629757F5-A5EE-474F-9562-B304A89A9FD1",
"languages": [
"JA-JP",
"EN-US"
]
},
"nsis": {
"oneClick": false,
"allowToChangeInstallationDirectory": true,
"artifactName": "TheDesk-setup.${ext}"
},
"linux": {
"icon": "build/icons",
"target": [
"zip",
"appImage",
"snap",
"deb"
],
"category": "Network"
},
"mac": {
"target": [
"dmg",
"zip"
]
},
"electronDownload": {
"version": "9.0.5"
},
"electronVersion": "9.0.5"
"resolutions": {
"@types/fs-extra": "9.0.11",
"plist": "3.0.2"
}
}

View File

@@ -17,7 +17,7 @@
bottom: '#eeeeee',
emphasized: '#81c784',
postbox: '#fff',
active: '#009688',
active: '#66dacf',
selected: '#c0c0c0',
selectedWithShared: '#b2babd',
},

View File

@@ -2,132 +2,143 @@
<html lang="@@lang@@">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link href="../../@@node_base@@/materialize-css/dist/css/materialize.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="https://fonts.googleapis.com/icon?family=Material+Icons" 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@@ @@store@@
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<link href="../../css/themes.css" type="text/css" rel="stylesheet">
<link href="../../@@node_base@@/materialize-css/dist/css/materialize.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="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="../../css/sweetalert2-material.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@@ @@store@@
</head>
<body id="mainView" class="@@pwaClass@@">
<script type="text/javascript" src="../../@@node_base@@/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../@@node_base@@/materialize-css/dist/js/materialize.js"></script>
<script type="text/javascript" src="main.js"></script>
<script type="text/javascript" src="../../@@node_base@@/sweetalert2/dist/sweetalert2.all.min.js"></script>
<script>
var misskeytoken = false
</script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">@@back@@</a><br />
<h5>@@list@@</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div class="hide-second">
<a href="setting.html">@@haveExported@@</a>
</div>
<div>
<h5>@@add@@</h5>
<br />
<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>
<script type="text/javascript" src="../../@@node_base@@/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../@@node_base@@/materialize-css/dist/js/materialize.js"></script>
<script type="text/javascript" src="main.js"></script>
<script type="text/javascript" src="../../@@node_base@@/sweetalert2/dist/sweetalert2.min.js"></script>
<script>
var misskeytoken = false
</script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">@@back@@</a><br />
<h5>@@list@@</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div>
<h5>@@add@@</h5>
<div class="hide-second">
<a href="setting.html">@@haveExported@@</a>
</div>
<br />
<div id="add">
<div class="row">
<div class="col s8">
@@addAcct@@
<div class="row">
<div class="input-field col s6">
<input type="text" id="autocomplete-input" class="autocomplete" placeholder="eg) mstdn.jp">
<label for="autocomplete-input">URL</label>
</div>
<div class="col s4 loginBtnWrap">
<button class="btn waves-effect" onclick="instance()"><i
class="material-icons left">login</i>Login</button>
</div>
</div>
<div class="pwa">
@@codesetupwarn@@<br />
<label>
<input type="checkbox" class="filled-in" id="linux" />
<span>@@codesetup@@</span>
</label>
<br />
</div>
<label>
<br />
</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 id="auth" style="display:none">
@@codepastewarn@@<br />
<input type="text" id="code" placeholder="@@codepaste@@" required />
<button class="btn waves-effect" onclick="code()">Auth</button><br />
<br />
<a onclick="atSetup()" class="pointer">@@accessTokenSetup@@</a>
<div id="compt" style="display:none" class="scr">
<h5>ログイン前に必ずご確認ください</h5>
<span id="compt-instance"></span>はバージョンが<span id="compt-ver"></span>のため以下の機能がご利用いただけません。
<span id="compt-warn"
style="display:none">また、このインスタンスはMastodonではなくそのAPI上の互換実装であり、TheDeskでは利用を想定していないため非保証となります。</span>
<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 class="hide-first">
<h5>@@mainacct@@</h5>
<div class="input-field" style="width:300px">
<span data-trans="your_acct">@@selacct@@</span>
<br />
<select id="main-acct-sel" class="acct-sel" style="color:black" onchange="mainacct()"></select>
<label></label>
</div>
<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>
<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>
</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 id="auth" style="display:none">
@@codepastewarn@@<br />
<input type="text" id="code" placeholder="@@codepaste@@" required />
<button class="btn waves-effect" onclick="code()">Auth</button><br />
<br />
<a onclick="atSetup()" class="pointer">@@accessTokenSetup@@</a>
<div id="compt" style="display:none" class="scr">
<h5>ログイン前に必ずご確認ください</h5>
<span id="compt-instance"></span>はバージョンが<span id="compt-ver"></span>のため以下の機能がご利用いただけません。
<span id="compt-warn" style="display:none">また、このインスタンスはMastodonではなくそのAPI上の互換実装であり、TheDeskでは利用を想定していないため非保証となります。</span>
<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 class="hide-first">
<h5>@@mainacct@@</h5>
<div class="input-field" style="width:300px">
<span data-trans="your_acct">@@selacct@@</span>
<br />
<select id="main-acct-sel" class="acct-sel" style="color:black" onchange="mainacct()"></select>
<label></label>
</div>
<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>
<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

@@ -74,6 +74,7 @@
"openBrowser": "Open in browser",
"screenshot": "Take a screenshot",
"copyURL": "Copy the URL",
"copy": "Copy",
"embed": "Embed",
"toots": "Toots",
"follow": "Follow",
@@ -178,6 +179,7 @@
"foundBug": "I found a bug",
"show": "Show",
"directory": "Directory",
"discover": "Discover",
"active": "Recently active",
"newcomer": "New arrivals",
"local_only": "Local only",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "Embed HTML is cliped.",
"lang_details_url": "URL of this toot is cliped.",
"lang_details_txt": "Content of this toot is cliped.",
"lang_details_fetch": "Fetcging toot data...",
"lang_filter_nodata": "No data",
"lang_filter_errordegree": "Please check a context",
"lang_list_nodata": "No data",

View File

@@ -9,6 +9,7 @@
"default": "Default",
"change": "Change",
"select": "Select",
"exec": "Exec",
"env": "System Preferences",
"setlang": "Languages",
"backup": "Import and export of preferences",
@@ -17,6 +18,8 @@
"export": "Export",
"hardwareAcceleration": "Disable hardware acceleration",
"hardwareAccelerationWarn": "Auto restarted",
"webview": "Webview Integration",
"webviewWarn": "To use TweetDeck Integration, please turn on. You should understand it may lessen security level.",
"theme": "Themes",
"popup": "Popup notification",
"popupwarn": "Hide to set \"0\"",
@@ -69,6 +72,7 @@
"desc": "About this theme",
"customImport": "Import of custom themes",
"delete": "Delete",
"preview": "Preview",
"timeline": "Timeline Preferences",
"timemode": "Time format",
"relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"",
@@ -116,6 +120,7 @@
"remote_imgWarn": "All previews are got from your loginned cache server.",
"moreContextMode": "Context Tool",
"moreContextModeWarn": "On detail of the toot modal, show toots before / after the toot on LTL, FTL, UTL",
"smallHeader": "Minimize column headers",
"replySound": "Sound(Reply)",
"favSound": "Sound(Fav)",
"btSound": "Sound(Boost)",

View File

@@ -74,6 +74,7 @@
"openBrowser": "Open in browser",
"screenshot": "Take a screenshot",
"copyURL": "Copy the URL",
"copy": "Copy",
"embed": "Embed",
"toots": "Toots",
"follow": "Follow",
@@ -178,6 +179,7 @@
"foundBug": "I found a bug",
"show": "Show",
"directory": "Directory",
"discover": "Discover",
"active": "Recently active",
"newcomer": "New arrivals",
"local_only": "Local only",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "Embed HTML is cliped.",
"lang_details_url": "URL of this toot is cliped.",
"lang_details_txt": "Content of this toot is cliped.",
"lang_details_fetch": "Fetcging toot data...",
"lang_filter_nodata": "No data",
"lang_filter_errordegree": "Please check a context",
"lang_list_nodata": "No data",

View File

@@ -9,6 +9,7 @@
"default": "Default",
"change": "Change",
"select": "Select",
"exec": "Exec",
"env": "System Preferences",
"setlang": "Languages",
"backup": "Import and export of preferences",
@@ -17,6 +18,8 @@
"export": "Export",
"hardwareAcceleration": "Disable hardware acceleration",
"hardwareAccelerationWarn": "Auto restarted",
"webview": "Webview Integration",
"webviewWarn": "To use TweetDeck Integration, please turn on. You should understand it may lessen security level.",
"theme": "Themes",
"popup": "Popup notification",
"popupwarn": "Hide to set \"0\"",
@@ -69,6 +72,7 @@
"desc": "About this theme",
"customImport": "Import of custom themes",
"delete": "Delete",
"preview": "Preview",
"timeline": "Timeline Preferences",
"timemode": "Time format",
"relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"",
@@ -116,6 +120,7 @@
"remote_imgWarn": "All previews are got from your loginned cache server.",
"moreContextMode": "Context Tool",
"moreContextModeWarn": "On detail of the toot modal, show toots before / after the toot on LTL, FTL, UTL",
"smallHeader": "Minimize column headers",
"replySound": "Sound(Reply)",
"favSound": "Sound(Fav)",
"btSound": "Sound(Boost)",

View File

@@ -74,6 +74,7 @@
"openBrowser": "Отваряне в браузъра",
"screenshot": "Направете снимка на екрана",
"copyURL": "Копирай URL адреса на този тоот",
"copy": "Copy",
"embed": "Закрепи",
"toots": "Тоот",
"follow": "Следвам",
@@ -178,6 +179,7 @@
"foundBug": "Намерена е грешка",
"show": "Покажи",
"directory": "Директория",
"discover": "Discover",
"active": "Наскоро активен",
"newcomer": "Новодошли",
"local_only": "Само местно",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "Вграденият HTML е изрязан.",
"lang_details_url": "URL адресът на този toot е изрязан.",
"lang_details_txt": "Съдържанието на този toot е изрязано.",
"lang_details_fetch": "Fetcging toot data...",
"lang_filter_nodata": "Няма данни",
"lang_filter_errordegree": "Моля, проверете контекстта",
"lang_list_nodata": "Няма данни",

View File

@@ -9,6 +9,7 @@
"default": "По подразбиране",
"change": "Промяна",
"select": "Избери",
"exec": "Exec",
"env": "Системни предпочитания",
"setlang": "Езици",
"backup": "Внос и износ на предпочитания",
@@ -17,6 +18,8 @@
"export": "Износ",
"hardwareAcceleration": "Деактивиране на хардуерното ускорение",
"hardwareAccelerationWarn": "Автоматичното рестартиране",
"webview": "Webview Integration",
"webviewWarn": "To use TweetDeck Integration, please turn on. You should understand it may lessen security level.",
"theme": "Теми",
"popup": "Известие с изскачащ прозорец (за Windows)",
"popupwarn": "Скрито ако е зададено на „0“",
@@ -69,6 +72,7 @@
"desc": "Относно тази тема",
"customImport": "Импортиране на персонализирани теми",
"delete": "Изтрий",
"preview": "Preview",
"timeline": "Предпочитания за времевата линия",
"timemode": "Времеви формат",
"relativetime": "Относителен формат: „преди 1 минута“, „преди 3 дни“",
@@ -116,6 +120,7 @@
"remote_imgWarn": "All previews are got from your loginned cache server.",
"moreContextMode": "Context Tool",
"moreContextModeWarn": "On detail of the toot modal, show toots before / after the toot on LTL, FTL, UTL",
"smallHeader": "Minimize column headers",
"replySound": "Звук (Отговор)",
"favSound": "Звук(Фаворит)",
"btSound": "Звук(Подсилване)",

View File

@@ -74,6 +74,7 @@
"openBrowser": "Open in browser",
"screenshot": "Take a screenshot",
"copyURL": "Copy the URL",
"copy": "Copy",
"embed": "Embed",
"toots": "Toots",
"follow": "Follow",
@@ -178,6 +179,7 @@
"foundBug": "I found a bug",
"show": "Show",
"directory": "Directory",
"discover": "Discover",
"active": "Recently active",
"newcomer": "New arrivals",
"local_only": "Local only",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "Embed HTML is cliped.",
"lang_details_url": "URL of this toot is cliped.",
"lang_details_txt": "Content of this toot is cliped.",
"lang_details_fetch": "Fetcging toot data...",
"lang_filter_nodata": "No data",
"lang_filter_errordegree": "Please check a context",
"lang_list_nodata": "No data",
@@ -232,6 +233,7 @@
"lang_parse_html": "Show embed HTML",
"lang_parse_notffilter": "Show this user's notifications",
"lang_parse_hidden": "Unvisible quoted toot",
"lang_parse_disconnected": "Streaming has been disconnected(retry after 3s)",
"lang_misskeyparse_renote": "Repost",
"lang_misskeyparse_renoteqt": "Renote",
"lang_misskeyparse_reaction": "Reaction",

View File

@@ -9,6 +9,7 @@
"default": "Default",
"change": "Change",
"select": "Select",
"exec": "Exec",
"env": "System Preferences",
"setlang": "Languages",
"backup": "Import and export of preferences",
@@ -17,6 +18,8 @@
"export": "Export",
"hardwareAcceleration": "Disable hardware acceleration",
"hardwareAccelerationWarn": "Auto restarted",
"webview": "Webview Integration",
"webviewWarn": "To use TweetDeck Integration, please turn on. You should understand it may lessen security level.",
"theme": "Themes",
"popup": "Popup notification",
"popupwarn": "Hide to set \"0\"",
@@ -69,6 +72,7 @@
"desc": "About this theme",
"customImport": "Import of custom themes",
"delete": "Delete",
"preview": "Preview",
"timeline": "Timeline Preferences",
"timemode": "Time format",
"relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"",
@@ -116,6 +120,7 @@
"remote_imgWarn": "All previews are got from your loginned cache server.",
"moreContextMode": "Context Tool",
"moreContextModeWarn": "On detail of the toot modal, show toots before / after the toot on LTL, FTL, UTL",
"smallHeader": "Minimize column headers",
"replySound": "Sound(Reply)",
"favSound": "Sound(Fav)",
"btSound": "Sound(Boost)",

View File

@@ -74,6 +74,7 @@
"openBrowser": "Otevřít v prohlížeči",
"screenshot": "Vytvořit snímek obrazovky",
"copyURL": "Kopírovat URL tohoto tootu",
"copy": "Copy",
"embed": "Vložit",
"toots": "Tooty",
"follow": "Sledovat",
@@ -178,6 +179,7 @@
"foundBug": "I found a bug",
"show": "Show",
"directory": "Directory",
"discover": "Discover",
"active": "Recently active",
"newcomer": "New arrivals",
"local_only": "Local only",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "HTML pro vložení je zkopírován.",
"lang_details_url": "URL adresa tohoto tootu je zkopírována.",
"lang_details_txt": "Obsah tohoto tootu je zkopírován.",
"lang_details_fetch": "Fetcging toot data...",
"lang_filter_nodata": "Žádná data",
"lang_filter_errordegree": "Prosím zkontrolujte kontext",
"lang_list_nodata": "Žádná data",

View File

@@ -9,6 +9,7 @@
"default": "Default",
"change": "Změnit",
"select": "Vybrat",
"exec": "Exec",
"env": "Systémové předvolby",
"setlang": "Jazyky",
"backup": "Import a export předvoleb",
@@ -17,6 +18,8 @@
"export": "Export",
"hardwareAcceleration": "Disable hardware acceleration",
"hardwareAccelerationWarn": "Auto restarted",
"webview": "Webview Integration",
"webviewWarn": "To use TweetDeck Integration, please turn on. You should understand it may lessen security level.",
"theme": "Motivy",
"popup": "Popupová oznámení (na Windows)",
"popupwarn": "Hide to set \"0\"",
@@ -69,6 +72,7 @@
"desc": "About this theme",
"customImport": "Import of custom themes",
"delete": "Delete",
"preview": "Preview",
"timeline": "Timeline Preferences",
"timemode": "Časový formát",
"relativetime": "Relativní formát: „před 1 minutou“, „před 3 dny“",
@@ -116,6 +120,7 @@
"remote_imgWarn": "All previews are got from your loginned cache server.",
"moreContextMode": "Context Tool",
"moreContextModeWarn": "On detail of the toot modal, show toots before / after the toot on LTL, FTL, UTL",
"smallHeader": "Minimize column headers",
"replySound": "Sound(Reply)",
"favSound": "Sound(Fav)",
"btSound": "Sound(Boost)",

View File

@@ -74,6 +74,7 @@
"openBrowser": "Open in browser",
"screenshot": "Take a screenshot",
"copyURL": "Copy the URL",
"copy": "Copy",
"embed": "Embed",
"toots": "Toots",
"follow": "Follow",
@@ -178,6 +179,7 @@
"foundBug": "I found a bug",
"show": "Show",
"directory": "Directory",
"discover": "Discover",
"active": "Recently active",
"newcomer": "New arrivals",
"local_only": "Local only",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "Embed HTML is cliped.",
"lang_details_url": "URL of this toot is cliped.",
"lang_details_txt": "Content of this toot is cliped.",
"lang_details_fetch": "Fetcging toot data...",
"lang_filter_nodata": "No data",
"lang_filter_errordegree": "Please check a context",
"lang_list_nodata": "No data",

View File

@@ -9,6 +9,7 @@
"default": "Default",
"change": "Change",
"select": "Select",
"exec": "Exec",
"env": "System Preferences",
"setlang": "Languages",
"backup": "Import and export of preferences",
@@ -17,6 +18,8 @@
"export": "Export",
"hardwareAcceleration": "Disable hardware acceleration",
"hardwareAccelerationWarn": "Auto restarted",
"webview": "Webview Integration",
"webviewWarn": "To use TweetDeck Integration, please turn on. You should understand it may lessen security level.",
"theme": "Themes",
"popup": "Popup notification",
"popupwarn": "Hide to set \"0\"",
@@ -69,6 +72,7 @@
"desc": "About this theme",
"customImport": "Import of custom themes",
"delete": "Delete",
"preview": "Preview",
"timeline": "Timeline Preferences",
"timemode": "Time format",
"relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"",
@@ -116,6 +120,7 @@
"remote_imgWarn": "All previews are got from your loginned cache server.",
"moreContextMode": "Context Tool",
"moreContextModeWarn": "On detail of the toot modal, show toots before / after the toot on LTL, FTL, UTL",
"smallHeader": "Minimize column headers",
"replySound": "Sound(Reply)",
"favSound": "Sound(Fav)",
"btSound": "Sound(Boost)",

View File

@@ -1,7 +1,7 @@
{
"draghere": "Zum Hochladen hier her ziehen",
"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...",
"reOnline": "Jetzt haben wir wieder Internet. Du solltest neuladen...",
"close": "Schließen",
"webSrc": "Suche im Internet",
"tsSrc": "Bei Tootsearch suchen",
@@ -74,6 +74,7 @@
"openBrowser": "Im Browser öffnen",
"screenshot": "Bildschirmfoto aufnehmen",
"copyURL": "URL dieses Tröts kopieren",
"copy": "Copy",
"embed": "Einbinden",
"toots": "Tröts",
"follow": "Folgen",
@@ -178,6 +179,7 @@
"foundBug": "Ich habe einen Fehler gefunden",
"show": "Zeige",
"directory": "Verzeichnis",
"discover": "Discover",
"active": "Kürzlich aktiv",
"newcomer": "Neu eingetroffen",
"local_only": "Nur lokal",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "Eingefügtes HTML wurde entfernt.",
"lang_details_url": "URL dieses Tröts wurde entfernt.",
"lang_details_txt": "Inhalt dieses Tröts wurde entfernt.",
"lang_details_fetch": "Fetcging toot data...",
"lang_filter_nodata": "Keine Daten",
"lang_filter_errordegree": "Bitte überprüfen Sie den Kontext",
"lang_list_nodata": "Keine Daten",

View File

@@ -9,6 +9,7 @@
"default": "Standard",
"change": "Ändern",
"select": "Auswahl",
"exec": "Exec",
"env": "Systemeinstellungen",
"setlang": "Sprachen",
"backup": "Import und Export von Einstellungen",
@@ -17,6 +18,8 @@
"export": "Exportieren",
"hardwareAcceleration": "Hardwarebeschleunigung deaktivieren",
"hardwareAccelerationWarn": "Automatischer Neustart",
"webview": "Webview Integration",
"webviewWarn": "To use TweetDeck Integration, please turn on. You should understand it may lessen security level.",
"theme": "Designs",
"popup": "Popup-Benachrichtigung(unter Windows)",
"popupwarn": "Bei \"0\" Ausgeschaltet.",
@@ -69,6 +72,7 @@
"desc": "Über dieses Design",
"customImport": "Import von eigenen Designs",
"delete": "Löschen",
"preview": "Preview",
"timeline": "Verlaufseinstellungen",
"timemode": "Zeitformat",
"relativetime": "Relatives Format:\"vor 1 Minuten\",\"vor 3 Tagen\"",
@@ -116,6 +120,7 @@
"remote_imgWarn": "All previews are got from your loginned cache server.",
"moreContextMode": "Context Tool",
"moreContextModeWarn": "On detail of the toot modal, show toots before / after the toot on LTL, FTL, UTL",
"smallHeader": "Minimize column headers",
"replySound": "Ton bei Antwort",
"favSound": "Ton bei Favorit",
"btSound": "Ton bei Verstärkung",

View File

@@ -74,6 +74,7 @@
"openBrowser": "Open in browser",
"screenshot": "Take a screenshot",
"copyURL": "Copy the URL",
"copy": "Copy",
"embed": "Embed",
"toots": "Toots",
"follow": "Follow",
@@ -178,6 +179,7 @@
"foundBug": "I found a bug",
"show": "Show",
"directory": "Directory",
"discover": "Discover",
"active": "Recently active",
"newcomer": "New arrivals",
"local_only": "Local only",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "Embed HTML is cliped.",
"lang_details_url": "URL of this toot is cliped.",
"lang_details_txt": "Content of this toot is cliped.",
"lang_details_fetch": "Fetcging toot data...",
"lang_filter_nodata": "No data",
"lang_filter_errordegree": "Please check a context",
"lang_list_nodata": "No data",

View File

@@ -9,6 +9,7 @@
"default": "Default",
"change": "Change",
"select": "Select",
"exec": "Exec",
"env": "System Preferences",
"setlang": "Languages",
"backup": "Import and export of preferences",
@@ -17,6 +18,8 @@
"export": "Export",
"hardwareAcceleration": "Disable hardware acceleration",
"hardwareAccelerationWarn": "Auto restarted",
"webview": "Webview Integration",
"webviewWarn": "To use TweetDeck Integration, please turn on. You should understand it may lessen security level.",
"theme": "Themes",
"popup": "Popup notification",
"popupwarn": "Hide to set \"0\"",
@@ -69,6 +72,7 @@
"desc": "About this theme",
"customImport": "Import of custom themes",
"delete": "Delete",
"preview": "Preview",
"timeline": "Timeline Preferences",
"timemode": "Time format",
"relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"",
@@ -116,6 +120,7 @@
"remote_imgWarn": "All previews are got from your loginned cache server.",
"moreContextMode": "Context Tool",
"moreContextModeWarn": "On detail of the toot modal, show toots before / after the toot on LTL, FTL, UTL",
"smallHeader": "Minimize column headers",
"replySound": "Sound(Reply)",
"favSound": "Sound(Fav)",
"btSound": "Sound(Boost)",

View File

@@ -74,6 +74,7 @@
"openBrowser": "crwdns3190:0crwdne3190:0",
"screenshot": "crwdns3192:0crwdne3192:0",
"copyURL": "crwdns3194:0crwdne3194:0",
"copy": "crwdns4586:0crwdne4586:0",
"embed": "crwdns3196:0crwdne3196:0",
"toots": "crwdns3198:0crwdne3198:0",
"follow": "crwdns3200:0crwdne3200:0",
@@ -178,6 +179,7 @@
"foundBug": "crwdns4431:0crwdne4431:0",
"show": "crwdns3388:0crwdne3388:0",
"directory": "crwdns3390:0crwdne3390:0",
"discover": "crwdns4590:0crwdne4590:0",
"active": "crwdns3392:0crwdne3392:0",
"newcomer": "crwdns3394:0crwdne3394:0",
"local_only": "crwdns3396:0crwdne3396:0",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "crwdns3584:0crwdne3584:0",
"lang_details_url": "crwdns3586:0crwdne3586:0",
"lang_details_txt": "crwdns3588:0crwdne3588:0",
"lang_details_fetch": "crwdns4588:0crwdne4588:0",
"lang_filter_nodata": "crwdns3590:0crwdne3590:0",
"lang_filter_errordegree": "crwdns3592:0crwdne3592:0",
"lang_list_nodata": "crwdns3594:0crwdne3594:0",

View File

@@ -9,6 +9,7 @@
"default": "crwdns3918:0crwdne3918:0",
"change": "crwdns3920:0crwdne3920:0",
"select": "crwdns3922:0crwdne3922:0",
"exec": "crwdns4576:0crwdne4576:0",
"env": "crwdns3924:0crwdne3924:0",
"setlang": "crwdns3926:0crwdne3926:0",
"backup": "crwdns3928:0crwdne3928:0",
@@ -17,6 +18,8 @@
"export": "crwdns3932:0crwdne3932:0",
"hardwareAcceleration": "crwdns3934:0crwdne3934:0",
"hardwareAccelerationWarn": "crwdns3936:0crwdne3936:0",
"webview": "crwdns4578:0crwdne4578:0",
"webviewWarn": "crwdns4580:0crwdne4580:0",
"theme": "crwdns3938:0crwdne3938:0",
"popup": "crwdns3940:0crwdne3940:0",
"popupwarn": "crwdns3942:0crwdne3942:0",
@@ -69,6 +72,7 @@
"desc": "crwdns3992:0crwdne3992:0",
"customImport": "crwdns3996:0crwdne3996:0",
"delete": "crwdns3998:0crwdne3998:0",
"preview": "crwdns4584:0crwdne4584:0",
"timeline": "crwdns4002:0crwdne4002:0",
"timemode": "crwdns4004:0crwdne4004:0",
"relativetime": "crwdns4006:0crwdne4006:0",
@@ -116,6 +120,7 @@
"remote_imgWarn": "crwdns4384:0crwdne4384:0",
"moreContextMode": "crwdns4572:0crwdne4572:0",
"moreContextModeWarn": "crwdns4574:0crwdne4574:0",
"smallHeader": "crwdns4582:0crwdne4582:0",
"replySound": "crwdns4088:0crwdne4088:0",
"favSound": "crwdns4090:0crwdne4090:0",
"btSound": "crwdns4092:0crwdne4092:0",

View File

@@ -1,183 +1,185 @@
{
"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",
"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",
"webSrc": "Search on Web",
"tsSrc": "Search on tootsearch",
"showSelectProf":"Show profile of the selecting account",
"closethisbox":"Close this box",
"toot":"Toot",
"post-new":"Post new",
"nsfwDes":"Mark media as sensitive",
"cwDes":"Hide text behind warning",
"selfile":"Attach..",
"insertEmoji":"Emojis",
"schedule":"Scheduled toot",
"postat":"Post at",
"scheduleWarn":"2.7.0~ Minimum time gap:5min(clock on the server may not be accurate.)",
"clearToot":"Clear toot box",
"replyMode":"Reply",
"no":"No",
"yes":"Yes",
"temp":"Attaching files",
"nothing":"None",
"showSelectProf": "Show profile of the selecting account",
"closethisbox": "Close this box",
"toot": "Toot",
"post-new": "Post new",
"nsfwDes": "Mark media as sensitive",
"cwDes": "Hide text behind warning",
"selfile": "Attach..",
"insertEmoji": "Emojis",
"schedule": "Scheduled toot",
"postat": "Post at",
"scheduleWarn": "2.7.0~ Minimum time gap:5min(clock on the server may not be accurate.)",
"clearToot": "Clear toot box",
"replyMode": "Reply",
"no": "No",
"yes": "Yes",
"temp": "Attaching files",
"nothing": "None",
"stamp": "Stamp",
"stampWarn": "Your acct(aa@bb.cc) is printed on the right-bottom of the uploaded image",
"vis":"Adjust status privacy",
"cwtext":"Warning text",
"selectVis":"Adjust status privacy",
"publicJP":"",
"unlistedJP":"",
"privateJP":"",
"localJP":"Local only",
"sectoot":"Secondary Toot",
"directJP":"",
"emojiWarn":"",
"emojiInsertWarn":"Some emojis are not able to be inserted.",
"refreshEmoji":"Refresh emojis list",
"closeThisBox":"Close this box",
"showThisEmoji":" are shown.",
"customEmoji":"Custom emojis",
"peopleEmoji":"Emojis of people",
"natureEmoji":"Emojis of nature",
"foodEmoji":"Emojis of foods",
"activityEmoji":"Emojis of activities",
"placeEmoji":"Emojis of places",
"thingsEmoji":"Emojis of tools",
"symbolEmoji":"Emojis of symbols",
"flagsEmoji":"Emojis of flags",
"vis": "Adjust status privacy",
"cwtext": "Warning text",
"selectVis": "Adjust status privacy",
"publicJP": "",
"unlistedJP": "",
"privateJP": "",
"localJP": "Local only",
"sectoot": "Secondary Toot",
"directJP": "",
"emojiWarn": "",
"emojiInsertWarn": "Some emojis are not able to be inserted.",
"refreshEmoji": "Refresh emojis list",
"closeThisBox": "Close this box",
"showThisEmoji": " are shown.",
"customEmoji": "Custom emojis",
"peopleEmoji": "Emojis of people",
"natureEmoji": "Emojis of nature",
"foodEmoji": "Emojis of foods",
"activityEmoji": "Emojis of activities",
"placeEmoji": "Emojis of places",
"thingsEmoji": "Emojis of tools",
"symbolEmoji": "Emojis of symbols",
"flagsEmoji": "Emojis of flags",
"draft": "Draft",
"poll":"Poll",
"pollDdisabled":"Polls: Disabled",
"pollProvider":"Provider of Poll",
"polluntil":"Hide 'votes' count until people vote it.",
"choice":"Choice",
"pollmulti":"Multiple select",
"expires_in":"Expires in...(sec)",
"contextBefore":"Context before this toot",
"thisToot":"This toot",
"contextAfter":"Context after this toot",
"beforeLTL":"Local TL before this toot",
"beforeUTL":"User TL before this toot",
"afterLTL":"Local TL after this toot)",
"afterUTL":"User TL before this toot",
"afterFTL":"Federated TL after this toot",
"favedPeople":"People who favourited it",
"btedPeople":"People who boosted it",
"useOtherAcct1":"Use other account",
"useOtherAcct2":":unfav and unBT are disabled.",
"poll": "Poll",
"pollDdisabled": "Polls: Disabled",
"pollProvider": "Provider of Poll",
"polluntil": "Hide 'votes' count until people vote it.",
"choice": "Choice",
"pollmulti": "Multiple select",
"expires_in": "Expires in...(sec)",
"contextBefore": "Context before this toot",
"thisToot": "This toot",
"contextAfter": "Context after this toot",
"beforeLTL": "Local TL before this toot",
"beforeUTL": "User TL before this toot",
"afterLTL": "Local TL after this toot)",
"afterUTL": "User TL before this toot",
"afterFTL": "Federated TL after this toot",
"favedPeople": "People who favourited it",
"btedPeople": "People who boosted it",
"useOtherAcct1": "Use other account",
"useOtherAcct2": ":unfav and unBT are disabled.",
"btWithVis": "Boost with visibility",
"reply":"Reply",
"bt":"Boost",
"favRegist":"Favourite",
"openBrowser":"Open in browser",
"screenshot":"Take a screenshot",
"copyURL":"Copy the URL",
"embed":"Embed",
"toots":"Toots",
"follow":"Follow",
"follower":"Follower",
"utlColumn":"Show as a column",
"timeline":"Timeline",
"operateOtherAcct":"Cross-account",
"list":"List",
"makeNew":"Save",
"blocks":"Blocks",
"mutes":"Mutes",
"block":"Block",
"mute":"Mute",
"domainBlock":"Domain block",
"editProf":"Edit profile",
"change":"Save",
"followReq":"Follow requests",
"likeHimOrHer":"Resembling",
"endorse":"Feature on profile",
"openinbrowser":"Open in browser",
"mainacct":"Set it an main account",
"frc":"Suggest",
"more":"More",
"revoverJP":" to ",
"warnUseOtherAcct":"(Unable to unfollow)",
"revoverJPde":"",
"or":"or",
"openProf":"Show profile",
"warnListRegist":"Follow to add this user to lists.",
"blockDomain":"Add blocking domain",
"name":"Display name",
"note":"Note",
"editProfImg":"Change avataor",
"editHeader":"Change header image",
"blocked":"You are blocked. Why?",
"likeUserDes":"Get people resembling this user.",
"get":"Get",
"historyBack":"Back",
"empUser":"Emphasize this user",
"supportme":"Support TheDesk!",
"TheDeskDes":"TheDesk has no ad, you need no charge to unlock premium features. We need your friendly support!",
"PatreonSupport":"Support on Patreon",
"PixivSupport":"Support on Pixiv FANBOX",
"AWLSupport":"Amazon Wish List",
"SendAmazonGift1":"Give me Amazon Gift Card:",
"SendAmazonGift2":"",
"monthly":"Monthly",
"once":"Once",
"local":"Local",
"localMedia":"Local(Media)",
"home":"Home",
"fed":"Federated",
"fedMedia":"Federated(Media)",
"dm":"Direct Message",
"integratedTLDes":"Integrated(Local/Home)",
"localPlusDes":"LTL+Reply+BT",
"notf":"Notifications",
"reply": "Reply",
"bt": "Boost",
"favRegist": "Favourite",
"openBrowser": "Open in browser",
"screenshot": "Take a screenshot",
"copyURL": "Copy the URL",
"copy": "Copy",
"embed": "Embed",
"toots": "Toots",
"follow": "Follow",
"follower": "Follower",
"utlColumn": "Show as a column",
"timeline": "Timeline",
"operateOtherAcct": "Cross-account",
"list": "List",
"makeNew": "Save",
"blocks": "Blocks",
"mutes": "Mutes",
"block": "Block",
"mute": "Mute",
"domainBlock": "Domain block",
"editProf": "Edit profile",
"change": "Save",
"followReq": "Follow requests",
"likeHimOrHer": "Resembling",
"endorse": "Feature on profile",
"openinbrowser": "Open in browser",
"mainacct": "Set it an main account",
"frc": "Suggest",
"more": "More",
"revoverJP": " to ",
"warnUseOtherAcct": "(Unable to unfollow)",
"revoverJPde": "",
"or": "or",
"openProf": "Show profile",
"warnListRegist": "Follow to add this user to lists.",
"blockDomain": "Add blocking domain",
"name": "Display name",
"note": "Note",
"editProfImg": "Change avataor",
"editHeader": "Change header image",
"blocked": "You are blocked. Why?",
"likeUserDes": "Get people resembling this user.",
"get": "Get",
"historyBack": "Back",
"empUser": "Emphasize this user",
"supportme": "Support TheDesk!",
"TheDeskDes": "TheDesk has no ad, you need no charge to unlock premium features. We need your friendly support!",
"PatreonSupport": "Support on Patreon",
"PixivSupport": "Support on Pixiv FANBOX",
"AWLSupport": "Amazon Wish List",
"SendAmazonGift1": "Give me Amazon Gift Card:",
"SendAmazonGift2": "",
"monthly": "Monthly",
"once": "Once",
"local": "Local",
"localMedia": "Local(Media)",
"home": "Home",
"fed": "Federated",
"fedMedia": "Federated(Media)",
"dm": "Direct Message",
"integratedTLDes": "Integrated(Local/Home)",
"localPlusDes": "LTL+Reply+BT",
"notf": "Notifications",
"bookmark": "Bookmarks",
"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>).",
"add":"Add",
"search":"Search",
"sortSet":"Sort",
"selectAcct":"Account(Scroll to show all)",
"listLocale":"List",
"filterWord":"Filtering words",
"degree":"Filter contexts",
"conver":"Conversations",
"prof":"Profiles",
"option":"Options",
"matchWord":"Whole word",
"warnMatchWord":"Nice for Latin language",
"except":"Drop instead of hide",
"exceptWorn":"Filtered toots will disappear irreversibly, even if filter is later removed",
"avalableBefore":"Expire after",
"warnAvBefore":"Unset or \"0\" means \"Never\"",
"warnAvBefore2":"This value may contain some error",
"unlimited":"Never",
"days":"day(s)",
"hours":"hour(s)",
"mins":"minute(s)",
"secs":"second(s)",
"warnOnIntegratedTL":"Integrated TL/Plus TL will hide both Home-filtering words and Local-filtering words.",
"helloTheDesk":"Internal error: please clear all data(at setting page) <b>All data will be deleted.</b>",
"addColumn":"Add a column",
"sortColumns":"Sort",
"acctMan":"Account Manager",
"filter":"Filter",
"setting":"Preferences",
"reverse":"Toot button layout reverse",
"f5":"Reload TL",
"nanoDes":"The smallest Mastodon,",
"verTips":"Version",
"clockTips":"Clock",
"ramTips":"RAM status",
"changeTips":"Change Tips",
"helpAndLogs":"Help & Log",
"help":"Help",
"contactwithlog":"If you tell me bugs(not working or something) with this log, I can detect what is wrong more easily.",
"about":"About TheDesk",
"hereAddColumns":"<- Add 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>).",
"add": "Add",
"search": "Search",
"sortSet": "Sort",
"selectAcct": "Account(Scroll to show all)",
"listLocale": "List",
"filterWord": "Filtering words",
"degree": "Filter contexts",
"conver": "Conversations",
"prof": "Profiles",
"option": "Options",
"matchWord": "Whole word",
"warnMatchWord": "Nice for Latin language",
"except": "Drop instead of hide",
"exceptWorn": "Filtered toots will disappear irreversibly, even if filter is later removed",
"avalableBefore": "Expire after",
"warnAvBefore": "Unset or \"0\" means \"Never\"",
"warnAvBefore2": "This value may contain some error",
"unlimited": "Never",
"days": "day(s)",
"hours": "hour(s)",
"mins": "minute(s)",
"secs": "second(s)",
"warnOnIntegratedTL": "Integrated TL/Plus TL will hide both Home-filtering words and Local-filtering words.",
"helloTheDesk": "Internal error: please clear all data(at setting page) <b>All data will be deleted.</b>",
"addColumn": "Add a column",
"sortColumns": "Sort",
"acctMan": "Account Manager",
"filter": "Filter",
"setting": "Preferences",
"reverse": "Toot button layout reverse",
"f5": "Reload TL",
"nanoDes": "The smallest Mastodon,",
"verTips": "Version",
"clockTips": "Clock",
"ramTips": "RAM status",
"changeTips": "Change Tips",
"helpAndLogs": "Help & Log",
"help": "Help",
"contactwithlog": "If you tell me bugs(not working or something) with this log, I can detect what is wrong more easily.",
"about": "About TheDesk",
"hereAddColumns": "<- Add TL",
"foundBug": "I found a bug",
"show": "Show",
"directory": "Directory",
"discover": "Discover",
"active": "Recently active",
"newcomer": "New arrivals",
"local_only": "Local only",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "Embed HTML is cliped.",
"lang_details_url": "URL of this toot is cliped.",
"lang_details_txt": "Content of this toot is cliped.",
"lang_details_fetch": "Fetcging toot data...",
"lang_filter_nodata": "No data",
"lang_filter_errordegree": "Please check a context",
"lang_list_nodata": "No data",

View File

@@ -18,6 +18,8 @@
"export": "Export",
"hardwareAcceleration": "Disable hardware acceleration",
"hardwareAccelerationWarn": "Auto restarted",
"webview": "Webview Integration",
"webviewWarn": "To use TweetDeck Integration, please turn on. You should understand it may lessen security level.",
"theme": "Themes",
"popup": "Popup notification",
"popupwarn": "Hide to set \"0\"",
@@ -70,6 +72,7 @@
"desc": "About this theme",
"customImport": "Import of custom themes",
"delete": "Delete",
"preview": "Preview",
"timeline": "Timeline Preferences",
"timemode": "Time format",
"relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"",
@@ -117,6 +120,7 @@
"remote_imgWarn": "All previews are got from your loginned cache server.",
"moreContextMode": "Context Tool",
"moreContextModeWarn": "On detail of the toot modal, show toots before / after the toot on LTL, FTL, UTL",
"smallHeader": "Minimize column headers",
"replySound": "Sound(Reply)",
"favSound": "Sound(Fav)",
"btSound": "Sound(Boost)",

View File

@@ -74,6 +74,7 @@
"openBrowser": "Abrir en navegador web",
"screenshot": "Tomar captura de pantalla",
"copyURL": "Copiar dirección web de este toot",
"copy": "Copiar",
"embed": "Insertar",
"toots": "Toots",
"follow": "Seguir",
@@ -178,6 +179,7 @@
"foundBug": "Encontré un error",
"show": "Mostrar",
"directory": "Directorio",
"discover": "Discover",
"active": "Recientemente activo",
"newcomer": "Recién llegados",
"local_only": "Sólo local",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "El código HTML de inserción se copió al portapapeles.",
"lang_details_url": "La dirección web de este toot se copió al portapapeles.",
"lang_details_txt": "El contenido de este toot se copió al portapapeles.",
"lang_details_fetch": "Fetcging toot data...",
"lang_filter_nodata": "Sin datos",
"lang_filter_errordegree": "Por favor, comprobá un contexto",
"lang_list_nodata": "Sin datos",

View File

@@ -9,6 +9,7 @@
"default": "Predeterminado",
"change": "Cambiar",
"select": "Seleccionar",
"exec": "Ejec",
"env": "Configuración del sistema",
"setlang": "Idiomas",
"backup": "Importación y exportación de la configuración",
@@ -17,6 +18,8 @@
"export": "Exportar",
"hardwareAcceleration": "Deshabilitar la aceleración por hardware",
"hardwareAccelerationWarn": "Inicio automático",
"webview": "Integración de Webview",
"webviewWarn": "Para usar Integración de TweetDeck, por favor activalo. Tené en cuenta que puede reducir el nivel de seguridad.",
"theme": "Temas",
"popup": "Ventana emergente de notificaciones (en Windows)",
"popupwarn": "Establecer \"0\" para ocultar",
@@ -69,6 +72,7 @@
"desc": "Acerca de este tema",
"customImport": "Importación de temas personalizados",
"delete": "Eliminar",
"preview": "Previsualización",
"timeline": "Configuración de la línea temporal",
"timemode": "Formato del tiempo",
"relativetime": "Formato relativo: \"hace 1 minuto\", \"hace 3 días\"",
@@ -114,8 +118,9 @@
"markerswarn": "Mastodon 3.0~. Compartido en interface web y clientes de terceros soportados.",
"remote_img": "Obtener imágenes del servidor remoto",
"remote_imgWarn": "Todas las previsualizaciones se obtienen de tu servidor de caché conectado.",
"moreContextMode": "Context Tool",
"moreContextModeWarn": "On detail of the toot modal, show toots before / after the toot on LTL, FTL, UTL",
"moreContextMode": "Herramienta de contexto",
"moreContextModeWarn": "En detalle de la modal de toot, mostrar toots antes / después del toot en LTL, FTL, UTL",
"smallHeader": "Minimizar cabeceras de columna",
"replySound": "Sonido (respuesta)",
"favSound": "Sonido (marcado como favorito)",
"btSound": "Sonido (retoot)",

View File

@@ -74,6 +74,7 @@
"openBrowser": "Open in browser",
"screenshot": "Take a screenshot",
"copyURL": "Copy the URL",
"copy": "Copy",
"embed": "Embed",
"toots": "Toots",
"follow": "Follow",
@@ -178,6 +179,7 @@
"foundBug": "I found a bug",
"show": "Show",
"directory": "Directory",
"discover": "Discover",
"active": "Recently active",
"newcomer": "New arrivals",
"local_only": "Local only",

View File

@@ -103,6 +103,7 @@
"lang_details_embed": "Embed HTML is cliped.",
"lang_details_url": "URL of this toot is cliped.",
"lang_details_txt": "Content of this toot is cliped.",
"lang_details_fetch": "Fetcging toot data...",
"lang_filter_nodata": "Sin datos",
"lang_filter_errordegree": "Please check a context",
"lang_list_nodata": "Sin datos",

View File

@@ -9,6 +9,7 @@
"default": "Default",
"change": "Cambiar",
"select": "Seleccionar",
"exec": "Exec",
"env": "Preferencias del sistema",
"setlang": "Idiomas",
"backup": "Importación y exportación de la configuración",
@@ -17,6 +18,8 @@
"export": "Exportar",
"hardwareAcceleration": "Deshabilitar la aceleración por hardware",
"hardwareAccelerationWarn": "Reinicio automático",
"webview": "Webview Integration",
"webviewWarn": "To use TweetDeck Integration, please turn on. You should understand it may lessen security level.",
"theme": "Temas",
"popup": "Notificación emergente (en Windows)",
"popupwarn": "Ocultar para establecer \"0\"",
@@ -69,6 +72,7 @@
"desc": "About this theme",
"customImport": "Import of custom themes",
"delete": "Delete",
"preview": "Preview",
"timeline": "Timeline Preferences",
"timemode": "Time format",
"relativetime": "Relative format:\"1 minutes ago\",\"3 days ago\"",
@@ -116,6 +120,7 @@
"remote_imgWarn": "All previews are got from your loginned cache server.",
"moreContextMode": "Context Tool",
"moreContextModeWarn": "On detail of the toot modal, show toots before / after the toot on LTL, FTL, UTL",
"smallHeader": "Minimize column headers",
"replySound": "Sound(Reply)",
"favSound": "Sound(Fav)",
"btSound": "Sound(Boost)",

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