Compare commits

...

139 Commits

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

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

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

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

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

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

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

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-05-19 07:12:56 +00:00
Cutls
de6e9c6f11 Update SHA256 lib 2019-05-19 15:47:45 +09:00
Cutls
d3ff1aa17a Debug 2019-05-19 15:17:05 +09:00
Cutls
3cde6d0bff Improved: attached video on Pleroma 2019-05-16 00:17:47 +09:00
Cutls
bfade31849 Add link to unknown media 2019-05-16 00:11:09 +09:00
Cutls
3a06820f1e Fix: follow request 2019-05-16 00:01:54 +09:00
Cutls
c5f712359d Merge pull request #68 from cutls/WIP-(before-CI)
18.4.0
2019-05-11 01:36:07 +09:00
Cutls
c9cca85db3 Add features 2019-05-11 01:32:54 +09:00
Cutls
07b203b719 TheDesk Usamin (18.4.0) 2019-05-11 01:31:15 +09:00
Cutls
a636c745e4 Add: follow request auth/reject 2019-05-09 00:46:26 +09:00
Cutls
e9024312a7 Fix: some Misskey bugs about reaction 2019-05-09 00:31:05 +09:00
Cutls
edbe3c164f Add: Misskey v11 streaming method 2019-05-08 00:48:59 +09:00
Cutls
8991cb5a96 Add: NSFW notice 2019-05-07 22:43:30 +09:00
Cutls
b4aa5aead5 Merge pull request #67 from cutls/WIP-(before-CI)
TheDesk Usamin (18.3.3)
2019-05-07 00:45:08 +09:00
Cutls
873a8fd229 fix typo 2019-05-07 00:44:04 +09:00
Cutls
d0ddc58160 TheDesk Usamin (18.3.3) 2019-05-07 00:43:21 +09:00
Cutls
6eebfed609 get blurhash 2019-05-07 00:42:06 +09:00
121 changed files with 33992 additions and 27838 deletions

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

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

View File

@@ -1,36 +1,47 @@
language: objective-c
cache:
directories:
- node_modules
env:
- NODE_VERSION="10.15.2"
before_install:
- git clone https://github.com/creationix/nvm.git /tmp/.nvm
- source /tmp/.nvm/nvm.sh
- nvm install $NODE_VERSION
- nvm use --delete-prefix $NODE_VERSION
- node --version
os:
- windows
- linux
- osx
language: node_js
node_js:
- '10.15.2'
script: node -v
before_deploy:
- npm install electron-builder -g
- cd app
- VERSION=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]')
- npm install
- electron-builder --mac --x64 -p never
- mv ../build/TheDesk*.dmg ../TheDesk.dmg
- mv ../build/TheDesk*.zip ../TheDesk-darwin-x64.zip
- 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
- cd ../
- ls build
deploy:
provider: releases
# GitHub にリリースするための API KEY を暗号化した値
api_key:
secure: jndR02p5KRTtcJk18b3YsXL2cC+yzEf1AOqXdpWciF8f3lO5oY01jlxd17xdHIcK7VywSsLVZpLToSdqAoIEhJ5OxEQ/FmA3FlmbwwD6ou13gLa4VGIvsBHveCmKGjVu0Z++atIy76tZYU1SOWFWv4B0ZhnVz2ca2VZynvLgw3YNsPJH7rHO966GXgRkGYJAJ4UvLg3sj/iztVh2FSfbUj5IGO1e/JHJO63wAo1MSQtRjkutVgl/djnBLC6vbL4YHkM3Ynpkx/YQEcxwrmeY0Ra8D5yYDq4MNIDMmZahWC+k4u2eA2Cj2ifBFNxbZvTN75vLwRBp6DsTNHsiqkXrSPDBdNeet31RbwTQ6LtsK8jqmL4S/59dmLcj7uCU2WxyBLPbJdbdZWlqW2ZQvfQY8QVAYy7S3MiHQWQN0oP5wqXk89jcgR42ig/zsqFNPpXHM4mExR7l/gDLPg0j9c3XEF6sWtk3FmJN1i4+B+9kn09b6UKlV7EFPKp8XcFNrz4ZcE9/I8lKwsqLVG2jAXIk7Z9LwDRcAmK5eG348X5zwFtOY6raKIvRw2cn92bPnEI+55v8A4WANS2647GFTgxHj30D0d/sOZmJ5BS34zpdWTgE0AlKg7sOqkncjqoW5J5zCh5Ow7b3KXvEvlAts44mAag8tZTectxMP4iguXvTnv4=
# Releases ページにアップロードするファイル
file_glob: true
file:
- TheDesk.dmg
- TheDesk-darwin-x64.zip
- build/*
skip_cleanup: true
on:
repo: cutls/TheDesk
branches:
only:
- master
tags: true
all_branches: true

View File

@@ -1,27 +1,26 @@
# TheDesk
<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 Minami (19)はVueで書き直します(rewrite-vueブランチ参照)。18までのバージョンはTheDesk Kawaii (20)以降で継続します。
# TheDesk
[![Build Status](https://travis-ci.org/cutls/TheDesk.svg?branch=master)](https://travis-ci.org/cutls/TheDesk)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/thedesk/localized.svg)](https://translate.thedesk.top/project/thedesk)
[![Version](https://flat.badgen.net/github/release/cutls/TheDesk)](https://github.com/cutls/TheDesk/releases)
[![Download](https://flat.badgen.net/github/assets-dl/cutls/TheDesk)](https://github.com/cutls/TheDesk/releases)
![Contributors](https://flat.badgen.net/github/contributors/cutls/TheDesk)
Mastodon/Misskey client for PC(Windows/Linux/macOS)
オープンソースSNSマストドン/MisskeyのWindows/Linuxクライアント
Download:[TheDesk](https://thedesk.top)
オープンソースSNSマストドン/MisskeyのPC向けクライアント[日本語はこちら](README_ja.md)
Contact me(bug report...):GitHub Issues, mention to [Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls) or toot with #Desk
Download:[TheDesk](https://thedesk.top) [![check](https://status.cutls.com/badge/?site=thedesk.top)](https://status.cutls.com)
バグレポートなど:GitHub Issuesや[Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls)へのリプ,または#Deskでトゥートして下さい.
<a href="https://www.patreon.com/cutls"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160"></a>
![Screenshots1](https://thedesk.top/img/scr1.png)
### Contribute/コントリビュート
Please make a pull request to ***WIP(before CI)*** brunch
***WIP(before CI)*** ブランチにプルリクエストをお願いします。
## License/ライセンス
## License
[GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)
The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/)/アイコンは[クリエイティブ・コモンズ 表示-非営利-継承](https://creativecommons.org/licenses/by-nc-sa/4.0/)で提供されています。
The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/)
[Press Kit](https://dl.thedesk.top/press/TheDesk+PressKit.zip)
* [PNG](https://dl.thedesk.top/press/TheDesk.png)
@@ -29,27 +28,25 @@ The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.o
* [ico](https://dl.thedesk.top/press/TheDesk.ico)
* [icns](https://dl.thedesk.top/press/TheDesk.icns)
The default sound of notifications is provided [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/)
The default sounds of notifications is provided [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/)
## Terms of Use/利用規約
## Terms of Use
* [利用規約(Terms of Use(ja))](https://thedesk.top/tos.html)
* [プライバシーポリシー(Privacy Policy(ja))](https://thedesk.top/priv.html)
## Language/言語
## Language
* 日本語(Japanese)
* English(英語)
* English
### Translation/翻訳
### Translation
Crowdin project is available! Visit: https://translate.thedesk.top
Crowdinから翻訳に参加してみませんか: https://translate.thedesk.top
## Requirement and development
## Requirement/環境
* Electron 3.0.10(install yourself)
* Electron 4.2 or above(install yourself)
* electron-dl(in package.json)
* Jimp(in package.json)
* font-manager(in package.json)
@@ -60,24 +57,25 @@ Crowdinから翻訳に参加してみませんか: https://translate.thedesk.
* sumchecker(in package.json)
* Ability to read unformated files!(install yourself)
## Contributors/主なコントリビューター
### Run on developer mode
macOSビルダー
`npm run dev` on `app` folder.
* [とねぢ](https://minohdon.jp/@toneji)
## Contributors
Linuxビルダー
Build for macOS
* [ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja)
* [toneji](https://minohdon.jp/@toneji)
iTunes NowPlayingにアルバムアートワークを付けてくれた人
Build for Linux
* [popn_ja](https://popon.pptdn.jp/@popn_ja)
Fellow coder
* [kPherox](https://www.kr-kp.com/)
## Build/ビルド
Misskey(misskey.xyz) application token is not in cutls/TheDesk
Misskey(misskey.xyz)のトークンは含まれておりません。
## Build
```sh
git clone https://github.com/cutls/TheDesk
@@ -86,29 +84,24 @@ npm install
npm install --only=dev
```
### electron-builder(推奨)
### electron-builder(Recommended)
Use npm scripts.
npm scriptsを利用します
```sh
# Build for current platform
# 実行している環境向けにビルド
npm run build
# Select build target
# ターゲットを指定してビルド
## Windows
npm run build:win
## Windows and Linux (The macOS target should run on macOS. So, this option hasn't include the build for macOS)
## macOS向けのビルドにはmacOSで実行する必要があるためこのコマンドではビルドされません
npm run build:all
```
Config is all on package.json
ビルド設定はすべてpackage.jsonに記載しています。
### electron-packager(非推奨)
### electron-packager
`npm install --save-dev electron-rebuild`
Linux/macOS
@@ -117,11 +110,8 @@ 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`
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
@@ -134,9 +124,3 @@ macOS
Did you find a bug with Pleroma accounts?
Pleroma **does not** follow Mastodon API rules completely although Pleroma developers say so.
Please write issues to improve TheDesk affinity with Pleroma.
Pleromaは、Mastodon APIとの互換性を謳っていますが、実際には様々な差異があり、TheDeskで不具合が発生することがあります。
Issuesに書いてある問題についてはなるべく対処しますので、ぜひお知らせください。
## See also/詳しく
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)

132
README_ja.md Normal file
View File

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

View File

@@ -1,5 +1,6 @@
<!doctype html>
<html lang="ja">
<head>
<title>TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
@@ -15,9 +16,12 @@ body{
-webkit-app-region: drag;
cursor: move;
}
a,button{
a,
button {
-webkit-app-region: no-drag;
}
.container {
width: 100%;
display: grid;
@@ -69,40 +73,42 @@ a,button{
}
</style>
</head>
<body class="center " style="overflow:hidden">
<script type="text/javascript" src="./js/common/jquery.js"></script>
<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
<script type="text/javascript" src="./js/common/materialize.js"></script>
<img src="./img/desk.png" style="max-width:70%;">
<img src="./img/desk.png" 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'>Chromium</div>
<div class='area-data3' id="chrome"></div>
<div class='area-name4'>Electron</div>
<div class='area-data4' id="electron"></div>
<div class='area-name5'>Node.js</div>
<div class='area-data5' id="node"></div>
<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">Chromium</div>
<div class="area-data3" id="chrome"></div>
<div class="area-name4">Electron</div>
<div class="area-data4" id="electron"></div>
<div class="area-name5">Node.js</div>
<div class="area-data5" id="node"></div>
</div>
<div class="cp">Copyright &copy; <a href="https://cutls.com/@Cutls" target="_blank">Cutls P</a> 2018 All rights reserved.<br>
Thanks:<a href="https://minohdon.jp/@toneji" target="_blank">toneji</a>/<a href="https://popon.pptdn.jp/@popn_ja" target="_blank">popn_ja</a>/<a href="https://pawoo.net/@kPherox" target="_blank">kPherox</a> and all users
<img draggable="false" style="width:0.8rem;top: 1px;margin-left: 1px;position: relative;" alt="❤️" title=":heart:" src="https://twemoji.maxcdn.com/2/72x72/2764.png">
<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://pawoo.net/@kPherox"
target="_blank">kPherox</a> and all users
<img draggable="false" style="width:0.8rem;top: 1px;margin-left: 1px;position: relative;" alt="❤️"
title=":heart:" src="https://twemoji.maxcdn.com/2/72x72/2764.png">
<br><a href="https://thedesk.top" target="_blank">Web site</a></div>
<button onclick="window.close()" class="btn waves-effect indigo" style="width:calc(100% - 10px);"><i class="material-icons left">close</i>Close</button>
<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"));
var electron = require("electron");
var remote=electron.remote;
const shell=electron.shell;
//JSON.parse(fs.readFileSync(info_path, 'utf8'));
console.log(process.versions);
$("#node").text(process.version);
$("#chrome").text(process.versions.chrome);
$("#electron").text(process.versions.electron);
$("#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];
@@ -110,7 +116,7 @@ a,button{
}
$(document).on('click', 'a', e => {
var url = $(e.target).attr('href');
shell.openExternal(url);
postMessage(["openUrl", url], "*")
return false;
});
</script>

View File

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

112
app/build.js Normal file
View File

@@ -0,0 +1,112 @@
const builder = require("electron-builder");
const fs = require('fs');
const os = process.platform;
const Platform = builder.Platform
const Arch = builder.Arch
const targets = new Map();
const archToType = new Map();
const pref = {
productName: "TheDesk",
appId: "top.thedesk",
asarUnpack: [
"node_modules/itunes-nowplaying-mac"
],
directories: {
output: "../build/"
},
win: {
icon: "build/thedesk.ico",
target: [
"nsis",
"portable",
"appx"
]
},
appx: {
identityName: "53491Cutls.TheDesk",
applicationId: "Cutls.TheDesk",
publisherDisplayName: "Cutls",
publisher: "CN=629757F5-A5EE-474F-9562-B304A89A9FD1",
languages: [
"JA-JP",
"EN-US"
]
},
nsis: {
oneClick: false,
allowToChangeInstallationDirectory: true
},
linux: {
icon: "build/icons",
target: [
"zip",
"snap"
],
category: "Network"
},
mac: {
target: [
"dmg",
"zip"
]
},
electronDownload: {
version: "5.0.1"
},
electronVersion: "5.0.1"
}
const json = JSON.parse(fs.readFileSync("package.json", 'utf8'));
const version = json.version;
if (os == "win32") {
archToType.set(Arch.ia32, []);
targets.set(Platform.WINDOWS, archToType);
} else if (os == "linux") {
archToType.set(Arch.x64, []);
archToType.set(Arch.ia32, []);
targets.set(Platform.LINUX, archToType);
} else if (os == "darwin") {
archToType.set(Arch.x64, []);
targets.set(Platform.MAC, archToType);
} else {
return false
}
builder.build({
targets: targets,
config: pref
})
.then(() => {
console.log("Done on "+os)
if (os == "win32") {
console.log("Windows")
fs.renameSync('../build/TheDesk ' + version + '.exe', '../build/TheDesk-ia32.exe');
fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup-ia32.exe');
retry()
}else if (os == "linux") {
console.log("Linux")
fs.renameSync('../build/thedesk-' + version + '.zip', '../build/TheDesk.zip');
fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup-ia32.exe');
}
})
.catch((error) => {
// handle error
})
function retry(){
console.log("Windows x64")
const targetsAlt = new Map();
const archToTypeAlt = new Map();
targetsAlt.set(Platform.WINDOWS, archToTypeAlt);
archToTypeAlt.set(Arch.x64, []);
builder.build({
targets: targetsAlt,
config: pref
})
.then(() => {
fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup.exe');
fs.renameSync('../build/TheDesk ' + version + '.exe', '../build/TheDesk.exe');
})
.catch((error) => {
// handle error
})
}

View File

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

View File

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

View File

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

2876
app/css/materialize.css vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

@@ -1,14 +1,13 @@
/*TL CSS(ただしBBCode pulse:master.css/spin:font-awesome*/
#main {
display:flex;
width: 100vw;
height: calc(100vh - 40px);
}
#timeline-container {
overflow-x: scroll;
overflow-y: hidden;
display: flex;
height: calc(100vh - 40px);
flex-grow:4;
height: 100%;
}
#bottom {
position: absolute;
@@ -87,8 +86,13 @@
font-size: 15px;
}
@media screen and (max-width: 890px) {
.btnsgroup .grouptitle{ display: none; }
#tips,#tips-menu{ display: none; }
.btnsgroup .grouptitle {
display: none;
}
#tips,
#tips-menu {
display: none;
}
}
iframe {
max-width: 100%;
@@ -120,22 +124,54 @@ iframe {
.bbcode_FTL {
display: none;
}
.marquee {
width: 100%;
padding: .5em 0;
overflow: hidden;
margin-bottom: 0;
position: relative;
}
.marquee .bbcode-marq-lateral {
margin: 0;
padding-left: 100%;
display: inline-block;
white-space: nowrap;
animation-name: marquee;
animation-timing-function: linear;
animation-duration: 10s;
animation-iteration-count: infinite;
}
@keyframes marquee {
0% {
-webkit-transform: translate(0);
transform: translate(0);
}
99%, 100% {
-webkit-transform: translate(-100%);
transform: translate(-100%);
}
}
.boxIn {
display: flex;
flex-direction: column;
height: 100%;
border: thin solid gray;
overflow: hidden;
}
.box .pin,#his-data .pin{
.box .pin,
#his-data .pin {
display: none;
}
.user {
cursor: text;
font-size: 1.1rem;
}
.emoji,.emoji-img{
.emoji,
.emoji-img {
width: 15px;
}
.area-toot .emoji,.area-toot .emoji-img{
.area-toot .emoji,
.area-toot .emoji-img {
width: 20px;
vertical-align: middle;
margin: -1px 0;
@@ -145,9 +181,10 @@ iframe {
}
.tl-box {
position: relative;
height:calc(100% - 40px);
flex: 1;
overflow-y: scroll;
overflow-x:hidden }
overflow-x: hidden;
}
.additional {
overflow-x: scroll;
width: 100%;
@@ -170,9 +207,14 @@ iframe {
width: 100%;
display: grid;
grid-template-columns: 43px 2fr 1fr;
grid-template-areas: 'notice notice notice' 'icon display_name display_name' 'icon toot toot' 'vis additional additional' 'actions actions side';
grid-template-areas: "notice notice notice" "icon display_name display_name" "icon toot toot" "vis additional additional" "actions actions side";
}
.cvo h1,.cvo h2,.cvo h3,.cvo h4,.cvo h5,.cvo h6{
.cvo h1,
.cvo h2,
.cvo h3,
.cvo h4,
.cvo h5,
.cvo h6 {
margin: 0;
}
@@ -199,7 +241,7 @@ text-overflow: ellipsis;
display: flex;
justify-content: space-between;
width: 100%;
flex-wrap:nowrap
flex-wrap: nowrap;
}
.flex-name {
max-width: calc(100% - 60px);
@@ -253,7 +295,7 @@ grid-area: toot;
.quote-renote {
display: grid;
grid-template-columns: 43px 2fr 1fr;
grid-template-areas: 'ricon ruser' 'ricon rtext';
grid-template-areas: "ricon ruser" "ricon rtext";
border: 1px solid;
margin-top: 3px;
padding: 1px;
@@ -308,7 +350,6 @@ grid-area: toot;
.toot-img {
object-fit: cover;
width: 100%;
margin-right:1px;
}
.toot img:not(.emoji-img) {
max-width: 100%;
@@ -371,7 +412,7 @@ p:not(:last-child){
display: grid;
grid-template-columns: 40px 48px 1fr 24px;
grid-template-rows: 30px 30px;
grid-template-areas: 'notice notice_name notice_name a2' 'notice a1 sta a3' 'notf-box notf-box notf-box notf-box';
grid-template-areas: "notice notice_name notice_name a2" "notice a1 sta a3" "notf-box notf-box notf-box notf-box";
}
.emp {
font-weight: bold;
@@ -457,7 +498,9 @@ 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;
}
#src-contents {
min-height: 100px;
@@ -480,7 +523,7 @@ p:not(:last-child){
content: "...";
}
.toot a:not(.mention) span:last-of-type {
display:none;
/*display: none;*/
}
.tl-box .via-hide {
display: none;
@@ -494,19 +537,19 @@ p:not(:last-child){
}
.fa-2x > .emoji-img {
width: 36px !important;
height: 36px!important
height: 36px !important;
}
.fa-3x > .emoji-img {
width: 54px !important;
height: 54px!important
height: 54px !important;
}
.fa-4x > .emoji-img {
width: 72px !important;
height: 72px!important
height: 72px !important;
}
.fa-5x > .emoji-img {
width: 90px !important;
height: 90px!important
height: 90px !important;
}
#lists-user {
overflow-y: scroll;
@@ -530,7 +573,26 @@ p:not(:last-child){
background-color: var(--color);
}
.jump {
display: inline-block; animation: jump 0.75s linear infinite;
display: inline-block;
animation: jump 0.75s linear infinite;
}
.img-link {
position: relative;
display: block;
margin-right: 1px;
float: left;
}
.nsfw-media {
position: absolute;
top: 0;
right: 0;
background-color: black;
color: white;
}
.img-link img {
display: block;
width: 100%;
height: 100%;
}
@keyframes jump {
0% {
@@ -584,4 +646,3 @@ p:not(:last-child){
animation-duration: 0.1s;
animation-name: fadeInDown;
}

File diff suppressed because it is too large Load Diff

View File

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

View File

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

BIN
app/img/thinkingdesk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

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

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

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

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

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

View File

@@ -42,7 +42,6 @@ function defaultEmoji(target){
});
$("#emoji-list").html(emojis);
$("#now-emoji").text(lang.lang_defaultemojis_text.replace("{{cat}}", defaultemojiname[target]));
console.log(target);
$(".emoji-control").addClass("hide");
}
function customEmoji() {
@@ -60,7 +59,6 @@ function defEmoji(target){
} else {
emoji = twemoji.convert.fromCodePoint(hex[0]);
}
console.log(emoji)
var now = $("#textarea").val();
var selin = localStorage.getItem("cursor");
var now = $("#textarea").val();
@@ -71,7 +69,6 @@ function defEmoji(target){
} else {
newt = emoji + now;
}
console.log(emoji);
$("#textarea").val(newt);
$("#textarea").focus();
var selin = $("#textarea").prop('selectionStart');
@@ -82,7 +79,6 @@ function defEmoji(target){
}
function faicon() {
var json = faicons;
console.log(json);
var emojis = "";
Object.keys(json).forEach(function (key) {
var emoji = json[key];

View File

@@ -193,6 +193,9 @@ var lang={
"lang_parse_unvoted": "Show the result without voting",
"lang_parse_endedvote": "Expired",
"lang_parse_thread": "Show thread",
"lang_parse_unknown": "Attached file",
"lang_parse_nsfw": "NSFW media",
"lang_parse_notffilter":"Show this user's notifications",
//misskey
"lang_misskeyparse_renote": "Repost",
"lang_misskeyparse_renoteqt": "Renote",

View File

@@ -195,6 +195,9 @@ var lang={
"lang_parse_unvoted": "結果だけ見る",
"lang_parse_endedvote": "終了済み",
"lang_parse_thread": "会話を表示",
"lang_parse_unknown": "添付ファイル",
"lang_parse_nsfw": "閲覧注意",
"lang_parse_notffilter":"このユーザーの通知のみを表示",
//misskey
"lang_misskeyparse_renote": "再投稿",
"lang_misskeyparse_renoteqt": "引用",

View File

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

View File

@@ -32,7 +32,7 @@ function load() {
}
}
console.log(obj);
console.table(obj);
var templete;
Object.keys(obj).forEach(function (key) {
var acct = obj[key];
@@ -99,7 +99,6 @@ function data(domain) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
if (!json.error) {
$("#ins-name").text(json.name);
$("#ins-upd").text(date(json.checked_at, 'full'));
@@ -110,6 +109,8 @@ function data(domain) {
$("#ins-per").text(json.uptime * 100);
$("#ins-user").text(json.users);
$("#ins-ver").text(json.version);
} else {
console.error(json.error);
}
});
var start = "https://" + domain + "/api/v1/instance";
@@ -124,7 +125,6 @@ function data(domain) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
if (!json.error) {
$("#ins-title").text(json.title);
$("#ins-desc").html(json.description);
@@ -135,6 +135,8 @@ function data(domain) {
$("#ins-prof").attr('src', json.thumbnail);
$("#ins-admin").text(escapeHTML(json.contact_account.display_name) + "(" + json.contact_account.acct + ")");
$("#ins-admin").attr("href", "index.html?mode=user&code=" + json.contact_account.username + "@" + domain);
} else {
console.error(json.error);
}
});
}
@@ -150,7 +152,6 @@ function multiDel(target) {
//公開範囲(差分のみ)
if (key >= target) {
var oldvis = localStorage.getItem("vis-memory-" + key);
console.log(oldvis);
if (oldvis) {
localStorage.setItem("vis-memory-" + nk, oldvis);
}
@@ -175,7 +176,6 @@ function multiDel(target) {
});
//とりあえず消す
obj.splice(target, 1);
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
load();
@@ -216,7 +216,6 @@ function multiDel2(target) {
Object.keys(obj).forEach(function (key) {
if (key >= target) {
var oldvis = localStorage.getItem("vis-memory-" + key);
console.log(oldvis);
if (oldvis) {
var nk = key - 1;
localStorage.setItem("vis-memory-" + nk, oldvis);
@@ -287,7 +286,6 @@ function login(url) {
} else {
var red = 'thedesk://manager';
}
console.log(red);
localStorage.setItem("redirect", red);
var start = "https://" + url + "/api/v1/apps";
var httpreq = new XMLHttpRequest();
@@ -303,7 +301,6 @@ function login(url) {
httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
localStorage.setItem("msky", "false");
var auth = "https://" + url + "/oauth/authorize?client_id=" + json[
"client_id"] + "&client_secret=" + json["client_secret"] +
@@ -313,15 +310,9 @@ function login(url) {
localStorage.setItem("client_secret", json["client_secret"]);
$("#auth").show();
$("#add").hide();
const {
shell
} = require('electron');
shell.openExternal(auth);
var electron = require("electron");
var ipc = electron.ipcRenderer;
postMessage(["openUrl", auth], "*")
if ($('#linux:checked').val() == "on") { } else {
ipc.send('quit', 'go');
postMessage(["sendSinmpleIpc", "quit"], "*")
}
}
}
@@ -363,8 +354,7 @@ function misskeyLogin(url) {
"reaction-read",
"reaction-write",
"vote-read",
"vote-write"
/*
"vote-write",
"read:account",
"write:account",
"read:drive",
@@ -385,13 +375,11 @@ function misskeyLogin(url) {
"read:reactions",
"write:reactions",
"write:votes"
*/
]
}));
httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
misskeyAuth(url, json.secret)
}
}
@@ -413,17 +401,13 @@ function misskeyAuth(url, mkc){
httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
const {
shell
} = require('electron');
var token = json.token;
$("#auth").show();
$("#code").val(token);
$("#add").hide();
$("#misskey").prop("checked", false);
localStorage.setItem("domain_tmp", url);
shell.openExternal(json.url);
postMessage(["openUrl", json.url], "*")
}
}
}
@@ -447,7 +431,6 @@ function code(code) {
}
var url = localStorage.getItem("domain_tmp");
localStorage.removeItem("domain_tmp");
console.log(localStorage.getItem("msky"));
if (localStorage.getItem("msky") == "true") {
var start = "https://" + url + "/api/auth/session/userkey";
var httpreq = new XMLHttpRequest();
@@ -462,7 +445,6 @@ function code(code) {
if (httpreq.readyState === 4) {
var json = httpreq.response;
var i = sha256(json.accessToken + localStorage.getItem("mkc"));
console.log(json);
var avatar = json["user"]["avatarUrl"];
var priv = "public";
var add = {
@@ -484,7 +466,6 @@ function code(code) {
localStorage.setItem("user_" + target, json["user"]["username"]);
localStorage.setItem("user-id_" + target, json["user"]["id"]);
localStorage.setItem("prof_" + target, avatar);
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
if ($("body").hasClass("first")) {
@@ -513,7 +494,6 @@ function code(code) {
httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
if (json["access_token"]) {
$("#auth").hide();
$("#add").show();
@@ -539,11 +519,9 @@ function getdata(domain, at) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + escapeHTML(json.error),
5000);
M.toast({ html: lang.lang_fatalerroroccured + "Error:" + json.error, displayLength: 5000 })
return;
}
var avatar = json["avatar"];
@@ -574,7 +552,6 @@ function getdata(domain, at) {
localStorage.setItem("user_" + target, json["acct"]);
localStorage.setItem("user-id_" + target, json["id"]);
localStorage.setItem("prof_" + target, avatar);
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
if ($("body").hasClass("first")) {
@@ -594,7 +571,6 @@ function refresh(target) {
}
var start = "https://" + obj[target].domain +
"/api/v1/accounts/verify_credentials";
console.log(start);
fetch(start, {
method: 'GET',
headers: {
@@ -607,11 +583,9 @@ function refresh(target) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
5000);
M.toast({ html: lang.lang_fatalerroroccured + "Error:" + json.error, displayLength: 5000 })
return;
}
var avatar = json["avatar"];
@@ -631,8 +605,6 @@ function refresh(target) {
localStorage.setItem("name_" + target, json["display_name"]);
localStorage.setItem("user_" + target, json["acct"]);
localStorage.setItem("user-id_" + target, json["id"]);
console.log("user-id_" + target+":"+json["id"])
console.log(localStorage.getItem("user-id_"+target));
localStorage.setItem("prof_" + target, avatar);
obj[target] = ref;
var json = JSON.stringify(obj);
@@ -654,7 +626,6 @@ function misskeyRefresh(obj,target,url){
httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
return;
var avatar = json["user"]["avatarURL"];
var priv = "public";
@@ -675,7 +646,6 @@ function misskeyRefresh(obj,target,url){
localStorage.setItem("user_" + target, json["user"]["username"]);
localStorage.setItem("user-id_" + target, json["user"]["id"]);
localStorage.setItem("prof_" + target, avatar);
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
load();
@@ -696,7 +666,6 @@ function multisel() {
var templete;
var last = localStorage.getItem("main");
var sel;
console.log(obj.length)
if (obj.length < 1) {
$("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
$("#add-acct-sel").html('<option value="noauth">' + lang.lang_login_noauth + '</option>');
@@ -724,12 +693,12 @@ function multisel() {
});
}
$('select').material_select('update');
$('select').formSelect();
}
function mainacct() {
var acct_id = $("#main-acct-sel").val();
localStorage.setItem("main", acct_id);
Materialize.toast(lang.lang_manager_mainAcct, 3000);
M.toast({ html: lang.lang_manager_mainAcct, displayLength: 3000 })
}
function colorpicker(key) {
temp =
@@ -810,9 +779,7 @@ input.addEventListener("focus", function() {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
if (!json.error) {
var urls = "Suggest:";
Object.keys(json.instances).forEach(function (key) {
var url = json.instances[key];
@@ -820,6 +787,8 @@ input.addEventListener("focus", function() {
'\')" class="pointer">' + escapeHTML(url.name) + '</a> ';
});
$("#ins-suggest").html(urls);
} else {
console.error(json.error);
}
});
}

View File

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

View File

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

View File

@@ -1,6 +1,3 @@
//jQuery読む
window.jQuery = window.$ = require('../../js/common/jquery.js');
var Hammer = require('../../js/common/hammer.min.js');
$.strip_tags = function (str, allowed) {
if (!str) {
return "";
@@ -89,27 +86,7 @@ function formattimeutc(date){
}
return escapeHTML(str);
}
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('custom-css-request', "");
ipc.on('custom-css-response', function (event, arg) {
if(arg==""){ return false; }
var styleNode = document.createElement("style");
styleNode.setAttribute("type","text/css")
var content = document.createTextNode(arg)
styleNode.append(content)
document.getElementsByTagName("head")[0].append(styleNode)
})
ipc.on('theme-css-response', function (event, arg) {
if(arg==""){ return false; }
var styleNode = document.createElement("style");
styleNode.setAttribute("type","text/css")
var content = document.createTextNode(arg)
styleNode.append(content)
document.getElementsByTagName("head")[0].append(styleNode)
})
postMessage(["sendSinmpleIpc", "custom-css-request"], "*")
function makeCID() {
return randomStr(8) + "-" + randomStr(4) + "-" + randomStr(4) + "-" + randomStr(4) + "-" + randomStr(12);
}
@@ -123,15 +100,13 @@ function randomStr(l){
}
return r;
}
function rgbToHex(color)
{
function rgbToHex(color) {
// HEXに変換したものを代入する変数
var hex = '';
// 第1引数がHEXのとき変換処理は必要ないのでそのままreturn
// IE8の場合はjQueryのcss()関数でHEXを返すので除外
if (color.match(/^#[a-f\d]{3}$|^#[a-f\d]{6}$/i))
{
if (color.match(/^#[a-f\d]{3}$|^#[a-f\d]{6}$/i)) {
return color;
}
@@ -139,8 +114,7 @@ function rgbToHex(color)
var regex = color.match(/^rgb\(([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\)$/);
// 正規表現でマッチしたとき
if (regex)
{
if (regex) {
var rgb =
[
// RGBからHEXへ変換
@@ -149,12 +123,10 @@ function rgbToHex(color)
parseInt(regex[3]).toString(16)
];
for (var i = 0; i < rgb.length; ++i)
{
for (var i = 0; i < rgb.length; ++i) {
// rgb(1,1,1)のようなときHEXに変換すると1桁になる
// 1桁のときは前に0を足す
if (rgb[i].length == 1)
{
if (rgb[i].length == 1) {
rgb[i] = '0' + rgb[i];
}
hex += rgb[i];
@@ -165,3 +137,37 @@ function rgbToHex(color)
console.error(color + ':第1引数はRGB形式で入力');
}
/*マルチバイト用切り出し*/
$.isSurrogatePear = function (upper, lower) {
return 0xD800 <= upper && upper <= 0xDBFF && 0xDC00 <= lower && lower <= 0xDFFF;
};
$.mb_strlen = function (str) {
var ret = 0;
for (var i = 0; i < str.length; i++ , ret++) {
var upper = str.charCodeAt(i);
var lower = str.length > (i + 1) ? str.charCodeAt(i + 1) : 0;
if ($.isSurrogatePear(upper, lower)) {
i++;
}
}
return ret;
};
$.mb_substr = function (str, begin, end) {
var ret = '';
for (var i = 0, len = 0; i < str.length; i++ , len++) {
var upper = str.charCodeAt(i);
var lower = str.length > (i + 1) ? str.charCodeAt(i + 1) : 0;
var s = '';
if ($.isSurrogatePear(upper, lower)) {
i++;
s = String.fromCharCode(upper, lower);
} else {
s = String.fromCharCode(upper);
}
if (begin <= len && len < end) {
ret += s;
}
}
return ret;
};
localStorage.removeItem("errors");

View File

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

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

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

View File

@@ -1,51 +0,0 @@
var electron = require("electron");
const fs = require("fs");
const os = require('os')
const shell = electron.shell;
const path = require('path')
function shot(){
//screenshotMsg.textContent = 'Gathering screens...'
$(window).height
let options = {
types: ['screen'],
thumbnailSize: {
width: window.parent.screen.width,
height: window.parent.screen.height
}
}
const desktopCapturer = electron.desktopCapturer;
desktopCapturer.getSources(options, function(error, sources) {
if (error) return console.log(error)
sources.forEach(function(source) {
if(location.search){
var m = location.search.match(/\?id=([a-zA-Z-0-9]+)/);
var title=m[1];
}else{
var title="screenshot";
}
if (source.name === 'Screen 1' || source.name === 'TheDesk') {
var durl=source.thumbnail.toDataURL();
var b64 = durl.match(
/data:image\/png;base64,(.+)/
);
const screenshotPath = path.join(os.tmpdir(), 'screenshot.png');
const savePath = path.join(os.tmpdir(), 'screenshot.png');
var ipc = electron.ipcRenderer;
var h = $(window).height()-150;
var w = $(window).width();
ipc.send('shot', ['file://' + screenshotPath,w,h,b64[1],title]);
if($(".img-parsed").length>0){
for(i=0;i<$(".img-parsed").length;i++){
var url=$(".img-parsed").eq(i).attr("data-url");
ipc.send('shot-img-dl', [url,title+"_img"+i+".png"]);
}
}
window.close();
return;
const message = `Saved screenshot to: ${screenshotPath}`
//screenshotMsg.textContent = message
}
})
})
}

View File

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

View File

@@ -179,7 +179,6 @@ function emojiInsert(code, del) {
} else {
var brank = " ";
}
console.log(selin);
var now = $("#textarea").val();
if (selin > 0) {
var before = now.substr(0, selin);
@@ -192,7 +191,7 @@ function emojiInsert(code, del) {
$("#textarea").val(newt);
//emoji();
} else {
var regExp = new RegExp(del, "g");
var regExp = new RegExp(del.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
var now = now.replace(regExp, "");
$("#textarea").val(now + brank + code);
}

View File

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

View File

@@ -17,7 +17,7 @@ function renote(id, acct_id, remote) {
httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
console.log(["Success: renote", json]);
$("[toot-id=" + id + "]").addClass("rted");
$(".rt_" + id).toggleClass("teal-text");
}
@@ -31,7 +31,7 @@ function renoteqt(id, acct_id) {
$("#rec").text("Renote");
$("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true);
$('select').material_select();
$('select').formSelect();
$("#textarea").attr("placeholder", lang.lang_misskeyparse_qt);
$("#textarea").focus();
}
@@ -43,7 +43,7 @@ function misskeyreply(id, acct_id) {
$("#rec").text("Renote");
$("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true);
$('select').material_select();
$('select').formSelect();
$("#textarea").attr("placeholder", lang.lang_misskeyparse_qt);
$("#textarea").focus();
}
@@ -63,12 +63,12 @@ function reactiontoggle(id,acct_id,tlid){
httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) {
var json = httpreq.response;
console.log(json);
if(json.reactionCounts){
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding","star"];
console.log(["Success: reaction", json]);
if (json.reactions) {
var reactions = ["like", "love", "laugh", "hmm", "surprise", "congrats", "angry", "confused", "pudding", "rip"];
for (var i = 0; i < reactions.length; i++) {
if(json.reactionCounts[reactions[i]]){
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
if (json.reactions[reactions[i]]) {
$("#pub_" + id + " .re-" + reactions[i] + "ct").text(json.reactions[reactions[i]])
$("#pub_" + id + " .re-" + reactions[i]).removeClass("hide")
} else {
$("#pub_" + id + " .re-" + reactions[i] + "ct").text(0)
@@ -77,7 +77,7 @@ function reactiontoggle(id,acct_id,tlid){
} else {
$("#pub_" + id + " .re-" + reactions[i]).removeClass("hide")
}
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
$("#pub_" + id + " .re-" + reactions[i] + "ct").text(json.reactions[reactions[i]])
}
}
$("#pub_" + id + " .reactions").removeClass("hide");
@@ -102,7 +102,7 @@ function reactioncustom(acct_id,id){
$("#unreact").hide();
$("#addreact").removeClass("hide");
$("#post-acct-sel").val(acct_id);
$('select').material_select();
$('select').formSelect();
localStorage.setItem("nohide", true);
show()
emojiToggle(true)
@@ -121,7 +121,6 @@ function reactRefresh(acct_id,id){
method: "POST",
body: JSON.stringify(req),
}
console.log(req)
fetch(start, i,
).then(function (response) {
return response.json();
@@ -143,21 +142,20 @@ function reactRefresh(acct_id,id){
}
function reactRefreshCore(json) {
var id = json.id;
if(json.reactionCounts){
if (json.reactions) {
$("#pub_" + id + " .reactions").removeClass("hide")
var regExp = new RegExp(":", "g");
Object.keys(json.reactionCounts).forEach(function(keye) {
Object.keys(json.reactions).forEach(function (keye) {
keyeClass = keye.replace(regExp, '');
if(json.reactionCounts[keye]){
console.log(json.reactionCounts[keye])
$("#pub_" + id +" .re-"+keyeClass+"ct").text(json.reactionCounts[keye])
if (json.reactions[keye]) {
$("#pub_" + id + " .re-" + keyeClass + "ct").text(json.reactions[keye])
$("#pub_" + id + " .re-" + keyeClass).removeClass("hide")
} else {
$("#pub_" + id + " .re-" + keyeClass + "ct").text(0)
if ($("#pub_" + id + " .reactions").hasClass("fullreact")) {
$("#pub_" + id + " .re-" + keyeClass).addClass("hide")
}
$("#pub_" + id +" .re-"+keyeClass+"ct").text(json.reactionCounts[keye])
$("#pub_" + id + " .re-" + keyeClass + "ct").text(json.reactions[keye])
}
});
}

View File

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

View File

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

View File

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

View File

@@ -68,7 +68,7 @@ input.addEventListener("focus", function() {
var at = localStorage.getItem("acct_" + acct_id + "_at");
suggest = "https://" + domain + "/api/v1/search?q=" + q
if (suggest != oldSuggest) {
console.log(suggest)
console.log("Try to get suggest at " + suggest)
fetch(suggest, {
method: 'GET',
headers: {
@@ -131,7 +131,7 @@ function tagInsert(code, del) {
var selin = $("#textarea").prop('selectionStart');
if (!del) {
} else {
var regExp = new RegExp(del, "g");
var regExp = new RegExp(del.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
var now = now.replace(regExp, "");
selin = selin - del.length;
}
@@ -152,7 +152,7 @@ function tagInsert(code, del) {
function cgNPs(q) {
suggest = "https://cg.toot.app/api/v1/search/light?q=" + q
if (suggest != oldSuggest) {
console.log(suggest)
console.log("Try to get suggest at " + suggest)
fetch(suggest, {
method: 'GET',
headers: {
@@ -164,7 +164,6 @@ function cgNPs(q){
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
if (json[0]) {
var tags = "";
Object.keys(json).forEach(function (key4) {

View File

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

View File

@@ -80,8 +80,7 @@ function additional(acct_id, tlid) {
var dom = $(this);
var start = "./js/emoji/emoji-map.json";
var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.onreadystatechange = function()
{
xmlHttpRequest.onreadystatechange = function () {
if (this.readyState === 4 && this.status === 200) {
if (this.response) {
var json = this.response;
@@ -170,9 +169,7 @@ function additionalIndv(tlid, acct_id, id) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
//このリンク鳥やんけ、ってとき
console.log(json.provider_name);
if (json.provider_name == "Twitter") {
if (json.image) {
var twiImg = '<br><img src="' + json.image + '" style="max-width:100%" onclick="imgv(\'twi_' + id + '\', 0, \'twitter\');" id="twi_' + id + '-image-0" data-url="' + json.image + '" data-type="image">';
@@ -243,7 +240,6 @@ function mov(id,tlid,type){
} else {
var tlide = "[tlid=" + tlid + "]";
}
console.log(tlid)
var mouseover = localStorage.getItem("mouseover");
if (!mouseover) {
mouseover = "";

View File

@@ -40,7 +40,7 @@ function details(id, acct_id, tlid, mode) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
console.log(["Toot data:", json]);
if (!$("#timeline_" + tlid + " #pub_" + id).length) {
var html = parse([json], '', acct_id);
$("#toot-this").html(html);
@@ -208,7 +208,6 @@ function context(id, acct_id) {
}).then(function (json) {
if (localStorage.getItem("mode_" + domain) == "misskey") {
json.reverse();
console.log(json);
var templete = misskeyParse(json, '', acct_id, "", "", []);
$("#toot-reply").html(templete);
$("#toot-reply .hide").html(lang.lang_details_filtered);
@@ -467,10 +466,10 @@ function cbCopy(mode){
if (mode == "emb") {
var emb = '<iframe src="' + url + '/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400"></iframe><script src="https://' + domain + '/embed.js" async="async"></script>';
execCopy(emb)
Materialize.toast(lang.lang_details_embed, 1500);
M.toast({ html: lang.lang_details_embed, displayLength: 1500 })
} else {
if (execCopy(url)) {
Materialize.toast(lang.lang_details_url, 1500);
M.toast({ html: lang.lang_details_url, displayLength: 1500 })
}
}
@@ -482,11 +481,11 @@ function staCopy(id){
html = html.replace(/<br\s?\/?>/, "\n");
html = html.replace(/<p>/, "\n");
html = html.replace(/<\/p>/, "\n");
console.log(html);
console.log("Copy it:\n" + html);
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
html = $.strip_tags(html);
if (execCopy(html)) {
Materialize.toast(lang.lang_details_txt, 1500);
M.toast({ html: lang.lang_details_txt, displayLength: 1500 })
}
}
@@ -505,7 +504,7 @@ function trans(tar,to){
}
$("#toot-this .additional").text("Loading...(Powered by Google Translate)");
var exec = 'https://script.google.com/macros/s/AKfycbxhwW5tjjop9Irg-y1zr_WsXlCKEzwWG6KuoOt_vVRDfEbRv0c/exec?format=json&text=' + encodeURIComponent(html) + '&source=' + tar + '&target=' + to
console.log(exec);
console.log("Try to translate from " + tar + " to " + to + " at " + exec);
fetch(exec, {
method: 'GET',
}).then(function (response) {
@@ -520,11 +519,7 @@ function trans(tar,to){
//ブラウザで開く
function brws() {
var url = $("#tootmodal").attr("data-url");
const {
shell
} = require('electron');
shell.openExternal(url);
postMessage(["openUrl", url], "*")
}
//外部からトゥート開く
function detEx(url, acct_id) {
@@ -547,11 +542,7 @@ function detEx(url,acct_id){
console.error(error);
}).then(function (json) {
if (!json.statuses) {
const {
shell
} = require('electron');
shell.openExternal(url);
postMessage(["openUrl", url], "*")
} else {
var id = json.statuses[0].id;
$(".loadp").text($(".loadp").attr("href"));

View File

@@ -57,7 +57,6 @@ function dmmore(tlid){
}
//DMオブジェクトパーサー(トゥート)
function dmListParse(obj, mix, acct_id, tlid, popup, mutefilter) {
console.log(obj);
var templete = '';
if (obj[0]) {
localStorage.setItem("lastunix_" + tlid, date(obj[0].created_at, 'unix'));

View File

@@ -114,7 +114,6 @@ function filter(){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/v1/filters"
console.log(start)
fetch(start, {
method: 'GET',
headers: {
@@ -127,7 +126,6 @@ function filter(){
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
if (json) {
var filters = "";
Object.keys(json).forEach(function (key) {
@@ -167,7 +165,6 @@ function makeNewFilter(){
if ($("#conv_filter:checked").val()) {
cont.push("thread");
}
console.log(cont);
if (!cont.length) {
$("#filtered-words").html('Error:' + lang.lang_filter_errordegree);
}
@@ -235,7 +232,6 @@ function filterEdit(id,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/v1/filters/" + id
console.log(start)
fetch(start, {
method: 'GET',
headers: {
@@ -248,7 +244,6 @@ function filterEdit(id,acct_id){
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
if (json) {
var now = new Date();
now = now.getTime();
@@ -297,7 +292,6 @@ function getFilter(acct_id){
var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem("mode_" + domain) != "misskey") {
var start = "https://" + domain + "/api/v1/filters"
console.log(start)
fetch(start, {
method: 'GET',
headers: {
@@ -341,7 +335,6 @@ function filterUpdate(acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/v1/filters"
console.log(start)
fetch(start, {
method: 'GET',
headers: {
@@ -377,7 +370,7 @@ function filterUpdateInternal(json,type){
var text = $(elem).find('.toot').html();
Object.keys(home).forEach(function (key8) {
var word = home[key8];
var regExp = new RegExp( word, "g" );
var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
if ($.strip_tags(text).match(regExp)) {
$("[toot-id=" + id + "]").addClass("hide");
}
@@ -393,45 +386,34 @@ function filterUpdateInternal(json,type){
*/
//通知フィルター
function exclude(key) {
var excludetxt="";
localStorage.setItem("exclude-" + key, "")
var excludetxt = localStorage.getItem("exclude-" + key);
if ($('#exc-reply-' + key + ':checked').val()) {
excludetxt = "?exclude_types[]=mention"
var reply=true
}else{
var reply=false;
}
if ($('#exc-fav-' + key + ':checked').val()) {
if(reply){
if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + "&exclude_types[]=favourite"
} else {
excludetxt = "?exclude_types[]=favourite"
}
var fav=true
}else{
var fav=false;
}
if ($('#exc-bt-' + key + ':checked').val()) {
if(reply || fav){
if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + "&exclude_types[]=reblog"
} else {
excludetxt = "?exclude_types[]=reblog"
}
var bt=true
}else{
var bt=false;
}
if ($('#exc-follow-' + key + ':checked').val()) {
if(reply || bt || fav){
if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + "&exclude_types[]=follow"
} else {
excludetxt = "?exclude_types[]=follow"
}
var follow=true;
}else{
var follow=false;
}
if ($('#exc-poll-' + key + ':checked').val()) {
if(reply || bt || fav || follow){
if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + "&exclude_types[]=poll"
} else {
excludetxt = "?exclude_types[]=poll"
@@ -452,3 +434,25 @@ function excludeCk(key,target){
return "";
}
}
function checkNotfFilter(tlid){
var excludetxt = localStorage.getItem("exclude-" + tlid);
if(!excludetxt || excludetxt != ""){
return true;
}else{
return false;
}
}
function resetNotfFilter(tlid){
localStorage.setItem("exclude-" + tlid, "")
parseColumn();
}
function notfFilter(id,tlid,acct_id){
var excludetxt = localStorage.getItem("exclude-" + tlid);
if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + "&account_id="+id
} else {
excludetxt = "?account_id="+id
}
localStorage.setItem("exclude-" + tlid, excludetxt)
parseColumn();
}

View File

@@ -40,7 +40,6 @@ function list(){
});
} else {
var start = "https://" + domain + "/api/v1/lists"
console.log(start)
fetch(start, {
method: 'GET',
headers: {
@@ -75,7 +74,6 @@ function makeNewList(){
var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem("mode_" + domain) != "misskey") {
var start = "https://" + domain + "/api/v1/lists"
console.log(start)
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
@@ -93,7 +91,6 @@ function makeNewList(){
}
} else {
var start = "https://" + domain + "/api/users/lists/create"
console.log(start)
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
@@ -119,7 +116,6 @@ function listUser(id,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists/" + id + "/accounts"
console.log(start)
fetch(start, {
method: 'GET',
headers: {
@@ -149,7 +145,6 @@ function hisList(user,acct_id){
var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem("mode_" + domain) != "misskey") {
var start = "https://" + domain + "/api/v1/lists"
console.log(start)
fetch(start, {
method: 'GET',
headers: {
@@ -175,7 +170,6 @@ function hisList(user,acct_id){
}
});
var start = "https://" + domain + "/api/v1/accounts/" + user + "/lists"
console.log(start)
fetch(start, {
method: 'GET',
headers: {
@@ -245,7 +239,6 @@ function listAdd(id,user,acct_id){
account_ids: [user]
}
}
console.log(start)
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
@@ -277,7 +270,6 @@ function listRemove(id,user,acct_id){
account_ids: [user]
}
}
console.log(start)
var httpreq = new XMLHttpRequest();
httpreq.open(method, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');

View File

@@ -203,8 +203,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
"congrats": "🎉",
"amgry": "💢",
"confused": "😥",
"pudding":"🍮",
"star":"⭐"
"rip": "😇"
}
var icon = reactions[toot.reaction];
var emojisData = JSON.parse(localStorage.getItem("emoji_" + acct_id));
@@ -255,12 +254,10 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
var domain = localStorage.getItem("domain_" + acct_id);
if (popup > 0) {
Materialize.toast("["+domain+"]"+escapeHTMLtemp(toot.user.name)+what, popup * 1000);
M.toast({ html: "[" + domain + "]" + escapeHTMLtemp(toot.user.name) + what, displayLength: popup * 1000 })
}
if (native == "yes") {
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var os = localStorage.getItem("platform");
var options = {
body: toot.user.name + "(" + toot.user.username + ")" + what + "\n\n" + $.strip_tagstemp(toot.note.text),
icon: toot.user.avatarUrl
@@ -268,14 +265,15 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
if (os == "darwin") {
var n = new Notification('TheDesk:' + domain, options);
} else {
ipc.send('native-notf', [
var nativeNotfOpt=[
'TheDesk:' + domain,
toot.user.name + "(" + toot.user.username + ")" + what + "\n\n" + $.strip_tagstemp(toot.note.text),
toot.user.avatarUrl,
"toot",
acct_id,
toot.note.id
]);
]
postMessage(["nativeNotf", nativeNotfOpt], "*")
}
}
if (localStorage.getItem("hasNotfC_" + acct_id) != "true") {
@@ -343,9 +341,13 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var via = '<span style="font-style: italic;">Mobile</span>';
} else {
var via = '';
viashow = "via-hide";
}
} else {
var via = toot.app.name;
var via = escapeHTML(toot.app.name);
if (!toot.app.name) {
viashow = "via-hide";
}
//強調チェック
Object.keys(emp).forEach(function (key6) {
var cli = emp[key6];
@@ -514,7 +516,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
mentions = '<div style="float:right"><a onclick="udg(\'' + menck.user.id + '\',' +
acct_id + ')" class="pointer">@' + menck.user.username + '</a></div>';
}
var tagck = toot.tags[0];
var tagck = toot.tags;
var tags = "";
//タグであれば
if (tagck) {
@@ -588,7 +590,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
} else {
var word = worde
}
var regExp = new RegExp( word, "g" ) ;
var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
if ($.strip_tagstemp(content).match(regExp)) {
boostback = "hide by_filter";
}
@@ -601,7 +603,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var word = wordemp[key9];
if (word) {
var word = word.tag;
var regExp = new RegExp( word, "g" ) ;
var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
content = content.replace(regExp, '<span class="emp">' + word + "</span>");
}
});
@@ -649,10 +651,10 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var freeReact = "";
}
//Reactions
if(toot.reactionCounts){
var addReact = "";
Object.keys(toot.reactionCounts).forEach(function(keye) {
var thisReact=toot.reactionCounts[keye];
if (toot.reactions) {
Object.keys(toot.reactions).forEach(function (keye) {
var thisReact = toot.reactions[keye];
if (keye == "like") { var defaultEmoji = true; }
else if (keye == "love") { var defaultEmoji = true; }
else if (keye == "laugh") { var defaultEmoji = true; }
@@ -661,7 +663,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
else if (keye == "congrats") { var defaultEmoji = true; }
else if (keye == "angry") { var defaultEmoji = true; }
else if (keye == "confused") { var defaultEmoji = true; }
else if(keye=="pudding"){ var defaultEmoji=true; }
else if (keye == "star") { var defaultEmoji = true; }
else {
var obj = JSON.parse(localStorage.getItem("emoji_" + acct_id));
if (obj) {
@@ -680,76 +682,76 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
}
}
});
if(toot.reactionCounts.like){
var like=toot.reactionCounts.like;
if (toot.reactions.like) {
var like = toot.reactions.like;
var likehide = "";
} else {
var like = 0;
var likehide = "hide";
}
if(toot.reactionCounts.love){
var love=toot.reactionCounts.love;
if (toot.reactions.love) {
var love = toot.reactions.love;
var lovehide = "";
} else {
var love = 0;
var lovehide = "hide";
}
if(toot.reactionCounts.laugh){
var laugh=toot.reactionCounts.laugh;
if (toot.reactions.laugh) {
var laugh = toot.reactions.laugh;
var laughhide = "";
} else {
var laugh = 0;
var laughhide = "hide";
}
if(toot.reactionCounts.hmm){
var hmm=toot.reactionCounts.hmm;
if (toot.reactions.hmm) {
var hmm = toot.reactions.hmm;
var hmmhide = "";
} else {
var hmm = 0;
var hmmhide = "hide";
}
if(toot.reactionCounts.surprise){
var surprise=toot.reactionCounts.surprise;
if (toot.reactions.surprise) {
var surprise = toot.reactions.surprise;
var suphide = "";
} else {
var suphide = "hide";
var surprise = 0;
}
if(toot.reactionCounts.congrats){
var congrats=toot.reactionCounts.congrats;
if (toot.reactions.congrats) {
var congrats = toot.reactions.congrats;
var conghide = "";
} else {
var congrats = 0;
var conghide = "hide";
}
if(toot.reactionCounts.angry){
var angry=toot.reactionCounts.angry;
if (toot.reactions.angry) {
var angry = toot.reactions.angry;
var anghide = "";
} else {
var angry = 0;
var anghide = "hide";
}
if(toot.reactionCounts.confused){
if (toot.reactions.confused) {
var confhide = "";
var confused=toot.reactionCounts.confused;
var confused = toot.reactions.confused;
} else {
var confused = 0;
var confhide = "hide";
}
if(toot.reactionCounts.pudding){
var pudding=toot.reactionCounts.pudding;
var pudhide="";
if (toot.reactions.rip) {
var riphide = "";
var rip = toot.reactions.rip;
} else {
var pudding=0;
var pudhide="hide";
var rip = 0;
var riphide = "hide";
}
var fullhide = "";
} else {
var like = 0; var love = 0; var laugh = 0; var hmm = 0; var surprise = 0; var congrats = 0; var angry = 0; var confused = 0; var pudding = 0;
var likehide="hide";var lovehide="hide";var laughhide="hide";var hmmhide="hide";var suphide="hide";var conghide="hide";var anghide="hide";var confhide="hide";var pudhide="hide";
var likehide = "hide"; var lovehide = "hide"; var laughhide = "hide"; var hmmhide = "hide"; var suphide = "hide"; var conghide = "hide"; var anghide = "hide"; var confhide = "hide"; var riphide = "hide"
var fullhide = "hide";
}
if(!addReact && likehide=="hide"&& lovehide=="hide"&& laughhide=="hide"&& hmmhide=="hide"&& suphide=="hide"&& conghide=="hide"&& anghide=="hide"&& confhide=="hide"&& pudhide=="hide"){
if (!addReact && likehide == "hide" && lovehide == "hide" && laughhide == "hide" && hmmhide == "hide" && suphide == "hide" && conghide == "hide" && anghide == "hide" && confhide == "hide" && riphide == "hide") {
var fullhide = "hide";
}
if (toot.myReaction) {
@@ -808,8 +810,8 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
',\'' + tlid + '\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">' + twemoji.parse("💢") + '</a><span class="re-angryct">' + angry +
'</span></span><span class="' + confhide + ' reaction re-confused"><a onclick="reaction(\'confused\',\'' + toot.id + '\',' + acct_id +
',\'' + tlid + '\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">' + twemoji.parse("😥") + '</a><span class="re-confusedct">' + confused +
'</span></span><span class="'+pudhide+' reaction re-pudding"><a onclick="reaction(\'pudding\',\'' + toot.id + '\',' + acct_id +
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("🍮")+'</a><span class="re-puddingct">'+pudding+
'</span></span><span class="' + riphide + ' reaction re-confused"><a onclick="reaction(\'confused\',\'' + toot.id + '\',' + acct_id +
',\'' + tlid + '\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">' + twemoji.parse("😇") + '</a><span class="re-confusedct">' + rip +
'</span></span>' + addReact +
'<i class="material-icons pointer hide freeReact ' + freeReact + '" style="font-size:1.0rem; padding-left:5px;position: relative;top: 3px;" onclick="reactioncustom(\'' + acct_id + '\',\'' + id + '\')">add_box</i></div>'
+ poll + mentions + tags + '</div>' +
@@ -841,7 +843,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="' + lang.lang_parse_redraft + '"><i class="material-icons">redo</i></a></div>' + trans +
'<span class="cbadge viabadge waves-effect ' + viashow + ' ' + mine_via + '" onclick="client(\'' + $.strip_tagstemp(via) + '\')" title="via ' + $.strip_tagstemp(via) + '">via ' +
escapeHTML(via) +
via +
'</span>' +
'</div><div class="area-side ' + mouseover + '"><div class="action ' + if_mine + ' ' + noauth + '"><a onclick="toggleAction(\'' + toot.id + '\',\'' + tlid + '\',\'' + acct_id + '\')" class="waves-effect waves-dark btn-flat" style="padding:0"><i class="text-darken-3 material-icons act-icon">expand_more</i></a></div>' +
'<div class="action ' + noauth + '"><a onclick="details(\'' + toot.id + '\',' + acct_id +
@@ -854,15 +856,23 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
//オブジェクトパーサー(ユーザーデータ)
function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
console.log(["Parse them ", obj])
if (popup > 0 || popup == -1) {
} else {
if (obj.users) {
var obj = obj.users;
}
}
var templete = '';
var datetype = localStorage.getItem("datetype");
Object.keys(obj).forEach(function (key) {
var toot = obj[key];
if (toot.followee) {
toot = toot.followee
} else if (toot.follower) {
toot = toot.follower
}
var locked = "";
if (auth) {
var auth = '<i class="material-icons gray pointer" onclick="misskeyRequest(\'' +
@@ -882,7 +892,7 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
}
var memory = localStorage.getItem("notice-mem");
if (popup >= 0 && obj.length < 5 && notftext != memory) {
Materialize.toast(escapeHTMLtemp(toot.name)+":"+ftxt, popup * 1000);
M.toast({ html: escapeHTMLtemp(toot.name) + ":" + ftxt, displayLength: popup * 1000 })
$(".notf-icon_" + tlid).addClass("red-text");
localStorage.setItem("notice-mem", notftext);
notftext = "";
@@ -891,9 +901,7 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
native = "yes";
}
if (native == "yes") {
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var os = localStorage.getItem("platform");
var options = {
body: toot.display_name + "(" + toot.acct + ")" + ftxt,
icon: toot.avatar
@@ -902,14 +910,15 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
if (os == "darwin") {
var n = new Notification('TheDesk:' + domain, options);
} else {
ipc.send('native-notf', [
var nativeNotfOpt=[
'TheDesk:' + domain,
toot.display_name + "(" + toot.acct + ")" + ftxt,
toot.avatar,
"userdata",
acct_id,
toot.id
]);
]
postMessage(["nativeNotf", nativeNotfOpt], "*")
}
}
}
@@ -919,6 +928,16 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
} else {
var dis_name = toot.username;
}
if (toot.followersCount) {
var ferct = toot.followersCount
} else {
var ferct = "unknown"
}
if (toot.followingCount) {
var fingct = toot.followingCount
} else {
var fingct = "unknown"
}
templete = templete +
'<div class="cvo" style="padding-top:5px;" user-id="' + toot.id + '"><div class="area-notice">' +
notftext +
@@ -933,8 +952,8 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
'</div>' +
'</div>' +
'<div style="justify-content:space-around" class="area-toot"> <div class="cbadge" style="width:100px;">Follows:' +
toot.followingCount +
'</div><div class="cbadge" style="width:100px;">Followers:' + toot.followersCount +
fingct +
'</div><div class="cbadge" style="width:100px;">Followers:' + ferct +
'</div>' +
'</div>' +
'</div>' +
@@ -946,9 +965,102 @@ function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
function goGoogle(id) {
var val = $("#srcbox_" + id).val();
var url = "https://google.com/search?q=" + val;
const {
shell
} = require('electron');
shell.openExternal(url);
postMessage(["openUrl", url], "*")
}
var misskeyws = []
var misskeywsstate = []
function connectMisskey(acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "wss://" + domain +
"/streaming?i=" + at;
var wsid = misskeyws.length;
localStorage.setItem("misskey_wss_" + acct_id, wsid);
misskeyws[wsid] = new WebSocket(start);
misskeyws[wsid].onopen = function (mess) {
console.table({ "tlid": tlid, "type": "Connect Streaming API", "domain": domain, "message": [mess] })
misskeywsstate[wsid] = true
//$("#notice_icon_" + tlid).removeClass("red-text");
var send = '{"type":"connect","body":{"channel":"main","id":"notf:' + acct_id + '"}}'
misskeyws[wsid].send(send)
}
misskeyws[wsid].onmessage = function (mess) {
console.log([domain + ":Receive Streaming API:", data]);
var data = JSON.parse(mess.data)
var obj = data.body.body
if (data.body.id.indexOf("notf:") !== -1) {
var obj = JSON.parse(mess.data).body;
console.log(obj);
var popup = localStorage.getItem("popup");
if (!popup) {
popup = 0;
}
if (JSON.parse(mess.data).body.type != "follow") {
templete = misskeyParse([obj.body], 'notf', acct_id, 'notf', popup);
} else {
templete = misskeyUserparse([obj.body], 'notf', acct_id, 'notf', popup);
}
if (JSON.parse(mess.data).body.type == "reaction") {
console.log("reaction refresh")
reactRefresh(acct_id, obj.body.note.id)
}
if (!$("div[data-notfIndv=" + acct_id + "_" + obj.body.id + "]").length) {
$("div[data-notf=" + acct_id + "]").prepend(templete);
$("div[data-const=notf_" + acct_id + "]").prepend(templete);
}
jQuery("time.timeago").timeago();
} else if (data.body.type == "note") {
var tlid = data.body.id * 1
var multi = localStorage.getItem("column");
var col = JSON.parse(multi)[tlid];
if (localStorage.getItem("voice_" + tlid)) {
var voice = true;
} else {
var voice = false;
}
if (voice) {
say(obj.text)
}
var templete = misskeyParse([obj], col.type, acct_id, tlid, "", mute);
misskeyws[wsid].send(JSON.stringify({
type: 'sn',
body: {
id: obj.id
}
}))
var pool = localStorage.getItem("pool_" + tlid);
if (pool) {
pool = templete + pool;
} else {
pool = templete
}
localStorage.setItem("pool_" + tlid, pool);
scrollck();
jQuery("time.timeago").timeago();
} else if (data.type == "noteUpdated") {
if (data.body.type == "reacted") {
reactRefresh(acct_id, data.body.id)
} else if (data.body.type == "deleted") {
$("#pub_" + data.body.id).hide();
$("#pub_" + data.body.id).remove();
}
}
}
misskeyws[wsid].onerror = function (error) {
console.error("Error closing " + tlid);
console.error(error);
misskeywsstate[wsid] = false
connectMisskey(acct_id)
return false;
};
misskeyws[wsid].onclose = function () {
console.warn("Closing " + tlid);
misskeywsstate[wsid] = false
connectMisskey(acct_id)
return false;
};
}

View File

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

View File

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

View File

@@ -3,7 +3,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var templete = '';
if (obj[0]) {
if (tlid === 1) {
console.log("testalive:"+"lastunix_"+ tlid+":"+date(obj[0].created_at, 'unix'))
}
localStorage.setItem("lastunix_" + tlid, date(obj[0].created_at, 'unix'));
}
@@ -235,7 +235,13 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var what = lang.lang_parse_polled;
var icon = "fa-tasks purple-text";
}
var noticetext = '<span class="cbadge cbadge-hover"title="' + date(toot.created_at,
if (tlid == "notf") {
var notfFilHide = "hide"
} else {
var notfFilHide = ""
}
var noticetext = '<i class="fas fa-filter pointer big-text ' + notfFilHide + '" onclick="notfFilter(\'' + toot.account.id +
'\',\'' + tlid + '\');" title="' + lang.lang_parse_notffilter + '"></i><span class="cbadge cbadge-hover"title="' + date(toot.created_at,
'absolute') + '(' + lang.lang_parse_notftime + ')"><i class="far fa-clock"></i>' + date(toot.created_at,
datetype) +
'</span><i class="big-text fas ' + icon + '"></i><a onclick="udg(\'' + toot.account.id +
@@ -278,7 +284,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var domain = localStorage.getItem("domain_" + acct_id);
if (popup > 0) {
Materialize.toast("["+domain+"]"+escapeHTML(toot.account.display_name)+what, popup * 1000);
M.toast({ html: "[" + domain + "]" + escapeHTML(toot.account.display_name) + what, displayLength: popup * 1000 })
}
//通知音
if (sound == "c1") {
@@ -298,9 +304,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
request.send();
}
if (native == "yes") {
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var os = localStorage.getItem("platform");
var options = {
body: toot.account.display_name + "(" + toot.account.acct + ")" + what + "\n\n" + $.strip_tags(toot.status.content),
icon: toot.account.avatar
@@ -308,14 +312,15 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
if (os == "darwin") {
var n = new Notification('TheDesk:' + domain, options);
} else {
ipc.send('native-notf', [
var nativeNotfOpt = [
'TheDesk:' + domain,
toot.account.display_name + "(" + toot.account.acct + ")" + what + "\n\n" + $.strip_tags(toot.status.content),
toot.account.avatar,
"toot",
acct_id,
toot.status.id
]);
]
postMessage(["nativeNotf", nativeNotfOpt], "*")
}
}
if (localStorage.getItem("hasNotfC_" + acct_id) != "true") {
@@ -488,6 +493,9 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
if (toot.poll.voted) {
var myvote = lang.lang_parse_voted;
var result_hide = "";
} else if (toot.poll.expired) {
var myvote = lang.lang_parse_endedvote;
var result_hide = "";
} else {
var myvote = '<a onclick="voteMastodon(\'' + acct_id + '\',\'' + toot.poll.id + '\')" class="votebtn">' + lang.lang_parse_vote + '</a><br>';
if (choices[0].votes_count === 0 || choices[0].votes_count > 0) {
@@ -495,11 +503,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
}
var result_hide = "hide";
}
if(toot.poll.expired){
var ended=lang.lang_parse_endedvote;
}else{
var ended = date(toot.poll.expires_at, datetype);
}
Object.keys(choices).forEach(function (keyc) {
var choice = choices[keyc];
if (!toot.poll.voted && !toot.poll.expired) {
@@ -580,16 +584,37 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var purl = media.preview_url;
media_ids = media_ids + media.id + ",";
var url = media.url;
var nsfwmes = ""
if (toot.sensitive && nsfw) {
var sense = "sensitive"
} else {
var blur = media.blurhash
if (blur) {
nsfwmes = '<div class="nsfw-media">' + lang.lang_parse_nsfw + '</div>'
purl = parseBlur(blur)
var sense = ""
}
} else {
var sense = ""
var blur = null
}
if (media.pleroma && media.pleroma.mime_type.indexOf("video") !== -1) {
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',' +
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
'" data-type="video" class="img-parsed"><video src="' +
purl + '" class="' + sense +
' toot-img pointer" style="max-width:100%;"></a></span>';
} else {
if (media.type == "unknown") {
viewer = viewer + '<a href="' + media.remote_url + '" title="' + media.remote_url + '">[' + lang.lang_parse_unknown + ']</a> '
} else {
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',\'' +
acct_id + '\')" id="' + id + '-image-' + key2 + '" data-url="' + url +
'" data-type="' + media.type + '" class="img-parsed"><img draggable="false" src="' +
'" data-type="' + media.type + '" class="img-parsed img-link" style="width:calc(' + cwdt + '% - 1px); height:' + imh + ';"><img draggable="false" src="' +
purl + '" class="' + sense +
' toot-img pointer" style="width:calc(' + cwdt + '% - 1px); height:'+imh+';"></a></span>';
' toot-img pointer">' + nsfwmes + '</a>';
}
}
});
media_ids = media_ids.slice(0, -1);
} else {
@@ -687,7 +712,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
}
if (toot.pinned) {
var if_pin = "blue-text";
var pin_app = "pinned";
var pin_app = "pinnedToot";
} else {
var if_pin = "";
var pin_app = "";
@@ -708,7 +733,8 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
} else {
var word = worde
}
var regExp = new RegExp( word, "g" ) ;
var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
console.log(regExp)
if ($.strip_tags(content).match(regExp)) {
boostback = "hide by_filter";
}
@@ -721,7 +747,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
var word = wordemp[key9];
if (word) {
var word = word.tag;
var regExp = new RegExp( word, "g" ) ;
var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
content = content.replace(regExp, '<span class="emp">' + word + "</span>");
}
});
@@ -863,6 +889,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
var datetype = localStorage.getItem("datetype");
Object.keys(obj).forEach(function (key) {
var toot = obj[key];
console.log(["Parsing", toot])
if (!toot.username) {
var raw = toot;
toot = toot.account;
@@ -875,11 +902,12 @@ function userparse(obj, auth, acct_id, tlid, popup) {
} else {
var locked = "";
}
if (auth) {
var auth = '<i class="material-icons gray pointer" onclick="request(\'' +
toot.id + '\',\'authorize\',' + acct_id + ')">person_add</i>';
if (auth == "request") {
var authhtml = '<i class="material-icons gray pointer" onclick="request(\'' +
toot.id + '\',\'authorize\',' + acct_id + ')" title="Accept">person_add</i> <i class="material-icons gray pointer" onclick="request(\'' +
toot.id + '\',\'reject\',' + acct_id + ')" title="Reject">person_add_disabled</i>';
} else {
var auth = "";
var authhtml = "";
}
var ftxt = lang.lang_parse_followed;
if (!locale && localStorage.getItem("followlocale_" + acct_id)) {
@@ -892,7 +920,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
}
var memory = localStorage.getItem("notice-mem");
if (popup >= 0 && obj.length < 5 && notftext != memory) {
Materialize.toast(escapeHTML(toot.display_name)+":"+ftxt, popup * 1000);
M.toast({ html: escapeHTML(toot.display_name) + ":" + ftxt, displayLength: popup * 1000 })
$(".notf-icon_" + tlid).addClass("red-text");
localStorage.setItem("notice-mem", notftext);
notftext = "";
@@ -901,9 +929,7 @@ function userparse(obj, auth, acct_id, tlid, popup) {
native = "yes";
}
if (native == "yes") {
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var os = localStorage.getItem("platform");
var options = {
body: toot.display_name + "(" + toot.acct + ")" + ftxt,
icon: toot.avatar
@@ -912,14 +938,15 @@ function userparse(obj, auth, acct_id, tlid, popup) {
if (os == "darwin") {
var n = new Notification('TheDesk:' + domain, options);
} else {
ipc.send('native-notf', [
var nativeNotfOpt = [
'TheDesk:' + domain,
toot.display_name + "(" + toot.acct + ")" + ftxt,
toot.avatar,
"userdata",
acct_id,
toot.id
]);
]
postMessage(["nativeNotf", nativeNotfOpt], "*")
}
}
}
@@ -965,13 +992,13 @@ function userparse(obj, auth, acct_id, tlid, popup) {
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
dis_name + '</span>' +
'<span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
toot.acct + locked + auth +'</span>' +
toot.acct + locked + '</span>' +
'</div>' +
'</div>' +
'<div style="justify-content:space-around" class="area-toot"> <div class="cbadge" style="width:100px;">Follows:' +
toot.following_count +
'</div><div class="cbadge" style="width:100px;">Followers:' + toot.followers_count +
'</div>' +
'</div>' + authhtml +
'</div>' +
'</div>' +
'</div>';
@@ -983,60 +1010,13 @@ function userparse(obj, auth, acct_id, tlid, popup) {
function client(name) {
if (name != "Unknown") {
//聞く
localStorage.removeItem("client_mute");
var electron = require("electron");
var remote=electron.remote;
var dialog=remote.dialog;
const options = {
type: 'info',
title: lang.lang_parse_clientop,
message: name + lang.lang_parse_clienttxt,
buttons: [lang.lang_parse_clientno, lang.lang_parse_clientemp, lang.lang_parse_clientmute]
}
dialog.showMessageBox(options, function(arg) {
if(arg===1){
var cli = localStorage.getItem("client_emp");
var obj = JSON.parse(cli);
if(!obj){
var obj=[];
obj.push(name);
Materialize.toast(escapeHTML(name)+lang.lang_status_emphas, 2000);
}else{
var can;
Object.keys(obj).forEach(function(key) {
var cliT = obj[key];
if(cliT!=name && !can){
can=false;
}else{
can=true;
obj.splice(key, 1);
Materialize.toast(escapeHTML(name)+lang.lang_status_unemphas, 2000);
}
});
if(!can){
obj.push(name);
Materialize.toast(escapeHTML(name)+lang.lang_status_emphas, 2000);
}else{
}
}
var json = JSON.stringify(obj);
localStorage.setItem("client_emp", json);
}else if(arg===2){
var cli = localStorage.getItem("client_mute");
var obj = JSON.parse(cli);
if(!obj){
var obj=[];
}
obj.push(name);
var json = JSON.stringify(obj);
localStorage.setItem("client_mute", json);
Materialize.toast(escapeHTML(name)+lang.lang_parse_mute, 2000);
}else{
return;
}
parseColumn();
})
postMessage(["dialogClient", options], "*")
}
}

View File

@@ -25,13 +25,12 @@ function pollCalc(){
var days = $("#days_poll").val();
var hrs = $("#hours_poll").val();
var mins = $("#mins_poll").val();
console.log(days*86400+hrs*3600+mins*60)
console.log("Poll calc:" + days * 86400 + hrs * 3600 + mins * 60)
return days * 86400 + hrs * 3600 + mins * 60;
}
//Vote
function voteSelMastodon(acct_id, id, to, mul) {
console.log('.vote_'+acct_id+'_'+id+'_'+to);
if ($('.vote_' + acct_id + '_' + id + '_' + to).hasClass("sel")) {
$('.vote_' + acct_id + '_' + id + '_' + to).css("background-color", "transparent")
$('.vote_' + acct_id + '_' + id + '_' + to).removeClass("sel");
@@ -95,7 +94,7 @@ function voteMastodonrefresh(acct_id,id){
httpreqd.onreadystatechange = function () {
if (httpreqd.readyState == 4) {
var json = httpreqd.response;
console.log(json);
console.log(["Refresh vote", json]);
if (!json) {
return false;
}

View File

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

View File

@@ -31,7 +31,7 @@ function src(mode) {
} else {
var start = "https://" + domain + "/api/v1/search?q=" + q
}
console.log(start)
console.log("Try to search at " + start)
fetch(start, {
method: 'GET',
headers: {
@@ -44,7 +44,7 @@ function src(mode) {
src("v1")
return false;
}).then(function (json) {
console.log(json);
console.log(["Search", json]);
//ハッシュタグ
if (json.hashtags[0]) {
var tags = "";
@@ -83,14 +83,13 @@ function tsAdd(q){
var obj = JSON.parse(multi);
localStorage.setItem("card_" + obj.length, "true");
obj.push(add);
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
parseColumn();
}
function tootsearch(tlid, q) {
var start = "https://tootsearch.chotto.moe/api/v1/search?from=0&sort=created_at%3Adesc&q=" + q
console.log(start)
console.log("Toot srrach at " + start)
$("#notice_" + tlid).text("tootsearch(" + q + ")");
$("#notice_icon_" + tlid).text("search");
fetch(start, {
@@ -106,13 +105,10 @@ function tootsearch(tlid,q){
}).then(function (raw) {
var templete = "";
var json = raw.hits.hits;
console.log(json);
var max_id = raw["hits"].length;
for (var i = 0; i < json.length; i++) {
var toot = json[i]["_source"];
console.log(lastid)
if (lastid != toot.uri) {
console.log(toot);
if (toot && toot.account) {
templete = templete + parse([toot], "noauth", null, tlid, 0, [], "tootsearch")
}
@@ -133,7 +129,6 @@ function moreTs(tlid,q){
var sid = $("#timeline_" + tlid + " .ts-marker").last().attr("data-maxid");
moreloading = true;
var start = "https://tootsearch.chotto.moe/api/v1/search?from=" + sid + "&sort=created_at%3Adesc&q=" + q
console.log(start)
$("#notice_" + tlid).text("tootsearch(" + q + ")");
$("#notice_icon_" + tlid).text("search");
fetch(start, {
@@ -149,13 +144,10 @@ function moreTs(tlid,q){
}).then(function (raw) {
var templete = "";
var json = raw.hits.hits;
console.log(json);
var max_id = raw["hits"].length;
for (var i = 0; i < json.length; i++) {
var toot = json[i]["_source"];
console.log(lastid)
if (lastid != toot.uri) {
console.log(toot);
if (toot && toot.account) {
templete = templete + parse([toot], "noauth", null, tlid, 0, [], "tootsearch")
}
@@ -175,7 +167,6 @@ function moreTs(tlid,q){
function graphDraw(tag) {
var tags = "";
var his = tag.history;
console.log(his);
var max = Math.max.apply(null, [his[0].uses, his[1].uses, his[2].uses, his[3].uses, his[4].uses, his[5].uses, his[6].uses]);
var six = 50 - (his[6].uses / max * 50);
var five = 50 - (his[5].uses / max * 50);

View File

@@ -58,7 +58,7 @@ function favTag(){
Object.keys(obj).forEach(function (key) {
var tag = obj[key];
if (nowPT != tag) {
console.log(nowPT+"/"+tag);
console.log("stable tags:" + nowPT + "/" + tag);
var ptt = lang.lang_tags_realtime;
var nowon = "";
} else {
@@ -80,7 +80,6 @@ function trendTag(){
var domain = "imastodon.net"
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/v1/trend_tags"
console.log(start)
fetch(start, {
method: 'GET',
headers: {
@@ -121,10 +120,10 @@ function autoToot(tag){
var nowPT = localStorage.getItem("stable")
if (nowPT == tag) {
localStorage.removeItem("stable");
Materialize.toast(lang.lang_tags_unrealtime,3000);
M.toast({ html: lang.lang_tags_unrealtime, displayLength: 3000 })
} else {
localStorage.setItem("stable", tag);
Materialize.toast(lang.lang_tags_tagwarn.replace("{{tag}}" ,tag).replace("{{tag}}" ,tag),3000);
M.toast({ html: lang.lang_tags_tagwarn.replace("{{tag}}", tag).replace("{{tag}}", tag), displayLength: 3000 })
brInsert('#' + tag + " ")
}
favTag();

View File

@@ -7,7 +7,7 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
var domain = localStorage.getItem("domain_" + acct_id);
//タグとかの場合はカラム追加して描画
if (tlid == "add") {
console.log("add");
console.log("add new column");
var newtab = $(".box").length;
var add = {
domain: acct_id,
@@ -18,7 +18,6 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
var obj = JSON.parse(multi);
localStorage.setItem("card_" + obj.length, "true");
obj.push(add);
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
parseColumn();
@@ -125,14 +124,14 @@ function tl(type, data, acct_id, tlid, delc, voice, mode) {
};
}
console.log(start);
console.log(["Try to get timeline of " + tlid, start])
fetch(start, i).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json)
console.log(["Result of getting timeline of " + tlid, json])
$("#landing_" + tlid).hide();
if (localStorage.getItem("filter_" + acct_id) != "undefined") {
var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), type);
@@ -164,34 +163,14 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
localStorage.setItem("now", type);
if (localStorage.getItem("mode_" + domain) == "misskey") {
var misskey = true;
console.log(type);
if (type == "home") {
var start = "wss://" + domain +
"/?i=" + at;
} else if (type == "pub") {
var start = "wss://" + domain +
"/global-timeline?i=" + at;
} else if (type == "pub-media") {
var start = "wss://" + domain +
"/global-timeline?i=" + at;
} else if (type == "local") {
var start = "wss://" + domain +
"/local-timeline?i=" + at;
} else if (type == "local-media") {
var start = "wss://" + domain +
"/local-timeline?i=" + at;
} else if (type == "mix") {
var start = "wss://" + domain +
"/hybrid-timeline?i=" + at;
} else if (type == "tag") {
Materialize.toast(lang.lang_misskeyparse_tagnostr, 3000);
} else if (type == "noauth") {
var start = "wss://" + acct_id +
"/local-timeline?i=" + at;
} else if (type=="list"){
var start = "wss://" + domain +
"/user-list?i=" + at+"&listId="+data;
var key = localStorage.getItem("misskey_wss_" + acct_id)
var send = '{"type":"connect","body":{"channel":"' + typePs(type) + '","id":"' + tlid + '"}}'
var mskyset = setInterval(function () {
if (misskeywsstate[key]) {
misskeyws[key].send(send)
clearInterval(mskyset)
}
}, 100);
} else {
var misskey = false;
if (localStorage.getItem("streaming_" + acct_id)) {
@@ -233,20 +212,15 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
var start = wss +
"/api/v1/streaming/?stream=direct&access_token=" + at;
}
}
console.log(start);
var wsid = websocket.length;
localStorage.setItem("wss_" + tlid, wsid);
websocket[wsid] = new WebSocket(start);
websocket[wsid].onopen = function (mess) {
console.log(tlid + ":Connect Streaming API:" + type);
console.log(mess);
console.table({ "tlid": tlid, "type": "Connect Streaming API" + type, "domain": domain, "message": [mess] })
$("#notice_icon_" + tlid).removeClass("red-text");
}
websocket[wsid].onmessage = function (mess) {
console.log(tlid + ":Receive Streaming API:");
console.log(JSON.parse(mess.data));
console.log([tlid + ":Receive Streaming API:", JSON.parse(mess.data)]);
if (misskey) {
if (JSON.parse(mess.data).type == "note") {
var obj = JSON.parse(mess.data).body;
@@ -289,7 +263,6 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
} else if (typeA == "update" || typeA == "conversation") {
localStorage.removeItem("delete");
var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
if ($("#timeline_" + tlid + " [toot-id=" + obj.id + "]").length < 1) {
if (voice) {
say(obj.content)
@@ -337,8 +310,7 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
return false;
};
websocket[wsid].onclose = function () {
console.log("Closing");
console.log(tlid);
console.warn("Closing " + tlid);
if (mode == "error") {
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Closed');
@@ -351,7 +323,7 @@ function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
}
return false;
};
}
}
//一定のスクロールで発火
@@ -453,7 +425,6 @@ function moreload(type, tlid) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
if (misskey) {
var templete = misskeyParse(json, '', acct_id, tlid, "", mute);
} else {
@@ -469,7 +440,7 @@ function moreload(type, tlid) {
}
//TL差分取得
function tlDiff(type, data, acct_id, tlid, delc, voice, mode) {
console.log("sabun")
console.log("Get diff of TL" + tlid)
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
var acct_id = obj[tlid].domain;
@@ -562,7 +533,7 @@ function tlDiff(type, data, acct_id, tlid, delc, voice, mode) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
console.log(["Result diff of TL" + tlid, json]);
if (misskey) {
var templete = misskeyParse(json, '', acct_id, tlid, "", mute);
} else {
@@ -586,12 +557,12 @@ function tlCloser() {
Object.keys(websocket).forEach(function (tlid) {
if (websocketOld[tlid]) {
websocketOld[tlid].close();
console.log("Close Streaming API: Old" + tlid);
console.log("%c Close Streaming API: Old" + tlid, "color:blue");
}
if (websocket[0]) {
console.log(websocket[0]);
websocket[tlid].close();
console.log("Close Streaming API:" + tlid);
console.log("%c Close Streaming API:" + tlid, "color:blue");
}
});
@@ -599,7 +570,7 @@ function tlCloser() {
Object.keys(websocketHome).forEach(function (tlid) {
if (websocketHome[tlid]) {
websocketHome[tlid].close();
console.log("Close Streaming API:MixHome" + tlid);
console.log("%c Close Streaming API:Integrated Home" + tlid, "color:blue");
}
});
@@ -607,7 +578,7 @@ function tlCloser() {
Object.keys(websocketLocal).forEach(function (tlid) {
if (websocketLocal[tlid]) {
websocketLocal[tlid].close();
console.log("Close Streaming API:MixLocal" + tlid);
console.log("%c Close Streaming API:Integrated Local" + tlid, "color:blue");
}
});
@@ -615,11 +586,17 @@ function tlCloser() {
Object.keys(websocketNotf).forEach(function (tlid) {
if (websocketNotf[tlid]) {
websocketNotf[tlid].close();
console.log("Close Streaming API:Notf" + tlid);
console.log("%c Close Streaming API:Notf" + tlid, "color:blue");
}
});
websocketNotf = [];
Object.keys(misskeyws).forEach(function (tlid) {
if (misskeyws[tlid]) {
misskeyws[tlid].close();
console.log("%c Close Streaming API:Misskey" + tlid, "color:blue");
}
});
misskeyws = {}
}
//TLのタイトル
@@ -710,6 +687,24 @@ function com(type, data) {
return "direct?"
}
}
//Misskey
function typePs(type) {
if (type == "home") {
return "homeTimeline"
} else if (type == "local" || type == "noauth") {
return "localTimeline"
} else if (type == "local-media") {
return "localTimeline"
} else if (type == "pub") {
return "globalTimeline"
} else if (type == "mix") {
return "hybridTimeline"
} else if (type == "tag") {
return "hashtag"
} else if (type == "list") {
return "userList"
}
}
function misskeycom(type, data) {
if (type == "home") {
return "timeline"
@@ -787,7 +782,7 @@ function strAliveInt(){
setTimeout(strAlive, 10000);
}
function reconnector(tlid, type, acct_id, data, mode) {
console.log("Reconnector:"+mode)
console.log("%c Reconnector:" + mode + "(timeline" + tlid + ")", "color:pink")
if (type == "mix" || type == "integrated" || type == "plus") {
if (localStorage.getItem("voice_" + tlid)) {
var voice = true;
@@ -821,6 +816,7 @@ function reconnector(tlid,type,acct_id,data,mode){
}
reload(type, '', acct_id, tlid, data, mute, "", voice, mode);
}
Materialize.toast(lang.lang_tl_reconnect, 2000);
M.toast({ html: lang.lang_tl_reconnect, displayLength: 2000 })
}
strAliveInt()

View File

@@ -59,7 +59,6 @@ function imgv(id, key, acct_id) {
$("#imagemodal").css("width", width + "px")
}
} else {
console.log("long")
$("#imagemodal img").css("width", "auto")
var widthS = windowH / height * width;
if (widthS < windowW) {
@@ -149,7 +148,6 @@ function imgCont(type) {
$("#imagemodal").css("width", width + "px")
}
} else {
console.log("long")
$("#imagemodal img").css("width", "auto")
var widthS = windowH / height * width;
if (widthS < windowW) {
@@ -167,7 +165,6 @@ function imgCont(type) {
} else {
$("#image-next").prop("disabled", false);
}
console.log("#" + id + "-image-" + (key * 1 - 1));
if ($("#" + id + "-image-" + (key * 1 - 1)).length === 0) {
$("#image-prev").prop("disabled", true);
} else {
@@ -231,7 +228,6 @@ function zoom(z) {
$(this).on('touchmove', function (event) {
if ($(target).data('down') === true) {
// スクロール
console.log($(target).data('x'));
target.scrollLeft($(target).data('scrollLeft') + $(target).data('x') -
getX(event));
target.scrollTop($(target).data('scrollTop') + $(target).data('y') -
@@ -275,22 +271,14 @@ function detFromImg(){
//画像保存
function dlImg() {
var url = $("#imgmodal").attr("src");
var electron = require("electron");
var ipc = electron.ipcRenderer;
if (localStorage.getItem("savefolder")) {
var save = localStorage.getItem("savefolder");
} else {
var save = "";
}
ipc.send('general-dl', [url,save,false]);
ipc.on('general-dl-prog', function (event, arg) {
console.log(arg);
})
ipc.on('general-dl-message', function (event, arg) {
var argC=arg.replace(/\\/g,"\\\\")+"\\\\.";
Materialize.toast(lang.lang_img_DLDone+arg+'<button class="btn-flat toast-action" onclick="openFinder(\''+argC+'\')">Show</button>', 5000);
})
postMessage(["generalDL", [url, save, false]], "*")
}
function openFinder(dir) {
ipc.send('open-finder', dir);
postMessage(["openFinder", dir], "*")
}

View File

@@ -20,8 +20,8 @@ $('.type').click(function() {
$("#type-sel").val($(this).attr("data-type"))
})
//最初、カラム変更時に発火
function parseColumn() {
console.log("parse");
function parseColumn(dontclose) {
console.log("%c Parse column", "color:red;font-size:125%");
var size = localStorage.getItem("size");
if (size) {
$("#timeline-container").css("font-size", size + "px");
@@ -31,7 +31,10 @@ function parseColumn() {
if (localStorage.getItem("menu-done")) {
$("#fukidashi").addClass("hide")
}
if (!dontclose) {
tlCloser();
}
var multi = localStorage.getItem("multi");
if (multi) {
var obj = JSON.parse(multi);
@@ -49,10 +52,15 @@ function parseColumn() {
ckdb(key);
//フィルターデータ読もう
getFilter(key);
var domain = localStorage.getItem("domain_" + key);
if (localStorage.getItem("mode_" + domain) == "misskey") {
localStorage.removeItem("misskey_wss_" + key)
connectMisskey(key)
}
});
}
var acctlist = obj;
console.log(obj);
console.table(obj);
/*var xed=localStorage.getItem("xed");
if(xed){
xpand();
@@ -156,12 +164,16 @@ function parseColumn() {
var animecss = "";
}
if (acct.type == "notf") {
var exclude=lang.lang_excluded+':<br><input type="checkbox" class="filled-in" id="exc-reply-'+key+'" '+excludeCk(key,"mention")+' /><label for="exc-reply-'+key+'" class="exc-chb"><i class="fas fa-share exc-icons"></i></label> '+
'<input type="checkbox" class="filled-in" id="exc-fav-'+key+'" '+excludeCk(key,"favourite")+' /><label for="exc-fav-'+key+'" class="exc-chb"><i class="fas fa-star exc-icons"></i></label> '+
'<input type="checkbox" class="filled-in" id="exc-bt-'+key+'" '+excludeCk(key,"reblog")+' /><label for="exc-bt-'+key+'" class="exc-chb" ><i class="fas fa-retweet exc-icons"></i></label> '+
'<input type="checkbox" class="filled-in" id="exc-follow-'+key+'" '+excludeCk(key,"follow")+' /><label for="exc-follow-'+key+'" class="exc-chb" ><i class="fas fa-users exc-icons"></i></label> '+
'<input type="checkbox" class="filled-in" id="exc-follow-'+key+'" '+excludeCk(key,"poll")+' /><label for="exc-poll-'+key+'" class="exc-chb" ><i class="fas fa-tasks exc-icons"></i></label> '+
'<button class="btn waves-effect" style="width:60px; padding:0;" onclick="exclude('+key+')">Filter</button><br>';
var exclude = lang.lang_excluded + ':<br><label><input type="checkbox" class="filled-in" id="exc-reply-' + key + '" ' + excludeCk(key, "mention") + ' /><span><i class="fas fa-share exc-icons"></i></span></label> ' +
'<label><input type="checkbox" class="filled-in" id="exc-fav-' + key + '" ' + excludeCk(key, "favourite") + ' /><span><i class="fas fa-star exc-icons"></i></span></label> ' +
'<label><input type="checkbox" class="filled-in" id="exc-bt-' + key + '" ' + excludeCk(key, "reblog") + ' /><span><i class="fas fa-retweet exc-icons"></i></span></label> ' +
'<label><input type="checkbox" class="filled-in" id="exc-follow-' + key + '" ' + excludeCk(key, "follow") + ' /><span><i class="fas fa-users exc-icons"></i></span></label> ' +
'<label><input type="checkbox" class="filled-in" id="exc-poll-' + key + '" ' + excludeCk(key, "poll") + ' /><span><i class="fas fa-tasks exc-icons"></i></span></label> ' +
'<button class="btn waves-effect" style="width:60px; padding:0;" onclick="exclude(' + key + ')">Filter</button>';
if (checkNotfFilter(key)) {
exclude = exclude + '<button class="btn red waves-effect" style="width:60px; padding:0;" onclick="resetNotfFilter(' + key + ')">Clear all</button>'
}
exclude = exclude + "<br>";
} else if (acct.type == "home") {
var exclude = '<a onclick="ebtToggle(' + key +
')" class="setting nex"><i class="fas fa-retweet waves-effect nex" title="' + lang.lang_layout_excludingbt + '" style="font-size:24px"></i><span id="sta-bt-' +
@@ -180,9 +192,17 @@ function parseColumn() {
if (key === 0) {
left_hold = '';
}
if (localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct.domain)) == "misskey") {
var isMisRed = ""
exclude = ""
var if_misskey_hide = "hide"
} else {
var isMisRed = "red-text"
var if_misskey_hide = ""
}
var html = '<div class="boxIn" id="timeline_box_' + key + '_box" tlid="' + key +
'" data-acct="' + acct.domain + '"><div class="notice-box z-depth-2" id="menu_' + key + '" style="' + insert + ' ">' +
'<div class="area-notice"><i class="material-icons waves-effect red-text" id="notice_icon_' + key + '"'+notf_attr+' style="font-size:40px; padding-top:25%;" onclick="checkStr(\''+acct.type+'\', \''+data+'\', \''+acct.domain+'\', \''+key+'\', \''+delc+'\',\''+voice+'\',null)" title="'+lang.lang_layout_gotop +'"></i></div>'+
'<div class="area-notice"><i class="material-icons waves-effect ' + isMisRed + '" id="notice_icon_' + key + '"' + notf_attr + ' style="font-size:40px; padding-top:25%;" onclick="checkStr(\'' + acct.type + '\', \'' + data + '\', \'' + acct.domain + '\', \'' + key + '\', \'' + delc + '\',\'' + voice + '\',null)" title="' + lang.lang_layout_gotop + '"></i></div>' +
'<div class="area-notice_name"><span id="notice_' + key + '" class="tl-title"></span></div>' +
'<div class="area-a1"><a onclick="notfToggle(' + acct.domain + ',' + key +
')" class="setting nex ' + if_notf + '" title="' + unique_notf + '"' + icnsert + '><i class="material-icons waves-effect nex notf-icon_' +
@@ -201,7 +221,7 @@ function parseColumn() {
key + '">On</span></a>' + lang.lang_layout_linkana + '<br><a onclick="voiceToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="' + lang.lang_layout_tts + '">hearing</i><span id="sta-voice-' +
key + '">On</span></a>' + lang.lang_layout_tts + 'TL<br><a onclick="reconnector(' + key +
',\''+acct.type+'\',\''+acct.domain+'\',\''+escapeHTML(acct.data)+'\')" class="setting nex '+if_notf+'"><i class="material-icons waves-effect nex '+if_notf+'" title="'+lang.lang_layout_reconnect+'">low_priority</i></a><span class="'+if_notf+'">'+lang.lang_layout_reconnect+'</span><br>'+lang.lang_layout_headercolor +'<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
',\'' + acct.type + '\',\'' + acct.domain + '\',\'' + escapeHTML(acct.data) + '\')" class="setting nex ' + if_notf + ' ' + if_misskey_hide + '"><i class="material-icons waves-effect nex ' + if_notf + '" title="' + lang.lang_layout_reconnect + '">low_priority</i></a><span class="' + if_notf + '">' + lang.lang_layout_reconnect + '</span><br>' + lang.lang_layout_headercolor + '<br><div id="picker_' + key + '" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
'" class="tl ' + acct.type + '-timeline " tlid="' + key + '" data-type="' + acct.type + '" data-acct="' + acct.domain + '" data-const="' + acct.type + '_' + acct.domain + '"><div id="landing_' + key + '" style="text-align:center">' + lang.lang_layout_nodata + '</div></div></div>'
$('#timeline_box_' + basekey + '_parentBox').append(html);
localStorage.removeItem("pool_" + key);
@@ -256,7 +276,6 @@ function parseColumn() {
}
function checkStr(type, data, acct_id, key, delc, voice) {
if ($('#notice_icon_' + key).hasClass("red-text") && type != "notf" && type != "mix") {
console.log("sabun-get")
goTop(key);
tlDiff(type, data, acct_id, key, delc, voice, "");
} else {
@@ -289,7 +308,9 @@ function secvis(set){
//カラム追加
function addColumn() {
var acct = $("#add-acct-sel").val();
if (acct != "webview" && acct != "noauth") {
localStorage.setItem("last-use", acct);
}
var type = $("#type-sel").val();
if (acct == "noauth") {
acct = $("#noauth-url").val();
@@ -343,27 +364,8 @@ function addselCk(){
function removeColumn(tlid) {
$("#sort-box").addClass("hide");
$("#sort-box").removeClass("show");
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
//聞く
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('column-del', "");
ipc.on('column-del-reply', function (event, arg) {
console.log(arg);
if(arg===1){
localStorage.removeItem("card_" + tlid);
obj.splice(tlid, 1);
for(var i=0;i<obj.length;i++){
localStorage.setItem("card_" + i,"true");
localStorage.removeItem("catch_" + i);
}
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
parseColumn();
sortload()
}
})
postMessage(["columnDel", tlid], "*")
}
//設定トグル
@@ -450,7 +452,7 @@ function webviewParse(url,key,insert,icnsert,css){
'" style="' + css + '"><div class="notice-box z-depth-2" id="menu_' + key + '" style="' + insert + '">' +
'<div class="area-notice"><i class="fab fa-twitter waves-effect" id="notice_icon_' + key + '" style="font-size:40px; padding-top:25%;"></i></div>' +
'<div class="area-notice_name tl-title">WebView(' + url + ')</div>' +
'<div class="area-sta"><input type="checkbox" id="webviewsel" value="true" class="filled-in"><label for="webviewsel">'+lang.lang_layout_webviewmode +'</label></div>'+
'<div class="area-sta"></div>' +
'<div class="area-a2"><a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="' + lang.lang_layout_delthis + '"' + icnsert + '>cancel</i></a></div>' +
'<div class="area-a3"><a onclick="setToggle(' + key +
@@ -459,7 +461,6 @@ function webviewParse(url,key,insert,icnsert,css){
'"></div><div class="column-hide notf-indv-box" id="util-box_' + key +
'" style="padding:5px;">' + lang.lang_layout_headercolor + '<br><div id="picker_' + key + '" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '" style="width:100%;height:100%;"><div id="timeline_' + key +
'" class="tl" tlid="' + key + '" data-type="webview" style="width:100%;height:100%;"><webview src="' + url + '" style="width:100%;height:100%;" id="webview" preload="./js/platform/twitter.js"></webview></div></div></div>';
return html;
}
function unstreamingTL(type, key, basekey, insert, icnsert, left_fold, css, animecss, q) {

View File

@@ -30,7 +30,8 @@ function menu(){
}
$(function () {
$( "#menu" ).draggable({handle: "#menu-bar",
$("#menu").draggable({
handle: "#menu-bar",
stop: function () {
var left = $('#menu').offset().left;
if (left > $('body').width() - $('#menu').width()) {
@@ -50,6 +51,5 @@ $(function() {
});
});
function help() {
const {shell} = require('electron');
shell.openExternal("https://docs.thedesk.top");
postMessage(["openUrl", "https://docs.thedesk.top"], "*")
}

View File

@@ -42,7 +42,8 @@ function show() {
}
$(function () {
$( "#post-box" ).draggable({handle: "#post-bar",
$("#post-box").draggable({
handle: "#post-bar",
stop: function () {
var left = $('#post-box').offset().left;
if (left > $('body').width() - $('#post-box').width()) {

View File

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

View File

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

View File

@@ -61,7 +61,7 @@ function Scap(type, data) {
} else if (type == "tootsearch") {
return "tootsearch(" + data + ")"
} else {
console.log(type);
console.error("unknown timeline type: " + type);
}
}
@@ -103,7 +103,7 @@ function sort(){
var json = JSON.stringify(newobj);
localStorage.setItem("column", json);
$("#sort").html("");
Materialize.toast("Sorted", 3000);
M.toast({ html: "Sorted", displayLength: 3000 })
sortload();
parseColumn();
sortMenu()

View File

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

View File

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

View File

@@ -20,9 +20,7 @@ function bottomReverse(){
}
}
function tips(mode) {
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('endmem', "");
postMessage(["sendSinmpleIpc", "endmem"], "*")
clearInterval(clockint);
clearInterval(spotStart);
if (mode == "ver") {
@@ -50,15 +48,10 @@ function tips(mode){
}
//メモリ
function startmem() {
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('startmem', "");
ipc.on('memory', function (event, arg) {
var use=arg[0];
var cpu=arg[1];
var total=arg[2]
postMessage(["sendSinmpleIpc", "startmem"], "*")
}
function renderMem(use, cpu, total){
$("#tips-text").html(escapeHTML(cpu) + "<br>Memory:" + Math.floor(use / 1024 / 1024 / 102.4) / 10 + "/" + Math.floor(total / 1024 / 1024 / 102.4) / 10 + "GB(" + Math.floor(use / total * 100) + "%)")
})
}
//トレンドタグ
function trendTagonTip() {
@@ -66,7 +59,6 @@ function trendTagonTip(){
var domain = "imastodon.net"
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/v1/trend_tags"
console.log(start)
fetch(start, {
method: 'GET',
headers: {
@@ -109,7 +101,6 @@ function spotifytips(){
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
var ms = json.progress_ms;
var last = 1000 - ms % 1000;
var item = json.item;
@@ -200,4 +191,3 @@ function tipsToggle(){
if (localStorage.getItem("tips")) {
tips(localStorage.getItem("tips"));
}

View File

@@ -438,10 +438,11 @@ function showReq(more, acct_id) {
todo(error);
console.error(error);
}).then(function (json) {
if(localStorage.getItem("mode_" + domain)=="misskey"){
var templete = userparse(json, 'true',acct_id);
if (localStorage.getItem("mode_" + domain) != "misskey") {
var templete = userparse(json, "request", acct_id);
} else {
var templete = misskeyUserparse(json, 'true',acct_id);
var templete = misskeyUserparse(json, true, acct_id);
}
if (!json[0]) {
@@ -537,9 +538,8 @@ function showFrl(more, acct_id) {
$("#his-follow-recom-contents").html(lang.lang_details_nodata + "(" + lang.lang_hisdata_frcreq + ")<br>");
console.error(error);
}).then(function (json) {
console.log(json);
if (!json[0]) {
console.log("No data");
console.warn("No suggestions(recommend) data");
templete = lang.lang_details_nodata + "(" + lang.lang_hisdata_frcwarn + ")<br>";
} else {
var templete = userparse(json, '', acct_id);
@@ -607,7 +607,6 @@ function showMat() {
var acct_id = $("#his-data").attr("use-acct");
full = full.split("@");
var start = "https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-filtered-api.cgi?" + full[1] + "+" + full[0];
console.log(start);
fetch(start, {
method: 'GET',
headers: {
@@ -620,7 +619,6 @@ function showMat() {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
var templete = "";
Object.keys(json).forEach(function (key) {
var user = json[key];

View File

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

View File

@@ -19,7 +19,7 @@ function udgEx(user,acct_id){
if (acct_id == "main") {
acct_id = localStorage.getItem("main");
}
console.log(user);
console.log("Get user data of " + user);
var domain = localStorage.getItem("domain_" + acct_id);
if (localStorage.getItem("mode_" + domain) == "misskey") { return false; }
var at = localStorage.getItem("acct_" + acct_id + "_at");
@@ -36,14 +36,11 @@ function udgEx(user,acct_id){
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
if (json.accounts) {
var id = json.accounts[0].id;
udg(id, acct_id);
} else {
var url="https://"+user.split('@')[1]+"/@"+user.split('@')[0];
const {shell} = require('electron');
shell.openExternal(url);
postMessage(["openUrl", url], "*")
}
});
return true;
@@ -52,7 +49,6 @@ function udg(user, acct_id) {
reset();
if (!user) {
user = localStorage.getItem("user-id_" + acct_id);
console.log(user);
}
todo("User Data Loading...");
var domain = localStorage.getItem("domain_" + acct_id);
@@ -62,7 +58,6 @@ function udg(user, acct_id) {
}
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/v1/accounts/" + user;
console.log(start);
fetch(start, {
method: 'GET',
headers: {
@@ -75,7 +70,6 @@ function udg(user, acct_id) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
//一つ前のユーザーデータ
if (!localStorage.getItem("history")) {
$("#his-history-btn").prop("disabled", true);
@@ -85,9 +79,8 @@ function udg(user, acct_id) {
}
//moved設定時
if (json.moved) {
Materialize.toast(
lang.lang_showontl_movetxt+'<button class="btn-flat toast-action" onclick="udg(\'' +
json.moved.id + '\',\''+acct_id+'\')">'+lang.lang_showontl_movebtn+'</button>', 4000)
M.toast({ html: lang.lang_showontl_movetxt + '<button class="btn-flat toast-action" onclick="udg(\'' +
json.moved.id + '\',\'' + acct_id + '\')">' + lang.lang_showontl_movebtn + '</button>', displayLength: 4000 })
}
$('#his-data').modal('open');
$('#his-data').attr("user-id", user);
@@ -128,7 +121,6 @@ function udg(user, acct_id) {
//var tags = '<a onclick="tl(\'tag\',\'$1\',' + acct_id +',\'add\')" class="pointer parsed">#$1</a>';
//var mens = '<a onclick="udgEx(\'$1\',' + acct_id +')" class="pointer parsed">@$1</a>';
//note=note.replace(/#(\S+)/gi, tags)
console.log(note)
//note=note.replace(/\s@([a-zA-Z_0-9@.-]+)/gi, mens)
$("#his-name").html(dis_name);
$("#his-acct").text(json.acct);
@@ -215,7 +207,6 @@ function misskeyUdg(user, acct_id) {
reset();
if (!user) {
user = localStorage.getItem("user-id_" + acct_id);
console.log(user);
}
todo("User Data Loading...");
var domain = localStorage.getItem("domain_" + acct_id);
@@ -225,7 +216,6 @@ function misskeyUdg(user, acct_id) {
}
var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = "https://" + domain + "/api/users/show";
console.log(user);
fetch(start, {
method: 'POST',
headers: {
@@ -241,7 +231,6 @@ function misskeyUdg(user, acct_id) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(json);
//一つ前のユーザーデータ
if (!localStorage.getItem("history")) {
$("#his-history-btn").prop("disabled", true);
@@ -340,7 +329,6 @@ function historyShow(){
function profShow() {
var acct_id = $("#post-acct-sel").val();
var user = localStorage.getItem("user-id_" + acct_id);
console.log("user-id_"+acct_id+":"+user);
udg(user, acct_id)
hide();
}
@@ -418,9 +406,8 @@ function relations(user, acct_id) {
});
}
function profbrws() {
const {shell} = require('electron');
var url = $("#his-openin").attr("data-href")
shell.openExternal(url);
postMessage(["openUrl", url], "*")
}
//オールリセット
function hisclose() {
@@ -479,9 +466,9 @@ function reset(){
$("#his-float-blocked").hide();
$("#his-proof-prof").html("")
}
$('#my-data-nav .custom-tab').on('click',function(){
$('#my-data-nav .tab').on('click', function () {
var target = $(this).find("a").attr("go");
$("#my-data-nav .custom-tab").removeClass("active-back");
$("#my-data-nav .tab").removeClass("active-back");
$(this).addClass("active-back");
$(target).show();
$(".tab-content:not(" + target + ")").hide();

View File

@@ -1,4 +1,4 @@
var dirname = __dirname;
var dir = 'file://' + __dirname;
var base = dir + '/view/';
// Electronのモジュール
@@ -94,11 +94,35 @@ function createWindow() {
var platform = process.platform;
var bit = process.arch;
if (platform == "linux") {
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,icon: __dirname + '/desk.png'}
var arg = {
webPreferences: {
webviewTag: true,
nodeIntegration: false,
contextIsolation: true,
preload: join(__dirname, "js", "platform", "preload.js")
},
width: window_size.width, height: window_size.height, x: window_size.x, y: window_size.y, icon: __dirname + '/desk.png'
}
} else if (platform == "win32") {
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,simpleFullscreen:true}
var arg = {
webPreferences: {
webviewTag: true,
nodeIntegration: false,
contextIsolation: true,
preload: join(__dirname, "js", "platform", "preload.js")
},
width: window_size.width, height: window_size.height, x: window_size.x, y: window_size.y, simpleFullscreen: true
}
} else if (platform == "darwin") {
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,simpleFullscreen:true}
var arg = {
webPreferences: {
webviewTag: true,
nodeIntegration: false,
contextIsolation: true,
preload: join(__dirname, "js", "platform", "preload.js")
},
width: window_size.width, height: window_size.height, x: window_size.x, y: window_size.y, simpleFullscreen: true
}
}
mainWindow = new BrowserWindow(arg);
electron.session.defaultSession.clearCache(() => { })
@@ -149,19 +173,22 @@ function createWindow() {
var platform = process.platform;
var bit = process.arch;
if(platform=="darwin"){
Menu.setApplicationMenu(Menu.buildFromTemplate(language.template(lang,mainWindow,false,dir)));
if (process.argv.indexOf("--dev") === -1) {
packaged = true;
} else {
packaged = false;
}
Menu.setApplicationMenu(Menu.buildFromTemplate(language.template(lang, mainWindow, packaged, dir)));
//CSS
css.css(mainWindow);
//アップデータとダウンロード
dl.dl(mainWindow,lang_path,base);
dl.dl(mainWindow, lang_path, base, dirname);
//画像選択と画像処理
img.img(mainWindow, dir);
//NowPlaying
np.TheDeskNowPlaying(mainWindow);
//その他system
systemFunc.system(mainWindow,dir,lang);
systemFunc.system(mainWindow, dir, lang, dirname);
}
// Electronの初期化完了後に実行
app.on('ready', createWindow);

View File

@@ -10,7 +10,7 @@ function css(mainWindow) {
ipc.on('custom-css-create', function (e, arg) {
fs.writeFileSync(customcss, arg);
mainWindow.webContents.send('custom-css-create-complete', "");
e.sender.webContents.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 = "";
}
mainWindow.webContents.send('custom-css-response', css);
e.sender.webContents.send('custom-css-response', css);
})
ipc.on('theme-json-create', function (e, arg) {
var themecss = join(app.getPath("userData"), JSON5.parse(arg)["id"] +
".thedesktheme");
fs.writeFileSync(themecss, JSON.stringify(JSON5.parse(arg)));
if (JSON5.parse(arg)["id"]) {
mainWindow.webContents.send('theme-json-create-complete', "");
e.sender.webContents.send('theme-json-create-complete', "");
} else {
mainWindow.webContents.send('theme-json-create-complete', "error");
e.sender.webContents.send('theme-json-create-complete', "error");
}
})
ipc.on('theme-json-delete', function (e, arg) {
var themecss = join(app.getPath("userData"), arg + ".thedesktheme");
console.log(themecss);
fs.unlink(themecss, function (err) {
mainWindow.webContents.send('theme-json-delete-complete', "");
e.sender.webContents.send('theme-json-delete-complete', "");
});
})
ipc.on('theme-json-request', function (e, arg) {
var themecss = join(app.getPath("userData"), arg + ".thedesktheme");
var json = JSON.parse(fs.readFileSync(themecss, 'utf8'));
mainWindow.webContents.send('theme-json-response', json);
e.sender.webContents.send('theme-json-response', json);
})
ipc.on('theme-css-request', function (e, arg) {
var themecss = join(app.getPath("userData"), arg + ".thedesktheme");
@@ -76,7 +76,7 @@ function css(mainWindow) {
";--active:" + primary + ";--postbox:" + primary + ";--modalfooter:" +
primary +
";}.blacktheme #imagemodal{background: url(\"../img/pixel.svg\");}";
mainWindow.webContents.send('theme-css-response', css);
e.sender.webContents.send('theme-css-response', css);
} catch (e) {
var css = "";
}
@@ -98,7 +98,7 @@ function css(mainWindow) {
id: json.id
})
}
mainWindow.webContents.send('theme-json-list-response', themes);
e.sender.webContents.send('theme-json-list-response', themes);
});
})
}

View File

@@ -1,4 +1,4 @@
function dl(mainWindow,lang_path,base) {
function dl(mainWindow, lang_path, base, dirname) {
const electron = require("electron");
const shell = electron.shell;
const fs = require("fs");
@@ -15,12 +15,17 @@ function dl(mainWindow,lang_path,base) {
var bit = process.arch;
if (platform != "others") {
updatewin = new BrowserWindow({
webPreferences: {
webviewTag: false,
nodeIntegration: false,
contextIsolation: true,
preload: join(dirname,"js", "platform", "preload.js")
},
width: 600,
height: 400,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false,
"modal": true
"resizable": false
});
var lang = fs.readFileSync(lang_path, 'utf8');
updatewin.loadURL(base + lang + '/update.html');
@@ -32,7 +37,26 @@ function dl(mainWindow,lang_path,base) {
})
//アプデDL
ipc.on('download-btn', (e, args) => {
function dl(url, file, dir, e) {
e.sender.webContents.send('mess', "ダウンロードを開始します。");
const opts = {
directory: dir,
openFolderWhenDone: true,
onProgress: function (event) {
e.sender.webContents.send('prog', e);
},
saveAs: false
};
download(updatewin,
url, opts)
.then(dl => {
e.sender.webContents.send('mess', "ダウンロードが完了しました。");
app.quit();
})
.catch(console.error);
}
var platform = process.platform;
var bit = process.arch;
dialog.showSaveDialog(null, {
@@ -52,7 +76,7 @@ function dl(mainWindow,lang_path,base) {
if (isExistFile(savedFiles)) {
fs.unlinkSync(savedFiles);
}
dl(args[0], args[1], m[1]);
dl(args[0], args[1], m[1], e);
});
});
@@ -65,27 +89,8 @@ function dl(mainWindow,lang_path,base) {
}
}
function dl(url, file, dir) {
updatewin.webContents.send('mess', "ダウンロードを開始します。");
const opts = {
directory: dir,
openFolderWhenDone: true,
onProgress: function(e) {
updatewin.webContents.send('prog', e);
},
saveAs: false
};
download(BrowserWindow.getFocusedWindow(),
url, opts)
.then(dl => {
updatewin.webContents.send('mess', "ダウンロードが完了しました。");
app.quit();
})
.catch(console.error);
}
ipc.on('general-dl', (e, args) => {
ipc.on('general-dl', (event, args) => {
var name = "";
var platform = process.platform;
@@ -104,14 +109,14 @@ function dl(mainWindow,lang_path,base) {
filename: name,
openFolderWhenDone: false,
onProgress: function (e) {
mainWindow.webContents.send('general-dl-prog', e);
event.sender.webContents.send('general-dl-prog', e);
},
saveAs: false
};
download(BrowserWindow.getFocusedWindow(),
args[0], opts)
.then(dl => {
mainWindow.webContents.send('general-dl-message', dir);
event.sender.webContents.send('general-dl-message', dir);
})
.catch(console.error);
});

View File

@@ -24,45 +24,17 @@ function img(mainWindow,dir){
for (var i = 0; i < fileNames.length; i++) {
var path = fileNames[i];
var bin = fs.readFileSync(path, 'base64');
mainWindow.webContents.send('bmp-img-comp', [bin,'new']);
e.sender.webContents.send('bmp-img-comp', [bin, 'new']);
}
});
});
ipc.on('adobe', (e, arg) => {
if(!arg){
const options = {
type: 'info',
title: 'Adobeフォトエディタ',
message: "「許可」または「永続的に許可」をクリックするとTheDeskとAdobeで情報を共有します。\n次のウィンドウを開いている時以外は一切提供しません。",
buttons: ['拒否', '許可','永続的に許可']
}
dialog.showMessageBox(options, function(index) {
if(index===2){
mainWindow.webContents.send('adobeagree', "true");
}
if(index>0){
adobeWindow();
}
})
}else{
adobeWindow();
}
});
function adobeWindow(){
var window = new BrowserWindow({
width: 1000,
height: 750
});
window.loadURL(dir + '/adobe.html');
}
ipc.on('bmp-image', (e, args) => {
var m = args[0].match(/(.+)\\(.+)\.(.+)$/);
Jimp.read(args[0], function (err, lenna) {
if (err) throw err;
lenna.getBase64(Jimp.MIME_PNG, function (err, src) {
mainWindow.webContents.send('bmp-img-comp', [src,args[1]]);
e.sender.webContents.send('bmp-img-comp', [src, args[1]]);
});
});

View File

@@ -65,21 +65,54 @@ function templete(lang,mainWindow,packaged,dir){
"en": "Close"
}
}
if(packaged){
var ifDev = [
{
label: dict.reload[lang],
accelerator: 'CmdOrCtrl+R',
click: function () { mainWindow.reload(); }
}
]
}else{
var ifDev = [
{
label: 'Toggle Developer Tools',
accelerator: 'Alt+Command+I',
click: function () { if (!packaged) { mainWindow.toggleDevTools(); } }
},
{
label: dict.reload[lang],
accelerator: 'CmdOrCtrl+R',
click: function () { mainWindow.reload(); }
}
]
}
const menu = [{
label: dict.application[lang],
submenu: [
{ label: dict.about[lang], click: function() {
{
label: dict.about[lang], click: function () {
var ver = app.getVersion()
var window = new BrowserWindow({width: 300, height: 460,
var window = new BrowserWindow({
webPreferences: {
webviewTag: false,
nodeIntegration: false,
contextIsolation: true,
preload: "../js/platform/preload.js"
},
width: 300, height: 460,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false });
"resizable": false
});
window.loadURL(dir + '/about.html?ver=' + ver);
} },
}
},
{ type: "separator" },
{ label: dict.quit[lang], accelerator: "Command+Q", click: function () { app.quit(); } }
]}, {
]
}, {
label: dict.edit[lang],
submenu: [
{ label: dict.undo[lang], accelerator: "CmdOrCtrl+Z", selector: "undo:" },
@@ -89,20 +122,10 @@ function templete(lang,mainWindow,packaged,dir){
{ label: dict.copy[lang], accelerator: "CmdOrCtrl+C", selector: "copy:" },
{ label: dict.paste[lang], accelerator: "CmdOrCtrl+V", selector: "paste:" },
{ label: dict.selall[lang], accelerator: "CmdOrCtrl+A", selector: "selectAll:" }
]},{
label: dict.view[lang],
submenu: [
{
label: 'Toggle Developer Tools',
accelerator: 'Alt+Command+I',
click: function() { if(!packaged){mainWindow.toggleDevTools();} }
},
{
label: dict.reload[lang],
accelerator: 'CmdOrCtrl+R',
click: function() { mainWindow.webContents.send('reload', " "); }
}
]
}, {
label: dict.view[lang],
submenu: ifDev
},
{
label: dict.window[lang],

View File

@@ -28,11 +28,11 @@ function np(mainWindow){
try {
const nowplaying = require("itunes-nowplaying-mac");
const value = await nowplaying.getRawData();
mainWindow.webContents.send('itunes-np', value);
e.sender.webContents.send('itunes-np', value);
} catch (error) {
// エラーを返す
console.error(error);
mainWindow.webContents.send('itunes-np', error);
e.sender.webContents.send('itunes-np', error);
}
} else {
var { NowPlaying, PlayerName } = require("nowplaying-node");
@@ -62,7 +62,7 @@ function np(mainWindow){
album: myAIMP.getAlbum(),
path: bin
}
mainWindow.webContents.send('itunes-np', value);
e.sender.webContents.send('itunes-np', value);
}
}

View File

@@ -1,4 +1,4 @@
function system(mainWindow, dir, lang) {
function system(mainWindow, dir, lang, dirname) {
const electron = require("electron");
const app = electron.app;
const join = require('path').join;
@@ -40,13 +40,90 @@ function system(mainWindow, dir, lang) {
});
}
});
//プラットフォーム
ipc.on('getPlatform', function (e, arg) {
e.sender.webContents.send('platform', [process.platform, process.arch, process.version, process.versions.chrome, process.versions.electron]);
})
//言語
ipc.on('lang', function (e, arg) {
console.log("set:" + arg);
fs.writeFileSync(lang_path, arg);
mainWindow.webContents.send('langres', "");
e.sender.webContents.send('langres', "");
})
//ストアから入れたかダイアログ
ipc.on('dialogStore', function (e, args) {
dialog.showMessageBox(args, function (arg) {
if (arg == 1) {
e.sender.webContents.send('winstore', "winstore");
} else {
e.sender.webContents.send('winstore', "localinstall");
}
});
})
//CWのダイアログ
ipc.on('dialogCW', function (e, args) {
dialog.showMessageBox(args, function (arg) {
e.sender.webContents.send('dialogCWRender', arg);
});
})
//クライアントのダイアログ
ipc.on('dialogClient', function (e, args) {
dialog.showMessageBox(args, function (arg) {
e.sender.webContents.send('dialogClientRender', arg);
});
})
//エクスポートのダイアログ
ipc.on('exportSettings', function (e, args) {
dialog.showSaveDialog(null, {
title: 'Export',
properties: ['openFile', 'createDirectory'],
defaultPath: "export.thedeskconfigv2"
}, (savedFiles) => {
if (!savedFiles) {
return false;
}
e.sender.webContents.send('exportSettingsFile', savedFiles);
})
})
//インポートのダイアログ
ipc.on('importSettings', function (e, args) {
dialog.showOpenDialog(null, {
title: 'Import',
properties: ['openFile'],
filters: [
{ name: 'TheDesk Config', extensions: ['thedeskconfig', 'thedeskconfigv2'] },
]
}, (fileNames) => {
if (!fileNames) {
return false;
}
e.sender.webContents.send('config', fs.readFileSync(arg, 'utf8'));
})
})
//保存フォルダのダイアログ
ipc.on('savefolder', function (e, args) {
dialog.showOpenDialog(null, {
title: 'Save folder',
properties: ['openDirectory'],
}, (fileNames) => {
e.sender.webContents.send('savefolder', fileNames[0]);
});
})
//カスタムサウンドのダイアログ
ipc.on('customSound', function (e, arg) {
dialog.showOpenDialog(null, {
title: 'Custom sound',
properties: ['openFile'],
filters: [
{ name: 'Audio', extensions: ['mp3', 'aac', 'wav', 'flac', 'm4a'] },
{ name: 'All', extensions: ['*'] },
]
}, (fileNames) => {
e.sender.webContents.send('customSoundRender', [arg, fileNames[0]]);
});
})
//ハードウェアアクセラレーションの無効化
ipc.on('ha', function (e, arg) {
@@ -60,20 +137,20 @@ function system(mainWindow, dir, lang) {
})
ipc.on('quit', (e, args) => {
app.quit();
});
ipc.on('about', (e, args) => {
about();
});
function about() {
var ver = app.getVersion()
var window = new BrowserWindow({
webPreferences: {
webviewTag: false,
nodeIntegration: false
},
width: 300,
height: 460,
height: 480,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false
@@ -81,12 +158,11 @@ function system(mainWindow, dir, lang) {
window.loadURL(dir + '/about.html?ver=' + ver);
return "true"
}
ipc.on('column-del', (e, args) => {
console.log(lang);
ipc.on('column-del', (e, tlid) => {
console.log(tlid);
var options = language.delsel(lang)
dialog.showMessageBox(options, function (index) {
mainWindow.webContents.send('column-del-reply', index);
e.sender.webContents.send('column-del-reply', [index, tlid]);
})
});
ipc.on('nano', function (e, x, y) {
@@ -100,6 +176,12 @@ function system(mainWindow, dir, lang) {
window_pos = [0, 0]; // デフォルトバリュー
}
var nanowindow = new BrowserWindow({
webPreferences: {
webviewTag: false,
nodeIntegration: false,
contextIsolation: true,
preload: join(dirname,"js", "platform", "preload.js")
},
width: 350,
height: 200,
"transparent": false, // ウィンドウの背景を透過
@@ -115,29 +197,27 @@ function system(mainWindow, dir, lang) {
});
return true;
})
var cbTimer1;
ipc.on('startmem', (e, arg) => {
event = e.sender
cbTimer1 = setInterval(mems, 1000);
});
function mems() {
var mem = os.totalmem() - os.freemem();
if (mainWindow) {
event.webContents.send('memory', [mem, os.cpus()[0].model, os.totalmem()]);
}
}
ipc.on('endmem', (e, arg) => {
if (cbTimer1) {
clearInterval(cbTimer1);
}
});
function mems() {
var mem = os.totalmem() - os.freemem();
if (mainWindow) {
mainWindow.webContents.send('memory', [mem, os.cpus()[0].model, os.totalmem()]);
}
}
ipc.on('export', (e, args) => {
fs.writeFileSync(args[0], args[1]);
});
ipc.on('import', (e, arg) => {
mainWindow.webContents.send('config', fs.readFileSync(arg, 'utf8'));
});
//フォント
function object_array_sort(data, key, order, fn) {
//デフォは降順(DESC)
@@ -174,7 +254,7 @@ function system(mainWindow, dir, lang) {
const fm = require('font-manager');
var fonts = fm.getAvailableFontsSync();
object_array_sort(fonts, 'family', 'asc', function (fonts_sorted) {
mainWindow.webContents.send('font-list', fonts_sorted);
e.sender.webContents.send('font-list', fonts_sorted);
});
});
}

View File

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

2137
app/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,25 +1,33 @@
{
"name": "thedesk",
"version": "18.3.2",
"version": "18.6.1",
"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",
"dev": "electron ./ --dev",
"dist": "build --linux snap",
"build:js": "node build.js",
"build": "electron-builder",
"build:all": "electron-builder --win --linux",
"build:win": "electron-builder --win"
},
"keywords": [],
"keywords": [
"mastodon",
"client",
"electron",
"thedesk"
],
"bugs": {
"url": "https://github.com/cutls/TheDesk/issues",
"email": "mstdn@thedesk.top"
"email": "web-pro@cutls.com"
},
"homepage": "https://thedesk.top",
"author": {
"name": "Cutls",
"url": "https://kirishima.clooud/@Cutls",
"url": "https://cutls.com/@Cutls",
"email": "web-pro@cutls.com"
},
"contributor": [
@@ -41,18 +49,23 @@
],
"license": "GPL-3.0",
"dependencies": {
"electron-dl": "^1.11.0",
"jimp": "^0.2.28",
"electron-dl": "^1.14.0",
"jimp": "^0.6.4",
"json5": "^2.1.0",
"node-notifier": "^5.2.1",
"sumchecker": "^2.0.2",
"vue": "^2.6.9"
"node-notifier": "^5.4.0",
"sumchecker": "^3.0.0",
"vue": "^2.6.10"
},
"optionalDependencies": {
"nowplaying-node": "git+https://github.com/cutls/nowplaying-node",
"itunes-nowplaying-mac": "git+https://github.com/rinsuki/itunes-nowplaying-mac#pull/4/head",
"font-manager": "^0.3.0"
},
"devDependencies": {
"electron": "^5.0.1",
"electron-builder": "^20.43.0",
"readline-sync": "1.4.9"
},
"build": {
"productName": "TheDesk",
"appId": "top.thedesk",
@@ -100,12 +113,8 @@
]
},
"electronDownload": {
"version": "4.1.4"
"version": "5.0.1"
},
"electronVersion": "4.1.4"
},
"devDependencies": {
"electron": "^4.1.4",
"electron-builder": "^20.39.0"
"electronVersion": "5.0.1"
}
}

View File

@@ -1,5 +1,6 @@
<!doctype html>
<html lang="ja">
<html lang="en">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
@@ -10,19 +11,54 @@
<link href='../../css/tl.css' rel='stylesheet' type='text/css'>
<link href='../../css/userdata.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
<style>.acct{display:flex; justify-content:space-around;}
.card{width:400px; background-color: #9e9e9e; margin:10px; }
body,html{overflow-y: scroll;}
#acct-list{display:flex; flex-wrap:wrap; color:white; align-items: flex-start}
.lts{font-size:150%}
.colorsel{ display:flex; }
.card .colorsel div:not(.exc){width:20px;height:20px;}
.card .colorsel div.exc{width:40px;height:20px;}
<style>
.acct {
display: flex;
justify-content: space-around;
}
.card {
width: 400px;
background-color: #9e9e9e;
margin: 10px;
}
body,
html {
overflow-y: scroll;
}
#acct-list {
display: flex;
flex-wrap: wrap;
color: white;
align-items: flex-start
}
.lts {
font-size: 150%
}
.colorsel {
display: flex;
}
.card .colorsel div:not(.exc) {
width: 20px;
height: 20px;
}
.card .colorsel div.exc {
width: 40px;
height: 20px;
}
.first {
display: flex;
justify-content: center;
align-items: center
}
.first .hide-first {
display: none;
}
@@ -36,11 +72,12 @@ body,html{overflow-y: scroll;}
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
</head>
<body id="mainView">
<script type="text/javascript" src="../../js/common/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.ja.js"></script>
<script type="text/javascript" src="../../js/lang/lang.en.js"></script>
<script>
var misskeytoken = false;
</script>
@@ -48,46 +85,53 @@ body,html{overflow-y: scroll;}
<script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">戻る</a><br>
<h5>アカウント一覧</h5>
<a href="index.html" class="btn waves-effect orange nex"
style="width:100%; max-width:200px;">Back</a><br>
<h5>List of accounts</h5>
<div id="acct-list"></div>
<div class="divider"></div>
</div>
<div>
<h5>アカウントを追加</h5><br>
<h5>Add an account</h5><br>
<div id="add">
<div class="row">
<div class="col s8">
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp">
<div id="ins-suggest"></div>
チェックを外すとコード貼り付けをスキップできます。(<u>Mastodon</u>WindowsmacOSからログインする場合)失敗する場合はチェックを入れてください。<br>
Uncheck it to skip pasiting code.(login to Mastodon on Windows or macOS) (Recommended: pcheck)<br>
<label>
<input type="checkbox" class="filled-in" id="linux" />
<label for="linux">コードセットアップ</label><br>
<span>Code setup</span>
</label>
<br>
<label>
<input type="checkbox" class="filled-in" id="misskey" />
<label for="misskey">Misskeyとしてログイン</label><br>
<span>Login as Misskey</span>
</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br>
</div>
<div class="col s4">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div></div>
</div>
</div>
<div id="auth" style="display:none">
指定されたコードを貼り付けてください。ログインウィンドウは閉じていただいて構いません。<br>
<input type="text" id="code" placeholder="コードを入力">
Paste the code and close browser.<br>
<input type="text" id="code" placeholder="Code">
<button class="btn waves-effect" onclick="code()">Auth</button><br>
</div>
<div id="misskeylogin" style="display:none">
<h5>AppSecret</h5>
<a href="https://thedesk.top/how-to-misskey-login.html">ドキュメント</a>を参照して正しいコードを入れてください。<br>
Read <a href="https://thedesk.top/how-to-misskey-login.html">Docs(ja)</a> to login Misskey.<br>
<input type="hidden" id="misskey-url">
<input type="text" id="misskey-key" placeholder="コードを入力">
<input type="text" id="misskey-key" placeholder="Code">
<button class="btn waves-effect" onclick="misskeyLogin()">Auth</button><br>
</div>
</div>
<div class="hide-first">
<h5>メインアカウント</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">アカウントを選択</span>
<h5>Main an account</h5>
<div class="input-field" style="width:300px"><span data-trans="your_acct">Select an account</span>
<br>
<select id="main-acct-sel" class="acct-sel" style="color:black" onchange="mainacct()"></select>
<label></label>
@@ -98,12 +142,12 @@ 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>
ドメイン名:<span id="ins-name"></span><br>
接続サーバー数:<span id="ins-connect"></span><br>
トゥート数:<span id="ins-toot"></span><br>
ユーザー数:<span id="ins-user"></span>ユーザー数<br>
コネクション:<span id="ins-per"></span>%<br>
Mastodonバージョン:<span id="ins-ver"></span>@<span id="ins-upd"></span><br>
Domain:<span id="ins-name"></span><br>
Federated servers:<span id="ins-connect"></span><br>
Toots:<span id="ins-toot"></span><br>
Users:<span id="ins-user"></span>Users<br>
Connection:<span id="ins-per"></span>%<br>
Mastodon version:<span id="ins-ver"></span>@<span id="ins-upd"></span><br>
</div>
<script type="text/javascript" src="../../js/ui/theme.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>

File diff suppressed because it is too large Load Diff

View File

@@ -842,13 +842,6 @@ SOFTWARE.<br>
<h5>itunes-nowplaying-mac</h5>
<i class="fa fa-github"></i><a href="https://github.com/rinsuki/itunes-nowplaying-mac" target="_blank">rinsuki/itunes-nowplaying-mac</a><br>
MIT LICENSE
<h5>Adobe Creative SDK</h5>
Please visit:
<a href="http://wwwimages.adobe.com/www.adobe.com/content/dam/acom/jp/legal/servicetou/Creative_SDK_API_and_Developer_Additional_TOU-ja_JP-20140602_1513.pdf" target="_blank">
This file
<i class="material-icons">
picture_as_pdf
</i></a>
<h5>Google Fonts</h5>
<ul>
<li>Open Sans:<a target="_blank" href="http://www.apache.org/licenses/LICENSE-2.0"> Apache License, Version 2.0 </a></li>

View File

@@ -1,5 +1,5 @@
<!doctype html>
<html lang="ja" style="overflow:scroll">
<html lang="en" style="overflow:scroll">
<head>
<title>Settings - TheDesk</title>
@@ -22,6 +22,7 @@
input {
max-height: 50px !important
}
.pcr-result {
height: 1rem !important;
}
@@ -32,26 +33,26 @@
<script type="text/javascript" src="../../js/common/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.ja.js"></script>
<script type="text/javascript" src="../../js/lang/lang.en.js"></script>
<script src="https://unpkg.com/json5@^2.0.0/dist/index.min.js"></script>
<script src="../../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="setting.vue.js"></script>
<h4>設定</h4>
<h4>Preferences</h4>
<ul class="collapsible" data-collapsible="accordion">
<li>
<div class="collapsible-header">
<i class="material-icons">desktop_windows</i>環境設定
<i class="material-icons">desktop_windows</i>System Preferences
</div>
<div class="collapsible-body">
<h5>言語</h5>
<h5>Languages</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br>
@@langlist@@
<h5>設定のインポートとエクスポート</h5>
<a onclick="changelang('ja')" class="pointer" style="margin-right:5px;">日本語</a><a onclick="changelang('en')" class="pointer" style="margin-right:5px;">English</a><a onclick="changelang('ps')" class="pointer" style="margin-right:5px;">Crowdin translate system(beta)</a>
<h5>Import and export of preferences</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3"
style="width:100%; max-width:200px;">エクスポート</button>
style="width:100%; max-width:200px;">Export</button>
<button onclick="importSettings()" class="btn waves-effect cyan darken-3"
style="width:100%; max-width:200px;">インポート</button>
style="width:100%; max-width:200px;">Import</button>
<div id="envView">
<template v-for="(item, i) in config">
<h5>{{item.text.head}}</h5>
@@ -59,12 +60,14 @@
<templete v-html="item.text.desc"></templete><br>
</template>
<template v-if="item.id=='notf'"><a onclick="notftest()"
class="pointer">通知テスト</a><br></template>
class="pointer">Notification test</a><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue"
type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
@@ -79,105 +82,125 @@
v-bind:style="{ width: item.width+'px'}" />{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;"
v-on:click="complete(i)">変更</button>
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
<h5>フォント</h5>
「選択」を押してフォントを選んでください。(Linuxでは動きません)<br>
<button class="btn waves-effect" style="width:100px;" onclick="font()">選択</button><br>
<h5>Font</h5>
Select your favorite font to 'Select'(Windows/ macOS only)<br>
<button class="btn waves-effect" style="width:100px;" onclick="font()">Select</button><br>
<div id="fonts" class="hide" style="overflow-y:scroll; width:300px; height:500px;"></div>
<br>
<input type="text" style="width:150px" id="font">
<button class="btn waves-effect" style="width:100px;" onclick="settings()">設定</button>
<button class="btn waves-effect" style="width:100px;" onclick="settings()">Save</button>
<br>
<h5>デフォルトの保存先</h5>
画像ダウンロードやスクリーンショットに影響します。<br>
<button class="btn waves-effect" style="width:100px;" onclick="savefolder()">変更</button>
<h5>Folder to save</h5>
TheDesk uses this value when it try to save pictures or take screenshots.<br>
<button class="btn waves-effect" style="width:100px;" onclick="savefolder()">Change</button>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">color_lens</i>テーマの設定
<i class="material-icons">color_lens</i>Themes
</div>
<div class="collapsible-body">
<h4>テーマの選択</h4>
<h4>Select theme</h4>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="black" value="black" />
<label for="black">Black</label>
<span>Black</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="white" value="white" />
<label for="white">White</label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="indigo" value="indigo" />
<label for="indigo">Indigo<span class="imas hide">(エンドレスナイト)</span></label>
<span>White</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="indigo"
value="indigo" />
<span>Indigo<span class="imas hide">(エンドレスナイト)</span></span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="brown" value="brown" />
<label for="brown">Brown<span class="imas hide">(ビタースイート・タイム)</span></label>
<span>Brown<span class="imas hide">(ビタースイート・タイム)</span></span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
<label for="green">Green<span class="imas hide">(ユースフルロマンス)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom" value="custom" />
<label for="custom">Custom</label>
<span>Green<span class="imas hide">(ユースフルロマンス)</span></span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom"
value="custom" />
<span>custom</span>
</label>
<div style="width:300px" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
<h4>カスタムテーマの作成・編集</h4>
<div style="width:300px" id="edit-selector" data-add="新規作成">
<h4>Edit and add custom themes</h4>
<div style="width:300px" id="edit-selector" data-add="Add new">
<select id="custom-edit-sel" class="custom-sel" onchange="custom()">
<option value="add_new">新規作成</option>
<option value="add_new">Add new</option>
</select>
</div>
<h5>名前</h5>
<input type="text" style="width:300px" id="custom_name" placeholder="名前...">
<h5>説明</h5>
<h5>Name</h5>
<input type="text" style="width:300px" id="custom_name" placeholder="Name...">
<h5>About this theme</h5>
<div class="input-field"><textarea style="width:300px" id="custom_desc" class="materialize-textarea"
placeholder="説明..."></textarea></div>
<h5>色の系統</h5>
<input class="with-gap" name="direction" type="radio" id="dark" value="dark" checked="true" />
<label for="dark">Dark</label>
<input class="with-gap" name="direction" type="radio" id="light" value="light" />
<label for="light">Light</label>
placeholder="About this theme..."></textarea></div>
<h5>Color scheme</h5>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="dark" value="dark"
checked="true" />
<span>Dark</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="light"
value="light" />
<span>Light</span>
</label>
<div id="pickers">
<div>
<h5>Primary</h5>補助要素に使われる背景色
<h5>Primary</h5>Background of components
<div id="color-picker0-wrap">
<div class="color-picker" id="color-picker0"></div>
</div>
<input type="hidden" id="color-picker0_value">
</div>
<div>
<h5>Secondary</h5>全体の背景色など
<h5>Secondary</h5>Background color
<div id="color-picker1-wrap">
<div class="color-picker" id="color-picker1"></div>
</div>
<input type="hidden" id="color-picker1_value">
</div>
<div>
<h5>Texts</h5>テキストの色
<h5>Texts</h5>Text color
<div id="color-picker2-wrap">
<div class="color-picker" id="color-picker2"></div>
</div>
<input type="hidden" id="color-picker2_value">
</div>
<div>
<h5>Accent</h5>ブーストの背景色など
<h5>Accent</h5>Background of boosts
<div id="color-picker3-wrap">
<div class="color-picker" id="color-picker3"></div>
</div>
<input type="hidden" id="color-picker3_value">
</div>
</div>
<button class="btn-large waves-effect" onclick="customComp()">変更</button>&nbsp;<button
class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">削除</button><br><br>
<input type="text" style="width:300px" id="custom_json" class="materialize-textarea"
<button class="btn-large waves-effect" onclick="customComp()">Change</button>&nbsp;<button
class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">Delete</button><br><br>
<input type="text" style="width:300px;height:40px;" id="custom_json" class="materialize-textarea"
placeholder="JSON style" readonly><br>
このコードは他のTheDeskなどとシェアできます。このコードをMiASに貼ることはご遠慮ください。詳細:<a href="https://thedesk.top/mias.html" target="_blank">テーマ互換性</a>
<h4>カスタムテーマのインポート</h4>
<a href="https://assets.msky.cafe/" target="_blank">MiAS</a>上の80を超えるテーマを張り付けることもできます。<br>
<input type="text" style="width:300px" id="custom_import" class="materialize-textarea"
Share this code with other TheDesk. Do not share this code with MiAS.
<h4>Import of custom themes</h4>
Get more themes on <a href="https://assets.msky.cafe/" target="_blank">MiAS</a><br>
<input type="text" style="width:300px;height:40px;" id="custom_import" class="materialize-textarea"
placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">インポート</button><br>
<button class="btn waves-effect" onclick="customImp()">Import</button><br>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">reorder</i>タイムラインの設定
<i class="material-icons">reorder</i>Timeline Preferences
</div>
<div class="collapsible-body">
<div id="tlView">
@@ -188,9 +211,11 @@
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue"
type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
@@ -205,20 +230,24 @@
v-bind:style="{ width: item.width+'px'}" />{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;"
v-on:click="complete(i)">変更</button>
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
<h5>カスタム通知音</h5>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span id="c4-file"></span><br>
<h5>Custom sound</h5>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span
id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span
id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span
id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span
id="c4-file"></span><br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">send</i>投稿設定
<i class="material-icons">send</i>Posting Preferences
</div>
<div class="collapsible-body">
<div id="postView">
@@ -230,9 +259,10 @@
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template v-if="!check.kirishima || (check.kirishima && kirishima)">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue"
type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
<label><input class="with-gap" v-on:click="complete(i,check.value)"
v-model="item.setValue" type="radio" v-bind:id="item.id+check.value"
v-bind:value="check.value" />
<span>{{check.text}}</span></label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
@@ -249,7 +279,7 @@
v-bind:style="{ width: item.width+'px'}" />{{item.text.after}}
</template>
<button class="btn waves-effect" style="width:100px;"
v-on:click="complete(i)">変更</button>
v-on:click="complete(i)">Change</button>
</template><br>
</template>
</div>
@@ -257,137 +287,158 @@
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">keyboard</i>キーボードショートカットの設定
<i class="material-icons">keyboard</i>Keyboard shortcut Preferences
</div>
<div class="collapsible-body">
<h5>簡単文字入力</h5>
絵文字やタグ、&gt;BTなどを登録しておくとすぐに入力できます。<br>
<h5>Easy inserter</h5>
You can insert any letters and emojis with only 3 keys<br>
Ctrl+Shift+1:<input type="text" style="width:150px" id="oks-1">
<button onclick="oks(1)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
<button onclick="oks(1)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
Ctrl+Shift+2:<input type="text" style="width:150px" id="oks-2">
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
Ctrl+Shift+3:<input type="text" style="width:150px" id="oks-3">
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">bookmark</i>ミュート・強調の設定
<i class="material-icons">bookmark</i>Mute & Emphasis Preferences
</div>
<div class="collapsible-body">
<h5>クライアントミュート</h5>
<h5>Client Mute</h5>
<div id="mute-cli"></div>
<h5>クライアント強調</h5>
各トゥートのクライアントをクリックすると設定できます。
<h5>ワードミュート</h5>
Enterで確定<br>
<h5>Client Emphasis</h5>
Click client name on toots to toggle mute and emphasis.
<h5>Words Mute</h5>
Enter to set<br>
<div class="chips" id="wordmute" style="background-color:gray;"></div>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>ワード強調</h5>
Enterで確定<br>
<button onclick="wordmuteSave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Words Emphasis</h5>
Enter to set<br>
<div class="chips" id="wordemp" style="background-color:gray;"></div>
<button onclick="wordempSave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>ユーザー強調</h5>
各ユーザーのデータ表示画面で設定できます。
<span class="emphasized"> 強調色(テーマによって異なります。) </span>
<button onclick="wordempSave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Users Emphasis</h5>
Set on users data modals.
<span class="emphasized"> Use this color to emphasis </span>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="fa fa-spotify"></i>SpotifyNowPlayingの設定
<i class="fa fa-spotify"></i>Spotify and NowPlaying Preferences
</div>
<div class="collapsible-body">
<h5>NowPlayingのソース(Windows)</h5>
macOSやLinuxでは動作しません。AIMPとiTunes以外未検証です。<br>foobar2000, MusicBee,J. River Media Center, Media JukeboxはCADを、Last.fm Client, TTPlayer, OpenPandora, ZuneはWLMを選んでください。<br>ただし、foobar2000<a href="http://poiru.github.com/foo-cad/">foo_cad plugin</a>が必要です。MusicBeeもCADを有効にする必要があります。<br>
<h5>NowPlaying Provider(Windows)</h5>
macOS and Linux are not supported. AIMP and iTunes were checked by developer. <br>CAD:foobar2000, MusicBee,J. River Media Center, Media Jukebox<br>WLM:Last.fm Client, TTPlayer, OpenPandora, Zune.<br> For foobar2000, <a href="http://poiru.github.com/foo-cad/">foo_cad plugin</a> is required. And MusicBee requires CAD.<br>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="aimp" value="AIMP" />
<label for="aimp">AIMP</label>
<span>AIMP</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="itunes" value="ITUNES" />
<label for="itunes">iTunes</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="npmm" value="MEDIAMONKEY" />
<label for="npmm">MediaMonkey</label>
<span>iTunes</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="npmm"
value="MEDIAMONKEY" />
<span>MediaMonkey</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="winamp" value="WINAMP" />
<label for="winamp">Winamp</label>
<span>Winamp</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wmp" value="WMP" />
<label for="wmp">WMP</label>
<span>WMP</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wlm" value="WLM" />
<label for="wlm">WLM</label>
<span>WLM</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="cad" value="CAD" />
<label for="cad">CAD</label><br><br>
<i class="material-icons" style="font-size:24px;">music_note</i>ボタンから簡単にNowPlayingができます。<br>
<h5>アカウントの連携</h5>
APIの性質上thedesk.topへアクセスします。<br>
<span>CAD</span>
</label>
<br><br>
Click <i class="material-icons" style="font-size:24px;">music_note</i>icon to NowPlaying<br>
<h5>Account Connection</h5>
TheDesk save your data on thedesk.top server.<br>
<div id="spotify-code-show" class="hide"><input type="text" id="spotify-code"><button
onclick="spotifyAuth()" class="btn waves-effect" style="width:100px;">設定</button></div>
onclick="spotifyAuth()" class="btn waves-effect" style="width:100px;">Save</button></div>
<a onclick="spotifyConnect()" class="btn waves-effect nex"
style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-enable"><i
class="fa fa-spotify left"></i>接続</a>
class="fa fa-spotify left"></i>Connect</a>
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i
class="fa fa-spotify left"></i>切断</a>
<h5>テンプレートの編集</h5>
以下を編集してテンプレートを変更できます。<br>
class="fa fa-spotify left"></i>Disconnect</a>
<h5>Edit a template</h5>
<br>
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
{url}</textarea><br>
Spotify:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名/{url}:各曲のSpotifyのURL<br>
macOS:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名/作曲家{composer}/サンプルレート{hz}/ビットレート{bitRate}/ジャンル{genre}<br>
Windows:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名<br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>アルバムアートワークを添付する(Spotify/Windows)</h5>
Spotify:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
macOS:{song}:Song name/{album}:Album name/{artist}:Artist name/composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre}<br>
Windows:{song}:Song name/{album}:Album name/{artist}:Artist name<br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">Save</button>
<h5>Attach an Artwork of Spotify</h5>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes" value="yes" />
<label for="awk_yes">はい</label>
<span>Yes</span>
</label>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no" value="no" />
<label for="awk_no">いいえ</label>
<span>No</span>
</label>
<br>
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">hearing</i>読み上げの設定
<i class="material-icons">hearing</i>TTS(text to speech) Preferences
</div>
<div class="collapsible-body">
<h5>読み上げの速さ</h5>
1-100まで、デフォルトは10<br>
<h5>Speed</h5>
1-100(default:10)<br>
<p class="range-field"><input type="range" id="voicespeed" min="1" max="100" value="10"
style="width:500px; max-width:100%" /></p>
<h5>読み上げの高さ</h5>
0-100まで、デフォルトは50。(大きくなるほど高い)<br>
<h5>Pitch</h5>
0-100(default:50)<br>
<p class="range-field"><input type="range" id="voicepitch" min="0" max="100" value="50"
style="width:500px; max-width:100%" /></p>
<h5>読み上げの音量</h5>
0-100まで、デフォルトは100<br>
<h5>Volume</h5>
0-100(default:100)<br>
<p class="range-field"><input type="range" id="voicevol" min="0" max="100" value="100"
style="width:500px; max-width:100%" /></p>
<h5>テスト</h5>
<input type="text" style="width:350px" id="voicetxt" value="これはテスト音声です。TheDeskはオープンソースのPC向けマストドンクライアントです。マルチサーバーやマルチカラムに対応しています。">
<h5>Test</h5>
<input type="text" style="width:350px" id="voicetxt" value="TheDesk is an open-source Mastodon client for PC.">
<button class="btn waves-effect blue" style="width:150px;" onclick="voicePlay()"
id="testplay">再生/停止</button><br>
id="testplay">Play/Stop</button><br>
<br>
<button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">設定</button>
<button class="btn waves-effect" style="width:100px;" onclick="voiceSettings()">Save</button>
</div>
</li>
</ul>
<br>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;"><i
class="material-icons left">undo</i>戻る</a>
class="material-icons left">undo</i>Back</a>
<br>
<br>キーボードショートカット一覧
<li>Ctrl+1-9:1番目9番目のTLにスクロール</li>
<li>N:投稿パネルを開く</li>
<li>X:投稿パネルを開閉</li>
<li>Ctrl+Enter:投稿</li>
<li>Ctrl+Enter+Shift:投稿(セカンダリートゥート)</li>
<li>Alt+Enter:セカンダリートゥートボタン</li>
<li>Ctrl+E:全ての通知を既読にする</li>
<li>Esc:投稿パネルを消す</li>
<li>F5:スーパーリロード</li>
<li>Ctrl+Shift+C:入力内容を消す</li>
<li>Ctrl+Shift+S:設定</li>
<li>Ctrl+Shift+M:アカウントマネージャ</li>
<br>Keyboard shortcuts
<li>Ctrl+1-9:Jump to n(1-9)th column</li>
<li>N:Open toot box</li>
<li>X:Toggle toot box</li>
<li>Ctrl+Enter:Post</li>
<li>Ctrl+Enter+Shift:Post(secondary toot)</li>
<li>Alt+Enter:Secondary Toot Button</li>
<li>Ctrl+E:Make all notifications read</li>
<li>Esc:Hide toot box</li>
<li>F5:Super Reload</li>
<li>Ctrl+Shift+C:Clear toot box</li>
<li>Ctrl+Shift+S:Preferences</li>
<li>Ctrl+Shift+M:Account Manager</li>
<li>Ctrl+Shift+N:NowPlaying(Spotify)</li>
<li>Ctrl+Shift+P:現在選択中のプロフィール</li>
<li>←/→:イメージビューワー起動時に画像切り替え</li>
<li>マウスホイール:イメージビューワー時に拡大縮小</li>
<li>Ctrl+Shift+P:Show profile of selecting</li>
<li>←/→:Show next or previous image</li>
<li>Mousewheel:Zoom a image</li>
<div class="hide kirishima">
以下Markdownに対応したインスタンスのみ。
<br>
@@ -401,16 +452,18 @@
</li><br>
</div>
<button class="btn waves-effect red" style="width:100%; max-width:500px;"
onclick="if(confirm('全てのデータを削除します。この操作は取り消せません。')){ localStorage.clear(); location.href='index.html'; }"><i
class="material-icons left">delete</i>初期化</button><br><br>
onclick="if(confirm('Delete all data. You cannot undo. Continue?')){ localStorage.clear(); location.href='index.html'; }"><i
class="material-icons left">delete</i>Reset(Danger)</button><br><br>
<button class="btn waves-effect indigo" onclick="about()" style="width:100%; max-width:500px;"><i
class="material-icons left">info</i>このソフトについて</button>
class="material-icons left">info</i>About TheDesk</button>
<a href="https://thedesk.top" class="btn waves-effect deep-purple lighten-2" style="width:100%; max-width:500px;"><i
class="material-icons left">web</i>公式HP</a>
class="material-icons left">web</i>Website</a>
<a href="https://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2"
style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>支援(Pixiv FANBOX)</a>
style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>Support(Pixiv FANBOX)</a>
<a href="https://www.patreon.com/cutls" class="btn waves-effect red darken-2"
style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>Support(Patreon)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:500px;"><i
class="material-icons left">list</i>ヘルプ/Docs(Constructing)</a>
class="material-icons left">list</i>Help/Docs(Constructing)</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2"
style="width:100%; max-width:500px;"><i class="fa fa-github left"></i>GitHub</a>
<a href="index.html?mode=user&code=Cutls@cutls.com" class="btn waves-effect blue lighten-2"
@@ -420,9 +473,9 @@
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
<a onclick="localStorage.removeItem('new-ver-skip'); location.href='index.html';"
class="pointer">アップデートを確認</a><br>
<a href="oss.html">OSS License(オープンソースライセンス)</a><br>
<span style="font-family:Open Sans;">Copyright &copy; Cutls P 2018 All Rights Reserved.
class="pointer">Check update</a><br>
<a href="oss.html">OSS License</a><br>
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a
href="https://thedesk.top/tos.html">Terms of Use</a>/<a href="https://thedesk.top/priv.html">Privacy
Policy</a>
@@ -432,6 +485,7 @@
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>

View File

@@ -1,18 +1,18 @@
var yesno = [
{
text:"はい",
text: "Yes",
value: "yes"
}, {
text:"いいえ",
text: "No",
value: "no"
}
];
var sound = [
{
text:"なし",
text: "None",
value: "none"
}, {
text:"既定",
text: "Default",
value: "default"
}, {
text: "Custom 1",
@@ -37,9 +37,9 @@ var envConstruction=[
setValue: 0,
width: 50,
text: {
head:"新規通知のポップアップお知らせの表示秒数",
desc:'0に設定すると表示されません',
after:""
head: "Popup notification(on Windows)",
desc: 'Hide to set "0"',
after: "sec"
}
}, {
id: "notf",
@@ -47,8 +47,8 @@ var envConstruction=[
checkbox: true,
setValue: "yes",
text: {
head:"ネイティブ通知設定",
desc:"Portableバージョンでは表示できません。",
head: "Native notification",
desc: "This does not work on Windows Portable ver.",
checkbox: yesno
}
}, {
@@ -59,9 +59,9 @@ var envConstruction=[
width: 50,
setValue: 300,
text: {
head:"マルチカラムの最低横幅",
desc:"画面全体の横幅÷コラム数がこの値を超えた時、横スクロールとなります。",
after:"px 以上"
head: "Minimum width of columns",
desc: "Scroll bar will be shown when your window size is more than ammounts of columns.",
after: "px above"
}
}, {
id: "fixwidth",
@@ -71,9 +71,9 @@ var envConstruction=[
setValue: 300,
width: 50,
text: {
head:"TweetDeckの限定の最低横幅",
head: "Minimum width of TweetDeck browser",
desc: "",
after:"px 以上"
after: "px above"
}
}, {
id: "size",
@@ -83,8 +83,8 @@ var envConstruction=[
width: 50,
setValue: 13,
text: {
head:"フォントサイズ",
desc:'<span style="font-size:13px">13px(絶対指定)</span>',
head: "Font size",
desc: '<span style="font-size:13px">13px(absolute value)</span>',
after: "px"
}
}, {
@@ -93,14 +93,14 @@ var envConstruction=[
checkbox: true,
setValue: false,
text: {
head:"ハードウェアアクセラレーションの無効化",
desc:"表示(特に設定画面)が乱れる場合に「はい」を選択してください。自動で再起動します。",
head: "Disable hardware acceleration",
desc: "Auto restarted",
checkbox: [
{
text:"はい",
text: "Yes",
value: "true"
}, {
text:"いいえ",
text: "No",
value: "false"
}
]
@@ -114,20 +114,20 @@ var tlConstruction=[
checkbox: true,
setValue: "absolute",
text: {
head:"時間表記設定",
desc:'相対時間の例:"1分前","3日前"<br>絶対時間の例"23:25:21","20171230 23:59:00"<br>混合表示は、当日のトゥートのみ相対、それ以外は絶対で表示 ',
head: "Time format",
desc: 'Relative format:"1 minutes ago","3 days ago"<br>Absolute format:"23:25:21","2017/12/30 23:59:00"<br>Mixed format:toots posted today are relative-format, others are absolute-format.',
checkbox: [
{
text:"相対時間",
text: "Relative",
value: "relative"
}, {
text:"絶対時間",
text: "Absolute",
value: "absolute"
}, {
text:"両方表示",
text: "Both relative and absolute",
value: "double"
}, {
text:"混合表示",
text: "Mixed",
value: "medium"
}
@@ -139,8 +139,8 @@ var tlConstruction=[
checkbox: true,
setValue: "yes",
text: {
head:"独自ロケールを使用",
desc:"対応サーバーではそのサーバーにあわせた言語表示ができます。",
head: "Server's unique locale",
desc: "This value is available on some Japanese servers",
checkbox: yesno
}
}, {
@@ -149,8 +149,8 @@ var tlConstruction=[
checkbox: true,
setValue: "yes",
text: {
head:"非表示設定の画像(NSFW)を隠す",
desc:"きつめのぼかしがかかります。",
head: "Hide NSFW pictures",
desc: "Strong blur effect",
checkbox: yesno
}
}, {
@@ -159,7 +159,7 @@ var tlConstruction=[
checkbox: true,
setValue: "yes",
text: {
head:"非表示設定のテキスト(CW)を隠す",
head: "Hide CW contents",
desc: "",
checkbox: yesno
}
@@ -169,14 +169,14 @@ var tlConstruction=[
checkbox: true,
setValue: "hidden",
text: {
head:"リプライ数表示",
head: "Reply counter style",
desc: "",
checkbox: [
{
text:"2以上のとき1+と表示",
text: "Show 1+ if the replies are more than 1.",
value: "hidden"
}, {
text:"2以上のとき1+と表示",
text: "Show 1+ if the replies are more than 1.",
value: "all"
}
@@ -188,7 +188,7 @@ var tlConstruction=[
checkbox: true,
setValue: "yes",
text: {
head:"アイコンのアニメーションを再生する",
head: "Animated GIF images animation",
desc: "",
checkbox: yesno
}
@@ -198,14 +198,14 @@ var tlConstruction=[
checkbox: true,
setValue: "local",
text: {
head:"タグタイムラインの表示範囲",
head: "Tag TL Search",
desc: "",
checkbox: [
{
text:"接続しているサーバー",
text: "Use federated network",
value: "all"
}, {
text:"検索対象のサーバーのみ",
text: "Use local network",
value: "local"
}
@@ -217,7 +217,7 @@ var tlConstruction=[
checkbox: true,
setValue: "no",
text: {
head:"viaを表示する",
head: "Show via",
desc: "",
checkbox: yesno
}
@@ -227,17 +227,17 @@ var tlConstruction=[
checkbox: true,
setValue: "no",
text: {
head:"アクションメニューを非表示",
desc:"「マウスオーバー」はすこし鬱陶しいと思うかもしれません。",
head: "Hide action buttons without mouseover",
desc: "You may feel 'mouseover' is unconfortable:(",
checkbox: [
{
text:"マウスオーバーで表示",
text: "Mouseover to show",
value: "yes"
}, {
text:"クリックで表示",
text: "Click to show",
value: "click"
}, {
text:"いいえ",
text: "No",
value: "no"
}
@@ -249,7 +249,7 @@ var tlConstruction=[
checkbox: true,
setValue: "yes",
text: {
head:"通知を開いているとき、通知新着お知らせを表示する",
head: "Show Notification marker, red colored bell and counter(if you show a notification column.)",
desc: "",
checkbox: yesno
}
@@ -262,18 +262,18 @@ var tlConstruction=[
storage: "sentence",
width: 50,
setValue: 500,
text:{after:"行 以上 または"}
text: { after: "lines above or" }
}, {
id: "letters",
storage: "letters",
width: 50,
setValue: 7000,
text:{after:"文字 以上"}
text: { after: "letters above" }
}
],
text: {
head:"指定行数以上を折りたたむ",
desc:"5文字以下のトゥートは折りたたみません。また、折りたたみ時は改行が描画されません。改行のみを行数とカウントします。",
head: "Auto folding",
desc: "TheDesk does not collapse totes of 5 characters or less. Also, when collapsing, newlines are not shown. TheDesk count only newlines as the number of lines.",
}
}, {
id: "img-height",
@@ -283,8 +283,8 @@ var tlConstruction=[
width: 80,
setValue: 200,
text: {
head:"画像の高さ",
desc:'オプション:「full」と指定すると全ての画像をクロップしません。',
head: "Height of images",
desc: 'Option:Set "full" to uncrop.',
after: "px"
}
}, {
@@ -293,8 +293,8 @@ var tlConstruction=[
checkbox: true,
setValue: "no",
text: {
head:"#InstanceTickerを使う",
desc:'トゥートした人の所属サーバーをわかりやすく彩ります(自サーバー以外のトゥート向け)。<a href="https://cdn.weep.me/mastodon/">#InstanceTickerについて</a> Copyright 2018 weepjp, kyori19.',
head: "Enable #InstanceTicker",
desc: 'Show colorful stickers about the server. <a href="https://cdn.weep.me/mastodon/">About #InstanceTicker</a> Copyright 2018 weepjp, kyori19.',
checkbox: yesno
}
}, {
@@ -303,7 +303,7 @@ var tlConstruction=[
checkbox: true,
setValue: "yes",
text: {
head:"タイムラインのアニメーション",
head: "Animation of timelines",
desc: "",
checkbox: yesno
}
@@ -313,7 +313,7 @@ var tlConstruction=[
checkbox: true,
setValue: "none",
text: {
head:"リプライの通知音",
head: "Sound(Reply)",
desc: "",
checkbox: sound
}
@@ -323,7 +323,7 @@ var tlConstruction=[
checkbox: true,
setValue: "none",
text: {
head:"お気に入り登録の通知音",
head: "Sound(Fav)",
desc: "",
checkbox: sound
}
@@ -333,7 +333,7 @@ var tlConstruction=[
checkbox: true,
setValue: "none",
text: {
head:"ブーストの通知音",
head: "Sound(Boost)",
desc: "",
checkbox: sound
}
@@ -343,7 +343,7 @@ var tlConstruction=[
checkbox: true,
setValue: "none",
text: {
head:"フォローの通知音",
head: "Sound(Follow)",
desc: "",
checkbox: sound
}
@@ -358,7 +358,7 @@ var postConstruction=[
width: 150,
setValue: "",
text: {
head:"デフォルトの警告文",
head: "Default warining text",
desc: "",
after: ""
}
@@ -371,18 +371,18 @@ var postConstruction=[
storage: "cw_sentence",
width: 50,
setValue: 500,
text:{after:"行 以上 または"}
text: { after: "lines above or" }
}, {
id: "cw_letters",
storage: "cw_letters",
width: 50,
setValue: 7000,
text:{after:"文字 以上"}
text: { after: "letters above" }
}
],
text: {
head:"長文投稿時に警告",
desc:"下で指定した以上のトゥートを投稿するときにCWするかのダイアログを表示します。",
head: "Alert before posting a long toot.",
desc: "Show dialog whether you make too-long text hidden.",
}
}, {
id: "cws",
@@ -390,7 +390,7 @@ var postConstruction=[
checkbox: true,
setValue: "no",
text: {
head:"標準でCWを設定",
head: "Always CW set",
desc: "",
checkbox: yesno
}
@@ -400,26 +400,26 @@ var postConstruction=[
checkbox: true,
setValue: "public",
text: {
head:"デフォルトの公開設定",
head: "Default visibility",
desc: "",
checkbox: [
{
text:"公開(Public)",
text: "Public",
value: "public"
}, {
text:"未収載(Unlisted)",
text: "Unlisted",
value: "unlisted"
}, {
text:"非公開(Private)",
text: "Private",
value: "private"
}, {
text:"ダイレクト(Direct)",
text: "Direct",
value: "direct"
}, {
text:"前回の投稿設定を記憶する(サーバーごとに記憶されます)",
text: "Memory(memorized as each server)",
value: "memory"
}, {
text:"マストドンアカウント設定の既定値",
text: "Default of your visibility(Set on preferences of Mastodon server)",
value: "useapi"
}
]
@@ -430,14 +430,14 @@ var postConstruction=[
checkbox: true,
setValue: "no-act",
text: {
head:"画像投稿設定",
head: "Posting images preferences",
desc: "",
checkbox: [
{
text:"画像を投稿し、画像のURLを最後に表示",
text: "Insert media URL",
value: "url"
}, {
text:"画像を投稿するがURLは表示しない",
text: "Insert nothig",
value: "no-act"
}
]
@@ -448,17 +448,17 @@ var postConstruction=[
checkbox: true,
setValue: "yes",
text: {
head:"投稿ボックスの挙動",
head: "Action of posting-box",
desc: "",
checkbox: [
{
text:"たたむ",
text: "Folding",
value: "yes"
}, {
text:"投稿後も隠さない",
text: "Open after posting",
value: "no"
}, {
text:"枠外クリックで閉じない(起動時に展開)",
text: "Absolutely open",
value: "absolute"
}
]
@@ -469,20 +469,20 @@ var postConstruction=[
checkbox: true,
setValue: "nothing",
text: {
head:"引用形式",
head: "Quote format",
desc: "",
checkbox: [
{
text:"URLのみ",
text: "Only URL",
value: "simple"
}, {
text:"URLとアカウント名(相手に通知)",
text: "URL and acct(mention to the user)",
value: "mention"
}, {
text:"本文・URL・アカウント名",
text: "URL, text and acct(mention to the user)",
value: "full"
}, {
text:"使わない(TL上にボタンも表示されません)",
text: "Disabled(Hide buttons on TLs)",
value: "nothing"
}
]
@@ -493,14 +493,14 @@ var postConstruction=[
checkbox: true,
setValue: "remain",
text: {
head:"投稿後や起動時のアカウント",
desc:"メインアカウントはアカウント設定で指定できます。投稿以外のアカウント選択にも影響します。",
head: "Default accounts of actions",
desc: "Main account can be set on Account Manager.",
checkbox: [
{
text:"最後に使用したアカウント",
text: "Account you used recently",
value: "remain"
}, {
text:"メインアカウント",
text: "Main account",
value: "main"
}
]
@@ -511,26 +511,26 @@ var postConstruction=[
checkbox: true,
setValue: "public",
text: {
head:"セカンダリートゥートボタン",
head: "Secondary Toot Button",
desc: "",
checkbox: [
{
text:"表示しない",
text: "Hidden",
value: "nothing"
}, {
text:"公開(Public)",
text: "Public",
value: "public"
}, {
text:"未収載(Unlisted)",
text: "Unlisted",
value: "unlisted"
}, {
text:"非公開(Private)",
text: "Private",
value: "private"
}, {
text:"ダイレクト(Direct)",
text: "Direct",
value: "direct"
}, {
text:"ローカル限定",
text: "Local Only",
value: "local",
kirishima: true,
kirishimaText: "非対応インスタンスでは「未収載」になります。"
@@ -544,7 +544,7 @@ var postConstruction=[
setValue: "normal",
setValue: "no",
text: {
head:"絵文字にゼロ幅スペースを使う",
head: "Zero-width space when inserting emojis",
desc: "",
checkbox: yesno
}

View File

@@ -1,5 +1,6 @@
<!doctype html>
<html lang="ja">
<html lang="en">
<head>
<title>Update - TheDesk</title>
<link href="../../css/materialize.css" type="text/css" rel="stylesheet">
@@ -14,6 +15,7 @@
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
</head>
<body>
<style>
body {
@@ -23,6 +25,7 @@ body{
padding: 10px;
text-align: right;
}
#start {
display: flex;
justify-content: center;
@@ -31,17 +34,25 @@ body{
height: calc(100vh - 2.5rem);
text-align: center;
}
#checkbox {
text-align: left;
}
a,button,input,label,i{
a,
button,
input,
label,
i {
-webkit-app-region: no-drag;
}
#updskip {
display: flex;
justify-content: center;
align-items: center;
}
.skipbtn {
display: block;
float: left;
@@ -55,10 +66,12 @@ a,button,input,label,i{
border: 1px solid;
overflow: hidden;
}
.skipbtn:hover {
background-color: #b3e5fc;
transition: all 0.3s ease-in-out;
}
#prog {
font-size: 200%;
}
@@ -72,28 +85,39 @@ a,button,input,label,i{
<div id="start">
<div id="box" class="show">
<h2>TheDesk</h2>
<p>アップデートがあります</p>
<p>Get latest TheDesk</p>
<span id="now"></span><b id="ver"></b><br>
<span id="det"></span><br>
<button class="waves-effect btn windows hide" onclick="update('install')" style="margin-left:15px;">インストーラー版(推奨)</button>
<button class="waves-effect btn windows hide" onclick="update('portable')" style="margin-left:15px;">ポータブル版</button>
<button class="waves-effect btn linux hide" onclick="update('linux')" style="margin-left:15px;">開始</button>
<button class="waves-effect btn mac hide" onclick="update('mac')" style="margin-left:15px;">開始</button>
<button class="waves-effect btn windows hide" onclick="update('install')"
style="margin-left:15px;">Installer ver.</button>
<button class="waves-effect btn windows hide" onclick="update('portable')"
style="margin-left:15px;">Portable ver.</button>
<button class="waves-effect btn linux hide" onclick="update('linux')"
style="margin-left:15px;">Start</button>
<button class="waves-effect btn mac hide" onclick="update('mac')"
style="margin-left:15px;">Start</button>
<br>
問題が発生しますか?<br><a href="https://thedesk.top">公式HP</a>からダウンロードをお試しください。
Some problems?<br>Please download on <a href="https://thedesk.top">Oficial HP</a>.
</div>
<div id="skipper" class="hide">
<h4>アップデートは必ず行ってください</h4>
アップデートをスキップする<br>
<h4>You may lose a cool experience!</h4>
Skip this update<br>
<div id="updskip">
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light"><div>次回TL表示時まで</div></a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light"><div>次のバージョンが出るまで</div></a>
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light">
<div>Until next TL loading</div>
</a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light">
<div>Until next version</div>
</a>
</div>
<a class="pointer waves-effect" onclick="skipper();" style="margin-top:5px">アップデートを続行</a>
<a class="pointer waves-effect" onclick="skipper();" style="margin-top:5px">Continue updating</a>
</div>
<div id="dlnow" class="hide">
<h4>ダウンロード中</h4>
<h4>Downloading...</h4>
<h4 id="prog"></h4>
<div class="progress">
<div class="determinate" style="width: 0%"></div>
</div>
</div>
</div>
<script type="text/javascript" src="../../js/common/about.js"></script>
@@ -111,8 +135,6 @@ function skipper(){
$("#skipper").toggleClass("show");
}
}
var electron = require("electron");
var ipc = electron.ipcRenderer;
verck();
function update(sel) {
$("#box").toggleClass("show");
@@ -120,8 +142,7 @@ function update(sel){
$("#dlnow").toggleClass("hide");
$("#dlnow").toggleClass("show");
$("#prog").text("");
var remote=electron.remote;
var bit=process.arch;
var bit = localStorage.getItem("bit");
var start = "https://thedesk.top/ver.json";
fetch(start, {
method: 'GET',
@@ -158,28 +179,28 @@ function update(sel){
}
} else if (sel == "mac") {
var url = json["mac"];
var file="TheDesk-darwin-x64.zip";
shell.openExternal(url);
return false;
}
ipc.send('download-btn', [url,file]);
postMessage(["downloadButton", [url, file]], "*")
});
}
function quit() {
ipc.send('quit', 'go');
postMessage(["sendSinmpleIpc", "quit"], "*")
}
ipc.on('prog', function (event, arg) {
function updateProg(arg) {
console.log(arg);
$("body").css('background','linear-gradient(#fff 0%,#fff '+(1-arg)*100+'%, #d7ccc8 '+(1-arg)*100+'%, #d7ccc8 100%)');
$(".determinate").css("width", arg * 100 + "%");
$("#prog").text(Math.floor(arg * 100) + "%");
})
ipc.on('mess', function (event, arg) {
}
function updateMess(arg) {
console.log(arg);
$("#prog").text(arg);
})
}
function verck() {
var remote=electron.remote;
var platform=remote.process.platform;
var bit=process.arch;
var platform = localStorage.getItem("platform");
var bit = localStorage.getItem("bit");
if (platform == "win32") {
$('.windows').removeClass("hide")
} else if (platform == "linux") {
@@ -208,7 +229,7 @@ function verck(){
$("#ver").text(json.desk_mac);
localStorage.setItem("next-ver", json.desk_mac);
}
var lang="ja";
var lang = "en";
if (lang == "ja") {
$("#det").html(json.detail);
} else {

View File

@@ -1,5 +1,6 @@
<!doctype html>
<html lang="ja">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
@@ -10,19 +11,54 @@
<link href='../../css/tl.css' rel='stylesheet' type='text/css'>
<link href='../../css/userdata.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
<style>.acct{display:flex; justify-content:space-around;}
.card{width:400px; background-color: #9e9e9e; margin:10px; }
body,html{overflow-y: scroll;}
#acct-list{display:flex; flex-wrap:wrap; color:white; align-items: flex-start}
.lts{font-size:150%}
.colorsel{ display:flex; }
.card .colorsel div:not(.exc){width:20px;height:20px;}
.card .colorsel div.exc{width:40px;height:20px;}
<style>
.acct {
display: flex;
justify-content: space-around;
}
.card {
width: 400px;
background-color: #9e9e9e;
margin: 10px;
}
body,
html {
overflow-y: scroll;
}
#acct-list {
display: flex;
flex-wrap: wrap;
color: white;
align-items: flex-start
}
.lts {
font-size: 150%
}
.colorsel {
display: flex;
}
.card .colorsel div:not(.exc) {
width: 20px;
height: 20px;
}
.card .colorsel div.exc {
width: 40px;
height: 20px;
}
.first {
display: flex;
justify-content: center;
align-items: center
}
.first .hide-first {
display: none;
}
@@ -36,6 +72,7 @@ body,html{overflow-y: scroll;}
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
</head>
<body id="mainView">
<script type="text/javascript" src="../../js/common/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
@@ -48,7 +85,8 @@ body,html{overflow-y: scroll;}
<script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<div class="hide-first">
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">戻る</a><br>
<a href="index.html" class="btn waves-effect orange nex"
style="width:100%; max-width:200px;">戻る</a><br>
<h5>アカウント一覧</h5>
<div id="acct-list"></div>
<div class="divider"></div>
@@ -61,17 +99,23 @@ body,html{overflow-y: scroll;}
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp">
<div id="ins-suggest"></div>
チェックを外すとコード貼り付けをスキップできます。(<u>Mastodon</u>にWindowsやmacOSからログインする場合)失敗する場合はチェックを入れてください。<br>
<label>
<input type="checkbox" class="filled-in" id="linux" />
<label for="linux">コードセットアップ</label><br>
<span>コードセットアップ</span>
</label>
<br>
<label>
<input type="checkbox" class="filled-in" id="misskey" />
<label for="misskey">Misskeyとしてログイン</label><br>
<span>Misskeyとしてログイン</span>
</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br>
</div>
<div class="col s4">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div></div>
</div>
</div>
<div id="auth" style="display:none">
指定されたコードを貼り付けてください。ログインウィンドウは閉じていただいて構いません。<br>
<input type="text" id="code" placeholder="コードを入力">

View File

@@ -30,12 +30,13 @@
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.ja.js"></script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/blurhash.js"></script>
<script type="text/javascript" src="../../js/common/version.js"></script>
<script type="text/javascript" src="../../js/common/keyshortcut.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
<script>
var ver = "Usamin (18.3.2)";
var ver = "Usamin (18.6.1)";
//betaを入れるとバージョンチェックしない
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
//var ver="beta";
@@ -44,6 +45,7 @@
var tlid = 0;
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<canvas id="canvas" style="top:-100px; position:fixed;width:32px;height:32px" width="32" height="32"></canvas>
<div id="tl">
<!--TL-->
<!--ドラッグハンドラ-->
@@ -96,10 +98,12 @@
title="箇条書きリスト">format_list_bulleted</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('1. ','yes','yes')"
title="番号付きリスト">format_list_numbered</i>
<i class="pointer setting fa fa-subscript waves-effect" onclick="markdown('__','yes','no','before')"
title="下付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
<i class="pointer setting fa fa-superscript waves-effect" onclick="markdown('_','yes','no','before')"
title="上付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
<i class="pointer setting fa fa-subscript waves-effect"
onclick="markdown('__','yes','no','before')" title="下付き文字 テキストボックス内を選択してから押すと囲みます。"
style="font-size:1.5rem"></i>
<i class="pointer setting fa fa-superscript waves-effect"
onclick="markdown('_','yes','no','before')" title="上付き文字 テキストボックス内を選択してから押すと囲みます。"
style="font-size:1.5rem"></i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('spin')"
title="回転 テキストボックス内を選択してから押すと囲みます。">autorenew</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('pulse')"
@@ -119,14 +123,19 @@
title="文字色変更 テキストボックス内を選択してから押すと囲みます。">color_lens</i>
<input id="colorhex" style="width: calc(50% - 50px); margin: 0; height: 24px;" type="color">
<br>
<i class="material-icons pointer setting waves-effect" onclick="markdownLink()" title="リンク挿入">link</i>
<input id="linkt" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクテキスト">&nbsp;
<input id="link2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクアドレス">
<i class="material-icons pointer setting waves-effect" onclick="markdownLink()"
title="リンク挿入">link</i>
<input id="linkt" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="リンクテキスト">&nbsp;
<input id="link2" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="リンクアドレス">
<br>
<i class="material-icons pointer setting waves-effect" onclick="markdownImage()"
title="インライン画像挿入">image</i>
<input id="image" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="代替テキスト">&nbsp;
<input id="image2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="画像アドレス">
<input id="image" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="代替テキスト">&nbsp;
<input id="image2" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="画像アドレス">
</div>
</div>
<div class="input-field col s12" id="preview-field" style="margin-top: 0;">
@@ -152,14 +161,15 @@
<div class="col s12 mize" style="margin-top: 0; display:flex; justify-content: space-between">
<i class="waves-effect gray material-icons" id="nsfw" title="画像に制限を付与"
onclick="nsfw()">visibility_off</i>
<i class="waves-effect gray material-icons purple-text dropdown-button" data-activates='dropdown1'
id="vis-icon">public</i>
<i class="waves-effect gray material-icons purple-text dropdown-trigger"
data-target="dropdown1" id="vis-icon">public</i>
<a class="waves-effect gray" id="cw" onclick="cw()" title="コンテンツワーニング(トゥートを表示する前にメッセージで隠す)">CW</a>
<span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray"
onclick="fileselect()" title="ファイルを選択">photo_library</i></span></span>
<i class="waves-effect gray material-icons" onclick="emojiToggle()" id="emojibtn"
title="絵文字を挿入">tag_faces</i>
<i class="waves-effect gray material-icons dropdown-button" data-activates='dropdown2'>more_vert</i>
<i class="waves-effect gray material-icons dropdown-trigger"
data-target="dropdown2">more_vert</i>
<i class="material-icons nex gray waves-effect" title="トゥートボックスのクリア(Ctrl+Shit+C)"
data-trans-title="post_box_clear" id="clear">clear</i>
</div>
@@ -174,13 +184,15 @@
<br>
<input type="text" id="cw-text" placeholder="警告文" class="mize" style="margin:0">
<div id="sch-box">時間指定投稿<br><span class="sml">2.7.0~ 5分以内には投稿できません。サーバーの時計が正確とは限りません。</span><br>
<input type="datetime-local" id="sch-date" placeholder="時間指定投稿" class="datepicker" style="margin:0">
<input type="datetime-local" id="sch-date" placeholder="時間指定投稿" class="datepicker"
style="margin:0">
</div>
</div>
</div>
<!-- 公開範囲 Dropdown Structure -->
<ul id='dropdown1' class='dropdown-content'>
<li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">公開範囲指定</li>
<ul id="dropdown1" class="dropdown-content">
<li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">公開範囲指定
</li>
<li>
<a onclick="vis('public')">公開(Public)</a>
</li>
@@ -201,10 +213,7 @@
</li>
</ul>
<!-- その他 Dropdown Structure -->
<ul id='dropdown2' class='dropdown-content'>
<li>
<a onclick="adobe()">Adobeフォトエディタ</a>
</li>
<ul id="dropdown2" class="dropdown-content">
<li>
<a onclick="nowplaying('spotify');">NowPlaying(Spotify)</a>
</li>
@@ -226,8 +235,9 @@
<div id="toot-btn-field">
<button class="btn waves-effect indigo unmize toot-btn-group" onclick="post()"
id="toot-post-btn">トゥート</button>
<button class="btn waves-effect indigo darken-3 unmize hide toot-btn-group" onclick="sec()" id="toot-sec-btn"><i
class="material-icons" id="toot-sec-icon" title="セカンダリートゥート">lock_open</i></button>
<button class="btn waves-effect indigo darken-3 unmize hide toot-btn-group" onclick="sec()"
id="toot-sec-btn"><i class="material-icons" id="toot-sec-icon"
title="セカンダリートゥート">lock_open</i></button>
</div>
</div>
<div id="right-side">
@@ -298,10 +308,14 @@
<input type="text" class="mastodon-choice" placeholder="選択肢2">
<input type="text" class="mastodon-choice" placeholder="選択肢3">
<input type="text" class="mastodon-choice" placeholder="選択肢4">
<label>
<input type="checkbox" class="filled-in" id="poll-multiple" value="1" />
<label for="poll-multiple">複数選択を許可</label><br>
<span>複数選択を許可</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="poll-until" value="1" />
<label for="poll-until">投票するまで票数を隠す</label><br>
<span>投票するまで票数を隠す</span>
</label>
<input type="number" style="width:50px" id="days_poll" placeholder="d" value="0">
<input type="number" style="width:50px" id="hours_poll" placeholder="h" value="0">時間
<input type="number" style="width:50px" id="mins_poll" placeholder="m" value="6">
@@ -312,7 +326,7 @@
<!-- Modal Structure Tootdata-->
<div id="tootmodal" class="modal modal-fixed-footer">
<div class="modal-content">
<ul class="collapsible" data-collapsible="accordion" id="det-col">
<ul class="collapsible"id="det-col">
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">people_outline</i>これより後のLocal TL(言及確認)
@@ -396,12 +410,12 @@
class="fas fa-share"></i></button>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i
class="fas fa-retweet"></i></button>
<button class="dropdown-button btn waves-effect indigo" style="width:100%;"
onclick="staEx('rt')"><i class="fas fa-retweet"></i></button>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect orange" style="width:100%;" onclick="staEx('fav')"><i
class="fas fa-star"></i></button>
<button class="dropdown-button btn waves-effect orange" style="width:100%;"
onclick="staEx('fav')"><i class="fas fa-star"></i></button>
</div>
</div>
<div id="toot-tools">
@@ -447,8 +461,8 @@
<div id="his-plus-action">
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-emp-btn"
onclick="empUser()">ユーザー強調</a>
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data" id="his-end-btn"
onclick="pinUser()">紹介する</a><br>
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data"
id="his-end-btn" onclick="pinUser()">紹介する</a><br>
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-openin"
onclick="profbrws()">ブラウザで開く</a><br>
</div><br>
@@ -461,43 +475,48 @@
</div>
<div class="his-float" id="his-float-timeline">
<div id="my-data-nav">
<ul class="custom-tabs transparent">
<li class="custom-tab col my-data-width active-back column-first">
<ul class="tabs transparent">
<li class="tab col my-data-width active-back column-first">
<a go="#his-tl" title="タイムライン"><i class="material-icons">timeline</i></a>
</li>
<li class="custom-tab col my-data-width">
<li class="tab col my-data-width">
<a go="#his-follow-list" title="フォロー"><i class="material-icons">people</i></a>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follower-list" title="フォロワー"><i class="material-icons">people</i></a>
<li class="tab col my-data-width">
<a go="#his-follower-list" title="フォロワー"><i
class="material-icons">people</i></a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-action" title="他のアカウントで操作"><i class="material-icons">account_box</i></a>
<li class="tab col my-data-width only-his-data">
<a go="#his-action" title="他のアカウントで操作"><i
class="material-icons">account_box</i></a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<li class="tab col my-data-width only-his-data">
<a go="#his-list" title="リスト"><i class="material-icons">list</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<li class="tab col my-data-width only-my-data">
<a go="#his-fav-list" title="お気に入り登録"><i class="material-icons">star</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<li class="tab col my-data-width only-my-data">
<a go="#his-blocking-list" title="ブロック"><i class="material-icons">block</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-blocking-list" title="ブロック"><i class="material-icons">voice_over_off</i></a>
<li class="tab col my-data-width only-my-data">
<a go="#his-blocking-list" title="ブロック"><i
class="material-icons">voice_over_off</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-domain-list" title="ドメインブロック"><i class="material-icons">language</i><i
class="material-icons">block</i></a>
<li class="tab col my-data-width only-my-data">
<a go="#his-domain-list" title="ドメインブロック"><i
class="material-icons">language</i><i class="material-icons">block</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<li class="tab col my-data-width only-my-data">
<a go="#his-prof-list" title="プロフィール編集"><i class="material-icons">create</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-request-list" title="フォローリクエスト"><i class="material-icons">how_to_reg</i></a>
<li class="tab col my-data-width only-my-data">
<a go="#his-request-list" title="フォローリクエスト"><i
class="material-icons">how_to_reg</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-follow-recom-list" title="おすすめ"><i class="material-icons">recent_actors</i></a>
<li class="tab col my-data-width only-my-data">
<a go="#his-follow-recom-list" title="おすすめ"><i
class="material-icons">recent_actors</i></a>
</li>
</ul>
</div>
@@ -521,10 +540,12 @@
</div>
<div id="his-action" class="tab-content">
他のアカウントを使用するフォロー((解除はできません。))<br>
<div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div>
<div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div>
<a href="#!" class="waves-effect btn" onclick="follow('selector','true')">フォロー</a><br>
または<br>
<a href="#!" class="waves-effect btn" onclick="udgEx('selector', 'selector')">プロフィールを表示</a><br>
<a href="#!" class="waves-effect btn"
onclick="udgEx('selector', 'selector')">プロフィールを表示</a><br>
</div>
<div id="his-list" class="tab-content">
<div id="his-lists-a">リストに追加するためにはフォローが必要です。</div>
@@ -534,17 +555,20 @@
<div id="his-fav-list" class="tab-content">
<div id="his-fav-list-contents" class="cont-series">
</div>
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="showFav('more')">もっと</button>
<button class="btn waves-effect" style="width:100%; padding:0;"
onclick="showFav('more')">もっと</button>
</div>
<div id="his-blocking-list" class="tab-content">
<div id="his-blocking-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showBlo('more')">もっと</button>
<button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showBlo('more')">もっと</button>
</div>
<div id="his-muting-list" class="tab-content">
<div id="his-muting-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showMut('more')">もっと</button>
<button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showMut('more')">もっと</button>
</div>
<div id="his-domain-list" class="tab-content">
<div id="his-domain-list-contents" class="cont-series">
@@ -565,7 +589,8 @@
<textarea placeholder="自己紹介" id="his-des-val" class="materialize-textarea"></textarea>
<label for="his-des-val">自己紹介</label>
</div>
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="profedit()">変更</button>
<button class="btn waves-effect" style="width:100%; padding:0;"
onclick="profedit()">変更</button>
<br>アバターを変更:
<span id="prof-change">
<input type="file" onchange="imgChange(this,'avatar')">
@@ -578,7 +603,8 @@
<div id="his-request-list" class="tab-content">
<div id="his-request-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showReq('more')">もっと</button>
<button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showReq('more')">もっと</button>
</div>
<div id="his-follow-recom-list" class="tab-content">
<div id="his-follow-recom-contents" class="cont-series">
@@ -650,21 +676,28 @@
<a href="https://thedesk.top" target="_blank">HP</a><br>
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
<br>
<div id="release-Usamin_18-3-2" class="release-do" style="display:none; ">
<div id="release-Usamin_18-6-1" class="release-do" style="display:none; ">
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
Entyでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。<br>
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
<h5>Release Note Usamin (18.3.2)</h5>
絵文字の描画修正<br>
旗系絵文字の入力修正<br>
このトゥートより後ローカルタイムライン<br>
・このトゥートより後ユーザータイムライン<br>
このトゥートより後連合タイムライン<br>
Notestock公開時にリンクを表示<br>
<h5>Release Note Usamin (18.6.1)</h5>
リプライができない不具合を修正<br>
ワードフィルター/強調の適用がおかしい不具合<br>
テキストエリアのフォントが設定通りにならない不具合<br>
<h5>Release Note Usamin (18.6.0)</h5>
アカウント選択のデザイン修正。クリック直後に閉じてしまうバグを修正。<br>
投票済みのアンケートについて修正。<br>
<b>セキュリティの大幅な強化。</b><br>
・ご注意<img class="emoji" draggable="false" alt="⚠️" src="https://twemoji.maxcdn.com/2/72x72/26a0.png">: TweetDeck統合は設定で有効にしないと使えなくなりました。<br>
・Adobeフォトエディタの廃止
<br>
<h5>ThinkingDeskラベル</h5>
<img src="../../img/thinkingdesk.png" style="width:100px;" draggable="false"><br>
手作りマットラベル。貼ってはがせる。300円なのでポイントの余りでどうぞ。<br>
<a href="https://item.mercari.com/jp/m822743330" target="_blank">メルカリ</a>へ。
</div>
<div id="release-en">
<div id="release-en" style="display:none">
<h5>Let's make it native!</h5>
<a href="https://translate.thedesk.top">Crowdin translation project</a>
</div>
@@ -675,12 +708,17 @@
href="https://www.pixiv.net/fanbox/creator/28105985" target="_blank">
Pixiv FANBOXで支援
</a>
<a class="btn-share btn waves-effect waves-light red darken-2" href="https://www.patreon.com/cutls"
target="_blank">
Patreonで支援
</a>
<a class="btn-share btn waves-effect waves-light blue"
href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">
Amazonほしいものリスト
</a>
<br>
<a href="mailto:mstdn@thedesk.top" target="_blank">mstdn@thedesk.top</a>にAmazonギフトカードを送る<br>
<a href="mailto:web-pro@cutls.com"
target="_blank">web-pro@cutls.com</a>にAmazonギフトカードを送る<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
</div>
@@ -714,7 +752,8 @@
class="material-icons">view_headline</i><span>リスト</span></div>
<div class="waves-effect" onclick="filterMenu()" id="filterMenu"><i
class="material-icons">filter_list</i><span>フィルター</span></div>
<div class="waves-effect" onclick="help()"><i class="material-icons">help_outline</i><span>ヘルプ</span></div>
<div class="waves-effect" onclick="help()"><i
class="material-icons">help_outline</i><span>ヘルプ</span></div>
<div class="waves-effect" onclick="location.href='index.html'"><i
class="material-icons">refresh</i><span>TL再読込</span></div>
</div>
@@ -735,7 +774,8 @@
<div><i class="material-icons">people_outline</i></div><span>ローカル</span>
</div>
<div class="type waves-effect" data-type="local-media">
<div><i class="material-icons">people_outline</i><i class="material-icons sub-icon">perm_media</i>
<div><i class="material-icons">people_outline</i><i
class="material-icons sub-icon">perm_media</i>
</div><span>ローカル(メディア)</span>
</div>
<div class="type waves-effect" data-type="home">
@@ -745,7 +785,8 @@
<div><i class="material-icons">language</i></div><span>連合</span>
</div>
<div class="type waves-effect" data-type="pub-media">
<div><i class="material-icons">language</i><i class="material-icons sub-icon">perm_media</i></div>
<div><i class="material-icons">language</i><i
class="material-icons sub-icon">perm_media</i></div>
<span>連合(メディア)</span>
</div>
<div class="type waves-effect" data-type="dm">
@@ -755,7 +796,8 @@
<div><i class="material-icons">merge_type</i></div><span>統合(ローカルとホーム)</span>
</div>
<div class="type waves-effect" data-type="plus">
<div><i class="material-icons">merge_type</i><i class="material-icons sub-icon">reply</i></div>
<div><i class="material-icons">merge_type</i><i
class="material-icons sub-icon">reply</i></div>
<span>統合(LTL+BT+返信)</span>
</div>
<div class="type waves-effect" data-type="notf">
@@ -785,8 +827,8 @@
<div class="input-field">
<input id="src" type="text" class="validate" style="width:60%">
<label for="src" data-trans="src">検索</label>
<button class="btn waves-effect indigo" style="width: 36%;padding: 0;padding-left: 15px;" onclick="src()"
data-trans-i="src">
<button class="btn waves-effect indigo" style="width: 36%;padding: 0;padding-left: 15px;"
onclick="src()" data-trans-i="src">
<i class="material-icons left" style="margin:0">search</i>検索
</button>
<br>
@@ -813,7 +855,8 @@
<label>選択(スクロールで全選択肢表示)</label>
</div>
<div style="float:left; padding-top:8px; padding-bottom:28px;">
<button class="btn waves-effect indigo" style="width:80px;" onclick="list()" data-trans-i="lists">
<button class="btn waves-effect indigo" style="width:80px;" onclick="list()"
data-trans-i="lists">
一覧
</button>
</div>
@@ -830,7 +873,8 @@
<label>選択(スクロールで全選択肢表示)</label>
</div>
<div style="float:left; padding-top:8px; padding-bottom:28px;">
<button class="btn waves-effect indigo" style="width:80px;" onclick="filter()" data-trans-i="filters">
<button class="btn waves-effect indigo" style="width:80px;" onclick="filter()"
data-trans-i="filters">
一覧
</button>
</div>
@@ -838,20 +882,34 @@
<input type="hidden" id="filter-edit-id">
<input type="text" style="width:150px" id="filter-add-word" placeholder="フィルターワード"><br>
適応範囲<br>
<label>
<input type="checkbox" class="filled-in" id="home_filter" value="home" />
<label for="home_filter">ホーム</label>
<span>ホーム</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="local_filter" value="public" />
<label for="local_filter">ローカル</label>
<span>ローカル</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="notf_filter" value="notifications" />
<label for="notf_filter">通知</label>
<span>通知</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="conv_filter" value="thread" />
<label for="conv_filter">会話</label><br>
<span>会話</span>
</label>
オプション<br>
<label>
<input type="checkbox" class="filled-in" id="wholeword_filter" value="1" />
<label for="wholeword_filter">単語マッチ</label><br>
<span>単語マッチ</span>
</label>
<br>
<span class="sml">非ラテン系の文字列では「単語マッチ」は推奨されません。</span><br>
<label>
<input type="checkbox" class="filled-in" id="except_filter" value="1" />
<label for="except_filter">除外</label><br>
<span>除外</span>
</label>
<br>
<span class="sml">「除外」時マッチしたトゥートは非可逆的に除外され、削除後も閲覧できません。</span><br>
有効期限(あと)<span class="sml">未指定(または0分)で「無期限」になります。<b>仕様上数値の正確性を保証できません。</b></span><br><br>
<input type="number" style="width:50px" id="days_filter" placeholder="d" value="0">
@@ -875,12 +933,16 @@
</a>&nbsp;|&nbsp;
<a onclick="bottomReverse()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">swap_horiz</i>トゥートボタンの左右入れ替え
</a>&nbsp;|&nbsp;
<a onclick="openRN()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">new_releases</i>Release Note
</a>
</div>
<div id="main">
<!--TLのTL-->
<div id="timeline-container">
<div id="something-wrong">
<img src="" style="width:150px;margin:5px;display:none;" draggable="false">
<div>内部エラーです。再読込して治らない場合は初期化(全データ削除)をしてください。(事前に設定をエクスポートしておくことをおすすめします。)</div>
</div>
</div>
@@ -905,7 +967,8 @@
<i class="material-icons nex" title="設定(Ctrl+Shift+S)">settings</i>
</a>
<a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="最小のマストドン。TheDesk Nano" data-trans-title="nano_desp">remove_from_queue</i>
<i class="material-icons" title="最小のマストドン。TheDesk Nano"
data-trans-title="nano_desp">remove_from_queue</i>
</a>
<a onclick="menu()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="リスト">apps</i>
@@ -942,6 +1005,56 @@
</div>
</div>
</div>
<!--Support me-->
<div id="support-btm" class="z-depth-4 hide">
<div id="support-btm-ja">
<h5>ご支援いただけませんか?</h5>
(これは支援の有無に関わらず定期的に出ます。)<br>
あなたのMastodon, Misskeyライフを邪魔してしまって申し訳ありません。<br>
乞食のようなマネをしてご支援をお願いするのもどうかと思いますが、少々お時間をください。<br>
<br>
あなたはMastodon, MisskeyクライアントにTheDeskを選びました。これは奇跡的なことです。今考えればブラウザからアクセスした方が良かったのではと感じることかと存じます。<br>
それでも、あなたはTheDeskを使っています。<br>
TheDeskは2018年1月13日に最初のバージョンが出ました。それから圧倒的な機能数でゴリ押しするクライアントになっています。<br>
新機能に追従を図るためのモチベーションもさることながら、安全対策上TheDeskは開発者の緊急メッセージを表示できる機能が備わっており、開発者が送信ボタンを押すとすべてのTheDeskユーザーに通知が行くようになっています。<br>
かつてこれによってバグ報告を行い、使用を自粛していただくこともありました。<br>
そのような機能を実装するために、Mastodonなどのインスタンスを運営するのと同じく有料のサーバーを運用しています。<br>
<b>全てのユーザーが安心してTheDeskを使っていただける環境のため</b>にも、ぜひご支援をご検討ください。<br>
<b>TheDeskは営利目的ではないため、有料機能や広告は一切ありません。<br>皆様のあたたかいご支援のもとで製作されています。</b>
</div>
<div id="support-btm-en" class="hide">
<h5>Support me</h5>
It may disturb your Mastodon life, but your support is required to keep TheDesk awesome!<br>
<b>TheDeskは営利目的ではないため、有料機能や広告は一切ありません。<br>皆様のあたたかいご支援のもとで製作されています。</b>
</div>
<div id="support-btm-middle">
<h5>月額支援(大歓迎)</h5>
<a class="btn-share btn waves-effect waves-light red lighten-2"
href="https://www.pixiv.net/fanbox/creator/28105985" target="_blank">
Pixiv FANBOXで支援
</a>
<a class="btn-share btn waves-effect waves-light red darken-2" href="https://www.patreon.com/cutls"
target="_blank">
Patreonで支援
</a>
</div>
<div id="support-btm-right">
<h5>一度限りの支援(もちろん歓迎)</h5>
<a class="btn-share btn waves-effect waves-light blue"
href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">
Amazonほしいものリスト
</a>
<br>
<a href="mailto:web-pro@cutls.com"
target="_blank">web-pro@cutls.com</a>にAmazonギフトカードを送る<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
</div>
<div id="support-btm-close">
<button class="btn waves-effect" style="width:100%;" onclick="closeSupport()"
id="add-filter-btn">Close</button>
</div>
</div>
<!--左下メッセージ-->
<div id="message">
</div>

View File

@@ -841,13 +841,6 @@ SOFTWARE.<br>
<h5>itunes-nowplaying-mac</h5>
<i class="fa fa-github"></i><a href="https://github.com/rinsuki/itunes-nowplaying-mac" target="_blank">rinsuki/itunes-nowplaying-mac</a><br>
MIT LICENSE
<h5>Adobe Creative SDK</h5>
Please visit:
<a href="http://wwwimages.adobe.com/www.adobe.com/content/dam/acom/jp/legal/servicetou/Creative_SDK_API_and_Developer_Additional_TOU-ja_JP-20140602_1513.pdf" target="_blank">
This file
<i class="material-icons">
picture_as_pdf
</i></a>
<h5>Google Fonts</h5>
<ul>
<li>Open Sans:<a target="_blank" href="http://www.apache.org/licenses/LICENSE-2.0"> Apache License, Version 2.0 </a></li>

View File

@@ -22,6 +22,7 @@
input {
max-height: 50px !important
}
.pcr-result {
height: 1rem !important;
}
@@ -46,7 +47,7 @@
<div class="collapsible-body">
<h5>言語</h5>
To translate with Crowdin, you have to login Crowdin and restart TheDesk when login is finished.<br>
@@langlist@@
<a onclick="changelang('ja')" class="pointer" style="margin-right:5px;">日本語</a><a onclick="changelang('en')" class="pointer" style="margin-right:5px;">English</a><a onclick="changelang('ps')" class="pointer" style="margin-right:5px;">Crowdin translate system(beta)</a>
<h5>設定のインポートとエクスポート</h5>
<button onclick="exportSettings()" class="btn waves-effect lime darken-3"
style="width:100%; max-width:200px;">エクスポート</button>
@@ -62,9 +63,11 @@
class="pointer">通知テスト</a><br></template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue"
type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
@@ -103,18 +106,32 @@
</div>
<div class="collapsible-body">
<h4>テーマの選択</h4>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="black" value="black" />
<label for="black">Black</label>
<span>Black</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="white" value="white" />
<label for="white">White</label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="indigo" value="indigo" />
<label for="indigo">Indigo<span class="imas hide">(エンドレスナイト)</span></label>
<span>White</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="indigo"
value="indigo" />
<span>Indigo<span class="imas hide">(エンドレスナイト)</span></span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="brown" value="brown" />
<label for="brown">Brown<span class="imas hide">(ビタースイート・タイム)</span></label>
<span>Brown<span class="imas hide">(ビタースイート・タイム)</span></span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
<label for="green">Green<span class="imas hide">(ユースフルロマンス)</span></label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom" value="custom" />
<label for="custom">Custom</label>
<span>Green<span class="imas hide">(ユースフルロマンス)</span></span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom"
value="custom" />
<span>custom</span>
</label>
<div style="width:300px" id="sel-selector">
<select id="custom-sel-sel" class="custom-sel" onchange="customSel()"></select>
</div>
@@ -130,10 +147,16 @@
<div class="input-field"><textarea style="width:300px" id="custom_desc" class="materialize-textarea"
placeholder="説明..."></textarea></div>
<h5>色の系統</h5>
<input class="with-gap" name="direction" type="radio" id="dark" value="dark" checked="true" />
<label for="dark">Dark</label>
<input class="with-gap" name="direction" type="radio" id="light" value="light" />
<label for="light">Light</label>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="dark" value="dark"
checked="true" />
<span>Dark</span>
</label>
<label>
<input class="with-gap" onchange="settings()" name="direction" type="radio" id="light"
value="light" />
<span>Light</span>
</label>
<div id="pickers">
<div>
<h5>Primary</h5>補助要素に使われる背景色
@@ -166,12 +189,12 @@
</div>
<button class="btn-large waves-effect" onclick="customComp()">変更</button>&nbsp;<button
class="btn waves-effect red disabled" id="delTheme" onclick="deleteIt()">削除</button><br><br>
<input type="text" style="width:300px" id="custom_json" class="materialize-textarea"
<input type="text" style="width:300px;height:40px;" id="custom_json" class="materialize-textarea"
placeholder="JSON style" readonly><br>
このコードは他のTheDeskなどとシェアできます。このコードをMiASに貼ることはご遠慮ください。詳細:<a href="https://thedesk.top/mias.html" target="_blank">テーマ互換性</a>
<h4>カスタムテーマのインポート</h4>
<a href="https://assets.msky.cafe/" target="_blank">MiAS</a>上の80を超えるテーマを張り付けることもできます。<br>
<input type="text" style="width:300px" id="custom_import" class="materialize-textarea"
<input type="text" style="width:300px;height:40px;" id="custom_import" class="materialize-textarea"
placeholder="JSON/JSON5 style">
<button class="btn waves-effect" onclick="customImp()">インポート</button><br>
</li>
@@ -188,9 +211,11 @@
</template>
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<label>
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue"
type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
<span>{{check.text}}</span>
</label>
</template>
</template>
<template v-else>
@@ -210,10 +235,14 @@
</template>
</div>
<h5>カスタム通知音</h5>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span id="c4-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(1)">Custom 1</button><span
id="c1-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(2)">Custom 2</button><span
id="c2-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(3)">Custom 3</button><span
id="c3-file"></span><br>
<button class="btn waves-effect" style="width:120px;" onclick="customSound(4)">Custom 4</button><span
id="c4-file"></span><br>
</div>
</li>
<li>
@@ -230,9 +259,10 @@
<template v-if="item.checkbox">
<template v-for="(check, j) in item.text.checkbox">
<template v-if="!check.kirishima || (check.kirishima && kirishima)">
<input class="with-gap" v-on:click="complete(i,check.value)" v-model="item.setValue"
type="radio" v-bind:id="item.id+check.value" v-bind:value="check.value" />
<label v-bind:for="item.id+check.value">{{check.text}}</label>
<label><input class="with-gap" v-on:click="complete(i,check.value)"
v-model="item.setValue" type="radio" v-bind:id="item.id+check.value"
v-bind:value="check.value" />
<span>{{check.text}}</span></label>
<span v-if="check.kirishimaText">{{check.kirishimaText}}</span>
</template>
</template>
@@ -300,20 +330,36 @@
<div class="collapsible-body">
<h5>NowPlayingのソース(Windows)</h5>
macOSやLinuxでは動作しません。AIMPとiTunes以外未検証です。<br>foobar2000, MusicBee,J. River Media Center, Media JukeboxはCADを、Last.fm Client, TTPlayer, OpenPandora, ZuneはWLMを選んでください。<br>ただし、foobar2000は<a href="http://poiru.github.com/foo-cad/">foo_cad plugin</a>が必要です。MusicBeeもCADを有効にする必要があります。<br>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="aimp" value="AIMP" />
<label for="aimp">AIMP</label>
<span>AIMP</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="itunes" value="ITUNES" />
<label for="itunes">iTunes</label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="npmm" value="MEDIAMONKEY" />
<label for="npmm">MediaMonkey</label>
<span>iTunes</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="npmm"
value="MEDIAMONKEY" />
<span>MediaMonkey</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="winamp" value="WINAMP" />
<label for="winamp">Winamp</label>
<span>Winamp</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wmp" value="WMP" />
<label for="wmp">WMP</label>
<span>WMP</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="wlm" value="WLM" />
<label for="wlm">WLM</label>
<span>WLM</span>
</label>
<label>
<input class="with-gap" onchange="npprovider()" name="npp" type="radio" id="cad" value="CAD" />
<label for="cad">CAD</label><br><br>
<span>CAD</span>
</label>
<br><br>
<i class="material-icons" style="font-size:24px;">music_note</i>ボタンから簡単にNowPlayingができます。<br>
<h5>アカウントの連携</h5>
APIの性質上thedesk.topへアクセスします。<br>
@@ -334,10 +380,15 @@
Windows:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名<br>
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">設定</button>
<h5>アルバムアートワークを添付する(Spotify/Windows)</h5>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_yes" value="yes" />
<label for="awk_yes">はい</label>
<span>はい</span>
</label>
<label>
<input class="with-gap" onchange="spotifyFlagSave()" name="awk" type="radio" id="awk_no" value="no" />
<label for="awk_no">いいえ</label>
<span>いいえ</span>
</label>
<br>
</div>
</li>
@@ -409,6 +460,8 @@
class="material-icons left">web</i>公式HP</a>
<a href="https://www.pixiv.net/fanbox/creator/28105985" class="btn waves-effect red lighten-2"
style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>支援(Pixiv FANBOX)</a>
<a href="https://www.patreon.com/cutls" class="btn waves-effect red darken-2"
style="width:100%; max-width:500px;"><i class="material-icons left">trending_up</i>支援(Patreon)</a>
<a href="https://docs.thedesk.top" class="btn waves-effect blue darken-2" style="width:100%; max-width:500px;"><i
class="material-icons left">list</i>ヘルプ/Docs(Constructing)</a>
<a href="https://github.com/cutls/TheDesk" class="btn waves-effect black lighten-2"
@@ -422,7 +475,7 @@
<a onclick="localStorage.removeItem('new-ver-skip'); location.href='index.html';"
class="pointer">アップデートを確認</a><br>
<a href="oss.html">OSS License(オープンソースライセンス)</a><br>
<span style="font-family:Open Sans;">Copyright &copy; Cutls P 2018 All Rights Reserved.
<span style="font-family:Open Sans;">Copyright &copy; TheDesk 2018
Under <a href="https://github.com/cutls/TheDesk/blob/master/LICENSE">GNU General Public License v3.0</a> and <a
href="https://thedesk.top/tos.html">Terms of Use</a>/<a href="https://thedesk.top/priv.html">Privacy
Policy</a>
@@ -432,6 +485,7 @@
</span><br>
TheDeskおよびCutls Pは<a href="https://donken.org/">被災地支援のためのマストドン研究会</a>をログイン機能提供等の形で応援しています。<br>
タグタイムラインを開く:<a href="index.html?mode=tag&code=被災地支援のためのマストドン研究会">#被災地支援のためのマストドン研究会</a><br>
<script type="text/javascript" src="../../js/common/modal.js"></script>
<script type="text/javascript" src="../../js/common/about.js"></script>
<script type="text/javascript" src="../../js/platform/end.js"></script>
<script type="text/javascript" src="../../js/login/logout.js"></script>

View File

@@ -1,5 +1,6 @@
<!doctype html>
<html lang="ja">
<head>
<title>Update - TheDesk</title>
<link href="../../css/materialize.css" type="text/css" rel="stylesheet">
@@ -14,6 +15,7 @@
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
-->
</head>
<body>
<style>
body {
@@ -23,6 +25,7 @@ body{
padding: 10px;
text-align: right;
}
#start {
display: flex;
justify-content: center;
@@ -31,17 +34,25 @@ body{
height: calc(100vh - 2.5rem);
text-align: center;
}
#checkbox {
text-align: left;
}
a,button,input,label,i{
a,
button,
input,
label,
i {
-webkit-app-region: no-drag;
}
#updskip {
display: flex;
justify-content: center;
align-items: center;
}
.skipbtn {
display: block;
float: left;
@@ -55,10 +66,12 @@ a,button,input,label,i{
border: 1px solid;
overflow: hidden;
}
.skipbtn:hover {
background-color: #b3e5fc;
transition: all 0.3s ease-in-out;
}
#prog {
font-size: 200%;
}
@@ -75,10 +88,14 @@ a,button,input,label,i{
<p>アップデートがあります</p>
<span id="now"></span><b id="ver"></b><br>
<span id="det"></span><br>
<button class="waves-effect btn windows hide" onclick="update('install')" style="margin-left:15px;">インストーラー版(推奨)</button>
<button class="waves-effect btn windows hide" onclick="update('portable')" style="margin-left:15px;">ポータブル版</button>
<button class="waves-effect btn linux hide" onclick="update('linux')" style="margin-left:15px;">開始</button>
<button class="waves-effect btn mac hide" onclick="update('mac')" style="margin-left:15px;">開始</button>
<button class="waves-effect btn windows hide" onclick="update('install')"
style="margin-left:15px;">インストーラー版(推奨)</button>
<button class="waves-effect btn windows hide" onclick="update('portable')"
style="margin-left:15px;">ポータブル版</button>
<button class="waves-effect btn linux hide" onclick="update('linux')"
style="margin-left:15px;">開始</button>
<button class="waves-effect btn mac hide" onclick="update('mac')"
style="margin-left:15px;">開始</button>
<br>
問題が発生しますか?<br><a href="https://thedesk.top">公式HP</a>からダウンロードをお試しください。
</div>
@@ -86,14 +103,21 @@ a,button,input,label,i{
<h4>アップデートは必ず行ってください</h4>
アップデートをスキップする<br>
<div id="updskip">
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light"><div>次回TL表示時まで</div></a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light"><div>のバージョンが出るまで</div></a>
<a onclick="window.close();" class="pointer skipbtn waves-effect waves-light">
<div>回TL表示時まで</div>
</a>
<a onclick="nextv();" class="pointer skipbtn waves-effect waves-light">
<div>次のバージョンが出るまで</div>
</a>
</div>
<a class="pointer waves-effect" onclick="skipper();" style="margin-top:5px">アップデートを続行</a>
</div>
<div id="dlnow" class="hide">
<h4>ダウンロード中</h4>
<h4 id="prog"></h4>
<div class="progress">
<div class="determinate" style="width: 0%"></div>
</div>
</div>
</div>
<script type="text/javascript" src="../../js/common/about.js"></script>
@@ -111,8 +135,6 @@ function skipper(){
$("#skipper").toggleClass("show");
}
}
var electron = require("electron");
var ipc = electron.ipcRenderer;
verck();
function update(sel) {
$("#box").toggleClass("show");
@@ -120,8 +142,7 @@ function update(sel){
$("#dlnow").toggleClass("hide");
$("#dlnow").toggleClass("show");
$("#prog").text("");
var remote=electron.remote;
var bit=process.arch;
var bit = localStorage.getItem("bit");
var start = "https://thedesk.top/ver.json";
fetch(start, {
method: 'GET',
@@ -158,28 +179,28 @@ function update(sel){
}
} else if (sel == "mac") {
var url = json["mac"];
var file="TheDesk-darwin-x64.zip";
shell.openExternal(url);
return false;
}
ipc.send('download-btn', [url,file]);
postMessage(["downloadButton", [url, file]], "*")
});
}
function quit() {
ipc.send('quit', 'go');
postMessage(["sendSinmpleIpc", "quit"], "*")
}
ipc.on('prog', function (event, arg) {
function updateProg(arg) {
console.log(arg);
$("body").css('background','linear-gradient(#fff 0%,#fff '+(1-arg)*100+'%, #d7ccc8 '+(1-arg)*100+'%, #d7ccc8 100%)');
$(".determinate").css("width", arg * 100 + "%");
$("#prog").text(Math.floor(arg * 100) + "%");
})
ipc.on('mess', function (event, arg) {
}
function updateMess(arg) {
console.log(arg);
$("#prog").text(arg);
})
}
function verck() {
var remote=electron.remote;
var platform=remote.process.platform;
var bit=process.arch;
var platform = localStorage.getItem("platform");
var bit = localStorage.getItem("bit");
if (platform == "win32") {
$('.windows').removeClass("hide")
} else if (platform == "linux") {

View File

@@ -1,5 +1,6 @@
<!doctype html>
<html lang="@@lang@@">
<head>
<title>Account Manager - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
@@ -10,19 +11,54 @@
<link href='../../css/tl.css' rel='stylesheet' type='text/css'>
<link href='../../css/userdata.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
<style>.acct{display:flex; justify-content:space-around;}
.card{width:400px; background-color: #9e9e9e; margin:10px; }
body,html{overflow-y: scroll;}
#acct-list{display:flex; flex-wrap:wrap; color:white; align-items: flex-start}
.lts{font-size:150%}
.colorsel{ display:flex; }
.card .colorsel div:not(.exc){width:20px;height:20px;}
.card .colorsel div.exc{width:40px;height:20px;}
<style>
.acct {
display: flex;
justify-content: space-around;
}
.card {
width: 400px;
background-color: #9e9e9e;
margin: 10px;
}
body,
html {
overflow-y: scroll;
}
#acct-list {
display: flex;
flex-wrap: wrap;
color: white;
align-items: flex-start
}
.lts {
font-size: 150%
}
.colorsel {
display: flex;
}
.card .colorsel div:not(.exc) {
width: 20px;
height: 20px;
}
.card .colorsel div.exc {
width: 40px;
height: 20px;
}
.first {
display: flex;
justify-content: center;
align-items: center
}
.first .hide-first {
display: none;
}
@@ -36,6 +72,7 @@ body,html{overflow-y: scroll;}
<script type="text/javascript" src="https://cdn.crowdin.com/jipt/jipt.js"></script>
@@comment-end@@
</head>
<body id="mainView">
<script type="text/javascript" src="../../js/common/jquery.js"></script>
<script type="text/javascript" src="../../js/platform/first.js"></script>
@@ -48,7 +85,8 @@ body,html{overflow-y: scroll;}
<script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/modal.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>
<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>
@@ -61,17 +99,23 @@ body,html{overflow-y: scroll;}
<input type="text" id="url" style="width:70%" placeholder="ex)mstdn.jp">
<div id="ins-suggest"></div>
@@codesetupwarn@@<br>
<label>
<input type="checkbox" class="filled-in" id="linux" />
<label for="linux">@@codesetup@@</label><br>
<span>@@codesetup@@</span>
</label>
<br>
<label>
<input type="checkbox" class="filled-in" id="misskey" />
<label for="misskey">@@thisismisskey@@</label><br>
<span>@@thisismisskey@@</span>
</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br>
</div>
<div class="col s4">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div></div>
</div>
</div>
<div id="auth" style="display:none">
@@codepastewarn@@<br>
<input type="text" id="code" placeholder="@@codepaste@@">

View File

@@ -30,6 +30,7 @@
<script type="text/javascript" src="../../js/common/materialize.js"></script>
<script type="text/javascript" src="../../js/lang/lang.@@lang@@.js"></script>
<script type="text/javascript" src="../../js/common/time.js"></script>
<script type="text/javascript" src="../../js/common/blurhash.js"></script>
<script type="text/javascript" src="../../js/common/version.js"></script>
<script type="text/javascript" src="../../js/common/keyshortcut.js"></script>
<script type="text/javascript" src="../../js/common/modal.js"></script>
@@ -44,6 +45,7 @@
var tlid = 0;
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<canvas id="canvas" style="top:-100px; position:fixed;width:32px;height:32px" width="32" height="32"></canvas>
<div id="tl">
<!--TL-->
<!--ドラッグハンドラ-->
@@ -96,10 +98,12 @@
title="箇条書きリスト">format_list_bulleted</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('1. ','yes','yes')"
title="番号付きリスト">format_list_numbered</i>
<i class="pointer setting fa fa-subscript waves-effect" onclick="markdown('__','yes','no','before')"
title="下付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
<i class="pointer setting fa fa-superscript waves-effect" onclick="markdown('_','yes','no','before')"
title="上付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
<i class="pointer setting fa fa-subscript waves-effect"
onclick="markdown('__','yes','no','before')" title="下付き文字 テキストボックス内を選択してから押すと囲みます。"
style="font-size:1.5rem"></i>
<i class="pointer setting fa fa-superscript waves-effect"
onclick="markdown('_','yes','no','before')" title="上付き文字 テキストボックス内を選択してから押すと囲みます。"
style="font-size:1.5rem"></i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('spin')"
title="回転 テキストボックス内を選択してから押すと囲みます。">autorenew</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('pulse')"
@@ -119,14 +123,19 @@
title="文字色変更 テキストボックス内を選択してから押すと囲みます。">color_lens</i>
<input id="colorhex" style="width: calc(50% - 50px); margin: 0; height: 24px;" type="color">
<br>
<i class="material-icons pointer setting waves-effect" onclick="markdownLink()" title="リンク挿入">link</i>
<input id="linkt" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクテキスト">&nbsp;
<input id="link2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクアドレス">
<i class="material-icons pointer setting waves-effect" onclick="markdownLink()"
title="リンク挿入">link</i>
<input id="linkt" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="リンクテキスト">&nbsp;
<input id="link2" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="リンクアドレス">
<br>
<i class="material-icons pointer setting waves-effect" onclick="markdownImage()"
title="インライン画像挿入">image</i>
<input id="image" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="代替テキスト">&nbsp;
<input id="image2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="画像アドレス">
<input id="image" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="代替テキスト">&nbsp;
<input id="image2" style="width: calc(50% - 20px); margin: 0; height: 24px;"
placeholder="画像アドレス">
</div>
</div>
<div class="input-field col s12" id="preview-field" style="margin-top: 0;">
@@ -152,14 +161,15 @@
<div class="col s12 mize" style="margin-top: 0; display:flex; justify-content: space-between">
<i class="waves-effect gray material-icons" id="nsfw" title="@@nsfwDes@@"
onclick="nsfw()">visibility_off</i>
<i class="waves-effect gray material-icons purple-text dropdown-button" data-activates='dropdown1'
id="vis-icon">public</i>
<i class="waves-effect gray material-icons purple-text dropdown-trigger"
data-target="dropdown1" id="vis-icon">public</i>
<a class="waves-effect gray" id="cw" onclick="cw()" title="@@cwDes@@">CW</a>
<span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray"
onclick="fileselect()" title="@@selfile@@">photo_library</i></span></span>
<i class="waves-effect gray material-icons" onclick="emojiToggle()" id="emojibtn"
title="@@insertEmoji@@">tag_faces</i>
<i class="waves-effect gray material-icons dropdown-button" data-activates='dropdown2'>more_vert</i>
<i class="waves-effect gray material-icons dropdown-trigger"
data-target="dropdown2">more_vert</i>
<i class="material-icons nex gray waves-effect" title="@@clearToot@@(Ctrl+Shit+C)"
data-trans-title="post_box_clear" id="clear">clear</i>
</div>
@@ -174,13 +184,15 @@
<br>
<input type="text" id="cw-text" placeholder="@@cwtext@@" class="mize" style="margin:0">
<div id="sch-box">@@postat@@<br><span class="sml">@@scheduleWarn@@</span><br>
<input type="datetime-local" id="sch-date" placeholder="@@schedule@@" class="datepicker" style="margin:0">
<input type="datetime-local" id="sch-date" placeholder="@@schedule@@" class="datepicker"
style="margin:0">
</div>
</div>
</div>
<!-- 公開範囲 Dropdown Structure -->
<ul id='dropdown1' class='dropdown-content'>
<li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">@@selectVis@@</li>
<ul id="dropdown1" class="dropdown-content">
<li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">@@selectVis@@
</li>
<li>
<a onclick="vis('public')">@@publicJP@@(Public)</a>
</li>
@@ -201,10 +213,7 @@
</li>
</ul>
<!-- その他 Dropdown Structure -->
<ul id='dropdown2' class='dropdown-content'>
<li>
<a onclick="adobe()">@@adobephoto@@</a>
</li>
<ul id="dropdown2" class="dropdown-content">
<li>
<a onclick="nowplaying('spotify');">@@NPSpotify@@</a>
</li>
@@ -226,8 +235,9 @@
<div id="toot-btn-field">
<button class="btn waves-effect indigo unmize toot-btn-group" onclick="post()"
id="toot-post-btn">@@toot@@</button>
<button class="btn waves-effect indigo darken-3 unmize hide toot-btn-group" onclick="sec()" id="toot-sec-btn"><i
class="material-icons" id="toot-sec-icon" title="@@sectoot@@">lock_open</i></button>
<button class="btn waves-effect indigo darken-3 unmize hide toot-btn-group" onclick="sec()"
id="toot-sec-btn"><i class="material-icons" id="toot-sec-icon"
title="@@sectoot@@">lock_open</i></button>
</div>
</div>
<div id="right-side">
@@ -298,10 +308,14 @@
<input type="text" class="mastodon-choice" placeholder="@@choice@@2">
<input type="text" class="mastodon-choice" placeholder="@@choice@@3">
<input type="text" class="mastodon-choice" placeholder="@@choice@@4">
<label>
<input type="checkbox" class="filled-in" id="poll-multiple" value="1" />
<label for="poll-multiple">@@pollmulti@@</label><br>
<span>@@pollmulti@@</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="poll-until" value="1" />
<label for="poll-until">@@polluntil@@</label><br>
<span>@@polluntil@@</span>
</label>
<input type="number" style="width:50px" id="days_poll" placeholder="d" value="0">@@days@@
<input type="number" style="width:50px" id="hours_poll" placeholder="h" value="0">@@hours@@
<input type="number" style="width:50px" id="mins_poll" placeholder="m" value="6">@@mins@@
@@ -312,7 +326,7 @@
<!-- Modal Structure Tootdata-->
<div id="tootmodal" class="modal modal-fixed-footer">
<div class="modal-content">
<ul class="collapsible" data-collapsible="accordion" id="det-col">
<ul class="collapsible"id="det-col">
<li class="dm-hide">
<div class="collapsible-header">
<i class="material-icons">people_outline</i>@@afterLTL@@
@@ -396,12 +410,12 @@
class="fas fa-share"></i></button>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i
class="fas fa-retweet"></i></button>
<button class="dropdown-button btn waves-effect indigo" style="width:100%;"
onclick="staEx('rt')"><i class="fas fa-retweet"></i></button>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect orange" style="width:100%;" onclick="staEx('fav')"><i
class="fas fa-star"></i></button>
<button class="dropdown-button btn waves-effect orange" style="width:100%;"
onclick="staEx('fav')"><i class="fas fa-star"></i></button>
</div>
</div>
<div id="toot-tools">
@@ -447,8 +461,8 @@
<div id="his-plus-action">
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-emp-btn"
onclick="empUser()">@@empUser@@</a>
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data" id="his-end-btn"
onclick="pinUser()">@@endorse@@</a><br>
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data"
id="his-end-btn" onclick="pinUser()">@@endorse@@</a><br>
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-openin"
onclick="profbrws()">@@openinbrowser@@</a><br>
</div><br>
@@ -461,43 +475,48 @@
</div>
<div class="his-float" id="his-float-timeline">
<div id="my-data-nav">
<ul class="custom-tabs transparent">
<li class="custom-tab col my-data-width active-back column-first">
<ul class="tabs transparent">
<li class="tab col my-data-width active-back column-first">
<a go="#his-tl" title="@@timeline@@"><i class="material-icons">timeline</i></a>
</li>
<li class="custom-tab col my-data-width">
<li class="tab col my-data-width">
<a go="#his-follow-list" title="@@follow@@"><i class="material-icons">people</i></a>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follower-list" title="@@follower@@"><i class="material-icons">people</i></a>
<li class="tab col my-data-width">
<a go="#his-follower-list" title="@@follower@@"><i
class="material-icons">people</i></a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-action" title="@@operateOtherAcct@@"><i class="material-icons">account_box</i></a>
<li class="tab col my-data-width only-his-data">
<a go="#his-action" title="@@operateOtherAcct@@"><i
class="material-icons">account_box</i></a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<li class="tab col my-data-width only-his-data">
<a go="#his-list" title="@@list@@"><i class="material-icons">list</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<li class="tab col my-data-width only-my-data">
<a go="#his-fav-list" title="@@favRegist@@"><i class="material-icons">star</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<li class="tab col my-data-width only-my-data">
<a go="#his-blocking-list" title="@@blocks@@"><i class="material-icons">block</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-blocking-list" title="@@blocks@@"><i class="material-icons">voice_over_off</i></a>
<li class="tab col my-data-width only-my-data">
<a go="#his-blocking-list" title="@@blocks@@"><i
class="material-icons">voice_over_off</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-domain-list" title="@@domainBlock@@"><i class="material-icons">language</i><i
class="material-icons">block</i></a>
<li class="tab col my-data-width only-my-data">
<a go="#his-domain-list" title="@@domainBlock@@"><i
class="material-icons">language</i><i class="material-icons">block</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<li class="tab col my-data-width only-my-data">
<a go="#his-prof-list" title="@@editProf@@"><i class="material-icons">create</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-request-list" title="@@followReq@@"><i class="material-icons">how_to_reg</i></a>
<li class="tab col my-data-width only-my-data">
<a go="#his-request-list" title="@@followReq@@"><i
class="material-icons">how_to_reg</i></a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-follow-recom-list" title="@@frc@@"><i class="material-icons">recent_actors</i></a>
<li class="tab col my-data-width only-my-data">
<a go="#his-follow-recom-list" title="@@frc@@"><i
class="material-icons">recent_actors</i></a>
</li>
</ul>
</div>
@@ -521,10 +540,12 @@
</div>
<div id="his-action" class="tab-content">
@@useOtherAcct1@@@@revoverJP@@@@follow@@(@@warnUseOtherAcct@@)<br>
<div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div>@@revoverJPde@@
<div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div>
@@revoverJPde@@
<a href="#!" class="waves-effect btn" onclick="follow('selector','true')">@@follow@@</a><br>
@@or@@<br>
<a href="#!" class="waves-effect btn" onclick="udgEx('selector', 'selector')">@@openProf@@</a><br>
<a href="#!" class="waves-effect btn"
onclick="udgEx('selector', 'selector')">@@openProf@@</a><br>
</div>
<div id="his-list" class="tab-content">
<div id="his-lists-a">@@warnListRegist@@</div>
@@ -534,17 +555,20 @@
<div id="his-fav-list" class="tab-content">
<div id="his-fav-list-contents" class="cont-series">
</div>
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="showFav('more')">@@more@@</button>
<button class="btn waves-effect" style="width:100%; padding:0;"
onclick="showFav('more')">@@more@@</button>
</div>
<div id="his-blocking-list" class="tab-content">
<div id="his-blocking-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showBlo('more')">@@more@@</button>
<button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showBlo('more')">@@more@@</button>
</div>
<div id="his-muting-list" class="tab-content">
<div id="his-muting-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showMut('more')">@@more@@</button>
<button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showMut('more')">@@more@@</button>
</div>
<div id="his-domain-list" class="tab-content">
<div id="his-domain-list-contents" class="cont-series">
@@ -565,7 +589,8 @@
<textarea placeholder="@@note@@" id="his-des-val" class="materialize-textarea"></textarea>
<label for="his-des-val">@@note@@</label>
</div>
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="profedit()">@@change@@</button>
<button class="btn waves-effect" style="width:100%; padding:0;"
onclick="profedit()">@@change@@</button>
<br>@@editProfImg@@:
<span id="prof-change">
<input type="file" onchange="imgChange(this,'avatar')">
@@ -578,7 +603,8 @@
<div id="his-request-list" class="tab-content">
<div id="his-request-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showReq('more')">@@more@@</button>
<button class="btn waves-effect " style="width:100%; padding:0;"
onclick="showReq('more')">@@more@@</button>
</div>
<div id="his-follow-recom-list" class="tab-content">
<div id="his-follow-recom-contents" class="cont-series">
@@ -650,21 +676,28 @@
<a href="https://thedesk.top" target="_blank">HP</a><br>
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
<br>
<div id="release-Usamin_18-3-2" class="release-do" style="display:none; ">
<div id="release-Usamin_18-6-1" class="release-do" style="display:none; ">
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
Entyでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。<br>
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
<h5>Release Note Usamin (18.3.2)</h5>
絵文字の描画修正<br>
旗系絵文字の入力修正<br>
このトゥートより後ローカルタイムライン<br>
・このトゥートより後ユーザータイムライン<br>
このトゥートより後連合タイムライン<br>
Notestock公開時にリンクを表示<br>
<h5>Release Note Usamin (18.6.1)</h5>
リプライができない不具合を修正<br>
ワードフィルター/強調の適用がおかしい不具合<br>
テキストエリアのフォントが設定通りにならない不具合<br>
<h5>Release Note Usamin (18.6.0)</h5>
アカウント選択のデザイン修正。クリック直後に閉じてしまうバグを修正。<br>
投票済みのアンケートについて修正。<br>
<b>セキュリティの大幅な強化。</b><br>
・ご注意<img class="emoji" draggable="false" alt="⚠️" src="https://twemoji.maxcdn.com/2/72x72/26a0.png">: TweetDeck統合は設定で有効にしないと使えなくなりました。<br>
・Adobeフォトエディタの廃止
<br>
<h5>ThinkingDeskラベル</h5>
<img src="../../img/thinkingdesk.png" style="width:100px;" draggable="false"><br>
手作りマットラベル。貼ってはがせる。300円なのでポイントの余りでどうぞ。<br>
<a href="https://item.mercari.com/jp/m822743330" target="_blank">メルカリ</a>へ。
</div>
<div id="release-en">
<div id="release-en" style="display:none">
<h5>Let's make it native!</h5>
<a href="https://translate.thedesk.top">Crowdin translation project</a>
</div>
@@ -675,12 +708,17 @@
href="https://www.pixiv.net/fanbox/creator/28105985" target="_blank">
@@PixivSupport@@
</a>
<a class="btn-share btn waves-effect waves-light red darken-2" href="https://www.patreon.com/cutls"
target="_blank">
@@PatreonSupport@@
</a>
<a class="btn-share btn waves-effect waves-light blue"
href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">
@@AWLSupport@@
</a>
<br>
@@SendAmazonGift1@@<a href="mailto:mstdn@thedesk.top" target="_blank">mstdn@thedesk.top</a>@@SendAmazonGift2@@<br>
@@SendAmazonGift1@@<a href="mailto:web-pro@cutls.com"
target="_blank">web-pro@cutls.com</a>@@SendAmazonGift2@@<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
</div>
@@ -714,7 +752,8 @@
class="material-icons">view_headline</i><span>@@list@@</span></div>
<div class="waves-effect" onclick="filterMenu()" id="filterMenu"><i
class="material-icons">filter_list</i><span>@@filter@@</span></div>
<div class="waves-effect" onclick="help()"><i class="material-icons">help_outline</i><span>@@help@@</span></div>
<div class="waves-effect" onclick="help()"><i
class="material-icons">help_outline</i><span>@@help@@</span></div>
<div class="waves-effect" onclick="location.href='index.html'"><i
class="material-icons">refresh</i><span>@@f5@@</span></div>
</div>
@@ -735,7 +774,8 @@
<div><i class="material-icons">people_outline</i></div><span>@@local@@</span>
</div>
<div class="type waves-effect" data-type="local-media">
<div><i class="material-icons">people_outline</i><i class="material-icons sub-icon">perm_media</i>
<div><i class="material-icons">people_outline</i><i
class="material-icons sub-icon">perm_media</i>
</div><span>@@localMedia@@</span>
</div>
<div class="type waves-effect" data-type="home">
@@ -745,7 +785,8 @@
<div><i class="material-icons">language</i></div><span>@@fed@@</span>
</div>
<div class="type waves-effect" data-type="pub-media">
<div><i class="material-icons">language</i><i class="material-icons sub-icon">perm_media</i></div>
<div><i class="material-icons">language</i><i
class="material-icons sub-icon">perm_media</i></div>
<span>@@fedMedia@@</span>
</div>
<div class="type waves-effect" data-type="dm">
@@ -755,7 +796,8 @@
<div><i class="material-icons">merge_type</i></div><span>@@integratedTLDes@@</span>
</div>
<div class="type waves-effect" data-type="plus">
<div><i class="material-icons">merge_type</i><i class="material-icons sub-icon">reply</i></div>
<div><i class="material-icons">merge_type</i><i
class="material-icons sub-icon">reply</i></div>
<span>@@localPlusDes@@</span>
</div>
<div class="type waves-effect" data-type="notf">
@@ -785,8 +827,8 @@
<div class="input-field">
<input id="src" type="text" class="validate" style="width:60%">
<label for="src" data-trans="src">@@search@@</label>
<button class="btn waves-effect indigo" style="width: 36%;padding: 0;padding-left: 15px;" onclick="src()"
data-trans-i="src">
<button class="btn waves-effect indigo" style="width: 36%;padding: 0;padding-left: 15px;"
onclick="src()" data-trans-i="src">
<i class="material-icons left" style="margin:0">search</i>@@search@@
</button>
<br>
@@ -813,7 +855,8 @@
<label>@@selectAcct@@</label>
</div>
<div style="float:left; padding-top:8px; padding-bottom:28px;">
<button class="btn waves-effect indigo" style="width:80px;" onclick="list()" data-trans-i="lists">
<button class="btn waves-effect indigo" style="width:80px;" onclick="list()"
data-trans-i="lists">
@@listLocale@@
</button>
</div>
@@ -830,7 +873,8 @@
<label>@@selectAcct@@</label>
</div>
<div style="float:left; padding-top:8px; padding-bottom:28px;">
<button class="btn waves-effect indigo" style="width:80px;" onclick="filter()" data-trans-i="filters">
<button class="btn waves-effect indigo" style="width:80px;" onclick="filter()"
data-trans-i="filters">
@@listLocale@@
</button>
</div>
@@ -838,20 +882,34 @@
<input type="hidden" id="filter-edit-id">
<input type="text" style="width:150px" id="filter-add-word" placeholder="@@filterWord@@"><br>
@@degree@@<br>
<label>
<input type="checkbox" class="filled-in" id="home_filter" value="home" />
<label for="home_filter">@@home@@</label>
<span>@@home@@</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="local_filter" value="public" />
<label for="local_filter">@@local@@</label>
<span>@@local@@</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="notf_filter" value="notifications" />
<label for="notf_filter">@@notf@@</label>
<span>@@notf@@</span>
</label>
<label>
<input type="checkbox" class="filled-in" id="conv_filter" value="thread" />
<label for="conv_filter">@@conver@@</label><br>
<span>@@conver@@</span>
</label>
@@option@@<br>
<label>
<input type="checkbox" class="filled-in" id="wholeword_filter" value="1" />
<label for="wholeword_filter">@@matchWord@@</label><br>
<span>@@matchWord@@</span>
</label>
<br>
<span class="sml">@@warnMatchWord@@</span><br>
<label>
<input type="checkbox" class="filled-in" id="except_filter" value="1" />
<label for="except_filter">@@except@@</label><br>
<span>@@except@@</span>
</label>
<br>
<span class="sml">@@exceptWorn@@</span><br>
@@avalableBefore@@<span class="sml">@@warnAvBefore@@<b>@@warnAvBefore2@@</b></span><br><br>
<input type="number" style="width:50px" id="days_filter" placeholder="d" value="0">@@days@@
@@ -875,12 +933,16 @@
</a>&nbsp;|&nbsp;
<a onclick="bottomReverse()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">swap_horiz</i>@@reverse@@
</a>&nbsp;|&nbsp;
<a onclick="openRN()" class="nex waves-effect">
<i class="material-icons" style="font-size: 1rem;">new_releases</i>Release Note
</a>
</div>
<div id="main">
<!--TLのTL-->
<div id="timeline-container">
<div id="something-wrong">
<img src="" style="width:150px;margin:5px;display:none;" draggable="false">
<div>@@helloTheDesk@@</div>
</div>
</div>
@@ -905,7 +967,8 @@
<i class="material-icons nex" title="@@setting@@(Ctrl+Shift+S)">settings</i>
</a>
<a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="@@nanoDes@@TheDesk Nano" data-trans-title="nano_desp">remove_from_queue</i>
<i class="material-icons" title="@@nanoDes@@TheDesk Nano"
data-trans-title="nano_desp">remove_from_queue</i>
</a>
<a onclick="menu()" class="nex waves-effect" id="list-tgl">
<i class="material-icons" title="@@list@@">apps</i>
@@ -942,6 +1005,56 @@
</div>
</div>
</div>
<!--Support me-->
<div id="support-btm" class="z-depth-4 hide">
<div id="support-btm-ja">
<h5>ご支援いただけませんか?</h5>
(これは支援の有無に関わらず定期的に出ます。)<br>
あなたのMastodon, Misskeyライフを邪魔してしまって申し訳ありません。<br>
乞食のようなマネをしてご支援をお願いするのもどうかと思いますが、少々お時間をください。<br>
<br>
あなたはMastodon, MisskeyクライアントにTheDeskを選びました。これは奇跡的なことです。今考えればブラウザからアクセスした方が良かったのではと感じることかと存じます。<br>
それでも、あなたはTheDeskを使っています。<br>
TheDeskは2018年1月13日に最初のバージョンが出ました。それから圧倒的な機能数でゴリ押しするクライアントになっています。<br>
新機能に追従を図るためのモチベーションもさることながら、安全対策上TheDeskは開発者の緊急メッセージを表示できる機能が備わっており、開発者が送信ボタンを押すとすべてのTheDeskユーザーに通知が行くようになっています。<br>
かつてこれによってバグ報告を行い、使用を自粛していただくこともありました。<br>
そのような機能を実装するために、Mastodonなどのインスタンスを運営するのと同じく有料のサーバーを運用しています。<br>
<b>全てのユーザーが安心してTheDeskを使っていただける環境のため</b>にも、ぜひご支援をご検討ください。<br>
<b>@@TheDeskDes@@</b>
</div>
<div id="support-btm-en" class="hide">
<h5>Support me</h5>
It may disturb your Mastodon life, but your support is required to keep TheDesk awesome!<br>
<b>@@TheDeskDes@@</b>
</div>
<div id="support-btm-middle">
<h5>@@monthly@@</h5>
<a class="btn-share btn waves-effect waves-light red lighten-2"
href="https://www.pixiv.net/fanbox/creator/28105985" target="_blank">
@@PixivSupport@@
</a>
<a class="btn-share btn waves-effect waves-light red darken-2" href="https://www.patreon.com/cutls"
target="_blank">
@@PatreonSupport@@
</a>
</div>
<div id="support-btm-right">
<h5>@@once@@</h5>
<a class="btn-share btn waves-effect waves-light blue"
href="https://www.amazon.co.jp/registry/wishlist/2TV35ZHHJPDSB" target="_blank">
@@AWLSupport@@
</a>
<br>
@@SendAmazonGift1@@<a href="mailto:web-pro@cutls.com"
target="_blank">web-pro@cutls.com</a>@@SendAmazonGift2@@<br>
Kyash<br>
<img src="../../img/kyash.png" width="100"><br>
</div>
<div id="support-btm-close">
<button class="btn waves-effect" style="width:100%;" onclick="closeSupport()"
id="add-filter-btn">@@close@@</button>
</div>
</div>
<!--左下メッセージ-->
<div id="message">
</div>

View File

@@ -8,7 +8,7 @@
"nsfwDes":"Mark media as sensitive",
"cwDes":"Hide text behind warning",
"selfile":"Attach..",
"adobephoto":"Adobe Photo Editor",
"insertEmoji":"Emojis",
"NPSpotify":"NowPlaying(Spotify)",
"NPiTunes":"NowPlaying",
@@ -108,12 +108,13 @@
"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!",
"EntySupport":"Support on Enty",
"PatreonSupport":"Support on Patreon",
"PixivSupport":"Support on Pixiv FANBOX",
"AWLSupport":"Amazon Wish List",
"SendAmazonGift1":"Give me Amazon Gift Card:",
"SendAmazonGift2":"",
"sendSushi":"Osushi.love: give me sushi",
"monthly":"Monthly",
"once":"Once",
"local":"Local",
"localMedia":"Local(Media)",
"home":"Home",

View File

@@ -8,7 +8,6 @@
"nsfwDes":"画像に制限を付与",
"cwDes":"コンテンツワーニング(トゥートを表示する前にメッセージで隠す)",
"selfile":"ファイルを選択",
"adobephoto":"Adobeフォトエディタ",
"insertEmoji":"絵文字を挿入",
"NPSpotify":"NowPlaying(Spotify)",
"NPiTunes":"NowPlaying",
@@ -108,12 +107,13 @@
"empUser":"ユーザー強調",
"supportme":"ご支援ください。",
"TheDeskDes":"TheDeskは営利目的ではないため、有料機能や広告は一切ありません。<br>皆様のあたたかいご支援のもとで製作されています。",
"EntySupport":"Entyで支援",
"PatreonSupport":"Patreonで支援",
"PixivSupport":"Pixiv FANBOXで支援",
"AWLSupport":"Amazonほしいものリスト",
"SendAmazonGift1":"",
"SendAmazonGift2":"にAmazonギフトカードを送る",
"sendSushi":"Osushi.loveで寿司を贈る",
"monthly":"月額支援(大歓迎)",
"once":"一度限りの支援(もちろん歓迎)",
"local":"ローカル",
"localMedia":"ローカル(メディア)",
"home":"ホーム",

View File

@@ -8,7 +8,6 @@
"nsfwDes": "crwdns389:0crwdne389:0",
"cwDes": "crwdns390:0crwdne390:0",
"selfile": "crwdns391:0crwdne391:0",
"adobephoto": "crwdns392:0crwdne392:0",
"insertEmoji": "crwdns393:0crwdne393:0",
"NPSpotify": "crwdns1880:0crwdne1880:0",
"NPiTunes": "crwdns2404:0crwdne2404:0",

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